diff --git a/.eslintrc.json b/.eslintrc.json index 0e6d5ae..025f8d5 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,7 @@ { "env": { "browser": true, - "es2022": true, + "es2023": true, "jquery": true, "node": true, "commonjs": true @@ -9,19 +9,25 @@ "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", + "plugin:unicorn/recommended", "prettier" ], - "overrides": [ - ], + "overrides": [], "parser": "@typescript-eslint/parser", "parserOptions": { - "ecmaVersion": "latest" + "ecmaVersion": "latest", + "sourceType": "module" }, - "plugins": [ - "@typescript-eslint", - "html" - ], + "plugins": ["@typescript-eslint", "html"], "rules": { - "@typescript-eslint/no-var-requires": "off" - } + "unicorn/better-regex": "error", + "@typescript-eslint/no-var-requires": "off", + "unicorn/prefer-top-level-await": "off", + "unicorn/filename-case":"off", + "unicorn/numeric-separators-style": [ + "error", + {"onlyIfContainsSeparator": true, "binary": {"onlyIfContainsSeparator": false}} + ] + }, + "ignorePatterns": ["node_modules", "dist", "out", ".gitignore"] } diff --git a/.prettierignore b/.prettierignore index 18f1ec9..0e7517a 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ node_modules dist -out \ No newline at end of file +out +filesConfiguration.json \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..00ad71f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules\\typescript\\lib" +} \ No newline at end of file diff --git a/electron-builder.yml b/electron-builder.yml index c320784..ad9a18e 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -1,7 +1,7 @@ appId: com.DigiFlagTeam.DigiFlag-F1MV artifactName: ${productName}-${version}-${os}-${arch}.${ext} productName: DigiFlag-F1MV -copyright: Copyright © 2023 DigiFlag Team +copyright: Copyright © 2024 DigiFlag Team generateUpdatesFilesForAllChannels: true npmRebuild: false publish: diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 63fef26..d079b7f 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -1,24 +1,33 @@ import {defineConfig, externalizeDepsPlugin} from 'electron-vite'; export default defineConfig({ - main: { plugins: [externalizeDepsPlugin()], build: { outDir: './dist/main', - emptyOutDir:true + emptyOutDir: true, + rollupOptions: { + output: { + format: 'es', + }, + }, }, }, preload: { plugins: [externalizeDepsPlugin()], build: { outDir: './dist/preload', - emptyOutDir:true + emptyOutDir: true, + rollupOptions: { + output: { + format: 'cjs', + }, + }, }, }, renderer: { build: { outDir: './dist/renderer', - emptyOutDir:true + emptyOutDir: true, }, }, }); diff --git a/package.json b/package.json index 26d0205..13dd365 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "digiflag-f1mv", "productName": "DigiFlag-F1MV", - "version": "2.6.9", + "version": "2.7.0", "description": "DigiFlag for F1 MultiViewer", "main": "./dist/main/main.js", "license": "MIT", + "type": "module", "author": "DigiFlag Team", "contributors": [ { @@ -43,40 +44,45 @@ "dependencies": { "@electron-toolkit/preload": "^3.0.1", "@electron-toolkit/utils": "^3.0.0", + "@types/eslint__eslintrc": "^2.1.2", + "@types/eslint__js": "^8.42.3", "address": "^2.0.3", - "electron-store": "8.2.0", - "electron-updater": "^6.2.1", - "express": "^4.19.2", - "i18next": "^23.11.5", + "electron-store": "^10.0.0", + "electron-updater": "^6.3.9", + "express": "^4.21.1", + "i18next": "^23.16.2", "i18next-browser-languagedetector": "^8.0.0", - "i18next-fs-backend": "^2.3.1", - "i18next-http-backend": "^2.5.2", + "i18next-fs-backend": "^2.3.2", + "i18next-http-backend": "^2.6.2", "jquery": "^3.7.1", "jquery-i18next": "^1.2.1", "npm_f1mv_api": "^1.4.8" }, "devDependencies": { "@electron-toolkit/tsconfig": "^1.0.1", - "@electron/notarize": "^2.3.2", - "@types/express": "^4.17.21", - "@types/jquery": "^3.5.30", - "@types/node": "^20.14.9", + "@electron/notarize": "^2.5.0", + "@types/bootstrap": "^5.2.10", + "@types/express": "^5.0.0", + "@types/jquery": "^3.5.31", + "@types/node": "^22.7.7", "@types/request": "^2.48.12", - "@typescript-eslint/eslint-plugin": "^7.14.1", - "@typescript-eslint/parser": "^7.14.1", - "electron": "^31.1.0", - "electron-builder": "^24.13.3", - "electron-log": "^5.1.5", + "@typescript-eslint/eslint-plugin": "^8.10.0", + "@typescript-eslint/parser": "^8.10.0", + "electron": "^33.0.1", + "electron-builder": "^25.1.8", + "electron-log": "^5.2.0", "electron-vite": "^2.3.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-html": "^8.1.1", - "eslint-plugin-prettier": "^5.1.3", - "husky": "^9.0.11", - "lint-staged": "^15.2.7", - "prettier": "^3.3.2", - "typescript": "^5.5.2", - "vite": "^5.3.1" + "eslint-plugin-html": "^8.1.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-unicorn": "^56.0.0", + "husky": "^9.1.6", + "lint-staged": "^15.2.10", + "prettier": "^3.3.3", + "typescript": "^5.6.3", + "vite": "^5.4.9" }, "lint-staged": { "*.{js,ts}": "eslint --cache --fix", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5cfcfc..e9b47d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,34 +10,40 @@ importers: dependencies: '@electron-toolkit/preload': specifier: ^3.0.1 - version: 3.0.1(electron@31.1.0) + version: 3.0.1(electron@33.0.1) '@electron-toolkit/utils': specifier: ^3.0.0 - version: 3.0.0(electron@31.1.0) + version: 3.0.0(electron@33.0.1) + '@types/eslint__eslintrc': + specifier: ^2.1.2 + version: 2.1.2 + '@types/eslint__js': + specifier: ^8.42.3 + version: 8.42.3 address: specifier: ^2.0.3 version: 2.0.3 electron-store: - specifier: 8.2.0 - version: 8.2.0 + specifier: ^10.0.0 + version: 10.0.0 electron-updater: - specifier: ^6.2.1 - version: 6.2.1 + specifier: ^6.3.9 + version: 6.3.9 express: - specifier: ^4.19.2 - version: 4.19.2 + specifier: ^4.21.1 + version: 4.21.1 i18next: - specifier: ^23.11.5 - version: 23.11.5 + specifier: ^23.16.2 + version: 23.16.2 i18next-browser-languagedetector: specifier: ^8.0.0 version: 8.0.0 i18next-fs-backend: - specifier: ^2.3.1 - version: 2.3.1 + specifier: ^2.3.2 + version: 2.3.2 i18next-http-backend: - specifier: ^2.5.2 - version: 2.5.2(encoding@0.1.13) + specifier: ^2.6.2 + version: 2.6.2(encoding@0.1.13) jquery: specifier: ^3.7.1 version: 3.7.1 @@ -50,67 +56,76 @@ importers: devDependencies: '@electron-toolkit/tsconfig': specifier: ^1.0.1 - version: 1.0.1(@types/node@20.14.9) + version: 1.0.1(@types/node@22.7.7) '@electron/notarize': - specifier: ^2.3.2 - version: 2.3.2 + specifier: ^2.5.0 + version: 2.5.0 + '@types/bootstrap': + specifier: ^5.2.10 + version: 5.2.10 '@types/express': - specifier: ^4.17.21 - version: 4.17.21 + specifier: ^5.0.0 + version: 5.0.0 '@types/jquery': - specifier: ^3.5.30 - version: 3.5.30 + specifier: ^3.5.31 + version: 3.5.31 '@types/node': - specifier: ^20.14.9 - version: 20.14.9 + specifier: ^22.7.7 + version: 22.7.7 '@types/request': specifier: ^2.48.12 version: 2.48.12 '@typescript-eslint/eslint-plugin': - specifier: ^7.14.1 - version: 7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2) + specifier: ^8.10.0 + version: 8.10.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) '@typescript-eslint/parser': - specifier: ^7.14.1 - version: 7.14.1(eslint@8.57.0)(typescript@5.5.2) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.57.1)(typescript@5.6.3) electron: - specifier: ^31.1.0 - version: 31.1.0 + specifier: ^33.0.1 + version: 33.0.1 electron-builder: - specifier: ^24.13.3 - version: 24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) + specifier: ^25.1.8 + version: 25.1.8(electron-builder-squirrel-windows@25.1.7) electron-log: - specifier: ^5.1.5 - version: 5.1.5 + specifier: ^5.2.0 + version: 5.2.0 electron-vite: specifier: ^2.3.0 - version: 2.3.0(vite@5.3.1(@types/node@20.14.9)) + version: 2.3.0(vite@5.4.9(@types/node@22.7.7)) eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-plugin-html: - specifier: ^8.1.1 - version: 8.1.1 + specifier: ^8.1.2 + version: 8.1.2 + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1) 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.3.2) + specifier: ^5.2.1 + version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) + eslint-plugin-unicorn: + specifier: ^56.0.0 + version: 56.0.0(eslint@8.57.1) husky: - specifier: ^9.0.11 - version: 9.0.11 + specifier: ^9.1.6 + version: 9.1.6 lint-staged: - specifier: ^15.2.7 - version: 15.2.7 + specifier: ^15.2.10 + version: 15.2.10 prettier: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.3.3 + version: 3.3.3 typescript: - specifier: ^5.5.2 - version: 5.5.2 + specifier: ^5.6.3 + version: 5.6.3 vite: - specifier: ^5.3.1 - version: 5.3.1(@types/node@20.14.9) + specifier: ^5.4.9 + version: 5.4.9(@types/node@22.7.7) packages: @@ -121,105 +136,89 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/compat-data@7.25.8': + resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/core@7.25.8': + resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==} engines: {node: '>=6.9.0'} - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.25.8': + resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.24.6': - resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.25.8': + resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} '@develar/schema-utils@2.6.5': @@ -241,8 +240,8 @@ packages: peerDependencies: electron: '>=13.0.0' - '@electron/asar@3.2.10': - resolution: {integrity: sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==} + '@electron/asar@3.2.13': + resolution: {integrity: sha512-pY5z2qQSwbFzJsBdgfJIzXf5ElHTVMutC2dxh0FD60njknMu3n1NnTABOcQwbb5/v5soqE79m9UjaJryBf3epg==} engines: {node: '>=10.12.0'} hasBin: true @@ -250,22 +249,23 @@ packages: resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} - '@electron/notarize@2.2.1': - resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} engines: {node: '>= 10.0.0'} - '@electron/notarize@2.3.2': - resolution: {integrity: sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==} - engines: {node: '>= 10.0.0'} - - '@electron/osx-sign@1.0.5': - resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} + '@electron/osx-sign@1.3.1': + resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==} engines: {node: '>=12.0.0'} hasBin: true - '@electron/universal@1.5.1': - resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==} - engines: {node: '>=8.6'} + '@electron/rebuild@3.6.1': + resolution: {integrity: sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==} + engines: {node: '>=12.13.0'} + hasBin: true + + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -411,20 +411,23 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} 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==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -452,15 +455,15 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@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==} @@ -478,6 +481,15 @@ packages: 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 + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -486,86 +498,92 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@rollup/rollup-android-arm-eabi@4.18.0': - resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.0': - resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.0': - resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.0': - resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': - resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.0': - resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.0': - resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.0': - resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': - resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.0': - resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.0': - resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.0': - resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.0': - resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.0': - resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.0': - resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.0': - resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -581,6 +599,9 @@ packages: '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/bootstrap@5.2.10': + resolution: {integrity: sha512-F2X+cd6551tep0MvVZ6nM8v7XgGN/twpdNDjqS1TUM7YFNEtQYWk+dKAnH+T1gr6QgCoGMPl487xw/9hXooa2g==} + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} @@ -593,26 +614,44 @@ packages: '@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/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/express-serve-static-core@4.19.1': - resolution: {integrity: sha512-ej0phymbFLoCB26dbbq5PGScsf2JAJ4IJHjG10LalgUV36XKTmA4GdA+PVllKvRk0sEKt64X8975qFnkSi0hqA==} + '@types/eslint__eslintrc@2.1.2': + resolution: {integrity: sha512-qXvzPFY7Rz05xD8ZApXJ3S8xStQD2Ibzu3EFIF0UMNOAfLY5xUu3H61q0JrHo2OXD6rcFG75yUxNQbkKtFKBSw==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/eslint__js@8.42.3': + resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@5.0.0': + resolution: {integrity: sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/jquery@3.5.30': - resolution: {integrity: sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==} + '@types/jquery@3.5.31': + resolution: {integrity: sha512-rf/iB+cPJ/YZfMwr+FVuQbm7IaWC4y3FVYfVDxRGqmUCFjjPII0HWaP0vTPJGp6m4o13AXySCcMbWfrWtBFAKw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -620,17 +659,26 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.14.9': - resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + '@types/node@20.16.13': + resolution: {integrity: sha512-GjQ7im10B0labo8ZGXDGROUl9k0BNyDgzfGpb4g/cl+4yYDWVKcozANF4FGr4/p0O/rAkQClM6Wiwkije++1Tg==} + + '@types/node@22.7.7': + resolution: {integrity: sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/plist@3.0.5': resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==} - '@types/qs@6.9.15': - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -659,63 +707,62 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@7.14.1': - resolution: {integrity: sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.10.0': + resolution: {integrity: sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.14.1': - resolution: {integrity: sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.10.0': + resolution: {integrity: sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.14.1': - resolution: {integrity: sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.10.0': + resolution: {integrity: sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.14.1': - resolution: {integrity: sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.10.0': + resolution: {integrity: sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/types@7.14.1': - resolution: {integrity: sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.10.0': + resolution: {integrity: sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@7.14.1': - resolution: {integrity: sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.10.0': + resolution: {integrity: sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.14.1': - resolution: {integrity: sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.10.0': + resolution: {integrity: sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@7.14.1': - resolution: {integrity: sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.10.0': + resolution: {integrity: sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -724,6 +771,9 @@ packages: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -733,8 +783,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.13.0: + resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} engines: {node: '>=0.4.0'} hasBin: true @@ -746,8 +796,20 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + 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@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: @@ -762,19 +824,19 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.14.0: - resolution: {integrity: sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-styles@3.2.1: @@ -789,15 +851,25 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - app-builder-bin@4.0.0: - resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + app-builder-bin@5.0.0-alpha.10: + resolution: {integrity: sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==} + + app-builder-lib@25.1.7: + resolution: {integrity: sha512-JxmN+D/Dn7BLQoN+cTFO+zbMHcpI10v/xjyjFO1FKpHbApOG+OQt/xUyVjKWp4FYplIfuHdpxqTXo1PN/Wzm/A==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 25.1.7 + electron-builder-squirrel-windows: 25.1.7 - app-builder-lib@24.13.3: - resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} + app-builder-lib@25.1.8: + resolution: {integrity: sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==} engines: {node: '>=14.0.0'} peerDependencies: - dmg-builder: 24.13.3 - electron-builder-squirrel-windows: 24.13.3 + dmg-builder: 25.1.8 + electron-builder-squirrel-windows: 25.1.8 + + 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==} @@ -811,15 +883,40 @@ packages: 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-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + 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'} + + 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==} @@ -833,8 +930,8 @@ packages: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} engines: {node: '>=0.12.0'} - async@3.2.5: - resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -843,9 +940,12 @@ packages: 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'} + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + 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==} @@ -862,12 +962,13 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -879,30 +980,30 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} 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.4: - resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} + builder-util-runtime@9.2.10: + resolution: {integrity: sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==} engines: {node: '>=12.0.0'} - builder-util@24.13.1: - resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} + builder-util@25.1.7: + resolution: {integrity: sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} @@ -912,6 +1013,10 @@ packages: 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'} @@ -928,8 +1033,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001624: - resolution: {integrity: sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA==} + caniuse-lite@1.0.30001669: + resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -954,9 +1059,29 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + ci-info@4.0.0: + resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} + engines: {node: '>=8'} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + 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-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + 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==} @@ -973,6 +1098,10 @@ packages: 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==} @@ -986,6 +1115,10 @@ packages: 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 + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -1012,12 +1145,15 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - conf@10.2.0: - resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} - engines: {node: '>=12'} + conf@13.0.1: + resolution: {integrity: sha512-l9Uwc9eOnz39oADzGO2cSBDi7siv8lwO+31ocQ2nOJijnDiW3pxqm9VV10DPYUO28wW83DjABoUqY1nfHRR2hQ==} + engines: {node: '>=18'} - 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==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} @@ -1033,10 +1169,13 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -1062,9 +1201,21 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} + 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@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -1074,17 +1225,16 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1099,6 +1249,9 @@ packages: 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'} @@ -1115,6 +1268,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -1123,18 +1279,18 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + 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-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} - dmg-builder@24.13.3: - resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==} + dmg-builder@25.1.8: + resolution: {integrity: sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -1142,6 +1298,10 @@ packages: 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'} @@ -1159,16 +1319,17 @@ packages: domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} - dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dotenv-expand@11.0.6: + resolution: {integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==} + engines: {node: '>=12'} - dotenv@9.0.2: - resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} - engines: {node: '>=10'} + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1181,29 +1342,30 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-builder-squirrel-windows@24.13.3: - resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} + electron-builder-squirrel-windows@25.1.7: + resolution: {integrity: sha512-nJMvw1FNy+6YP8HmjSb0JwMowpdlZpydZGab9KevKO/fIC9wTcr5rkhbLsTfEPOjdAqOTycRoK0mOJCFB/1uig==} - electron-builder@24.13.3: - resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==} + electron-builder@25.1.8: + resolution: {integrity: sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==} engines: {node: '>=14.0.0'} hasBin: true - electron-log@5.1.5: - resolution: {integrity: sha512-vuq10faUAxRbILgQx7yHoMObKZDEfj7hMSZrJPsVrDNeCpV/HN11dU7QuY4UDUe055pzBxhSCB3m0+6D3Aktjw==} + electron-log@5.2.0: + resolution: {integrity: sha512-VjLkvaLmbP3AOGOh5Fob9M8bFU0mmeSAb5G2EoTBx+kQLf2XA/0byzjsVGBTHhikbT+m1AB27NEQUv9wX9nM8w==} engines: {node: '>= 14'} - electron-publish@24.13.1: - resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} + electron-publish@25.1.7: + resolution: {integrity: sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==} - electron-store@8.2.0: - resolution: {integrity: sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw==} + electron-store@10.0.0: + resolution: {integrity: sha512-BU/QZh+5twHBprRdLu3YZX/rIarmZzhTNpJvAvqG1/yN0mNCrsMh0kl7bM4xaUKDNRiHz1r7wP/7Prjh7cleIw==} + engines: {node: '>=20'} - electron-to-chromium@1.4.783: - resolution: {integrity: sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==} + electron-to-chromium@1.5.41: + resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} - electron-updater@6.2.1: - resolution: {integrity: sha512-83eKIPW14qwZqUUM6wdsIRwVKZyjmHxQ4/8G+1C6iS5PdDt7b1umYQyj1/qPpH510GmHEQe4q0kCPe3qmb3a0Q==} + electron-updater@6.3.9: + resolution: {integrity: sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==} electron-vite@2.3.0: resolution: {integrity: sha512-lsN2FymgJlp4k6MrcsphGqZQ9fKRdJKasoaiwIrAewN1tapYI/KINLdfEL7n10LuF0pPSNf/IqjzZbB5VINctg==} @@ -1216,13 +1378,13 @@ packages: '@swc/core': optional: true - electron@31.1.0: - resolution: {integrity: sha512-TBOwqLxSxnx6+pH6GMri7R3JPH2AkuGJHfWZS0p1HsmN+Qr1T9b0IRJnnehSd/3NZAmAre4ft9Ljec7zjyKFJA==} + electron@33.0.1: + resolution: {integrity: sha512-PipPnWH4gvf7o+P8jlKQZGgPfb5eHcLgTrnKkFzb98MXhyPjVJYCR7YWqcawZ8IfyJCut8vMxLuBFLT1Ag8TSQ==} engines: {node: '>= 12.20.55'} hasBin: true - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1234,6 +1396,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -1248,9 +1414,24 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + 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'} @@ -1259,6 +1440,21 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 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==} @@ -1267,8 +1463,8 @@ packages: engines: {node: '>=12'} hasBin: true - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-html@1.0.3: @@ -1288,12 +1484,46 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-html@8.1.1: - resolution: {integrity: sha512-6qmlJsc40D2m3Dn9oEH+0PAOkJhxVu0f5sVItqpCE0YWgYnyP4xCjBc3UWTHaJcY9ARkWOLIIuXLq0ndRnQOHw==} + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-html@8.1.2: + resolution: {integrity: sha512-pbRchDV2SmqbCi/Ev/q3aAikzG9BcFe0IjjqjtMn8eTLq71ZUggyJB6CDmuwGAXmYZHrXI12XTfCqvgcnPRqGw==} engines: {node: '>=16.0.0'} - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1306,6 +1536,12 @@ packages: eslint-config-prettier: optional: true + eslint-plugin-unicorn@56.0.0: + resolution: {integrity: sha512-aXpddVz/PQMmd69uxO98PA4iidiVNvA0xOtbpUoz1WhBd4RxOQQYqN618v68drY0hmy5uU2jy1bheKEVWBjlPw==} + engines: {node: '>=18.18'} + peerDependencies: + eslint: '>=8.56.0' + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1314,17 +1550,18 @@ packages: 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==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 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==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1350,8 +1587,11 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} engines: {node: '>= 0.10.0'} extract-zip@2.0.1: @@ -1379,6 +1619,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -1396,13 +1639,13 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -1415,16 +1658,19 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@2.5.1: - resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + form-data@2.5.2: + resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} engines: {node: '>= 0.12'} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} forwarded@0.2.0: @@ -1442,6 +1688,10 @@ packages: 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'} @@ -1465,6 +1715,18 @@ packages: 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'} @@ -1473,8 +1735,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} get-intrinsic@1.2.4: @@ -1489,6 +1751,10 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} + 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'} @@ -1497,15 +1763,19 @@ packages: 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'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} @@ -1518,14 +1788,14 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@15.11.0: + resolution: {integrity: sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==} + engines: {node: '>=18'} + 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==} @@ -1539,6 +1809,9 @@ packages: 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'} @@ -1558,10 +1831,20 @@ packages: 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'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} @@ -1580,6 +1863,10 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -1588,26 +1875,33 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + husky@9.1.6: + resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==} engines: {node: '>=18'} hasBin: true i18next-browser-languagedetector@8.0.0: resolution: {integrity: sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==} - i18next-fs-backend@2.3.1: - resolution: {integrity: sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg==} + i18next-fs-backend@2.3.2: + resolution: {integrity: sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==} - i18next-http-backend@2.5.2: - resolution: {integrity: sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==} + i18next-http-backend@2.6.2: + resolution: {integrity: sha512-Hp/kd8/VuoxIHmxsknJXjkTYYHzivAyAF15pzliKzk2TiXC25rZCEerb1pUFoxz4IVrG3fCvQSY51/Lu4ECV4A==} - i18next@23.11.5: - resolution: {integrity: sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==} + i18next@23.16.2: + resolution: {integrity: sha512-dFyxwLXxEQK32f6tITBMaRht25mZPJhQ0WbC0p3bO2mWBal9lABTMqSka5k+GLSRWLzeJBKDpH7BeIA9TZI7Jg==} iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} @@ -1625,8 +1919,8 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -1637,6 +1931,13 @@ packages: 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. @@ -1644,14 +1945,56 @@ packages: 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'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + 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-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + 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.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + 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'} @@ -1672,42 +2015,82 @@ packages: 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-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-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + 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-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + 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==} + isbinaryfile@5.0.3: + resolution: {integrity: sha512-VR4gNjFaDP8csJQvzInG20JvBj8MaHYLxNOMXysxRbGM7tcsHZwCjhch3FubFtZBkuDbN55i4dUukGeIrzF+6g==} engines: {node: '>= 18.0.0'} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.1: - resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true @@ -1724,22 +2107,32 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + 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-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1747,6 +2140,10 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -1772,22 +2169,25 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} - lint-staged@15.2.7: - resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@15.2.10: + resolution: {integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.1: - resolution: {integrity: sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==} + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -1820,17 +2220,20 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} 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@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -1839,8 +2242,16 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + + 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==} @@ -1850,8 +2261,8 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1864,8 +2275,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -1890,14 +2301,14 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -1906,6 +2317,14 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1913,13 +2332,33 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 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'} @@ -1944,9 +2383,6 @@ packages: ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1962,8 +2398,19 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - node-addon-api@1.7.2: - resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + node-abi@3.71.0: + resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + 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==} @@ -1974,8 +2421,21 @@ packages: encoding: optional: true - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + 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.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + 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-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -1992,13 +2452,35 @@ packages: npm_f1mv_api@1.4.8: resolution: {integrity: sha512-Mq3DpVGdqkIGxPeubLA1XJgcwGrGswJmO1EjqMz0yX+fX2UbfnDgYGgmPZ6YdZcU1aIQYzLEhK5YrKFYxu81Jw==} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + 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-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} 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.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -2014,10 +2496,18 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + 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'} @@ -2030,30 +2520,37 @@ packages: 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@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} 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'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} - 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'} @@ -2070,22 +2567,25 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} + 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@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -2096,16 +2596,20 @@ packages: engines: {node: '>=0.10'} hasBin: true - 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'} - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2116,8 +2620,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true @@ -2128,6 +2632,14 @@ packages: 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'} @@ -2136,15 +2648,15 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -2162,9 +2674,17 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - read-config-file@6.3.2: - resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==} - engines: {node: '>=12.0.0'} + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -2179,6 +2699,18 @@ packages: regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2187,6 +2719,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -2194,12 +2730,20 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} @@ -2209,8 +2753,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -2221,20 +2765,28 @@ packages: resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} engines: {node: '>=8.0'} - rollup@4.18.0: - resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + 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==} @@ -2247,31 +2799,42 @@ packages: semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} serialize-error@7.0.1: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + 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'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -2298,10 +2861,6 @@ packages: 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'} @@ -2318,8 +2877,16 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + 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.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.21: @@ -2329,9 +2896,25 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + 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'} @@ -2352,10 +2935,21 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + 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==} @@ -2370,14 +2964,25 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + sumchecker@3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -2390,8 +2995,12 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} tar-stream@2.2.0: @@ -2442,8 +3051,11 @@ packages: peerDependencies: typescript: '>=4.2.0' - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.0: + resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -2457,21 +3069,60 @@ packages: 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'} + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - typescript@5.5.2: - resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + 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.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + 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==} @@ -2485,8 +3136,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2504,6 +3155,9 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -2512,8 +3166,8 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} - vite@5.3.1: - resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + vite@5.4.9: + resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2521,6 +3175,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -2533,6 +3188,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -2540,17 +3197,33 @@ packages: terser: optional: true + 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==} + when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + 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==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -2584,8 +3257,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -2617,148 +3290,127 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + '@babel/highlight': 7.25.7 + picocolors: 1.1.1 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.25.8': {} - '@babel/core@7.24.7': + '@babel/core@7.25.8': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8) + '@babel/helpers': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.7': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.8 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.0 + '@babel/compat-data': 7.25.8 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/core': 7.25.8 + '@babel/helper-module-imports': 7.25.7 + '@babel/helper-simple-access': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 + '@babel/traverse': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.7': {} + '@babel/helper-plugin-utils@7.25.7': {} - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.8 transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-option@7.25.7': {} - '@babel/helpers@7.24.7': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.1 - '@babel/parser@7.24.7': + '@babel/parser@7.25.8': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.8 - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.8)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.8 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/runtime@7.24.6': + '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/types': 7.25.8 - '@babel/traverse@7.24.7': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 + '@babel/code-frame': 7.25.7 + '@babel/generator': 7.25.7 + '@babel/parser': 7.25.8 + '@babel/template': 7.25.7 + '@babel/types': 7.25.8 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.25.8': dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@develar/schema-utils@2.6.5': @@ -2766,27 +3418,28 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - '@electron-toolkit/preload@3.0.1(electron@31.1.0)': + '@electron-toolkit/preload@3.0.1(electron@33.0.1)': dependencies: - electron: 31.1.0 + electron: 33.0.1 - '@electron-toolkit/tsconfig@1.0.1(@types/node@20.14.9)': + '@electron-toolkit/tsconfig@1.0.1(@types/node@22.7.7)': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 - '@electron-toolkit/utils@3.0.0(electron@31.1.0)': + '@electron-toolkit/utils@3.0.0(electron@33.0.1)': dependencies: - electron: 31.1.0 + electron: 33.0.1 - '@electron/asar@3.2.10': + '@electron/asar@3.2.13': dependencies: + '@types/glob': 7.2.0 commander: 5.1.0 glob: 7.2.3 minimatch: 3.1.2 '@electron/get@2.0.3': dependencies: - debug: 4.3.5 + debug: 4.3.7 env-paths: 2.2.1 fs-extra: 8.1.0 got: 11.8.6 @@ -2798,26 +3451,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/notarize@2.2.1': - dependencies: - debug: 4.3.5 - fs-extra: 9.1.0 - promise-retry: 2.0.1 - transitivePeerDependencies: - - supports-color - - '@electron/notarize@2.3.2': + '@electron/notarize@2.5.0': dependencies: - debug: 4.3.4 + debug: 4.3.7 fs-extra: 9.1.0 promise-retry: 2.0.1 transitivePeerDependencies: - supports-color - '@electron/osx-sign@1.0.5': + '@electron/osx-sign@1.3.1': dependencies: compare-version: 0.1.2 - debug: 4.3.5 + debug: 4.3.7 fs-extra: 10.1.0 isbinaryfile: 4.0.10 minimist: 1.2.8 @@ -2825,14 +3470,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/universal@1.5.1': + '@electron/rebuild@3.6.1': dependencies: - '@electron/asar': 3.2.10 - '@malept/cross-spawn-promise': 1.1.1 - debug: 4.3.5 - dir-compare: 3.3.0 - fs-extra: 9.1.0 - minimatch: 3.1.2 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.3.7 + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.71.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.3 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.2.13 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.3.7 + dir-compare: 4.2.0 + fs-extra: 11.2.0 + minimatch: 9.0.5 plist: 3.1.0 transitivePeerDependencies: - supports-color @@ -2906,20 +3571,20 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.11.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2927,12 +3592,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} + + '@gar/promisify@1.1.3': {} - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2953,27 +3620,27 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@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/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 - '@malept/cross-spawn-promise@1.1.1': + '@malept/cross-spawn-promise@2.0.0': dependencies: cross-spawn: 7.0.3 '@malept/flatpak-bundler@0.4.0': dependencies: - debug: 4.3.5 + debug: 4.3.7 fs-extra: 9.1.0 lodash: 4.17.21 tmp-promise: 3.0.3 @@ -2992,59 +3659,73 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.3 + + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} - '@rollup/rollup-android-arm-eabi@4.18.0': + '@popperjs/core@2.11.8': {} + + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.18.0': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.0': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.18.0': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.0': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.0': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.0': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.0': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.0': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.0': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.18.0': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.0': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.0': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.0': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true + '@rtsao/scc@1.1.0': {} + '@sindresorhus/is@4.6.0': {} '@szmarczak/http-timer@4.0.6': @@ -3056,95 +3737,129 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.9 + '@types/node': 22.7.7 + + '@types/bootstrap@5.2.10': + dependencies: + '@popperjs/core': 2.11.8 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/responselike': 1.0.3 '@types/caseless@0.12.5': {} '@types/connect@3.4.38': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/debug@4.1.12': dependencies: '@types/ms': 0.7.34 - '@types/estree@1.0.5': {} + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + + '@types/eslint__eslintrc@2.1.2': + dependencies: + '@types/eslint': 9.6.1 + + '@types/eslint__js@8.42.3': + dependencies: + '@types/eslint': 9.6.1 + + '@types/estree@1.0.6': {} - '@types/express-serve-static-core@4.19.1': + '@types/express-serve-static-core@5.0.0': dependencies: - '@types/node': 20.14.9 - '@types/qs': 6.9.15 + '@types/node': 22.7.7 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - '@types/express@4.17.21': + '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.1 - '@types/qs': 6.9.15 + '@types/express-serve-static-core': 5.0.0 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.7.7 '@types/http-cache-semantics@4.0.4': {} '@types/http-errors@2.0.4': {} - '@types/jquery@3.5.30': + '@types/jquery@3.5.31': dependencies: '@types/sizzle': 2.3.8 + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + '@types/keyv@3.1.4': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/mime@1.3.5': {} + '@types/minimatch@5.1.2': {} + '@types/ms@0.7.34': {} - '@types/node@20.14.9': + '@types/node@20.16.13': + dependencies: + undici-types: 6.19.8 + + '@types/node@22.7.7': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 + + '@types/normalize-package-data@2.4.4': {} '@types/plist@3.0.5': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 xmlbuilder: 15.1.1 optional: true - '@types/qs@6.9.15': {} + '@types/qs@6.9.16': {} '@types/range-parser@1.2.7': {} '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/tough-cookie': 4.0.5 - form-data: 2.5.1 + form-data: 2.5.2 '@types/responselike@1.0.3': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.9 + '@types/node': 22.7.7 '@types/send': 0.17.4 '@types/sizzle@2.3.8': {} @@ -3156,116 +3871,133 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 optional: true - '@typescript-eslint/eslint-plugin@7.14.1(@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2)': + '@typescript-eslint/eslint-plugin@8.10.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.14.1(eslint@8.57.0)(typescript@5.5.2) - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/type-utils': 7.14.1(eslint@8.57.0)(typescript@5.5.2) - '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.14.1 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.10.0 + '@typescript-eslint/type-utils': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/utils': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.10.0 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.2) + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.14.1(eslint@8.57.0)(typescript@5.5.2)': + '@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.5 - eslint: 8.57.0 + '@typescript-eslint/scope-manager': 8.10.0 + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.10.0 + debug: 4.3.7 + eslint: 8.57.1 optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.14.1': + '@typescript-eslint/scope-manager@8.10.0': dependencies: - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/visitor-keys': 7.14.1 + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/visitor-keys': 8.10.0 - '@typescript-eslint/type-utils@7.14.1(eslint@8.57.0)(typescript@5.5.2)': + '@typescript-eslint/type-utils@8.10.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - '@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.5.2) - debug: 4.3.5 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.2) + '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: + - eslint - supports-color - '@typescript-eslint/types@7.14.1': {} + '@typescript-eslint/types@8.10.0': {} - '@typescript-eslint/typescript-estree@7.14.1(typescript@5.5.2)': + '@typescript-eslint/typescript-estree@8.10.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/visitor-keys': 7.14.1 - debug: 4.3.5 - globby: 11.1.0 + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/visitor-keys': 8.10.0 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.2) + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: - typescript: 5.5.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.14.1(eslint@8.57.0)(typescript@5.5.2)': + '@typescript-eslint/utils@8.10.0(eslint@8.57.1)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.14.1 - '@typescript-eslint/types': 7.14.1 - '@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.2) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.10.0 + '@typescript-eslint/types': 8.10.0 + '@typescript-eslint/typescript-estree': 8.10.0(typescript@5.6.3) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.14.1': + '@typescript-eslint/visitor-keys@8.10.0': dependencies: - '@typescript-eslint/types': 7.14.1 + '@typescript-eslint/types': 8.10.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} '@xmldom/xmldom@0.8.10': {} + abbrev@1.1.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.13.0): dependencies: - acorn: 8.11.3 + acorn: 8.13.0 - acorn@8.11.3: {} + acorn@8.13.0: {} address@2.0.3: {} agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color - ajv-formats@2.1.1(ajv@8.14.0): + agent-base@7.1.1: + dependencies: + debug: 4.3.7 + 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@3.0.1(ajv@8.17.1): optionalDependencies: - ajv: 8.14.0 + ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: @@ -3278,18 +4010,20 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.14.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@3.2.1: dependencies: @@ -3301,42 +4035,90 @@ snapshots: ansi-styles@6.2.1: {} - app-builder-bin@4.0.0: {} + app-builder-bin@5.0.0-alpha.10: {} - app-builder-lib@24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)): + app-builder-lib@25.1.7(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.7): dependencies: '@develar/schema-utils': 2.6.5 - '@electron/notarize': 2.2.1 - '@electron/osx-sign': 1.0.5 - '@electron/universal': 1.5.1 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.6.1 + '@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: 24.13.1 - builder-util-runtime: 9.2.4 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 chromium-pickle-js: 0.2.0 - debug: 4.3.5 - dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + config-file-ts: 0.2.8-rc1 + debug: 4.3.7 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) + dotenv: 16.4.5 + dotenv-expand: 11.0.6 ejs: 3.1.10 - electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3) - electron-publish: 24.13.1 - form-data: 4.0.0 + electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) + electron-publish: 25.1.7 + form-data: 4.0.1 fs-extra: 10.1.0 hosted-git-info: 4.1.0 is-ci: 3.0.1 - isbinaryfile: 5.0.2 + isbinaryfile: 5.0.3 js-yaml: 4.1.0 + json5: 2.2.3 lazy-val: 1.0.5 - minimatch: 5.1.6 - read-config-file: 6.3.2 + minimatch: 10.0.1 + resedit: 1.7.2 + sanitize-filename: 1.6.3 + semver: 7.6.3 + tar: 6.2.1 + temp-file: 3.4.0 + transitivePeerDependencies: + - bluebird + - supports-color + + app-builder-lib@25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.7): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.6.1 + '@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.1.7 + builder-util-runtime: 9.2.10 + chromium-pickle-js: 0.2.0 + config-file-ts: 0.2.8-rc1 + debug: 4.3.7 + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) + dotenv: 16.4.5 + dotenv-expand: 11.0.6 + ejs: 3.1.10 + electron-builder-squirrel-windows: 25.1.7(dmg-builder@25.1.8) + electron-publish: 25.1.7 + form-data: 4.0.1 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.3 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.0.1 + resedit: 1.7.2 sanitize-filename: 1.6.3 - semver: 7.6.2 + semver: 7.6.3 tar: 6.2.1 temp-file: 3.4.0 transitivePeerDependencies: + - bluebird - supports-color + aproba@2.0.0: {} + archiver-utils@2.1.0: dependencies: glob: 7.2.3 @@ -3366,18 +4148,69 @@ snapshots: archiver@5.3.2: dependencies: archiver-utils: 2.1.0 - async: 3.2.5 + async: 3.2.6 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-flatten@1.1.1: {} - array-union@2.1.0: {} + 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.prototype.findlastindex@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 + + 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 @@ -3387,13 +4220,20 @@ snapshots: async-exit-hook@2.0.1: {} - async@3.2.5: {} + async@3.2.6: {} asynckit@0.4.0: {} at-least-node@1.0.0: {} - atomically@1.7.0: {} + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.3 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 balanced-match@1.0.2: {} @@ -3411,7 +4251,7 @@ snapshots: bluebird@3.7.2: {} - body-parser@1.20.2: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -3421,7 +4261,7 @@ snapshots: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 @@ -3444,17 +4284,15 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.0: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001624 - electron-to-chromium: 1.4.783 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.0) + caniuse-lite: 1.0.30001669 + electron-to-chromium: 1.5.41 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) buffer-crc32@0.2.13: {} - buffer-equal@1.0.1: {} - buffer-from@1.1.2: {} buffer@5.7.1: @@ -3462,26 +4300,26 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - builder-util-runtime@9.2.4: + builder-util-runtime@9.2.10: dependencies: - debug: 4.3.5 + debug: 4.3.7 sax: 1.4.1 transitivePeerDependencies: - supports-color - builder-util@24.13.1: + builder-util@25.1.7: dependencies: 7zip-bin: 5.2.0 '@types/debug': 4.1.12 - app-builder-bin: 4.0.0 + app-builder-bin: 5.0.0-alpha.10 bluebird-lst: 1.0.9 - builder-util-runtime: 9.2.4 + builder-util-runtime: 9.2.10 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.7 fs-extra: 10.1.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 is-ci: 3.0.1 js-yaml: 4.1.0 source-map-support: 0.5.21 @@ -3490,10 +4328,35 @@ snapshots: transitivePeerDependencies: - supports-color + builtin-modules@3.3.0: {} + bytes@3.1.2: {} 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: @@ -3516,7 +4379,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001624: {} + caniuse-lite@1.0.30001669: {} chalk@2.4.2: dependencies: @@ -3537,11 +4400,25 @@ snapshots: ci-info@3.9.0: {} - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 + ci-info@4.0.0: {} - cli-truncate@2.1.0: + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + clean-stack@2.2.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 @@ -3550,7 +4427,7 @@ snapshots: cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 - string-width: 7.1.0 + string-width: 7.2.0 cliui@8.0.1: dependencies: @@ -3562,6 +4439,8 @@ snapshots: dependencies: mimic-response: 1.0.1 + clone@1.0.4: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -3574,6 +4453,8 @@ snapshots: color-name@1.1.4: {} + color-support@1.1.3: {} + colorette@2.0.20: {} combined-stream@1.0.8: @@ -3595,23 +4476,24 @@ snapshots: concat-map@0.0.1: {} - conf@10.2.0: + conf@13.0.1: dependencies: - ajv: 8.14.0 - ajv-formats: 2.1.1(ajv@8.14.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 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + atomically: 2.0.3 + debounce-fn: 6.0.0 + dot-prop: 9.0.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.1 + semver: 7.6.3 + uint8array-extras: 1.4.0 - config-file-ts@0.2.6: + config-file-ts@0.2.8-rc1: dependencies: - glob: 10.4.1 - typescript: 5.5.2 + glob: 10.4.5 + typescript: 5.6.3 + + console-control-strings@1.1.0: {} content-disposition@0.5.4: dependencies: @@ -3623,7 +4505,11 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.6.0: {} + cookie@0.7.1: {} + + core-js-compat@3.38.1: + dependencies: + browserslist: 4.24.0 core-util-is@1.0.2: optional: true @@ -3654,21 +4540,39 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debounce-fn@4.0.0: + 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: - mimic-fn: 3.1.0 + 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@6.0.0: + dependencies: + mimic-function: 5.0.1 debug@2.6.9: dependencies: ms: 2.0.0 - debug@4.3.4: + debug@3.2.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 - debug@4.3.5: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 decompress-response@6.0.0: dependencies: @@ -3676,6 +4580,10 @@ snapshots: 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: @@ -3689,37 +4597,37 @@ snapshots: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - optional: true delayed-stream@1.0.0: {} + delegates@1.0.0: {} + depd@2.0.0: {} destroy@1.2.0: {} + detect-libc@2.0.3: {} + detect-node@2.1.0: optional: true - dir-compare@3.3.0: + dir-compare@4.2.0: dependencies: - buffer-equal: 1.0.1 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@24.13.3): + dmg-builder@25.1.8(electron-builder-squirrel-windows@25.1.7): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) - builder-util: 24.13.1 - builder-util-runtime: 9.2.4 + app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.7) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.0 optionalDependencies: dmg-license: 1.0.11 transitivePeerDependencies: + - bluebird - electron-builder-squirrel-windows - supports-color @@ -3735,6 +4643,10 @@ snapshots: verror: 1.10.1 optional: true + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + doctrine@3.0.0: dependencies: esutils: 2.0.3 @@ -3757,13 +4669,15 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - dot-prop@6.0.1: + dot-prop@9.0.0: dependencies: - is-obj: 2.0.0 + type-fest: 4.26.1 - dotenv-expand@5.1.0: {} + dotenv-expand@11.0.6: + dependencies: + dotenv: 16.4.5 - dotenv@9.0.2: {} + dotenv@16.4.5: {} eastasianwidth@0.2.0: {} @@ -3771,42 +4685,43 @@ snapshots: ejs@3.1.10: dependencies: - jake: 10.9.1 + jake: 10.9.2 - electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3): + electron-builder-squirrel-windows@25.1.7(dmg-builder@25.1.8): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) + app-builder-lib: 25.1.7(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.7) archiver: 5.3.2 - builder-util: 24.13.1 + builder-util: 25.1.7 fs-extra: 10.1.0 transitivePeerDependencies: + - bluebird - dmg-builder - supports-color - electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)): + electron-builder@25.1.8(electron-builder-squirrel-windows@25.1.7): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3))(electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3)) - builder-util: 24.13.1 - builder-util-runtime: 9.2.4 + app-builder-lib: 25.1.8(dmg-builder@25.1.8)(electron-builder-squirrel-windows@25.1.7) + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 chalk: 4.1.2 - dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 25.1.8(electron-builder-squirrel-windows@25.1.7) 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: + - bluebird - electron-builder-squirrel-windows - supports-color - electron-log@5.1.5: {} + electron-log@5.2.0: {} - electron-publish@24.13.1: + electron-publish@25.1.7: dependencies: '@types/fs-extra': 9.0.13 - builder-util: 24.13.1 - builder-util-runtime: 9.2.4 + builder-util: 25.1.7 + builder-util-runtime: 9.2.10 chalk: 4.1.2 fs-extra: 10.1.0 lazy-val: 1.0.5 @@ -3814,47 +4729,47 @@ snapshots: transitivePeerDependencies: - supports-color - electron-store@8.2.0: + electron-store@10.0.0: dependencies: - conf: 10.2.0 - type-fest: 2.19.0 + conf: 13.0.1 + type-fest: 4.26.1 - electron-to-chromium@1.4.783: {} + electron-to-chromium@1.5.41: {} - electron-updater@6.2.1: + electron-updater@6.3.9: dependencies: - builder-util-runtime: 9.2.4 + builder-util-runtime: 9.2.10 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 + semver: 7.6.3 tiny-typed-emitter: 2.1.0 transitivePeerDependencies: - supports-color - electron-vite@2.3.0(vite@5.3.1(@types/node@20.14.9)): + electron-vite@2.3.0(vite@5.4.9(@types/node@22.7.7)): dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.8 + '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.8) cac: 6.7.14 esbuild: 0.21.5 - magic-string: 0.30.10 - picocolors: 1.0.1 - vite: 5.3.1(@types/node@20.14.9) + magic-string: 0.30.12 + picocolors: 1.1.1 + vite: 5.4.9(@types/node@22.7.7) transitivePeerDependencies: - supports-color - electron@31.1.0: + electron@33.0.1: dependencies: '@electron/get': 2.0.3 - '@types/node': 20.14.9 + '@types/node': 20.16.13 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -3862,6 +4777,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -3875,14 +4792,91 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + + environment@1.1.0: {} + err-code@2.0.3: {} + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + 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.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 es-errors@1.3.0: {} + 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 @@ -3912,7 +4906,7 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - escalade@3.1.2: {} + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -3920,22 +4914,90 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color - eslint-plugin-html@8.1.1: + eslint-plugin-html@8.1.2: dependencies: htmlparser2: 9.1.0 - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.10.0(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.10.0(eslint@8.57.1)(typescript@5.6.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: - eslint: 8.57.0 - prettier: 3.3.2 + eslint: 8.57.1 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.2 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@8.57.0) + '@types/eslint': 9.6.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + + eslint-plugin-unicorn@56.0.0(eslint@8.57.1): + dependencies: + '@babel/helper-validator-identifier': 7.25.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + ci-info: 4.0.0 + clean-regexp: 1.0.0 + core-js-compat: 3.38.1 + eslint: 8.57.1 + esquery: 1.6.0 + globals: 15.11.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.3 + strip-indent: 3.0.0 eslint-scope@7.2.2: dependencies: @@ -3944,26 +5006,26 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@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 + debug: 4.3.7 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 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -3971,7 +5033,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3989,11 +5051,11 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.13.0 + acorn-jsx: 5.3.2(acorn@8.13.0) eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4021,34 +5083,36 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - express@4.19.2: + exponential-backoff@3.1.1: {} + + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -4059,7 +5123,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.5 + debug: 4.3.7 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -4080,12 +5144,14 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fast-uri@3.0.3: {} + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -4106,10 +5172,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -4118,9 +5184,10 @@ snapshots: transitivePeerDependencies: - supports-color - find-up@3.0.0: + find-up@4.1.0: dependencies: - locate-path: 3.0.0 + locate-path: 5.0.0 + path-exists: 4.0.0 find-up@5.0.0: dependencies: @@ -4135,18 +5202,23 @@ snapshots: flatted@3.3.1: {} - foreground-child@3.1.1: + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@2.5.1: + form-data@2.5.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + safe-buffer: 5.2.1 - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -4164,6 +5236,12 @@ snapshots: 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 @@ -4188,11 +5266,31 @@ snapshots: 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-east-asian-width@1.2.0: {} + get-east-asian-width@1.3.0: {} get-intrinsic@1.2.4: dependencies: @@ -4204,10 +5302,16 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.0 + pump: 3.0.2 get-stream@8.0.1: {} + 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 @@ -4216,12 +5320,13 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.1: + glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 3.4.0 - minimatch: 9.0.4 + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@7.2.3: @@ -4233,13 +5338,21 @@ snapshots: 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 + semver: 7.6.3 serialize-error: 7.0.1 optional: true @@ -4249,20 +5362,12 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@15.11.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.0.1 - optional: true - - 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: @@ -4286,6 +5391,8 @@ snapshots: graphemer@1.4.0: {} + has-bigints@1.0.2: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -4298,10 +5405,18 @@ snapshots: 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 + hosted-git-info@2.8.9: {} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 @@ -4327,7 +5442,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -4339,29 +5461,40 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.5: + dependencies: + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color human-signals@5.0.0: {} - husky@9.0.11: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + husky@9.1.6: {} i18next-browser-languagedetector@8.0.0: dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.25.7 - i18next-fs-backend@2.3.1: {} + i18next-fs-backend@2.3.2: {} - i18next-http-backend@2.5.2(encoding@0.1.13): + i18next-http-backend@2.6.2(encoding@0.1.13): dependencies: cross-fetch: 4.0.0(encoding@0.1.13) transitivePeerDependencies: - encoding - i18next@23.11.5: + i18next@23.16.2: dependencies: - '@babel/runtime': 7.24.6 + '@babel/runtime': 7.25.7 iconv-corefoundation@1.1.7: dependencies: @@ -4379,7 +5512,7 @@ snapshots: ieee754@1.2.1: {} - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -4388,6 +5521,10 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + + infer-owner@1.0.4: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4395,12 +5532,57 @@ snapshots: 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 + ipaddr.js@1.9.1: {} + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + 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-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-callable@1.2.7: {} + is-ci@3.0.1: dependencies: ci-info: 3.9.0 + is-core-module@2.15.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-fullwidth-code-point@3.0.0: {} @@ -4409,37 +5591,74 @@ snapshots: is-fullwidth-code-point@5.0.0: dependencies: - get-east-asian-width: 1.2.0 + get-east-asian-width: 1.3.0 is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-number@7.0.0: {} + is-interactive@1.0.0: {} + + is-lambda@1.0.1: {} - is-obj@2.0.0: {} + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.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-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + is-stream@3.0.0: {} + 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-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + isarray@1.0.0: {} + isarray@2.0.5: {} + isbinaryfile@4.0.10: {} - isbinaryfile@5.0.2: {} + isbinaryfile@5.0.3: {} isexe@2.0.0: {} - jackspeak@3.4.0: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.1: + jake@10.9.2: dependencies: - async: 3.2.5 + async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -4454,21 +5673,31 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@2.5.2: {} + jsbn@1.1.0: {} + + jsesc@0.5.0: {} + + jsesc@3.0.2: {} json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} - json-schema-typed@7.0.3: {} + json-schema-typed@8.0.1: {} json-stable-stringify-without-jsonify@1.0.1: {} json-stringify-safe@5.0.1: optional: true + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} jsonfile@4.0.0: @@ -4496,36 +5725,37 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.1: {} + lilconfig@3.1.2: {} + + lines-and-columns@1.2.4: {} - lint-staged@15.2.7: + lint-staged@15.2.10: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.5 + debug: 4.3.7 execa: 8.0.1 - lilconfig: 3.1.1 - listr2: 8.2.1 - micromatch: 4.0.7 + lilconfig: 3.1.2 + listr2: 8.2.5 + micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.4.2 + yaml: 2.5.1 transitivePeerDependencies: - supports-color - listr2@8.2.1: + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.1 + log-update: 6.1.0 + rfdc: 1.4.1 wrap-ansi: 9.0.0 - locate-path@3.0.0: + locate-path@5.0.0: dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 + p-locate: 4.1.0 locate-path@6.0.0: dependencies: @@ -4549,17 +5779,22 @@ snapshots: lodash@4.17.21: {} - log-update@6.0.0: + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@6.1.0: dependencies: - ansi-escapes: 6.2.1 - cli-cursor: 4.0.0 + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 slice-ansi: 7.1.0 strip-ansi: 7.1.0 wrap-ansi: 9.0.0 lowercase-keys@2.0.0: {} - lru-cache@10.2.2: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: dependencies: @@ -4569,9 +5804,33 @@ snapshots: dependencies: yallist: 4.0.0 - magic-string@0.30.10: + lru-cache@7.18.3: {} + + magic-string@0.30.12: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 + + 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.4 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color matcher@3.0.0: dependencies: @@ -4580,7 +5839,7 @@ snapshots: media-typer@0.3.0: {} - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} merge-stream@2.0.0: {} @@ -4588,7 +5847,7 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -4605,14 +5864,20 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@3.1.0: {} - mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + mimic-response@1.0.1: {} mimic-response@3.1.0: {} + min-indent@1.0.1: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -4621,12 +5886,36 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: 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 @@ -4644,8 +5933,6 @@ snapshots: ms@2.0.0: {} - ms@2.1.2: {} - ms@2.1.3: {} nanoid@3.3.7: {} @@ -4654,16 +5941,54 @@ snapshots: negotiator@0.6.3: {} + negotiator@0.6.4: {} + + node-abi@3.71.0: + dependencies: + semver: 7.6.3 + node-addon-api@1.7.2: optional: true + node-api-version@0.2.0: + dependencies: + semver: 7.6.3 + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: encoding: 0.1.13 - node-releases@2.0.14: {} + 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.3 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + node-releases@2.0.18: {} + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -4679,10 +6004,42 @@ snapshots: transitivePeerDependencies: - encoding - object-inspect@1.13.1: {} + 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-keys@1.1.1: - optional: true + object-inspect@1.13.2: {} + + 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.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.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 on-finished@2.4.1: dependencies: @@ -4700,6 +6057,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4709,6 +6070,18 @@ snapshots: 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: @@ -4719,7 +6092,7 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@3.0.0: + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -4727,15 +6100,26 @@ snapshots: dependencies: p-limit: 3.1.0 + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - parseurl@1.3.3: {} + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.25.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 - path-exists@3.0.0: {} + parseurl@1.3.3: {} path-exists@4.0.0: {} @@ -4745,38 +6129,40 @@ snapshots: path-key@4.0.0: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.7: {} + path-to-regexp@0.1.10: {} - path-type@4.0.0: {} + pe-library@0.4.1: {} pend@1.2.0: {} - picocolors@1.0.1: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} pidtree@0.6.0: {} - 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 - postcss@8.4.38: + pluralize@8.0.0: {} + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.1 + source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -4784,12 +6170,14 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.2: {} + prettier@3.3.3: {} 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 @@ -4800,14 +6188,14 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - pump@3.0.0: + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 punycode@2.3.1: {} - qs@6.11.0: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -4824,14 +6212,24 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - read-config-file@6.3.2: + read-binary-file-arch@1.0.6: 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 + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + + read-pkg-up@7.0.1: + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + read-pkg@5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 readable-stream@2.3.8: dependencies: @@ -4855,28 +6253,56 @@ snapshots: regenerator-runtime@0.14.1: {} + regexp-tree@0.1.27: {} + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} + resedit@1.7.2: + dependencies: + pe-library: 0.4.1 + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} + resolve@1.22.8: + dependencies: + is-core-module: 2.15.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@4.0.0: + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retry@0.12.0: {} reusify@1.0.4: {} - rfdc@1.3.1: {} + rfdc@1.4.1: {} rimraf@3.0.2: dependencies: @@ -4892,36 +6318,49 @@ snapshots: sprintf-js: 1.1.3 optional: true - rollup@4.18.0: + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 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 + '@rollup/rollup-android-arm-eabi': 4.24.0 + '@rollup/rollup-android-arm64': 4.24.0 + '@rollup/rollup-darwin-arm64': 4.24.0 + '@rollup/rollup-darwin-x64': 4.24.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 + '@rollup/rollup-linux-arm-musleabihf': 4.24.0 + '@rollup/rollup-linux-arm64-gnu': 4.24.0 + '@rollup/rollup-linux-arm64-musl': 4.24.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 + '@rollup/rollup-linux-riscv64-gnu': 4.24.0 + '@rollup/rollup-linux-s390x-gnu': 4.24.0 + '@rollup/rollup-linux-x64-gnu': 4.24.0 + '@rollup/rollup-linux-x64-musl': 4.24.0 + '@rollup/rollup-win32-arm64-msvc': 4.24.0 + '@rollup/rollup-win32-ia32-msvc': 4.24.0 + '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + 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: @@ -4933,11 +6372,13 @@ snapshots: semver-compare@1.0.0: optional: true + semver@5.7.2: {} + semver@6.3.1: {} - semver@7.6.2: {} + semver@7.6.3: {} - send@0.18.0: + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -4960,15 +6401,17 @@ snapshots: type-fest: 0.13.1 optional: true - serve-static@1.15.0: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -4978,6 +6421,13 @@ snapshots: 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 + setprototypeof@1.2.0: {} shebang-command@2.0.0: @@ -4991,7 +6441,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@3.0.7: {} @@ -4999,9 +6449,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.6.2 - - slash@3.0.0: {} + semver: 7.6.3 slice-ansi@3.0.0: dependencies: @@ -5020,10 +6468,22 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - smart-buffer@4.2.0: - optional: true + smart-buffer@4.2.0: {} + + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.7 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color - source-map-js@1.2.0: {} + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: @@ -5032,8 +6492,25 @@ snapshots: source-map@0.6.1: {} - sprintf-js@1.1.3: - optional: true + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.20 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + + spdx-license-ids@3.0.20: {} + + sprintf-js@1.1.3: {} + + ssri@9.0.1: + dependencies: + minipass: 3.3.6 stat-mode@1.0.0: {} @@ -5053,12 +6530,31 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.1.0: + string-width@7.2.0: dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 + 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 @@ -5073,15 +6569,23 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} strip-final-newline@3.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} + stubborn-fs@1.2.5: {} + sumchecker@3.0.1: dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -5093,10 +6597,12 @@ snapshots: dependencies: has-flag: 4.0.0 - synckit@0.8.8: + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.2 + tslib: 2.8.0 tar-stream@2.2.0: dependencies: @@ -5144,11 +6650,18 @@ snapshots: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@1.3.0(typescript@5.5.2): + ts-api-utils@1.3.0(typescript@5.6.3): + dependencies: + typescript: 5.6.3 + + tsconfig-paths@3.15.0: dependencies: - typescript: 5.5.2 + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 - tslib@2.6.2: {} + tslib@2.8.0: {} type-check@0.4.0: dependencies: @@ -5159,16 +6672,69 @@ snapshots: type-fest@0.20.2: {} - type-fest@2.19.0: {} + type-fest@0.6.0: {} + + type-fest@0.8.1: {} + + type-fest@4.26.1: {} type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typescript@5.5.2: {} + 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.6.3: {} + + uint8array-extras@1.4.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@6.19.8: {} - 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: {} @@ -5176,11 +6742,11 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.0.16(browserslist@4.23.0): + update-browserslist-db@1.1.1(browserslist@4.24.0): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: @@ -5192,6 +6758,11 @@ snapshots: utils-merge@1.0.1: {} + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + vary@1.1.2: {} verror@1.10.1: @@ -5201,15 +6772,19 @@ snapshots: extsprintf: 1.4.1 optional: true - vite@5.3.1(@types/node@20.14.9): + vite@5.4.9(@types/node@22.7.7): dependencies: esbuild: 0.21.5 - postcss: 8.4.38 - rollup: 4.18.0 + postcss: 8.4.47 + rollup: 4.24.0 optionalDependencies: - '@types/node': 20.14.9 + '@types/node': 22.7.7 fsevents: 2.3.3 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + webidl-conversions@3.0.1: {} whatwg-url@5.0.0: @@ -5217,10 +6792,32 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + when-exit@2.1.3: {} + + 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-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 + word-wrap@1.2.5: {} wrap-ansi@7.0.0: @@ -5238,7 +6835,7 @@ snapshots: wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 - string-width: 7.1.0 + string-width: 7.2.0 strip-ansi: 7.1.0 wrappy@1.0.2: {} @@ -5251,14 +6848,14 @@ snapshots: yallist@4.0.0: {} - yaml@2.4.2: {} + yaml@2.5.1: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/src/main/errorTable.ts b/src/main/errorTable.ts index 13dd83e..7da259f 100644 --- a/src/main/errorTable.ts +++ b/src/main/errorTable.ts @@ -1,4 +1,4 @@ export const failedToCreateNewInstance = new Error('An error occurred during the creation of the instance.'); export const failedToLoadAPI = new Error( - 'You can\'t run more than 1 instance of the DigiFlag. Please use the "Create a new instance" button.\nIf there is no other instance open please contact us on the GitHub repo or on the F1MV server.' + 'You can\'t run more than 1 instance of DigiFlag. Please use the "Create a new instance" button.\nIf there is no other instance open please contact us on the GitHub repo or on the F1MV server.' ); diff --git a/src/main/filesConfiguration.json b/src/main/filesConfiguration.json index 7150042..63ad513 100644 --- a/src/main/filesConfiguration.json +++ b/src/main/filesConfiguration.json @@ -137,9 +137,12 @@ "23": "gifs/T2_11/DriverNumbers/2024/23.gif", "24": "gifs/T2_11/DriverNumbers/2024/24.gif", "27": "gifs/T2_11/DriverNumbers/2024/27.gif", + "30": "gifs/T2_11/DriverNumbers/2024/30.gif", "31": "gifs/T2_11/DriverNumbers/2024/31.gif", "34": "gifs/T2_11/DriverNumbers/2024/34.gif", + "38": "gifs/T2_11/DriverNumbers/2024/38.gif", "40": "gifs/T2_11/DriverNumbers/2024/40.gif", + "43": "gifs/T2_11/DriverNumbers/2024/43.gif", "44": "gifs/T2_11/DriverNumbers/2024/44.gif", "55": "gifs/T2_11/DriverNumbers/2024/55.gif", "63": "gifs/T2_11/DriverNumbers/2024/63.gif", @@ -231,9 +234,12 @@ "23": "gifs/T2_169/DriverNumbers/2024/23.gif", "24": "gifs/T2_169/DriverNumbers/2024/24.gif", "27": "gifs/T2_169/DriverNumbers/2024/27.gif", + "30": "gifs/T2_169/DriverNumbers/2024/30.gif", "31": "gifs/T2_169/DriverNumbers/2024/31.gif", "34": "gifs/T2_169/DriverNumbers/2024/34.gif", + "38": "gifs/T2_169/DriverNumbers/2024/38.gif", "40": "gifs/T2_169/DriverNumbers/2024/40.gif", + "43": "gifs/T2_169/DriverNumbers/2024/43.gif", "44": "gifs/T2_169/DriverNumbers/2024/44.gif", "55": "gifs/T2_169/DriverNumbers/2024/55.gif", "63": "gifs/T2_169/DriverNumbers/2024/63.gif", @@ -325,10 +331,12 @@ "23": "gifs/pixoo64/DriverNumbers/2024/23.gif", "24": "gifs/pixoo64/DriverNumbers/2024/24.gif", "27": "gifs/pixoo64/DriverNumbers/2024/27.gif", + "30": "gifs/pixoo64/DriverNumbers/2024/30.gif", "31": "gifs/pixoo64/DriverNumbers/2024/31.gif", "34": "gifs/pixoo64/DriverNumbers/2024/34.gif", "38": "gifs/pixoo64/DriverNumbers/2024/38.gif", "40": "gifs/pixoo64/DriverNumbers/2024/40.gif", + "43": "gifs/pixoo64/DriverNumbers/2024/43.gif", "44": "gifs/pixoo64/DriverNumbers/2024/44.gif", "55": "gifs/pixoo64/DriverNumbers/2024/55.gif", "63": "gifs/pixoo64/DriverNumbers/2024/63.gif", diff --git a/src/main/main.ts b/src/main/main.ts index 86a56d9..3773bf7 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -1,22 +1,22 @@ +import {ip} from 'address'; import {app, BrowserWindow, ipcMain} from 'electron'; +import updater from 'electron-updater'; import express from 'express'; -import {ip} from 'address'; -import path from 'path'; +import path from 'node:path'; +import {Theme} from '../renderer/types/filesConfig'; +import {failedToLoadAPI} from './errorTable'; +import {mapThemes, themes} from './filesConfiguration.json'; import { - getWindowSizeSettings, + getAlwaysOnTopState, getWindowPositionSettings, + getWindowSizeSettings, + saveAlwaysOnTopState, saveWindowPos, saveWindowSize, - getAlwaysOnTopState, - saveAlwaysOnTopState, } from './storage'; -import {failedToLoadAPI} from './errorTable'; -import {themes, mapThemes} from './filesConfiguration.json'; -import {Theme} from '../renderer/types/filesConfig'; -import {autoUpdater} from 'electron-updater'; const version = app.getVersion(); -let pixooIPAddress = ''; +let pixooIPAddress = ['']; /* Creating an express app. */ const expressApp = express(); /* Creating a server that listens on port 9093. */ @@ -25,46 +25,47 @@ expressApp console.log('API Started'); }) .on('error', () => { - throw failedToLoadAPI; + app.quit(); + throw new Error(`${failedToLoadAPI}`); }); /* A route that is used to get a gif from the server. */ -expressApp.get('/getGif/:gif/:themeID', (req, res) => { - const {gif, themeID} = req.params; +expressApp.get('/getGif/:gif/:themeID', (request, response) => { + const {gif, themeID} = request.params; const theme: Theme = themes[themeID]; const gifPath = theme.gifs[gif]; - res.sendFile(`${gifPath}`, {root: path.join(__dirname, '../renderer/')}); + response.sendFile(`${gifPath}`, {root: path.join(import.meta.dirname, '../renderer/')}); }); -expressApp.get('/getTrack/:track/:themeID', (req, res) => { - const {track, themeID} = req.params; +expressApp.get('/getTrack/:track/:themeID', (request, response) => { + const {track, themeID} = request.params; const theme = mapThemes[themeID]; const trackPath = theme.trackMaps[track]; - res.sendFile(`${trackPath}`, {root: path.join(__dirname, '../renderer/')}); + response.sendFile(`${trackPath}`, {root: path.join(import.meta.dirname, '../renderer/')}); }); /* A route that is used to change the GIF on the Pixoo64. */ -expressApp.get('/getGifPixoo/:themeID/:gif.gif/', (req, res) => { - const {gif, themeID} = req.params; +expressApp.get('/getGifPixoo/:themeID/:gif.gif/', (request, response) => { + const {gif, themeID} = request.params; const theme: Theme = themes[themeID]; /* Checking if the theme is compatible with Pixoo64. If it isn't, it sends a 400 error. */ if (theme.compatibleWith.Pixoo64 !== true) { - res.statusCode = 400; - res.send("Theme requested doesn't support Pixoo64"); + response.statusCode = 400; + response.send("Theme requested doesn't support Pixoo64"); return; } const gifPath = theme.gifs[gif]; - res.sendFile(`${gifPath}`, {root: path.join(__dirname, '../renderer/')}); + response.sendFile(`${gifPath}`, {root: path.join(import.meta.dirname, '../renderer/')}); }); /* A route that is used to get a DriverNumber GIF. */ -expressApp.get('/getGifPixoo/:themeID/DriverNumbers/:year/:driverNumber.gif/', (req, res) => { - const {driverNumber, themeID, year} = req.params; +expressApp.get('/getGifPixoo/:themeID/DriverNumbers/:year/:driverNumber.gif/', (request, response) => { + const {driverNumber, themeID, year} = request.params; const theme: Theme = themes[themeID]; const driverNumbersArray = theme.gifs.driverNumber; let DriverNumberPath = ''; if (driverNumbersArray) { - for (let i = 0; i < driverNumbersArray.length; i++) { - const DriverNumbers = driverNumbersArray[i].DriverNumbers; - const DriverSeason = driverNumbersArray[i].year; + for (const element of driverNumbersArray) { + const DriverNumbers = element.DriverNumbers; + const DriverSeason = element.year; if (DriverSeason === year) { DriverNumberPath = DriverNumbers[driverNumber]; @@ -73,10 +74,10 @@ expressApp.get('/getGifPixoo/:themeID/DriverNumbers/:year/:driverNumber.gif/', ( } /* Checking if the theme is compatible with Pixoo64. If it isn't, it sends a 400 error. */ if (theme.compatibleWith.Pixoo64 !== true) { - res.statusCode = 400; - res.send("Theme requested doesn't support Pixoo64"); + response.statusCode = 400; + response.send("Theme requested doesn't support Pixoo64"); } - res.sendFile(`${DriverNumberPath}`, {root: path.join(__dirname, '../renderer/')}); + response.sendFile(`${DriverNumberPath}`, {root: path.join(import.meta.dirname, '../renderer/')}); }); let mainWindow: BrowserWindow; @@ -106,13 +107,14 @@ function createWindow( transparent: false, titleBarStyle: 'hidden', /* Setting the icon of the window. */ - icon: path.join(__dirname, '../../build/icon.png'), + icon: path.join(import.meta.dirname, '../../build/icon.png'), alwaysOnTop: alwaysOnTop, autoHideMenuBar: true, /* Hiding the window until it is ready to be shown. */ show: false, webPreferences: { - preload: path.join(__dirname, '../preload/preload.js'), + preload: path.join(import.meta.dirname, '../preload/preload.cjs'), + nodeIntegration: false, contextIsolation: true, sandbox: false, }, @@ -122,7 +124,7 @@ function createWindow( if (!app.isPackaged && process.env['ELECTRON_RENDERER_URL']) { mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']); } else { - mainWindow.loadFile(path.join(__dirname, '../renderer/index.html')); + mainWindow.loadFile(path.join(import.meta.dirname, '../renderer/index.html')); } // Event listeners on the window mainWindow.webContents.on('did-finish-load', () => { @@ -131,7 +133,7 @@ function createWindow( }); /* A type alias for a function that takes an array of unknowns and returns a value of type R. */ - type Func = (...args: T) => R; + type Function_ = (...arguments_: T) => R; /** * It returns a function that calls the given function after a delay, but if the returned function is @@ -140,16 +142,16 @@ function createWindow( * @param {number} delay - The amount of time to wait before calling the function. * @returns A function that takes a function and a number and returns a function. */ - function debounce(func: Func, delay: number): Func { - let timeoutId: ReturnType | null; + function debounce(function_: Function_, delay: number): Function_ { + let timeoutId: ReturnType | undefined; - return function (this: unknown, ...args: T) { + return function (this: unknown, ...arguments_: T) { if (timeoutId) { clearTimeout(timeoutId); } timeoutId = setTimeout(() => { - func.apply(this, args); - timeoutId = null; + function_.apply(this, arguments_); + timeoutId = undefined; }, delay); }; } @@ -169,10 +171,6 @@ the size of the window as an argument. */ /* Setting the minimum size of the window to 256x256. */ mainWindow.setMinimumSize(256, 256); - mainWindow.on('close', function () { - mainWindow = null; // Clean up your window object. - }); - mainWindow.webContents.setWindowOpenHandler(({url}) => { if (url === 'https://github.com/LapsTimeOFF/DigiFlag_F1MV') { return { @@ -192,7 +190,8 @@ the size of the window as an argument. */ minWidth: 256, minHeight: 256, webPreferences: { - preload: path.join(__dirname, '../preload/preload.js'), + preload: path.join(import.meta.dirname, '../preload/preload.cjs'), + nodeIntegration: false, contextIsolation: true, sandbox: false, }, @@ -209,14 +208,14 @@ the size of the window as an argument. */ // This method will be called when Electron has finished // initialization and is ready to create browser windows. app.whenReady().then(() => { - autoUpdater.checkForUpdatesAndNotify(); + updater.autoUpdater.checkForUpdatesAndNotify(); const windowSize = getWindowSizeSettings(); const windowPosition = getWindowPositionSettings(); const alwaysOnTopState = getAlwaysOnTopState(); - if (version.includes('dev')) console.log('WindowSize: ', windowSize); - if (version.includes('dev')) console.log('WindowPosition: ', windowPosition); - if (version.includes('dev')) console.log('alwaysOnTopState: ', alwaysOnTopState); + if (version.includes('dev')) console.log('WindowSize:', windowSize); + if (version.includes('dev')) console.log('WindowPosition:', windowPosition); + if (version.includes('dev')) console.log('alwaysOnTopState:', alwaysOnTopState); createWindow( windowSize[0], @@ -227,7 +226,7 @@ app.whenReady().then(() => { alwaysOnTopState ); app.on('activate', () => { - // On OS X it's common to re-create a window in the app when the + // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) { createWindow( @@ -251,9 +250,9 @@ app.on('window-all-closed', () => { }); ipcMain.handle('get-version', async () => { - return app.getVersion(); + return version; }); -ipcMain.handle('get-pixooIP', async (_, pixooIP: string) => { +ipcMain.handle('get-pixooIP', async (_, pixooIP: string[]) => { pixooIPAddress = pixooIP; return pixooIPAddress; }); diff --git a/src/main/storage.ts b/src/main/storage.ts index acfae36..a495ae0 100644 --- a/src/main/storage.ts +++ b/src/main/storage.ts @@ -19,7 +19,7 @@ export function getWindowSizeSettings() { /* Getting the height of the screen and multiplying it by 0.8. */ const height = dimensions.height * 0.8; /* Creating an array with the width and height of the screen. */ - const defaultWindowSize:number[] = [width, height]; + const defaultWindowSize: number[] = [width, height]; /* Getting the value of the key "lastWindowSize" from the storage object. */ const windowSize = storage.get('lastWindowSize') as number[]; @@ -27,7 +27,7 @@ export function getWindowSizeSettings() { if (windowSize) return windowSize; else { storage.set('lastWindowSize', defaultWindowSize); - return defaultWindowSize + return defaultWindowSize; } } /** @@ -36,7 +36,7 @@ export function getWindowSizeSettings() { * @returns An array of two numbers. */ export function getWindowPositionSettings() { - const defaultWindowPositon:number[] = [] + const defaultWindowPositon: number[] = []; const windowPos = storage.get('lastWindowPosition') as number[]; if (windowPos) return windowPos; else { @@ -51,7 +51,7 @@ export function getWindowPositionSettings() { */ export function saveWindowSize(windowSize: number[]): void { storage.set('lastWindowSize', windowSize); - console.log('Window Size Saved: ', windowSize); + console.log('Window Size Saved:', windowSize); } /** * This function saves the window position to the config.json @@ -59,20 +59,20 @@ export function saveWindowSize(windowSize: number[]): void { */ export function saveWindowPos(windowPos: number[]): void { storage.set('lastWindowPosition', windowPos); - console.log('Window Position Saved: ', windowPos); + console.log('Window Position Saved:', windowPos); } export function getAlwaysOnTopState() { - const defaultAlwaysOnTopState=false + const defaultAlwaysOnTopState = false; const alwaysOnTopState = storage.get('alwaysOnTop') as boolean; if (alwaysOnTopState) return alwaysOnTopState; else { storage.set('alwaysOnTop', defaultAlwaysOnTopState); return defaultAlwaysOnTopState; } - } +} export function saveAlwaysOnTopState(alwaysOnTop: boolean): void { storage.set('alwaysOnTop', alwaysOnTop); - console.log(`Always on Top State (${alwaysOnTop}) Saved: `, alwaysOnTop); -} \ No newline at end of file + console.log(`Always on Top State (${alwaysOnTop}) Saved:`, alwaysOnTop); +} diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts index 5cecf7a..798557f 100644 --- a/src/preload/index.d.ts +++ b/src/preload/index.d.ts @@ -1,9 +1,10 @@ -import {api} from './preload'; -export {}; +/* eslint-disable no-var */ +import {API} from './preload.ts'; +import {ElectronAPI} from '@electron-toolkit/preload'; declare global { - interface Window { - api: typeof api; - } + //Make sure you use var instead of let or const, as it attaches to the global object. + var api: API; + var electron: ElectronAPI; interface JQuery { localize(): void; } diff --git a/src/preload/preload.ts b/src/preload/preload.ts index f0b0528..c10aaa5 100644 --- a/src/preload/preload.ts +++ b/src/preload/preload.ts @@ -1,16 +1,23 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ -import {contextBridge, ipcRenderer} from 'electron'; +import {contextBridge} from 'electron'; +import {ipcRenderer} from 'electron'; import {LiveTimingAPIGraphQL} from 'npm_f1mv_api'; -import {electronAPI} from '@electron-toolkit/preload'; +export interface API { + LiveTimingAPIGraphQL: typeof LiveTimingAPIGraphQL; + getVersion: () => Promise; + getAlwaysOnTop: () => Promise; + setAlwaysOnTop: () => Promise; + getPixooIP: (pixooIP: string[]) => Promise; + getExpressIP: () => Promise; +} // Custom APIs for renderer -export const api = { +const api = { LiveTimingAPIGraphQL: LiveTimingAPIGraphQL, getVersion: (): Promise => ipcRenderer.invoke('get-version'), getAlwaysOnTop: () => ipcRenderer.invoke('get-always-on-top'), setAlwaysOnTop: () => ipcRenderer.invoke('set-always-on-top'), getPixooIP: (pixooIP: string) => ipcRenderer.invoke('get-pixooIP', pixooIP), - electronAPI, getExpressIP: (): Promise => ipcRenderer.invoke('get-expressIP'), }; @@ -22,5 +29,5 @@ if (process.contextIsolated) { } } else { // @ts-ignore (define in dts) - window.api = api; + globalThis.api = api; } diff --git a/src/renderer/i18n.ts b/src/renderer/i18n.ts index 02bfdbf..64f8cc7 100644 --- a/src/renderer/i18n.ts +++ b/src/renderer/i18n.ts @@ -1,58 +1,56 @@ import i18next from 'i18next'; import jqueryI18next from 'jquery-i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; -import Backend from "i18next-http-backend"; +import Backend from 'i18next-http-backend'; const DETECTION_OPTIONS = { - order: ['localStorage', 'navigator'], - caches: ['localStorage'] + order: ['localStorage', 'navigator'], + caches: ['localStorage'], }; async function initI18n() { - await i18next - .use(LanguageDetector) - .use(Backend) - // detect user language - // learn more: https://github.com/i18next/i18next-browser-languageDetector - // init i18next - // for all options read: https://www.i18next.com/overview/configuration-options - .init({ - debug: false, - fallbackLng: 'en', - load: 'languageOnly', - detection: DETECTION_OPTIONS, - backend: { - loadPath: './localization/locales/{{lng}}/{{ns}}.json', - }, - interpolation: { - escapeValue: false, - }, - }, - ); - } - jqueryI18next.init(i18next, $, { useOptionsAttr: true }); + await i18next + .use(LanguageDetector) + .use(Backend) + // detect user language + // learn more: https://github.com/i18next/i18next-browser-languageDetector + // init i18next + // for all options read: https://www.i18next.com/overview/configuration-options + .init({ + debug: false, + fallbackLng: 'en', + load: 'languageOnly', + detection: DETECTION_OPTIONS, + backend: { + loadPath: './localization/locales/{{lng}}/{{ns}}.json', + }, + interpolation: { + escapeValue: false, + }, + }); +} +jqueryI18next.init(i18next, $, {useOptionsAttr: true}); function translatePage() { - - $(document).localize(); - setTimeout(() =>{ - $('.loader').hide(); - $('#menuContent').removeAttr('style'); - },1000) + $(document).localize(); + setTimeout(() => { + $('.loader').hide(); + $('#menuContent').removeAttr('style'); + }, 1000); } function bindLocaleSwitcher() { - const $switcher = $("[data-i18n-switcher]"); + const $switcher = $('[data-i18n-switcher]'); - $switcher.val(i18next.language); + $switcher.val(i18next.language); - $switcher.on("change", async function () { - const chosenLng = $(this).find("option:selected").attr('value'); - await i18next.changeLanguage(chosenLng); - translatePage(); - }); + $switcher.on('change', async function () { + const chosenLng = $(this).find('option:selected').attr('value'); + await i18next.changeLanguage(chosenLng); + translatePage(); + }); } (async function () { - await initI18n(); - translatePage(); - bindLocaleSwitcher(); -})(); \ No newline at end of file + await initI18n(); + translatePage(); + bindLocaleSwitcher(); +})(); diff --git a/src/renderer/index.html b/src/renderer/index.html index 823bf56..85cd0c9 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -6,20 +6,27 @@ + + - - - + + - + - + - + + @@ -38,7 +45,10 @@

DigiFlag X MultiViewer

MultiViewer Logo - +
+ DigiFlag Version: + +
Current Session: @@ -51,8 +61,7 @@

DigiFlag X MultiViewer

-
+
General
-
-
- - +
+
+ + +
-
@@ -85,7 +94,8 @@
General
Layout
-
@@ -96,7 +106,8 @@
Layout
Github
- +
@@ -135,5 +146,4 @@
Github
- - + \ No newline at end of file diff --git a/src/renderer/public/filesConfiguration.json b/src/renderer/public/filesConfiguration.json index 7150042..63ad513 100644 --- a/src/renderer/public/filesConfiguration.json +++ b/src/renderer/public/filesConfiguration.json @@ -137,9 +137,12 @@ "23": "gifs/T2_11/DriverNumbers/2024/23.gif", "24": "gifs/T2_11/DriverNumbers/2024/24.gif", "27": "gifs/T2_11/DriverNumbers/2024/27.gif", + "30": "gifs/T2_11/DriverNumbers/2024/30.gif", "31": "gifs/T2_11/DriverNumbers/2024/31.gif", "34": "gifs/T2_11/DriverNumbers/2024/34.gif", + "38": "gifs/T2_11/DriverNumbers/2024/38.gif", "40": "gifs/T2_11/DriverNumbers/2024/40.gif", + "43": "gifs/T2_11/DriverNumbers/2024/43.gif", "44": "gifs/T2_11/DriverNumbers/2024/44.gif", "55": "gifs/T2_11/DriverNumbers/2024/55.gif", "63": "gifs/T2_11/DriverNumbers/2024/63.gif", @@ -231,9 +234,12 @@ "23": "gifs/T2_169/DriverNumbers/2024/23.gif", "24": "gifs/T2_169/DriverNumbers/2024/24.gif", "27": "gifs/T2_169/DriverNumbers/2024/27.gif", + "30": "gifs/T2_169/DriverNumbers/2024/30.gif", "31": "gifs/T2_169/DriverNumbers/2024/31.gif", "34": "gifs/T2_169/DriverNumbers/2024/34.gif", + "38": "gifs/T2_169/DriverNumbers/2024/38.gif", "40": "gifs/T2_169/DriverNumbers/2024/40.gif", + "43": "gifs/T2_169/DriverNumbers/2024/43.gif", "44": "gifs/T2_169/DriverNumbers/2024/44.gif", "55": "gifs/T2_169/DriverNumbers/2024/55.gif", "63": "gifs/T2_169/DriverNumbers/2024/63.gif", @@ -325,10 +331,12 @@ "23": "gifs/pixoo64/DriverNumbers/2024/23.gif", "24": "gifs/pixoo64/DriverNumbers/2024/24.gif", "27": "gifs/pixoo64/DriverNumbers/2024/27.gif", + "30": "gifs/pixoo64/DriverNumbers/2024/30.gif", "31": "gifs/pixoo64/DriverNumbers/2024/31.gif", "34": "gifs/pixoo64/DriverNumbers/2024/34.gif", "38": "gifs/pixoo64/DriverNumbers/2024/38.gif", "40": "gifs/pixoo64/DriverNumbers/2024/40.gif", + "43": "gifs/pixoo64/DriverNumbers/2024/43.gif", "44": "gifs/pixoo64/DriverNumbers/2024/44.gif", "55": "gifs/pixoo64/DriverNumbers/2024/55.gif", "63": "gifs/pixoo64/DriverNumbers/2024/63.gif", diff --git a/src/renderer/public/gifs/T2_11/DriverNumbers/2024/30.gif b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/30.gif new file mode 100644 index 0000000..24b5478 Binary files /dev/null and b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/30.gif differ diff --git a/src/renderer/public/gifs/T2_11/DriverNumbers/2024/38.gif b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/38.gif new file mode 100644 index 0000000..5f7c59a Binary files /dev/null and b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/38.gif differ diff --git a/src/renderer/public/gifs/T2_11/DriverNumbers/2024/43.gif b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/43.gif new file mode 100644 index 0000000..b24e55f Binary files /dev/null and b/src/renderer/public/gifs/T2_11/DriverNumbers/2024/43.gif differ diff --git a/src/renderer/public/gifs/T2_169/DriverNumbers/2024/30.gif b/src/renderer/public/gifs/T2_169/DriverNumbers/2024/30.gif new file mode 100644 index 0000000..bf2b2d2 Binary files /dev/null and b/src/renderer/public/gifs/T2_169/DriverNumbers/2024/30.gif differ diff --git a/src/renderer/public/gifs/T2_169/DriverNumbers/2024/43.gif b/src/renderer/public/gifs/T2_169/DriverNumbers/2024/43.gif new file mode 100644 index 0000000..47bb148 Binary files /dev/null and b/src/renderer/public/gifs/T2_169/DriverNumbers/2024/43.gif differ diff --git a/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/30.gif b/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/30.gif new file mode 100644 index 0000000..617553d Binary files /dev/null and b/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/30.gif differ diff --git a/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/43.gif b/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/43.gif new file mode 100644 index 0000000..e64fe23 Binary files /dev/null and b/src/renderer/public/gifs/pixoo64/DriverNumbers/2024/43.gif differ diff --git a/src/renderer/public/gifs/pixoo64/red.gif b/src/renderer/public/gifs/pixoo64/red.gif index 5b6747a..a5ee355 100644 Binary files a/src/renderer/public/gifs/pixoo64/red.gif and b/src/renderer/public/gifs/pixoo64/red.gif differ diff --git a/src/renderer/public/localization/locales/en/translation.json b/src/renderer/public/localization/locales/en/translation.json index 0c38e64..a32cc70 100644 --- a/src/renderer/public/localization/locales/en/translation.json +++ b/src/renderer/public/localization/locales/en/translation.json @@ -1,15 +1,16 @@ { "alwaysOnTop": "Always on Top?", - "attemptingToConnectToF1MV": "Attempting to Connect to F1MV in:", + "attemptingToConnectToF1MV": "Attempting to Connect to MultiViewer in:", "attemptingToConnectToLiveReplayTimingWindow": "Attempting to Connect to Live or Replay Timing Window:", - "attemptingToGetCurrentSessionInfoFromF1mv": "Attempting to Get Current Session Info From F1MV...", + "attemptingToGetCurrentSessionInfoFromF1mv": "Attempting to Get Current Session Info From MultiViewer...", "back": "Back", "blueFlags": "Blue Flags", "checkNetworkSettings": "Move your Mouse to the Bottom Right Corner & Click on the Settings Gear to check your Network Settings.", "currentSession": "Current Session:", - "digiflagNotLinked": "DigiFlag is currently not linked to F1MV", + "digiflagNotLinked": "DigiFlag is currently not linked to MultiViewer", + "digiflagVersion": "DigiFlag Version:", "extraFlags": "Extra Flags", - "failedToConnect": "Failed to connect to F1MV", + "failedToConnect": "Failed to connect to MultiViewer", "failedToRetrieveCurrentSession": "Failed to Retrieve Current Session", "general": "General", "infoTag": "Maybe you are trying to connect to another host? Maybe your port isn't the default one?", @@ -25,16 +26,16 @@ "openDigiflagGithub": "Open DigiFlag Github", "pixel": "Pixel", "restoreDefaultSettings": "Restore Default Network Settings", - "retrievingCurrentSession": "Retrieving Current Session From F1MV...", - "retryingToConnectToF1mvIn": "Retrying to Connect to F1MV in :", + "retrievingCurrentSession": "Retrieving Current Session From MultiViewer...", + "retryingToConnectToF1mvIn": "Retrying to Connect to MultiViewer in :", "saveNetworkSettings": "Save Network Settings", "seconds": "seconds", "selectADevice": "Select a Device", "selectADigiflagTheme": "Select a DigiFlag Theme", "selectAMapStyle": "Select a Map Style", "startDigiflag": "Start DigiFlag", - "successfullyConnectedToF1mvTimingWindow": "Successfully Connected to F1MV Timing Window", - "unableToRetrieveCurrentSessionFromF1mv": "Unable to Retrieve Current Session from F1MV", + "successfullyConnectedToF1mvTimingWindow": "Successfully Connected to MultiViewer Timing Window", + "unableToRetrieveCurrentSessionFromF1mv": "Unable to Retrieve Current Session from MultiViewer", "useF1TrackMapBackground": "Use F1 Track Map Background?", - "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "You are Connected to F1MV, but the Live or Replay Timing Window is not open" + "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "You are Connected to MultiViewer, but the Live or Replay Timing Window is not open" } diff --git a/src/renderer/public/localization/locales/es/translation.json b/src/renderer/public/localization/locales/es/translation.json index e8b6830..7055305 100644 --- a/src/renderer/public/localization/locales/es/translation.json +++ b/src/renderer/public/localization/locales/es/translation.json @@ -1,15 +1,16 @@ { "alwaysOnTop": "Siempre en la cima?", - "attemptingToConnectToF1MV": "Intentando conectar con F1MV en:", + "attemptingToConnectToF1MV": "Intentando conectar con MultiViewer en:", "attemptingToConnectToLiveReplayTimingWindow": "Intentar conectarse a una ventana de tiempo en directo o de repetición:", - "attemptingToGetCurrentSessionInfoFromF1mv": "Intento de obtener información de la sesión actual de F1MV...", + "attemptingToGetCurrentSessionInfoFromF1mv": "Intento de obtener información de la sesión actual de MultiViewer...", "back": "Atrás", "blueFlags": "banderas azules", "checkNetworkSettings": "Mueva el ratón a la esquina inferior derecha y haga clic en el engranaje de configuración para comprobar la configuración de red.", "currentSession": "Sesión en Curso:", - "digiflagNotLinked": "DigiFlag no está vinculado actualmente a F1MV", + "digiflagNotLinked": "DigiFlag no está vinculado actualmente a MultiViewer", + "digiflagVersion": "DigiFlag Versión:", "extraFlags": "Banderas adicionales", - "failedToConnect": "Fallo de conexión con F1MV", + "failedToConnect": "Fallo de conexión con MultiViewer", "failedToRetrieveCurrentSession": "Fallo al recuperar la sesión actual", "general": "General", "infoTag": "¿Quizás estás intentando conectarte a otro host? ¿Tal vez tu puerto no es el predeterminado?", @@ -25,16 +26,16 @@ "openDigiflagGithub": "Abrir DigiFlag Github", "pixel": "Píxel", "restoreDefaultSettings": "Restablecer la configuración de red predeterminada", - "retrievingCurrentSession": "Recuperar la sesión actual de F1MV...", - "retryingToConnectToF1mvIn": "Reintento de conexión a F1MV en :", + "retrievingCurrentSession": "Recuperar la sesión actual de MultiViewer...", + "retryingToConnectToF1mvIn": "Reintento de conexión a MultiViewer en :", "saveNetworkSettings": "Guardar configuración de red", "seconds": "segundos", "selectADevice": "Seleccione un dispositivo", "selectADigiflagTheme": "Seleccione un tema DigiFlag", "selectAMapStyle": "Seleccione un estilo de mapa", "startDigiflag": "Iniciar DigiFlag", - "successfullyConnectedToF1mvTimingWindow": "Conectado con éxito a la ventana de tiempo F1MV", - "unableToRetrieveCurrentSessionFromF1mv": "No se puede recuperar la sesión actual de F1MV", + "successfullyConnectedToF1mvTimingWindow": "Conectado con éxito a la ventana de tiempo MultiViewer", + "unableToRetrieveCurrentSessionFromF1mv": "No se puede recuperar la sesión actual de MultiViewer", "useF1TrackMapBackground": "¿Utilizar el fondo del mapa de la pista de F1?", - "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Está conectado a F1MV, pero la ventana de cronometraje en directo o de repetición no está abierta" + "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Está conectado a MultiViewer, pero la ventana de cronometraje en directo o de repetición no está abierta" } diff --git a/src/renderer/public/localization/locales/fr/translation.json b/src/renderer/public/localization/locales/fr/translation.json index a40c4fd..2df8266 100644 --- a/src/renderer/public/localization/locales/fr/translation.json +++ b/src/renderer/public/localization/locales/fr/translation.json @@ -1,15 +1,16 @@ { "alwaysOnTop": "Toujours au dessus?", - "attemptingToConnectToF1MV": "Tentative de connexion à F1MV dans:", + "attemptingToConnectToF1MV": "Tentative de connexion à MultiViewer dans:", "attemptingToConnectToLiveReplayTimingWindow": "Tentative de connexion au Live Timing :", - "attemptingToGetCurrentSessionInfoFromF1mv": "Récupération des informations de la session actuelle de F1MV...", + "attemptingToGetCurrentSessionInfoFromF1mv": "Récupération des informations de la session actuelle de MultiViewer...", "back": "Retourner", "blueFlags": "Drapeaux bleus", "checkNetworkSettings": "Déplacez votre souris dans le coin inférieur droit et cliquez sur le bouton paramètres pour vérifier vos paramètres réseau.", "currentSession": "Session Actuelle:", - "digiflagNotLinked": "DigiFlag n'est actuellement pas lié à F1MV", + "digiflagNotLinked": "DigiFlag n'est actuellement pas lié à MultiViewer", + "digiflagVersion": "Version de DigiFlag:", "extraFlags": "Drapeaux supplémentaires", - "failedToConnect": "Impossible de se connecter à F1MV", + "failedToConnect": "Impossible de se connecter à MultiViewer", "failedToRetrieveCurrentSession": "Impossible de récupérer la session actuelle", "general": "Général", "infoTag": "Peut-être essayez-vous de vous connecter à un autre ordinateur ? Peut-être que votre port n'est pas celui par défaut ?", @@ -25,16 +26,16 @@ "openDigiflagGithub": "Ouvrir DigiFlag sur Github", "pixel": "Pixel", "restoreDefaultSettings": "Réinitialiser les paramètres réseau", - "retrievingCurrentSession": "Récupération de la session actuelle depuis F1MV...", - "retryingToConnectToF1mvIn": "Essai de connexion à F1MV dans :", + "retrievingCurrentSession": "Récupération de la session actuelle depuis MultiViewer...", + "retryingToConnectToF1mvIn": "Essai de connexion à MultiViewer dans :", "saveNetworkSettings": "Sauvegarder les paramètres réseau", "seconds": "secondes", "selectADevice": "Sélectionner un appareil", "selectADigiflagTheme": "Sélectionnez un thème DigiFlag", "selectAMapStyle": "Sélectionnez un style de carte", "startDigiflag": "Démarrer DigiFlag", - "successfullyConnectedToF1mvTimingWindow": "Connexion réussie à la fenêtre de chronométrage F1MV", - "unableToRetrieveCurrentSessionFromF1mv": "Impossible de récupérer la session en cours à partir de F1MV", + "successfullyConnectedToF1mvTimingWindow": "Connexion réussie à la fenêtre de chronométrage MultiViewer", + "unableToRetrieveCurrentSessionFromF1mv": "Impossible de récupérer la session en cours à partir de MultiViewer", "useF1TrackMapBackground": "Utiliser le fond de carte de la piste F1?", - "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Vous êtes connecté à F1MV, mais la fenêtre de télémétrie n'est pas ouverte" + "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Vous êtes connecté à MultiViewer, mais la fenêtre de télémétrie n'est pas ouverte" } diff --git a/src/renderer/public/localization/locales/nl/translation.json b/src/renderer/public/localization/locales/nl/translation.json index fd667bd..0ed2cef 100644 --- a/src/renderer/public/localization/locales/nl/translation.json +++ b/src/renderer/public/localization/locales/nl/translation.json @@ -1,15 +1,16 @@ { "alwaysOnTop": "Altijd bovenop?", - "attemptingToConnectToF1MV": "Poging on verbinding te maken met F1MV in:", + "attemptingToConnectToF1MV": "Poging on verbinding te maken met MultiViewer in:", "attemptingToConnectToLiveReplayTimingWindow": "Poging om verbinding te maken met het live of herhaal tijdvenster:", "attemptingToGetCurrentSessionInfoFromF1mv": "Poging tot het ophalen van de huidige sessie informatie...", "back": "Terug", "blueFlags": "Blauwe vlaggen", "checkNetworkSettings": "Verplaats je muis naar de rechteronderhoek en klik of het instellingen tandwiel.", "currentSession": "Huidige Sessie:", - "digiflagNotLinked": "DigiFlag is op het moment niet gekoppelt aan F1MV", + "digiflagNotLinked": "DigiFlag is op het moment niet gekoppelt aan MultiViewer", + "digiflagVersion": "DigiFlag Versie:", "extraFlags": "Extra vlaggen", - "failedToConnect": "Connectie naar F1MV mislukt", + "failedToConnect": "Connectie naar MultiViewer mislukt", "failedToRetrieveCurrentSession": "Ophalen van de huidige sessie mislukt", "general": "Algemeen", "infoTag": "Misschien probeer je verbinding te maken met een andere host? Misschien is je port niet de stardaard port?", @@ -25,16 +26,16 @@ "openDigiflagGithub": "Open DigiFlag Github", "pixel": "Pixel", "restoreDefaultSettings": "Herstel Standaard Netwerk Instellingen", - "retrievingCurrentSession": "Ophal van de huidige sessie in F1MV...", - "retryingToConnectToF1mvIn": "Opnieuw proberen verbinding te maken met F1MV in:", + "retrievingCurrentSession": "Ophal van de huidige sessie in MultiViewer...", + "retryingToConnectToF1mvIn": "Opnieuw proberen verbinding te maken met MultiViewer in:", "saveNetworkSettings": "Sla Netwerk Instellingen op", "seconds": "seconden", "selectADevice": "Selecteer een apparaat", "selectADigiflagTheme": "Selecteer een DigiFlag thema", "selectAMapStyle": "Selecteer een kaart stijl", "startDigiflag": "Start DigiFlag", - "successfullyConnectedToF1mvTimingWindow": "Succesvol verbonden met het F1MV tijdvenster", - "unableToRetrieveCurrentSessionFromF1mv": "Niet in staat om de huidige sessie van F1MV te krijgen", + "successfullyConnectedToF1mvTimingWindow": "Succesvol verbonden met het MultiViewer tijdvenster", + "unableToRetrieveCurrentSessionFromF1mv": "Niet in staat om de huidige sessie van MultiViewer te krijgen", "useF1TrackMapBackground": "Gebruik F1 baan kaart achtergrond?", - "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Je bent verbonden met F1MV, maar het Live of herhaal tijdvenster is niet geopened" + "youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen": "Je bent verbonden met MultiViewer, maar het Live of herhaal tijdvenster is niet geopened" } diff --git a/src/renderer/renderer.ts b/src/renderer/renderer.ts index 2f484af..56e130e 100644 --- a/src/renderer/renderer.ts +++ b/src/renderer/renderer.ts @@ -1,5 +1,8 @@ import {Theme, MapTheme, FilesConfig} from './types/filesConfig'; +import {F1LiveTimingState} from './types/multiViewerAPI'; /* Declaring a variable called host and assigning it the value of "127.0.0.1". */ + +const userAgent = globalThis.navigator.userAgent; const host = '127.0.0.1'; /* Creating a variable called port and assigning it the value of 10101. */ const port = 10101; @@ -16,7 +19,7 @@ let mapThemes: MapTheme[]; * number of milliseconds. * @param ms - The amount of time to wait before resolving the promise. */ -const timer = (ms: number) => new Promise((res) => setTimeout(res, ms)); +const timer = (ms: number) => new Promise((response) => setTimeout(response, ms)); /* Declaring a variable called debugOn and assigning it a value of false. */ let debugOn = true; let expressIP = ''; @@ -25,15 +28,15 @@ let currentZoom = 1; const maxZoom = 2; const minZoom = 0.5; let started = false; -let currentTrackStatus = null; -let currentRainStatus: string = null; +let currentTrackStatus = ''; +let currentRainStatus = ''; let yellow = false; let sc = false; let vsc = false; let red = false; let version = ''; -let themeSelectRef: JQuery; -let miscOptionsRef: JQuery; +let themeSelectReference: JQuery; +let miscOptionsReference: JQuery; let LT_Data = { RaceControlMessages: { Messages: [ @@ -64,8 +67,8 @@ let LT_Data = { }, }; export interface PixooData { - ReturnCode: number; - ReturnMessage: string; + ReturnCode?: number; + ReturnMessage?: string; DeviceList: PixooDeviceList[]; } @@ -87,7 +90,7 @@ let blueFlagSwitch = false; let trackMapSwitch = false; let mvLogoSwitch = false; let extraFlagSwitch = false; -let pixooIP: string; +let pixooIPs: string[]; let pixoostartup = false; let isGifPlaying = false; const instanceWindowWidth = 800; @@ -109,28 +112,30 @@ let oldMessages = { ], }; -/* The code below is an immediately invoked async function that loads a JSON file called -"filesConfiguration.json" using the fetch API. If the response is successful, it extracts the -"themes" and "mapThemes" properties from the JSON data and assigns them to global variables. If the -response is not successful, it throws an error with the HTTP status code. If there is an error -during the fetch or JSON parsing, it logs the error to the console. */ -(async function loadFileConfiguration() { - try { - const response = await fetch('./filesConfiguration.json'); - if (response.ok) { - const data: FilesConfig = await response.json(); - themes = data.themes; - mapThemes = data.mapThemes; - } else { - throw new Error(`Failed to load file configuration: ${response.status}`); - } - } catch (error) { - console.error(error); +try { + const response = await fetch('./filesConfiguration.json'); + if (response.ok) { + const data: FilesConfig = await response.json(); + themes = data.themes; + mapThemes = data.mapThemes; + } else { + throw new Error(`Failed to load file configuration: ${response.status}`); } -})(); +} catch (error) { + console.error(error); +} const logs: string[] = []; +const escapeHtml = (unsafe: string) => { + return unsafe + .replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '"') + .replaceAll("'", '''); +}; + /** * If the last item in the logs array is the same as the text passed in, then return. Otherwise, add * the text to the logs array. @@ -139,7 +144,7 @@ const logs: string[] = []; */ function log(text: string) { console.log(text); - if (logs[logs.length - 1] === text) return; + if (logs.at(-1) === text) return; logs.push(text); } @@ -147,18 +152,21 @@ function log(text: string) { * This function asynchronously retrieves the version of DigiFlag and returns it as a string. * @returns a Promise that resolves to a string, which is the version obtained from calling the `getVersion() function of the `window.api` object. */ -async function getDigiFlagVersion(): Promise { - version = await window.api.getVersion(); +async function getDigiFlagVersion() { + version = await globalThis.api.getVersion(); return version; } -getDigiFlagVersion(); - +if (/electron/i.test(userAgent)) { + await getDigiFlagVersion(); +} else { + version = '2.7.0'; +} /** * This function asynchronously retrieves the IP address of the Express server. * @returns A Promise that resolves to a string representing the IP address of the Express server. */ async function getExpressIP(): Promise { - expressIP = await window.api.getExpressIP(); + expressIP = await globalThis.api.getExpressIP(); console.log(`Express IP: ${expressIP}`); $('#expressIP').text(`Express Server IP: ${expressIP}`); return expressIP; @@ -166,7 +174,7 @@ async function getExpressIP(): Promise { let countDownRunning = false; /** - * If the F1MV Instance is found, start a countdown timer, and when the timer is finished, run the + * If the MultiViewer Instance is found, start a countdown timer, and when the timer is finished, run the * getCurrentSessionInfo() function and the linkF1MV() function. */ async function autoConnectF1MV() { @@ -183,7 +191,7 @@ async function autoConnectF1MV() { countDownRunning = true; if ($('#tagLink').hasClass('badge text-bg-danger')) { $('#tagLink').removeAttr('data-i18n'); - $('#tagLink').text('Retrying to Connect to F1MV in : ' + timeleft + ' seconds'); + $('#tagLink').text('Retrying to Connect to MultiViewer in : ' + timeleft + ' seconds'); } else if ($('#tagLink').hasClass('badge text-bg-warning')) { $('#tagLink').removeAttr('data-i18n'); $('#tagLink').attr( @@ -219,21 +227,34 @@ async function autoConnectF1MV() { } } /** - * It gets the current race name from the F1MV API and displays it on the page. + * It gets the current race name from the MultiViewer API and displays it on the page. */ async function getCurrentSessionInfo(): Promise { try { - const response = await window.api.LiveTimingAPIGraphQL(config, ['SessionInfo']); - const sessionName = await response.SessionInfo.Meeting.Name; - const sessionType = await response.SessionInfo.Name; - raceYear = parseInt(response.SessionInfo.StartDate); + const response: F1LiveTimingState = await globalThis.api.LiveTimingAPIGraphQL(config, ['SessionInfo']); + + // Check if response and response.SessionInfo exist + if (!response || !response.SessionInfo) { + throw new Error('SessionInfo is null or undefined'); + } + + const sessionName = response.SessionInfo.Meeting?.Name; + const sessionType = response.SessionInfo?.Name; + raceYear = Number.parseInt(response.SessionInfo.StartDate); + + // Ensure sessionName and sessionType are defined + if (!sessionName || !sessionType) { + throw new Error('Incomplete session information'); + } + raceName = `${raceYear + ' ' + sessionName}`; $('#raceName').text(raceName + ' ' + sessionType); if (debugOn) console.log(`Current Race Name: ${raceName}`); return raceName; } catch (error) { - if (debugOn) console.error('Unable to Get Data From F1MV GraphQL API:' + '\n' + error.message); - return 'Unable to Get Data From F1MV GraphQL API'; + if (debugOn) + console.error('Unable to Get Data From MultiViewer GraphQL API:' + '\n' + (error as Error).message); + return 'Unable to Get Data From MultiViewer GraphQL API'; } } @@ -242,19 +263,47 @@ async function getCurrentSessionInfo(): Promise { * @returns The IP address of the Pixoo device. */ -async function getPixooIP(): Promise { +async function getPixooIPs(): Promise { try { const response = await fetch('https://app.divoom-gz.com/Device/ReturnSameLANDevice'); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const pixooData: PixooData = await response.json(); - pixooIP = pixooData.DeviceList[0].DevicePrivateIP; - $('#pixooIP').text(`Pixoo IP: ${pixooIP}`); - window.api.getPixooIP(pixooIP); - return pixooIP; + + // Extract all device IPs + pixooIPs = pixooData.DeviceList.map((device) => device.DevicePrivateIP); + + // Send all IPs to the main process + globalThis.api.getPixooIP(pixooIPs); + + return pixooData.DeviceList; } catch (error) { - console.error(error); - return 'Failed to get IP Address of Pixoo Device!'; + console.error('Error fetching Pixoo devices:', error); + + // Clear the pixooIPs array in case of error + pixooIPs = []; + + // Return an empty array if there's an error + return []; + } +} + +function updatePixooDisplay(pixooDevices: PixooDeviceList[]) { + const pixooIPsContainer = document.querySelector('#pixooIPs'); + if (pixooIPsContainer) { + pixooIPsContainer.innerHTML = pixooDevices + .map((device, index) => `${device.DeviceName}: ${device.DevicePrivateIP}`) + .join('
'); } } + +async function fetchAndDisplayPixooDevices() { + const pixooDevices = await getPixooIPs(); + updatePixooDisplay(pixooDevices); +} /** * Initializes the Pixoo64 device by displaying a startup sequence of GIF images. * @@ -300,8 +349,8 @@ function getCurrentTrackPath(currentMapTheme: number): string { /* The above code is iterating through the `trackMaps` property of each season in the `mapTheme` object. It checks if the `raceName` exists as a key in the `trackMaps` object. If it does, it assigns the corresponding value to the `trackMapPath` variable and returns it. */ - for (let i = 0; i < mapTheme.seasons.length; i++) { - const trackMaps = mapTheme.seasons[i].trackMaps; + for (let index = 0; index < mapTheme.seasons.length; index++) { + const trackMaps = mapTheme.seasons[index].trackMaps; if (raceName in trackMaps) { trackMapPath = trackMaps[raceName]; @@ -330,11 +379,11 @@ function getDriverNumberPath(DriverNumber: string): string { let DriverNumberPath: string; if (driverNumbersArray) { - for (let i = 0; i < driverNumbersArray.length; i++) { - const DriverNumbers = driverNumbersArray[i].DriverNumbers; - const DriverSeason = driverNumbersArray[i].year; - - if (DriverSeason.match(raceYear.toString())) { + for (const element of driverNumbersArray) { + const DriverNumbers = element.DriverNumbers; + const DriverSeason = element.year; + const raceYearRegex = new RegExp(raceYear.toString()); + if (raceYearRegex.test(DriverSeason)) { DriverNumberPath = DriverNumbers[DriverNumber]; if (debugOn) console.log(`Driver Number Path: ${DriverNumberPath}`); return DriverNumberPath; @@ -400,8 +449,8 @@ function saveSettings(host: string, port: number): void { * @param windowTitle - The title of the window. * @returns The windowInstance variable is being returned. */ -function createNewInstance(url?: string | URL, windowTitle?: string): Window | null { - if (arguments.length == 0) { +function createNewInstance(url?: string | URL, windowTitle?: string) { + if (arguments.length === 0) { url = './index.html'; windowTitle = 'DigiFlag Instance'; } @@ -415,7 +464,7 @@ function createNewInstance(url?: string | URL, windowTitle?: string): Window | n return windowInstance; } catch (error) { console.error(error); - return null; + return; } } @@ -431,7 +480,7 @@ function loadSettings() { const portData = localStorage.getItem('port'); if (hostData && portData !== null) { config.host = hostData; - config.port = parseInt(portData); + config.port = Number.parseInt(portData); } } @@ -457,6 +506,39 @@ function restoreSettings() { if (debugOn) log('Reset Network Settings To Default'); autoConnectF1MV(); } +function ipInvalidToast() { + $('.toast').remove(); + $('#networkSettings > h5') + .after(` + `); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + $('.toast').toast('show'); +} +function portInvalidToast() { + $('.toast').remove(); + $('#networkSettings > h5') + .after(` + `); + + $('.toast').toast('show'); +} /** It clears the local storage and sets host and port back to default. */ @@ -498,8 +580,7 @@ function getGifPath(flag: string, driverNumber?: string) { const trackMapPath = getCurrentTrackPath(currentMapTheme); /* Checking if the flag is 'void' and if the useTrackMap is true and if the trackMapPath has a file extension. */ if (flag === 'void' && mvLogoSwitch === true) { - for (let themeIndex = 0; themeIndex < themes.length; themeIndex++) { - const theme = themes[themeIndex]; + for (const theme of themes) { if (theme.id === currentTheme) { flagPath = theme.gifs['mv']; } @@ -514,8 +595,7 @@ function getGifPath(flag: string, driverNumber?: string) { $('#digiflag').css('width', 'auto'); $('#digiflag').css('object-fit', 'contain'); } else { - for (let themeIndex = 0; themeIndex < themes.length; themeIndex++) { - const theme = themes[themeIndex]; + for (const theme of themes) { if (theme.id === currentTheme) { flagPath = theme.gifs[flag]; } @@ -554,7 +634,7 @@ function selectTheme(id: number) { function selectMapTheme(id: string) { if (trackMapSwitch == true) { if (debugOn) log('Map Theme selected : ' + mapThemes[id].name); - currentMapTheme = parseInt(id); + currentMapTheme = Number.parseInt(id); getCurrentTrackPath(currentMapTheme); $('#launchDigiFlag').prop('disabled', true); } @@ -618,11 +698,10 @@ async function turnOff(flag: string, driverNumber?: string) { url = `http://${expressIP}:9093/getGifPixoo/5/rain.gif`; } else { $('#digiflag').prop('src', getGifPath('void')); - if (mvLogoSwitch === true) { - url = `http://${expressIP}:9093/getGifPixoo/5/mv.gif`; - } else { - url = `http://${expressIP}:9093/getGifPixoo/5/void.gif`; - } + url = + mvLogoSwitch === true + ? `http://${expressIP}:9093/getGifPixoo/5/mv.gif` + : `http://${expressIP}:9093/getGifPixoo/5/void.gif`; } if (currentMode.valueOf() === 1) { @@ -630,31 +709,34 @@ async function turnOff(flag: string, driverNumber?: string) { console.log(`${flag} flag was turned off`); console.log(`URL sent to Pixoo64: ${url}`); } - try { - const response = await fetch(`http://${pixooIP}:80/post`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - Command: 'Device/PlayTFGif', - FileType: 2, - FileName: `${url}`, - }), - }); + for (const pixooIP of pixooIPs) { + try { + const response = await fetch(`http://${pixooIP}:80/post`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + Command: 'Device/PlayTFGif', + FileType: 2, + FileName: `${url}`, + }), + }); - if (response.ok) { - const result = await response.json(); - console.log(result); + if (response.ok) { + const result = await response.json(); + console.log(`Result for ${pixooIP}:`, result); + } + } catch (error) { + console.error(`Error for ${pixooIP}:`, error); } - } catch (err) { - console.error(err); - } - // Need to force a delay after an http post to the Pixoo64, else may crash the Pixoo64 - if (debugOn) { - console.log(`Pixoo64 API cool down 3000ms`); + + // Need to force a delay after an http post to the Pixoo64, else may crash the Pixoo64 + if (debugOn) { + console.log(`Pixoo64 API cool down 3000ms for ${pixooIP}`); + } + await new Promise((resolve) => setTimeout(resolve, 3000)); } - await timer(3000); } } /** @@ -686,31 +768,33 @@ async function changeGif(flag: string, mode: number, driverNumber?: string) { url = `http://${expressIP}:9093/getGifPixoo/5/${flag}.gif`; if (debugOn) console.log(`URL sent to Pixoo64: ${url}`); } - try { - const response = await fetch(`http://${pixooIP}:80/post`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify({ - Command: 'Device/PlayTFGif', - FileType: 2, - FileName: `${url}`, - }), - }); + for (const pixooIP of pixooIPs) { + try { + const response = await fetch(`http://${pixooIP}:80/post`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + Command: 'Device/PlayTFGif', + FileType: 2, + FileName: `${url}`, + }), + }); - if (response.ok) { - const result = await response.json(); - console.log(result); + if (response.ok) { + const result = await response.json(); + console.log(result); + } + } catch (error) { + console.error(error); } - } catch (err) { - console.error(err); - } - // Need to force a delay after an http post to the Pixoo64, else may crash the Pixoo64 - if (debugOn) { - console.log(`Pixoo64 API cool down 3000ms`); + // Need to force a delay after an http post to the Pixoo64, else may crash the Pixoo64 + if (debugOn) { + console.log(`Pixoo64 API cool down 3000ms`); + } + await timer(3000); } - await timer(3000); } $('#digiflag').prop('src', flagPath); if (flag !== 'rain') { @@ -738,6 +822,7 @@ function linkSuccess() { $('#raceName').removeAttr('data-i18n'); $('#tagSession').show(); + $('#openMultiViewer').remove(); $('#linkF1MV').remove(); $('#infoTag').remove(); $('#checkNetworkSettings').remove(); @@ -768,7 +853,7 @@ function linkSuccess() {
Express IP: ${expressIP} - Pixoo IP: ${pixooIP} +
`); @@ -793,11 +878,11 @@ function linkSuccess() {
`); - miscOptionsRef = $('#selectDevice,#selectMisc').detach(); + miscOptionsReference = $('#selectDevice,#selectMisc').detach(); $(document).localize(); let theme: {id: number; name: string}; - for (let themeIndex = 0; themeIndex < themes.length; themeIndex++) { - theme = themes[themeIndex]; + for (const theme_ of themes) { + theme = theme_; $('#themes').append(`
@@ -807,12 +892,12 @@ function linkSuccess() {
`); } - $('.theme').on('change', (e) => { - selectTheme(parseInt(e.target.id)); + $('.theme').on('change', (event_) => { + selectTheme(Number.parseInt(event_.target.id)); }); $('#nextTheme').on('click', () => { - miscOptionsRef.appendTo('#menuContent'); - themeSelectRef = $('#selectTheme').detach(); + miscOptionsReference.appendTo('#menuContent'); + themeSelectReference = $('#selectTheme').detach(); if (themes[currentTheme].compatibleWith.Pixoo64) { $('#menuContent') @@ -849,18 +934,20 @@ function linkSuccess() { $('#blueFlagSwitch').prop('disabled', false); $('#extraFlagSwitch').prop('disabled', false); } - $('#selectDevice').on('change', async (e) => { - if (e.target.id === 'pixoo64Radio') { + $('#selectDevice').on('change', async (event_) => { + if (event_.target.id === 'pixoo64Radio') { if (debugOn) console.log('Pixoo64 was Selected'); currentMode = 1; await getExpressIP(); - await getPixooIP(); - $('#launchPixoo').removeClass(); - $('#launchPixoo').addClass('btn btn-success'); - $('#launchPixoo').prop('disabled', false); - $('#mvSwitch').prop('disabled', false); - $('#blueFlagSwitch').prop('disabled', false); - $('#extraFlagSwitch').prop('disabled', false); + await fetchAndDisplayPixooDevices(); + if (pixooIPs.length > 0) { + $('#launchPixoo').removeClass(); + $('#launchPixoo').addClass('btn btn-success'); + $('#launchPixoo').prop('disabled', false); + $('#mvSwitch').prop('disabled', false); + $('#blueFlagSwitch').prop('disabled', false); + $('#extraFlagSwitch').prop('disabled', false); + } if (debugOn) console.log('Current Mode: ' + currentMode); } else { if (debugOn) console.log('Window was Selected'); @@ -929,8 +1016,7 @@ it. */ $('#trackMapStyleSelect').append( `` ); - for (let mapIndex = 0; mapIndex < mapThemes.length; mapIndex++) { - const mapTheme = mapThemes[mapIndex]; + for (const mapTheme of mapThemes) { $('#trackMapStyleSelect').append( ` ` ); @@ -941,16 +1027,19 @@ it. */ /* Changing the map style when the user selects a different style from the dropdown menu. */ $('#trackMapStyleSelect').on('change', () => { const mapID = $('#trackMapStyleSelect').val(); - selectMapTheme(mapID.toString()); - $('#launchDigiFlag').prop('disabled', false); + + if (mapID !== undefined && mapID !== null) { + selectMapTheme(mapID.toString()); + $('#launchDigiFlag').prop('disabled', false); + } }); return trackMapSwitch; } }); $('#backButton').on('click', () => { - themeSelectRef.appendTo('#menuContent'); + themeSelectReference.appendTo('#menuContent'); $(document).localize(); - miscOptionsRef.remove(); + miscOptionsReference.remove(); pixoostartup = false; $('#menuButtonsContainer').remove(); }); @@ -1002,17 +1091,19 @@ it. */ }); } /** - * It's a function that checks if the F1MV is running and if it is, it will change the text of a tag to - * "F1MV is running". + * It's a function that checks if the MultiViewer is running and if it is, it will change the text of a tag to + * "MultiViewer is running". * @param force - boolean * @returns The response is a JSON object. */ async function linkF1MV(force?: boolean) { if (debugOn) log('Link started...'); try { - const response = await window.api.LiveTimingAPIGraphQL(config, 'Heartbeat'); + const response = await globalThis.api.LiveTimingAPIGraphQL(config, 'Heartbeat'); - if (!response) { + if (response) { + linkSuccess(); + } else { if (force) { linkSuccess(); return; @@ -1027,17 +1118,14 @@ async function linkF1MV(force?: boolean) { $('#tagSession').addClass('badge text-bg-warning'); $('#networkSettings').hide(); $('#tagLink').attr('data-i18n', 'youAreConnectedToF1mvButTheLiveReplayTimingWindowIsNotOpen'); - $('#checkNetworkSettings,#infoTag').hide(); $('#raceName').attr('data-i18n', 'unableToRetrieveCurrentSessionFromF1mv'); $('#checkNetworkSettings,#infoTag').hide(); $(document).localize(); setTimeout(() => { autoConnectF1MV(); }, 1000); - } else { - linkSuccess(); } - } catch (e) { + } catch { if (force) { linkSuccess(); return; @@ -1047,7 +1135,7 @@ async function linkF1MV(force?: boolean) { $('#tagSession').addClass('badge text-bg-danger'); $('#currentSession').addClass('text-bg-danger'); $('#raceName').addClass('text-bg-danger'); - /* Changing the text of the tag with the id tagLink to Failed to connect to F1MV */ + /* Changing the text of the tag with the id tagLink to Failed to connect to MultiViewer */ $('#tagLink').removeAttr('data-i18n'); $('#raceName').removeAttr('data-i18n'); $('#raceName').attr('data-i18n', 'failedToRetrieveCurrentSession'); @@ -1073,13 +1161,13 @@ $(function () { if (countDownRunning === false) { autoConnectF1MV(); } - $('#version').text(`DigiFlag Version: ${version}`); + $('#appVersion').text(`v${version}`); $('#raceName').text(raceName); $('.bottom-screen:not(:hover)').css('opacity', 1); $('#linkF1MV').remove(); /* The code below is appending a SVG globe icon, a h5 tag with the text "Network", a - label with the text "Multiviewer API IP: ", an input tag with the class "form-control" and the value of the variable host and the id "ip", a label with the text "Multiviewer API Port: ", an input tag with the class "form-control" and the value + label with the text "MultiViewer API IP: ", an input tag with the class "form-control" and the value of the variable host and the id "ip", a label with the text "MultiViewer API Port: ", an input tag with the class "form-control" and the value of the variable port and the id "port", a div tag with the class "networkbuttons-container" and two button tags with the class networkbuttons-container */ $('#settingsButton').one('click', () => { @@ -1088,15 +1176,27 @@ $(function () { `); + // Append Network Settings title $('#networkSettings').append('
Network
'); + + const ipv4Pattern = new RegExp( + `^(25[0-5]|2[0-4]\\d|[01]?\\d{1,2})\\.(25[0-5]|2[0-4]\\d|[01]?\\d{1,2})\\.(25[0-5]|2[0-4]\\d|[01]?\\d{1,2})\\.(25[0-5]|2[0-4]\\d|[01]?\\d{1,2})$`, + 'gm' + ); + + const sanitizedHost = escapeHtml(config.host); + const sanitizedPort = escapeHtml(config.port.toString()); + + // Append IP input with validation $('#networkSettings').append( - ` - ` + ` + ` ); + // Append Port input with validation $('#networkSettings').append( - ` - ` + ` + ` ); $('#networkSettings').append( $('
', { @@ -1109,21 +1209,57 @@ $(function () { $('#networkSettings').localize(); $('#updateSettings').on('click', () => { if (debugOn) log('Editing Settings...'); - /* Assigning the value of the input field with the id of "ip" to the variable "host". */ - const host = $('#ip').val().toString(); - config.host = host; - if (debugOn) log($('#ip').text()); - if (debugOn) log(`IP = ${$('#ip').val()} = ${config.host}`); - /* Assigning the value of the input field with the id of port to the variable port. */ - const port = $('#port').val().toString(); + const hostInput = $('#ip').val(); + const portInput = $('#port').val(); + const ipv4Regex = ipv4Pattern; + + // Clear any previous toasts + $('.toast').remove(); + + // Check if the inputs are not undefined or null + if (hostInput && portInput) { + if (!ipv4Regex.test(hostInput.toString())) { + ipInvalidToast(); + return; + } + + const host = hostInput.toString(); + config.host = host; - config.port = parseInt(port); + if (debugOn) log($('#ip').text()); + if (debugOn) log(`IP = ${host} = ${config.host}`); - if (debugOn) log($('#port').text()); - if (debugOn) log(`PORT = ${$('#port').val()} = ${config.port}`); - saveSettings(config.host, config.port); + const portNumber = Number.parseInt(portInput.toString(), 10); + if (Number.isNaN(portNumber) || portNumber < 1 || portNumber > 65535) { + portInvalidToast(); + return; // Stop submission + } + + const port = portInput.toString(); + config.port = Number.parseInt(port); + + if (debugOn) log($('#port').text()); + if (debugOn) log(`PORT = ${port} = ${config.port}`); + + saveSettings(config.host, config.port); + } else { + // Show a toast if IP or Port input is missing + $('#networkSettings > h5') + .after(` + `); + $('.toast').toast('show'); + } }); + $('#restoreSettings').on('click', () => { /* Setting the value of the input fields back to 127.0.0.1 and 10101. */ $('#ip').val('127.0.0.1'); @@ -1187,231 +1323,221 @@ const checkRCM = async () => { message.Category === 'Flag' || message.Category === 'Other' || message.Category === 'SafetyCar' || - message.SubCategory === 'Drs' + message.Category === 'Drs' ); /* Taking the last element of the array and returning it. */ - const recentMessage = filteredMessages.slice(-1)[0]; + const recentMessage = filteredMessages.at(-1); if (debugOn) console.log('Most Recent Filtered Message: '); if (debugOn) console.table(recentMessage); if (debugOn) console.log('Most Recent RCM Message: '); - if (debugOn) console.table(result.Messages.slice(-1)[0]); - - /* Checking if the message contains the word "BLACK AND ORANGE" and if it does, it sets the category to "Flag" and the flag to "BLACK AND ORANGE". */ - if (recentMessage.Message.match(/BLACK AND ORANGE/i)) { - const carNumberMatch = recentMessage.Message.match(/CAR (\d+)/i); - if (carNumberMatch) { - const carNumber = carNumberMatch[1]; - changeGif('mec', currentMode); - await timer(3500); - if (carNumber in themes[currentTheme].gifs) { - changeGif(carNumber, currentMode); + if (debugOn) console.table(result.Messages.at(-1)); + + if (recentMessage) { + /* Checking if the message contains the word "BLACK AND ORANGE" and if it does, it sets the category to "Flag" and the flag to "BLACK AND ORANGE". */ + if (/black and orange/i.test(recentMessage.Message)) { + const carNumberMatch = recentMessage.Message.match(/car (\d+)/i); + if (carNumberMatch) { + const carNumber = carNumberMatch[1]; + changeGif('mec', currentMode); await timer(3500); - turnOff(carNumber); - } else { - if (debugOn) console.log(`No racing number GIF found for ${carNumber}`); + if (carNumber in themes[currentTheme].gifs) { + changeGif(carNumber, currentMode); + await timer(3500); + turnOff(carNumber); + } else { + if (debugOn) console.log(`No racing number GIF found for ${carNumber}`); + } } - return; } - } - /* Checking if the message contains the word "BLACK AND WHITE" and if it does, it will change the gif + /* Checking if the message contains the word "BLACK AND WHITE" and if it does, it will change the gif to black and white, wait 2.5 seconds, then change the gif to the racing number, wait 2.5 seconds, then turn off the racing number gif, then turn off the black and white gif. */ - if (recentMessage.Message.match(/BLACK AND WHITE/i)) { - isGifPlaying = true; - changeGif('blackandwhite', currentMode); - await timer(3500); - const recentRacingNumber = recentMessage.RacingNumber; - if (recentRacingNumber) { - changeGif(recentRacingNumber, currentMode, recentRacingNumber); + if (/black and white/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('blackandwhite', currentMode); await timer(3500); - turnOff(recentRacingNumber, recentRacingNumber); - isGifPlaying = false; - } else { - if (debugOn) console.log(`No racing number GIF found for ${recentRacingNumber}`); - turnOff('blackandwhite'); - isGifPlaying = false; + const recentRacingNumber = recentMessage.RacingNumber; + if (recentRacingNumber) { + changeGif(recentRacingNumber, currentMode, recentRacingNumber); + await timer(3500); + turnOff(recentRacingNumber, recentRacingNumber); + isGifPlaying = false; + } else { + if (debugOn) console.log(`No racing number GIF found for ${recentRacingNumber}`); + turnOff('blackandwhite'); + isGifPlaying = false; + } } - return; - } - /* Checking the recentMessage.SubCategory to see if it is a TimePenalty. If it is, it is checking the + /* Checking the recentMessage.SubCategory to see if it is a TimePenalty. If it is, it is checking the recentMessage.Message to see if it contains the text "CAR #" where # is a number. If it does, it is checking the recentMessage.Message to see if it contains the text "5 SECOND TIME PENALTY" or "10 SECOND TIME PENALTY". If it does, it is changing the gif to the appropriate gif and then turning it off after a certain amount of time. */ - if (recentMessage.SubCategory === 'TimePenalty' && extraFlagSwitch) { - /* Using a regular expression to match the message to a pattern. */ - const carNumberMatch = recentMessage.Message.match(/CAR (\d+)/i); - if (carNumberMatch) { - /* Using a regular expression to extract the car number from the string. */ - const carNumber = carNumberMatch[1]; - if (debugOn) console.log(`Car Number: ${carNumber}`); - if (recentMessage.Message.match(/5 SECOND TIME PENALTY/i)) { - isGifPlaying = true; - changeGif('timepenalty5sec', currentMode); - await timer(3500); - changeGif(carNumber, currentMode, carNumber); - await timer(3500); - turnOff(carNumber, carNumber); - isGifPlaying = false; - } - if (recentMessage.Message.match(/10 SECOND TIME PENALTY/i)) { - isGifPlaying = true; - changeGif('timepenalty10sec', currentMode); - await timer(3500); - changeGif(carNumber, currentMode, carNumber); - await timer(3500); - turnOff(carNumber, carNumber); - isGifPlaying = false; + if (recentMessage.SubCategory === 'TimePenalty' && extraFlagSwitch) { + /* Using a regular expression to match the message to a pattern. */ + const carNumberMatch = recentMessage.Message.match(/car (\d+)/i); + if (carNumberMatch) { + /* Using a regular expression to extract the car number from the string. */ + const carNumber = carNumberMatch[1]; + if (debugOn) console.log(`Car Number: ${carNumber}`); + if (/5 second time penalty/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('timepenalty5sec', currentMode); + await timer(3500); + changeGif(carNumber, currentMode, carNumber); + await timer(3500); + turnOff(carNumber, carNumber); + isGifPlaying = false; + } + if (/10 second time penalty/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('timepenalty10sec', currentMode); + await timer(3500); + changeGif(carNumber, currentMode, carNumber); + await timer(3500); + turnOff(carNumber, carNumber); + isGifPlaying = false; + } } } - } - if (recentMessage.SubCategory === 'StopGoPenalty' && extraFlagSwitch) { - /* Using a regular expression to match the message to a pattern. */ - const carNumberMatch = recentMessage.Message.match(/CAR (\d+)/i); - if (carNumberMatch) { - /* Using a regular expression to extract the car number from the string. */ - const carNumber = carNumberMatch[1]; - if (debugOn) console.log(`Car Number: ${carNumber}`); - if (recentMessage.Message.match(/10 SECOND STOP\/GO PENALTY/i)) { - isGifPlaying = true; - changeGif('stopgopenalty10sec', currentMode); - await timer(3500); - changeGif(carNumber, currentMode, carNumber); - await timer(3500); - turnOff(carNumber, carNumber); - isGifPlaying = false; + if (recentMessage.SubCategory === 'StopGoPenalty' && extraFlagSwitch) { + /* Using a regular expression to match the message to a pattern. */ + const carNumberMatch = recentMessage.Message.match(/car (\d+)/i); + if (carNumberMatch) { + /* Using a regular expression to extract the car number from the string. */ + const carNumber = carNumberMatch[1]; + if (debugOn) console.log(`Car Number: ${carNumber}`); + if (/10 second stop\/go penalty/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('stopgopenalty10sec', currentMode); + await timer(3500); + changeGif(carNumber, currentMode, carNumber); + await timer(3500); + turnOff(carNumber, carNumber); + isGifPlaying = false; + } } } - } - /* Checking if the message contains the word "ROLLING START" and if it does, it will change the gif to "rs" and then turn it off after 20 seconds. */ - if ( - recentMessage.Message.match(/ROLLING START/i) && - //Fixes an issue When the Rolling Start Flag Would Display when a ROLLING START PROCEDURE INFRINGEMENT Occurs - recentMessage.SubCategory !== 'IncidentInvestigationAfterSession' && - recentMessage.SubCategory !== 'SessionResume' - ) { - isGifPlaying = true; - changeGif('rs', currentMode); - await timer(20000); - turnOff('rs'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/STANDING START PROCEDURE/i) && recentMessage.SubCategory !== 'SessionResume') { - isGifPlaying = true; - changeGif('ss', currentMode); - await timer(20000); - turnOff('ss'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/DRS ENABLED/i) && extraFlagSwitch) { - isGifPlaying = true; - changeGif('DRSenabled', currentMode); - await timer(3500); - turnOff('DRSenabled'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/DRS DISABLED/i) && extraFlagSwitch) { - isGifPlaying = true; - changeGif('DRSdisabled', currentMode); - await timer(3500); - turnOff('DRSdisabled'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/PIT LANE ENTRY CLOSED/i)) { - isGifPlaying = true; - changeGif('pitclosed', currentMode); - await timer(3500); - turnOff('pitclosed'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/PIT EXIT OPEN/i)) { - isGifPlaying = true; - changeGif('green', currentMode); - await timer(3500); - turnOff('green'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/PIT ENTRY CLOSED/i)) { - isGifPlaying = true; - changeGif('pitclosed', currentMode); - await timer(3500); - turnOff('pitclosed'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/RECOVERY VEHICLE ON TRACK/i) && extraFlagSwitch) { - isGifPlaying = true; - changeGif('recoveryvehicle', currentMode); - await timer(5000); - turnOff('recoveryvehicle'); - isGifPlaying = false; - return; - } - if (recentMessage.Message.match(/MEDICAL CAR DEPLOYED/i) && extraFlagSwitch) { - isGifPlaying = true; - changeGif('medicalcar', currentMode); - await timer(5000); - turnOff('medicalcar'); - isGifPlaying = false; - return; - } + /* Checking if the message contains the word "ROLLING START" and if it does, it will change the gif to "rs" and then turn it off after 20 seconds. */ + if ( + /rolling start/i.test(recentMessage.Message) && + //Fixes an issue When the Rolling Start Flag Would Display when a ROLLING START PROCEDURE INFRINGEMENT Occurs + recentMessage.SubCategory !== 'IncidentInvestigationAfterSession' && + recentMessage.SubCategory !== 'SessionResume' + ) { + isGifPlaying = true; + changeGif('rs', currentMode); + await timer(20000); + turnOff('rs'); + isGifPlaying = false; + } + if ( + /standing start procedure/i.test(recentMessage.Message) && + recentMessage.SubCategory !== 'SessionResume' + ) { + isGifPlaying = true; + changeGif('ss', currentMode); + await timer(20000); + turnOff('ss'); + isGifPlaying = false; + } + if (/drs enabled/i.test(recentMessage.Message) && extraFlagSwitch) { + isGifPlaying = true; + changeGif('DRSenabled', currentMode); + await timer(3500); + turnOff('DRSenabled'); + isGifPlaying = false; + } + if (/drs disabled/i.test(recentMessage.Message) && extraFlagSwitch) { + isGifPlaying = true; + changeGif('DRSdisabled', currentMode); + await timer(3500); + turnOff('DRSdisabled'); + isGifPlaying = false; + } + if (/pit lane entry closed/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('pitclosed', currentMode); + await timer(3500); + turnOff('pitclosed'); + isGifPlaying = false; + } + if (/pit exit open/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('green', currentMode); + await timer(3500); + turnOff('green'); + isGifPlaying = false; + } + if (/pit entry closed/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('pitclosed', currentMode); + await timer(3500); + turnOff('pitclosed'); + isGifPlaying = false; + } + if (/recovery vehicle on track/i.test(recentMessage.Message) && extraFlagSwitch) { + isGifPlaying = true; + changeGif('recoveryvehicle', currentMode); + await timer(5000); + turnOff('recoveryvehicle'); + isGifPlaying = false; + } + if (/medical car deployed/i.test(recentMessage.Message) && extraFlagSwitch) { + isGifPlaying = true; + changeGif('medicalcar', currentMode); + await timer(5000); + turnOff('medicalcar'); + isGifPlaying = false; + } - if (recentMessage.SubCategory === 'TrackSurfaceSlippery') { - isGifPlaying = true; - changeGif('slippery', currentMode); - await timer(5000); - turnOff('slippery'); - isGifPlaying = false; - return; - } + if (recentMessage.SubCategory === 'TrackSurfaceSlippery') { + isGifPlaying = true; + changeGif('slippery', currentMode); + await timer(5000); + turnOff('slippery'); + isGifPlaying = false; + } - if ( - recentMessage.Message.match(/DOUBLE YELLOW/i) && - !recentMessage.Message.match(/LAP DELETED/i) && - sc !== true && - vsc !== true - ) { - isGifPlaying = true; - changeGif('dyellow', currentMode); - await timer(10000); - turnOff('dyellow'); - isGifPlaying = false; - return; - } + if ( + /double yellow/i.test(recentMessage.Message) && + !/lap deleted/i.test(recentMessage.Message) && + sc !== true && + vsc !== true + ) { + isGifPlaying = true; + changeGif('dyellow', currentMode); + await timer(10000); + turnOff('dyellow'); + isGifPlaying = false; + } - if (recentMessage.Message.match(/BLUE FLAG/i) && recentMessage.Flag !== 'CHEQUERED' && blueFlagSwitch) { - isGifPlaying = true; - changeGif('blue', currentMode); - await timer(3500); - /* Using a regular expression to match the message to a pattern. */ - const recentRacingNumber = recentMessage.RacingNumber; - if (recentRacingNumber) { - changeGif(recentRacingNumber, currentMode, recentRacingNumber); + if (/blue flag/i.test(recentMessage.Message) && recentMessage.Flag !== 'CHEQUERED' && blueFlagSwitch) { + isGifPlaying = true; + changeGif('blue', currentMode); await timer(3500); - turnOff(recentRacingNumber, recentRacingNumber); - isGifPlaying = false; - } else { - if (debugOn) console.log(`No racing number GIF found for ${recentRacingNumber}`); - turnOff('blue'); - isGifPlaying = false; + /* Using a regular expression to match the message to a pattern. */ + const recentRacingNumber = recentMessage.RacingNumber; + if (recentRacingNumber) { + changeGif(recentRacingNumber, currentMode, recentRacingNumber); + await timer(3500); + turnOff(recentRacingNumber, recentRacingNumber); + isGifPlaying = false; + } else { + if (debugOn) console.log(`No racing number GIF found for ${recentRacingNumber}`); + turnOff('blue'); + isGifPlaying = false; + } } - return; - } - if (recentMessage.Message.match(/CHEQUERED FLAG/i)) { - isGifPlaying = true; - changeGif('chequered', currentMode); - await timer(90000); - turnOff('chequered'); - isGifPlaying = false; - return; + if (/chequered flag/i.test(recentMessage.Message)) { + isGifPlaying = true; + changeGif('chequered', currentMode); + await timer(90000); + turnOff('chequered'); + isGifPlaying = false; + } } } }; @@ -1429,11 +1555,11 @@ async function checkTrackStatus() { // {"Status":"5","Message":"Red"} // {"Status":"6","Message":"VSCDeployed"} // {"Status":"7","Message":"VSCEnding"} - const recentTrackStatus = trackStatus.slice(-1)[0]; - if (recentTrackStatus !== currentTrackStatus) { + const recentTrackStatus = trackStatus.at(-1); + if (recentTrackStatus !== undefined && recentTrackStatus !== currentTrackStatus) { // check if the status has changed switch (recentTrackStatus) { - case '1': + case '1': { if (sc || vsc || red || yellow) { if (debugOn) console.log(`New track status : 🟩 %cGreen`, 'color:#05e376'); sc = false; @@ -1447,7 +1573,9 @@ async function checkTrackStatus() { isGifPlaying = false; } break; - case '2': // Yellow + } + case '2': { + // Yellow if (debugOn) console.log(`New track status : 🟨 %cYellow`, 'color:#e8f00a'); sc = false; yellow = true; @@ -1456,7 +1584,9 @@ async function checkTrackStatus() { isGifPlaying = true; changeGif('yellow', currentMode); break; - case '4': // SCDeployed + } + case '4': { + // SCDeployed sc = true; yellow = false; vsc = false; @@ -1464,7 +1594,9 @@ async function checkTrackStatus() { isGifPlaying = true; changeGif('sc', currentMode); break; - case '5': // Red + } + case '5': { + // Red if (debugOn) console.log(`New track status : 🟥 %cRed`, 'color:#f0250a'); sc = false; yellow = false; @@ -1473,7 +1605,9 @@ async function checkTrackStatus() { isGifPlaying = true; changeGif('red', currentMode); break; - case '6': // VSCDeployed + } + case '6': { + // VSCDeployed sc = false; yellow = false; vsc = true; @@ -1481,7 +1615,9 @@ async function checkTrackStatus() { isGifPlaying = true; changeGif('vsc', currentMode); break; - case '7': // VSCEnding + } + case '7': { + // VSCEnding sc = false; yellow = false; vsc = true; @@ -1489,8 +1625,10 @@ async function checkTrackStatus() { isGifPlaying = true; changeGif('vsc', currentMode); break; - default: + } + default: { break; + } } currentTrackStatus = recentTrackStatus; // update the current status if (debugOn) console.log(`Current Track Status: ${currentTrackStatus}`); @@ -1510,24 +1648,24 @@ async function checkRain() { const Rain = LT_Data.WeatherData.Rainfall; if (Rain !== currentRainStatus && !isGifPlaying) { switch (Rain) { - case '0': // Not raining - if (lightOnRain) { - if (pixoostartup === false) { - if (debugOn) console.log(`%cIt Stopped Raining!`, 'color:orange'); - changeGif('void', currentMode); - lightOnRain = false; - } + case '0': { + // Not raining + if (lightOnRain && pixoostartup === false) { + if (debugOn) console.log(`%cIt Stopped Raining!`, 'color:orange'); + changeGif('void', currentMode); + lightOnRain = false; } break; - case '1': // Raining - if (!lightOnRain) { - if (pixoostartup === false) { - if (debugOn) console.log(`%cIt's Raining!`, 'color:aqua'); - changeGif('rain', currentMode); - lightOnRain = true; - } + } + case '1': { + // Raining + if (!lightOnRain && pixoostartup === false) { + if (debugOn) console.log(`%cIt's Raining!`, 'color:aqua'); + changeGif('rain', currentMode); + lightOnRain = true; } break; + } } currentRainStatus = Rain; if (debugOn) console.log(`%cCurrent Rain Status: ${currentRainStatus}`, 'color:aqua'); @@ -1541,19 +1679,17 @@ async function checkRain() { */ async function updateData() { try { - if (started) { - if (pixoostartup === false) { - LT_Data = await window.api.LiveTimingAPIGraphQL(config, [ - 'RaceControlMessages', - 'TrackStatus', - 'CarData', - 'TimingData', - 'WeatherData', - ]); - checkTrackStatus(); - checkRCM(); - checkRain(); - } + if (started && pixoostartup === false) { + LT_Data = await globalThis.api.LiveTimingAPIGraphQL(config, [ + 'RaceControlMessages', + 'TrackStatus', + 'CarData', + 'TimingData', + 'WeatherData', + ]); + checkTrackStatus(); + checkRCM(); + checkRain(); } } catch (error) { console.error(error); @@ -1562,7 +1698,7 @@ async function updateData() { } /* Update the Live Timing data initially */ -updateData(); +await updateData(); /** * If the background is transparent, make it opaque. If the background is opaque, make it transparent. */ @@ -1590,18 +1726,23 @@ updateData(); * window.api.getAlwaysOnTop() function. * @returns A promise. */ + async function getAlwaysOnTopSetting() { - return await window.api.getAlwaysOnTop(); + return await globalThis.api.getAlwaysOnTop(); } - -/* Getting the value of the alwaysOnTop setting from the storage and setting the checkbox to the +if (/electron/i.test(userAgent)) { + /* Getting the value of the alwaysOnTop setting from the storage and setting the checkbox to the value. */ -jQuery(async () => { - const alwaysOnTop = await getAlwaysOnTopSetting(); - $('#alwaysOnTopSwitch').prop('checked', alwaysOnTop); -}); + $(async () => { + const alwaysOnTop = await getAlwaysOnTopSetting(); + $('#alwaysOnTopSwitch').prop('checked', alwaysOnTop); + }); -/* When the alwaysOnTop switch is changed it window to always on top. */ -$('#alwaysOnTopSwitch').on('change', async () => { - await window.api.setAlwaysOnTop(); -}); + /* When the alwaysOnTop switch is changed it window to always on top. */ + $('#alwaysOnTopSwitch').on('change', async () => { + await globalThis.api.setAlwaysOnTop(); + }); +} else { + $('#alwaysOnTop').remove(); + $('#networkSettings').remove(); +} diff --git a/src/renderer/styles/index.css b/src/renderer/styles/index.css index b6df677..8cbd7bc 100644 --- a/src/renderer/styles/index.css +++ b/src/renderer/styles/index.css @@ -79,23 +79,9 @@ svg { -webkit-app-region: drag; } -#version { - display: flex; - flex-direction: column; - align-self: center; - justify-content: center; - margin-bottom: 10px !important; - text-transform: capitalize; - border-radius: 128px !important; -} -#mvVersion { - display: flex; - flex-direction: column; - align-self: center; - justify-content: center; - margin-bottom: 10px !important; - text-transform: capitalize; - border-radius: 128px !important; +#versionContainer { + margin-bottom: 10px; + border-radius: 128px; } button { @@ -238,26 +224,32 @@ button:focus-within { border: 2px solid #495057; } -input:invalid { +#networkSettings > input:invalid { border: 2px solid red; + box-shadow: 0 0 0 0.1rem red; +} + +#networkSettings > input:valid { + border: 2px solid limegreen; + box-shadow: 0 0 0 0.1rem limegreen; +} + +#networkSettings > input:focus:invalid { + border: none; } #networkSettings > input:focus { border-color: #3ea6ff; box-shadow: 0 0 0 0.1rem #3ea6ff; transition: all 0.6s ease-in-out; + background: yellow; + color: red; } #networkSettings > input:focus-visible { outline: none; transition: all 0.6s ease-in-out; } -#networkSettings > input:hover:not(:focus) { - border-color: #eee !important; - box-shadow: 0 0 0 1px #eee; - transition: all 0.3s ease-in-out; -} - #selectTheme { display: flex; flex-direction: column; diff --git a/src/renderer/types/multiViewerAPI.d.ts b/src/renderer/types/multiViewerAPI.d.ts new file mode 100644 index 0000000..b80de36 --- /dev/null +++ b/src/renderer/types/multiViewerAPI.d.ts @@ -0,0 +1,236 @@ +export interface LiveTimingData { + data: F1Data; +} + +export interface F1Data { + f1LiveTimingState: F1LiveTimingState; + f1LiveTimingClock: F1LiveTimingClock; +} + +export interface F1LiveTimingState { + RaceControlMessages: RaceControlMessages; + TrackStatus: TrackStatus; + WeatherData: WeatherData; + SessionInfo: SessionInfo; + SessionData: SessionData; + LapCount: LapCount; + DriverList: {[key: string]: DriverList}; + TimingData: TimingData; + TimingAppData: TimingData; + ExtrapolatedClock: ExtrapolatedClock; +} + +export interface F1LiveTimingClock { + paused: boolean; + systemTime: number; + trackTime: number; +} + +export interface RaceControlMessages { + Messages: Message[]; +} + +export interface Message { + Utc: string; + Lap: number; + Category: Category; + Message: string; + SubCategory?: string; + Flag?: string; + Scope?: string; + Sector?: number; + RacingNumber?: string; +} + +export type Category = 'Other' | 'Flag' | 'CarEvent'; + +export interface SessionInfo { + Meeting: Meeting; + ArchiveStatus: ArchiveStatus; + Key: number; + Type: string; + Number: number; + Name: string; + StartDate: string; + EndDate: string; + GmtOffset: string; + Path: string; +} + +export interface SessionData { + Series: Series[]; + StatusSeries: StatusSery[]; +} + +export interface Series { + QualifyingPart: number; + Utc: Date; +} + +export interface StatusSery { + SessionStatus?: string; + TrackStatus?: string; + Utc: Date; +} + +export interface ArchiveStatus { + Status: string; +} + +export interface Meeting { + Key: number; + Name: string; + OfficialName: string; + Location: string; + Country: Country; + Circuit: Circuit; +} + +export interface Circuit { + Key: number; + ShortName: string; +} + +export interface Country { + Key: number; + Code: string; + Name: string; +} + +export interface TrackStatus { + Status: string; + Message: string; +} + +export interface WeatherData { + AirTemp: string; + Humidity: string; + Pressure: string; + Rainfall: string; + TrackTemp: string; + WindDirection: string; + WindSpeed: string; +} + +export interface LapCount { + CurrentLap: number; + TotalLaps: number; +} + +export interface ExtrapolatedClock { + Extrapolating: boolean; + Remaining: string; + Utc: Date; +} + +export interface DriverList { + BroadcastName?: string; + CountryCode?: string; + FirstName?: string; + FullName?: string; + HeadshotUrl?: string; + LastName?: string; + Line?: number; + NameFormat?: string; + RacingNumber: string; + Reference: string; + TeamColour?: string; + TeamName: string; + Tla: string; +} + +export interface TimingData { + CutOffPercentage: string; + CutOffTime: string; + Lines: {[key: string]: Line}; + NoEntries: number[]; + SessionPart: number; + Withheld: boolean; +} + +export interface TimingAppData { + Lines: {[key: string]: Line}; +} +export interface Stint { + Compound: Compound; + LapFlags: number; + LapNumber: number; + LapTime: string; + New: string; + StartLaps: number; + TotalLaps: number; + TyresNotChanged: string; +} + +export enum Compound { + Hard = 'HARD', + Intermediate = 'INTERMEDIATE', + Medium = 'MEDIUM', + Soft = 'SOFT', + Wet = 'WET', +} + +export interface Line { + BestLapTime: BestLapTime; + GapToLeader?: string; + InPit: boolean; + KnockedOut: boolean; + IntervalToPositionAhead?: IntervalToPositionAhead; + LastLapTime: LastLapTime; + Line: number; + PitOut: boolean; + Position: string; + RacingNumber: string; + Retired: boolean; + Sectors: Sector[]; + ShowPosition: boolean; + Speeds: Speeds; + Stats: Stat[]; + Status: number; + Stints: Stint[]; + Stopped: boolean; + TimeDiffToFastest: string; + TimeDiffToPositionAhead: string; +} + +export interface BestLapTime { + Value?: string; + Lap?: number; +} + +export interface IntervalToPositionAhead { + Catching: boolean; + Value: string; +} + +export interface LastLapTime { + OverallFastest: boolean; + PersonalFastest: boolean; + Status: number; + Value: string; +} + +export interface Sector { + OverallFastest: boolean; + PersonalFastest: boolean; + Segments: Segment[]; + Status: number; + Stopped: boolean; + Value: string; +} + +export interface Segment { + Status: number; +} + +export interface Speeds { + FL: LastLapTime; + I1: LastLapTime; + I2: LastLapTime; + ST: LastLapTime; +} + +export interface Stat { + TimeDiffToFastest: string; + TimeDifftoPositionAhead: string; +} diff --git a/tsconfig.json b/tsconfig.json index 0739ece..cf0fa54 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { - "files": [], - "references": [{ "path": "./tsconfig.node.json" }, { "path": "./tsconfig.web.json" }], - "compilerOptions": { - "module": "CommonJS", - "target": "ES2022" - } + "files": [], + "references": [{"path": "./tsconfig.node.json"}, {"path": "./tsconfig.web.json"}], + "compilerOptions": { + "module": "ESNext", + "target": "ESNext" + } } diff --git a/tsconfig.node.json b/tsconfig.node.json index de6e933..29ba5af 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,12 +1,18 @@ { - "extends": "@electron-toolkit/tsconfig/tsconfig.node.json", - "include": ["electron.vite.config.*", "src/main/*.ts", "src/main/*.json","src/preload/*","package.json", "src/renderer/i18n.ts"], - "compilerOptions": { - "composite": true, - "module": "CommonJS", - "target": "ES2022", - "moduleResolution": "Node", - "strict": false, - "types": ["jquery","electron-vite/node"] - } + "extends": "@electron-toolkit/tsconfig/tsconfig.node.json", + "include": ["electron.vite.config.*", "src/main/*.ts", "src/preload/*", "package.json", "src/renderer/i18n.ts"], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "Bundler", + "experimentalDecorators": true, + "noImplicitReturns": true, + "noImplicitOverride": true, + "noUnusedLocals": true, + "allowUnreachableCode": false, + "strict": true, + "lib": ["ESNext", "DOM", "DOM.Iterable", "WebWorker.ImportScripts"], + "types": ["jquery", "bootstrap", "electron-vite/node"] + } } diff --git a/tsconfig.web.json b/tsconfig.web.json index a1239bd..7b8d08d 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -1,14 +1,23 @@ { - "extends": "@electron-toolkit/tsconfig/tsconfig.web.json", - "include": ["src/renderer/**/*.ts", "src/preload/*.d.ts","*.json", "src/renderer/**/translation.json", "src/renderer/i18n.ts"], - "compilerOptions": { - "composite": true, - "module": "CommonJS", - "target": "ES2022", - "moduleResolution": "Node", - "useUnknownInCatchVariables": false, - "strict": false, - "isolatedModules": false, - "types": ["jquery"] - } + "extends": "@electron-toolkit/tsconfig/tsconfig.web.json", + "include": [ + "src/renderer/**/*.ts", + "src/preload/*.d.ts", + "src/renderer/**/translation.json", + "src/renderer/i18n.ts" + ], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "target": "ESNext", + "moduleResolution": "Bundler", + "experimentalDecorators": true, + "noImplicitReturns": true, + "noImplicitOverride": true, + "noUnusedLocals": true, + "allowUnreachableCode": false, + "resolveJsonModule": true, + "strict": true, + "types": ["jquery", "bootstrap"] + } }