From d21046d767d57628cfb3012f46bbe8b43042de75 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Mon, 11 Aug 2025 13:28:11 +0200 Subject: [PATCH 01/31] Upgrade to React 19 (#1) * Replace no longer maintained node-sass * Replace deprecated ReactDOM.render * Upgrade to React 19 --- package.json | 16 +- src/EnvConfig.js | 1 - src/components/login/LoginForm.js | 3 +- src/index.js | 26 +- src/pages/LandingPage.js | 24 +- yarn.lock | 6933 ++++++++++++++--------------- 6 files changed, 3351 insertions(+), 3652 deletions(-) diff --git a/package.json b/package.json index 6a814eb7..7c9a1adb 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,19 @@ "dependencies": { "@apollo/client": "^3.8.4", "@babel/plugin-syntax-jsx": "^7.22.5", + "@popperjs/core": "^2.11.8", "@reduxjs/toolkit": "^1.9.6", "android-emulator-webrtc": "^1.0.18", - "bootstrap": "^5.3.2", + "bootstrap": "^5.3.7", "bootstrap-icons": "^1.11.1", + "classnames": "^2.5.1", "graphql": "^16.8.1", "list": "^2.0.19", - "node-sass": "^9.0.0", - "react": "^18.2.0", + "prop-types": "^15.8.1", + "react": "^19.0.0", "react-bootstrap": "^2.9.0", - "react-bootstrap-table-next": "^4.0.3", - "react-bootstrap-table2-paginator": "^2.1.2", "react-cookie": "^6.1.1", - "react-dom": "^18.2.0", + "react-dom": "^19.0.0", "react-dropzone": "^14.2.3", "react-icons": "^4.11.0", "react-lazylog": "^4.5.3", @@ -26,6 +26,7 @@ "react-scripts": "^5.0.1", "react-terminal": "^1.3.1", "redux": "^4.2.1", + "sass": "^1.90.0", "styled-components": "^6.0.8", "yarn": "^1.22.19" }, @@ -70,6 +71,7 @@ "@babel/runtime": "^7.23.1", "@testing-library/jest-dom": "^6.1.3", "@testing-library/react": "^14.0.0", - "@testing-library/user-event": "^14.5.1" + "@testing-library/user-event": "^14.5.1", + "http-proxy-middleware": "^3.0.5" } } diff --git a/src/EnvConfig.js b/src/EnvConfig.js index 15502c73..3cd3a035 100644 --- a/src/EnvConfig.js +++ b/src/EnvConfig.js @@ -1,5 +1,4 @@ export const DOMAIN_NAME = "fmd.localhost" export const APP_URL = "https://" + DOMAIN_NAME export const GRAPHQL_URL = APP_URL + "/graphql/" - export const CSRF_URL = APP_URL + "/csrf/" \ No newline at end of file diff --git a/src/components/login/LoginForm.js b/src/components/login/LoginForm.js index 74416c43..3792b7d6 100644 --- a/src/components/login/LoginForm.js +++ b/src/components/login/LoginForm.js @@ -1,8 +1,7 @@ import Form from "react-bootstrap/esm/Form"; -import React from "react"; +import React, { useState } from "react"; import Button from "react-bootstrap/esm/Button"; import { useNavigate } from 'react-router-dom'; -import { useState } from "react"; import { Alert, Container, Spinner } from "react-bootstrap"; import { useLazyQuery } from "@apollo/client"; import { TOKEN_AUTH } from "../../graphql/queries"; diff --git a/src/index.js b/src/index.js index 1942d764..baec0407 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,10 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import './assets/scss/App.scss'; import App from './App'; import { CookiesProvider } from "react-cookie"; import { ApolloProvider, ApolloClient, InMemoryCache, HttpLink, from} from "@apollo/client"; -import { GRAPHQL_URL } from "./EnvConfig"; -import { CSRF_URL } from "./EnvConfig"; +import { GRAPHQL_URL, CSRF_URL } from "./EnvConfig"; import { RetryLink } from "@apollo/client/link/retry"; import { Provider } from 'react-redux' import store from "./redux/store.js"; @@ -39,15 +38,16 @@ const gqlClient = new ApolloClient({ cache: new InMemoryCache() }); -ReactDOM.render( - - - - +const container = document.getElementById('root'); +const root = createRoot(container); +root.render( + + + + - - - - , - document.getElementById('root') + + + + , ); diff --git a/src/pages/LandingPage.js b/src/pages/LandingPage.js index bbe7e922..b35cc75b 100644 --- a/src/pages/LandingPage.js +++ b/src/pages/LandingPage.js @@ -15,20 +15,18 @@ const LandingPage = () => { const AuthenticatedLogoutPagePage = withAuthentication(LogoutPage, LoginPage); return ( - <> - - - - - } /> - } /> - } /> - } /> - - - + + + + + } /> + } /> + } /> + } /> + + - + ); }; diff --git a/yarn.lock b/yarn.lock index ddd6dfa9..4e4cf66e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,15 +2,10 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@adobe/css-tools@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.1.tgz#abfccb8ca78075a2b6187345c26243c1a0842f28" - integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== +"@adobe/css-tools@^4.4.0": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.3.tgz#beebbefb0264fdeb32d3052acae0e0d94315a9a2" + integrity sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA== "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -18,12 +13,12 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@apideck/better-ajv-errors@^0.3.1": version "0.3.6" @@ -35,31 +30,31 @@ leven "^3.1.0" "@apollo/client@^3.8.4": - version "3.8.5" - resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.8.5.tgz#becd2101d6049afd03dd796693fb5804346df42f" - integrity sha512-/ueWC3f1pFeH+tWbM1phz6pzUGGijyml6oQ+LKUcQzpXF6tVFPrb6oUIUQCbZpr6Xmv/dtNiFDohc39ra7Solg== + version "3.13.9" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.13.9.tgz#311e0df1734aaa5598e01a292bb7982df49cc062" + integrity sha512-RStSzQfL1XwL6/NWd7W8avhGQYTgPCtJ+qHkkTTSj9Upp3VVm6Oppv81YWdXG1FgEpDPW4hvCrTUELdcC4inCQ== dependencies: "@graphql-typed-document-node/core" "^3.1.1" - "@wry/context" "^0.7.3" + "@wry/caches" "^1.0.0" "@wry/equality" "^0.5.6" - "@wry/trie" "^0.4.3" + "@wry/trie" "^0.5.0" graphql-tag "^2.12.6" hoist-non-react-statics "^3.3.2" - optimism "^0.17.5" + optimism "^0.18.0" prop-types "^15.7.2" - response-iterator "^0.2.6" + rehackt "^0.1.0" symbol-observable "^4.0.0" ts-invariant "^0.10.3" tslib "^2.3.0" zen-observable-ts "^1.2.5" -"@babel/cli@^7.21.0", "@babel/cli@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.0.tgz#1d7f37c44d4117c67df46749e0c86e11a58cc64b" - integrity sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA== +"@babel/cli@^7.23.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.28.0.tgz#26959456cbedff569a2c3ac909e8a268ca6cb7e2" + integrity sha512-CYrZG7FagtE8ReKDBfItxnrEBf2khq2eTMnPuqO8UVN0wzhp1eMX1wfda8b1a32l2aqYLwRRIOGNovm8FVzmMw== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - commander "^4.0.1" + "@jridgewell/trace-mapping" "^0.3.28" + commander "^6.2.0" convert-source-map "^2.0.0" fs-readdir-recursive "^1.1.0" glob "^7.2.0" @@ -67,36 +62,37 @@ slash "^2.0.0" optionalDependencies: "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" - chokidar "^3.4.0" + chokidar "^3.6.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.8.3": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" + integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.21.0", "@babel/core@^7.23.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.23.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" + integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.27.3" + "@babel/helpers" "^7.27.6" + "@babel/parser" "^7.28.0" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.0" + "@babel/types" "^7.28.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -104,263 +100,235 @@ semver "^6.3.1" "@babel/eslint-parser@^7.16.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" - integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.28.0.tgz#c1b3fbba070f5bac32e3d02f244201add4afdd6e" + integrity sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== - dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/generator@^7.28.0", "@babel/generator@^7.7.2": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" + integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== dependencies: - "@babel/types" "^7.22.5" + "@babel/parser" "^7.28.0" + "@babel/types" "^7.28.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281" + integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.27.1" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" + integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" - -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" + integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409" + integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helpers@^7.27.6": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.2.tgz#80f0918fecbfebea9af856c419763230040ee850" + integrity sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.2" "@babel/node@^7.22.19": - version "7.22.19" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.22.19.tgz#d0bd1e84e3d45eb2eeb68046d6dc22161786222b" - integrity sha512-VsKSO9aEHdO16NdtqkJfrXZ9Sxlna1BVnBbToWr1KGdI3cyIk6KqOoa8mWvpK280lJDOwJqxvnl994KmLhq1Yw== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.28.0.tgz#fe52d05121ca064e6919215ffe54fea480a8746f" + integrity sha512-6u1Mmn3SIMUH8uwTq543L062X3JDgms9HPf06o/pIGdDjeD/zNQ+dfZPQD27sCyvtP0ZOlJtwnl2RIdPe9bHeQ== dependencies: - "@babel/register" "^7.22.15" - commander "^4.0.1" + "@babel/register" "^7.27.1" + commander "^6.2.0" core-js "^3.30.2" node-environment-flags "^1.0.5" regenerator-runtime "^0.14.0" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" + integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== + dependencies: + "@babel/types" "^7.28.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" -"@babel/plugin-external-helpers@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.22.5.tgz#92b0705b74756123f289388320e0e12c407fdf9a" - integrity sha512-ngnNEWxmykPk82mH4ajZT0qTztr3Je6hrMuKAslZVM8G1YZTENJSYwrIGtt6KOtznug3exmAtF4so/nPqJuA4A== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670" + integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.16.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -369,15 +337,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.0.tgz#66d9014173b3267a9ced3e69935138bc64ffb5c8" - integrity sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz#419c8acc31088e05a774344c021800f7ddc39bf0" + integrity sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-decorators" "^7.27.1" "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.18.6" @@ -395,17 +361,6 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - "@babel/plugin-proposal-optional-chaining@^7.16.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" @@ -428,7 +383,7 @@ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-private-property-in-object@^7.21.11": +"@babel/plugin-proposal-private-property-in-object@^7.16.7", "@babel/plugin-proposal-private-property-in-object@^7.21.11": version "7.21.11" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz#69d597086b6760c4126525cfa154f34631ff272c" integrity sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw== @@ -460,7 +415,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -474,49 +429,35 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-syntax-decorators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz#ee7dd9590aeebc05f9d4c8c0560007b05979a63d" + integrity sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== +"@babel/plugin-syntax-flow@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz#6c83cf0d7d635b716827284b7ecd5aead9237662" + integrity sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -530,14 +471,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -551,7 +492,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -586,19 +527,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.27.1", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -608,548 +549,548 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz#1276e6c7285ab2cd1eccb0bc7356b7a69ff842c2" + integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== - dependencies: - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" -"@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-block-scoping@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz#e7c50cbacc18034f210b93defa89638666099451" + integrity sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-class-static-block@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4" + integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-classes@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz#12fa46cffc32a6e084011b650539e880add8a0f8" + integrity sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-globals" "^7.28.0" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-destructuring@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" + integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" - -"@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-explicit-resource-management@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz#45be6211b778dbf4b9d54c4e8a2b42fa72e09a1a" + integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-commonjs@^7.22.15", "@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-flow-strip-types@^7.16.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz#5def3e1e7730f008d683144fb79b724f92c5cdf9" + integrity sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg== dependencies: - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-flow" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== dependencies: - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" + integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-constant-elements@^7.12.1": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29" - integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== +"@babel/plugin-transform-object-rest-spread@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz#d23021857ffd7cd809f54d624299b8086402ed8d" + integrity sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/traverse" "^7.28.0" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz#7e6266d88705d7c49f11c98db8b9464531289cd6" - integrity sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA== +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/types" "^7.22.15" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" -"@babel/plugin-transform-react-pure-annotations@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" - integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== +"@babel/plugin-transform-parameters@^7.27.7": + version "7.27.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz#1fd2febb7c74e7d21cf3b05f7aebc907940af53a" + integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-runtime@^7.16.4": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" - integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - semver "^6.3.1" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz#6c6b50424e749a6e48afd14cf7b92f98cb9383f9" + integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.27.1": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" + integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-react-jsx-development@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz#47ff95940e20a3a70e68ad3d4fcb657b647f6c98" + integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.27.1" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-react-jsx@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz#1023bc94b78b0a2d68c82b5e96aed573bcfb9db0" + integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/plugin-transform-typescript@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== +"@babel/plugin-transform-react-pure-annotations@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz#339f1ce355eae242e0649f232b1c68907c02e879" + integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-regenerator@^7.28.0": + version "7.28.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz#bde80603442ff4bb4e910bc8b35485295d556ab1" + integrity sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-transform-runtime@^7.16.4": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz#462e79008cc7bdac03e4c5e1765b9de2bcd31c21" + integrity sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + semver "^6.3.1" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== - dependencies: - "@babel/compat-data" "^7.22.20" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.27.1": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" + integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.22.20": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.0.tgz#d23a6bc17b43227d11db77081a0779c706b5569c" + integrity sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg== + dependencies: + "@babel/compat-data" "^7.28.0" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.27.1" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.28.0" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.27.1" + "@babel/plugin-transform-classes" "^7.28.0" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-explicit-resource-management" "^7.28.0" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.7" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.28.0" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" + core-js-compat "^3.43.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1161,85 +1102,74 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.15.tgz#9a776892b648e13cc8ca2edf5ed1264eea6b6afc" - integrity sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.22.5" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.22.5" - -"@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.21.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.0.tgz#cc6602d13e7e5b2087c811912b87cf937a9129d9" - integrity sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-typescript" "^7.22.15" - -"@babel/register@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" - integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.22.15": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec" + integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.27.1" + "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx-development" "^7.27.1" + "@babel/plugin-transform-react-pure-annotations" "^7.27.1" + +"@babel/preset-typescript@^7.16.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" + integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.27.1" + +"@babel/register@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.27.1.tgz#ea4d701649d788d7cb8a064b7540fd21083147f1" + integrity sha512-K13lQpoV54LATKkzBpBAEu1GGSIRzxR9f4IN4V8DCDgiUMo2UDGagEZr3lPeVNJPLkWUi5JE4hCHKneVTwQlYQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.5" + pirates "^4.0.6" source-map-support "^0.5.16" -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.21.2", "@babel/traverse@^7.23.0", "@babel/traverse@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.23.1", "@babel/runtime@^7.24.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" + integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA== + +"@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0", "@babel/traverse@^7.7.2": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" + integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.0" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.0" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.0", "@babel/types@^7.28.2", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.28.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" + integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -1247,9 +1177,9 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@csstools/normalize.css@*": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4" - integrity sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg== + version "12.1.1" + resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.1.1.tgz#f0ad221b7280f3fc814689786fd9ee092776ef8f" + integrity sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ== "@csstools/postcss-cascade-layers@^1.1.1": version "1.1.1" @@ -1357,10 +1287,10 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@emotion/is-prop-valid@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" - integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== +"@emotion/is-prop-valid@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== dependencies: "@emotion/memoize" "^0.8.1" @@ -1369,27 +1299,27 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/unitless@^0.8.0": +"@emotion/unitless@0.8.1": version "0.8.1" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== "@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.1.tgz#449dfa81a57a1d755b09aa58d826c1262e4283b4" - integrity sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA== + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1401,28 +1331,23 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.51.0.tgz#6d419c240cfb2b66da37df230f7e7eef801c32fa" - integrity sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg== - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== "@graphql-typed-document-node/core@^3.1.1": version "3.2.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": @@ -1430,10 +1355,22 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1661,50 +1598,44 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.12" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz#2234ce26c62889f03db3d7fea43c1932ab3e927b" + integrity sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg== dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.10" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.10.tgz#a35714446a2e84503ff9bfe66f1d1d4846f2075b" + integrity sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.29" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz#a58d31eaadaf92c6695680b2e1d464a9b8fbf7fc" + integrity sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@mattiasbuelens/web-streams-polyfill@^0.2.0": version "0.2.1" @@ -1746,62 +1677,122 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== + version "0.5.17" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.17.tgz#8c2f34ca8651df74895422046e11ce5a120e7930" + integrity sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ== dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" + ansi-html "^0.0.9" core-js-pure "^3.23.3" error-stack-parser "^2.0.6" - find-up "^5.0.0" html-entities "^2.1.0" loader-utils "^2.0.4" - schema-utils "^3.0.0" + schema-utils "^4.2.0" source-map "^0.7.3" -"@popperjs/core@^2.11.6": +"@popperjs/core@^2.11.8": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@react-aria/ssr@^3.5.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.8.0.tgz#e7f467ac42f72504682724304ce221f785d70d49" - integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== + version "3.9.10" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.10.tgz#7fdc09e811944ce0df1d7e713de1449abd7435e6" + integrity sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ== dependencies: "@swc/helpers" "^0.5.0" @@ -1815,31 +1806,38 @@ redux-thunk "^2.4.2" reselect "^4.1.8" -"@remix-run/router@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.9.0.tgz#9033238b41c4cbe1e961eccb3f79e2c588328cf6" - integrity sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA== +"@remix-run/router@1.23.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.0.tgz#35390d0e7779626c026b11376da6789eb8389242" + integrity sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA== "@restart/hooks@^0.4.9": - version "0.4.11" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.11.tgz#8876ccce1d4ad2a4b793a31689d63df36cf56088" - integrity sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw== + version "0.4.16" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.16.tgz#95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb" + integrity sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w== dependencies: dequal "^2.0.3" -"@restart/ui@^1.6.6": - version "1.6.6" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.6.6.tgz#3481e2eaf15d7cae55bb2f518624e10d19c75800" - integrity sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA== +"@restart/hooks@^0.5.0": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.5.1.tgz#6776b3859e33aea72b23b81fc47021edf17fd247" + integrity sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q== dependencies: - "@babel/runtime" "^7.21.0" - "@popperjs/core" "^2.11.6" + dequal "^2.0.3" + +"@restart/ui@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.9.4.tgz#9d61f56f2647f5ab8a33d87b278b9ce183511a26" + integrity sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA== + dependencies: + "@babel/runtime" "^7.26.0" + "@popperjs/core" "^2.11.8" "@react-aria/ssr" "^3.5.0" - "@restart/hooks" "^0.4.9" - "@types/warning" "^3.0.0" + "@restart/hooks" "^0.5.0" + "@types/warning" "^3.0.3" dequal "^2.0.3" dom-helpers "^5.2.0" - uncontrollable "^8.0.1" + uncontrollable "^8.0.4" warning "^4.0.3" "@rollup/plugin-babel@^5.2.0": @@ -1879,10 +1877,15 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + "@rushstack/eslint-patch@^1.1.0": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz#5f1b518ec5fa54437c0b7c4a821546c64fed6922" - integrity sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz#326a7b46f6d4cfa54ae25bb888551697873069b4" + integrity sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw== "@sinclair/typebox@^0.24.1": version "0.24.51" @@ -2017,16 +2020,16 @@ loader-utils "^2.0.0" "@swc/helpers@^0.5.0": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" - integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== dependencies: - tslib "^2.4.0" + tslib "^2.8.0" "@testing-library/dom@^9.0.0": - version "9.3.3" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" - integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2038,57 +2041,51 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.1.3.tgz#443118c9e4043f96396f120de2c7122504a079c5" - integrity sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ== + version "6.6.4" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.6.4.tgz#577a1761768bda5458c42241add3b1570c34d39c" + integrity sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ== dependencies: - "@adobe/css-tools" "^4.3.0" - "@babel/runtime" "^7.9.2" + "@adobe/css-tools" "^4.4.0" aria-query "^5.0.0" - chalk "^3.0.0" css.escape "^1.5.1" - dom-accessibility-api "^0.5.6" - lodash "^4.17.15" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" + picocolors "^1.1.1" redent "^3.0.0" "@testing-library/react@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" - integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== + version "14.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.3.1.tgz#29513fc3770d6fb75245c4e1245c470e4ffdd830" + integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" "@testing-library/user-event@^14.5.1": - version "14.5.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f" - integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== + version "14.6.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.6.1.tgz#13e09a32d7a8b7060fe38304788ebf4197cd2149" + integrity sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw== "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/aria-query@^5.0.1": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.2.tgz#6f1225829d89794fd9f891989c9ce667422d7f64" - integrity sha512-PHKZuMN+K5qgKIWhBodXzQslTo5P+K/6LqeKXS6O/4liIDdZqaX5RXrCK++LAw+y/nptN48YmUMFiQHRSWYwtQ== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -2097,102 +2094,129 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.20.7" + "@babel/types" "^7.28.2" "@types/body-parser@*": - version "1.19.3" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" - integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" "@types/bonjour@^3.5.9": - version "3.5.11" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.11.tgz#fbaa46a1529ea5c5e46cde36e4be6a880db55b84" - integrity sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg== + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20" - integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" -"@types/cookie@^0.5.1": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.2.tgz#9bf9d62c838c85a07c92fdf2334c2c14fd9c59a9" - integrity sha512-DBpRoJGKJZn7RY92dPrgoMew8xCWc2P71beqsjyhEI/Ds9mOyVmBwtekyfhpwFIVt1WrxTonFifiOZ62V8CnNA== +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== -"@types/eslint-scope@^3.7.3": - version "3.7.5" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.5.tgz#e28b09dbb1d9d35fdfa8a884225f00440dfc5a3e" - integrity sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA== +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" -"@types/eslint@*", "@types/eslint@^7.29.0 || ^8.4.1": - version "8.44.3" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.3.tgz#96614fae4875ea6328f56de38666f582d911d962" - integrity sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g== +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.2.tgz#ff02bc3dc8317cd668dfec247b750ba1f1d62453" - integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== +"@types/eslint@^7.29.0 || ^8.4.1": + version "8.56.12" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a" + integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.37" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" - integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^5.0.0": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz#2fa94879c9d46b11a5df4c74ac75befd6b283de6" + integrity sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13": - version "4.17.18" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" - integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== +"@types/express@*": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.3.tgz#6c4bc6acddc2e2a587142e1d8be0bce20757e956" + integrity sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "*" + +"@types/express@^4.17.13": + version "4.17.23" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -2200,18 +2224,17 @@ "@types/serve-static" "*" "@types/graceful-fs@^4.1.2": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a" - integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw== +"@types/hoist-non-react-statics@^3.3.1", "@types/hoist-non-react-statics@^3.3.5": + version "3.3.7" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz#306e3a3a73828522efa1341159da4846e7573a6c" + integrity sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g== dependencies: - "@types/react" "*" hoist-non-react-statics "^3.3.0" "@types/html-minifier-terser@^6.0.0": @@ -2220,124 +2243,118 @@ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-errors@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" - integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== -"@types/http-proxy@^1.17.8": - version "1.17.12" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.12.tgz#86e849e9eeae0362548803c37a0a1afc616bd96b" - integrity sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw== +"@types/http-proxy@^1.17.15", "@types/http-proxy@^1.17.8": + version "1.17.16" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.16.tgz#dee360707b35b3cc85afcde89ffeebff7d7f9240" + integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/mime@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.2.tgz#c1ae807f13d308ee7511a5b81c74f327028e66e8" - integrity sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ== - "@types/mime@^1": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.3.tgz#bbe64987e0eb05de150c305005055c7ad784a9ce" - integrity sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/minimist@^1.2.0": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.3.tgz#dd249cef80c6fff2ba6a0d4e5beca913e04e25f8" - integrity sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A== +"@types/node-fetch@^2.6.12": + version "2.6.13" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" + integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== + dependencies: + "@types/node" "*" + form-data "^4.0.4" -"@types/node@*": - version "20.8.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.4.tgz#0e9ebb2ff29d5c3302fc84477d066fa7c6b441aa" - integrity sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A== +"@types/node-forge@^1.3.0": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.13.tgz#1797af20f7eccaf5f37b4d1739923bb0519d95b6" + integrity sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww== dependencies: - undici-types "~5.25.1" + "@types/node" "*" -"@types/normalize-package-data@^2.4.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz#9b0e3e8533fe5024ad32d6637eb9589988b6fdca" - integrity sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A== +"@types/node@*": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" + integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== + dependencies: + undici-types "~7.10.0" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/prettier@^2.1.5": version "2.7.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/prop-types@*": - version "15.7.8" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.8.tgz#805eae6e8f41bd19e88917d2ea200dc992f405d3" - integrity sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ== +"@types/prop-types@^15.7.12": + version "15.7.15" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" + integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== "@types/q@^1.5.1": - version "1.5.6" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.6.tgz#a6edffe8283910e46dc7a573621f928e6b47fa56" - integrity sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ== + version "1.5.8" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.8.tgz#95f6c6a08f2ad868ba230ead1d2d7f7be3db3837" + integrity sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw== "@types/qs@*": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.5.tgz#38bd1733ae299620771bd414837ade2e57757498" - integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react-dom@^18.0.0": - version "18.2.12" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.12.tgz#58479c463d1e0b7f1ee7cd80e09186189f9ec32d" - integrity sha512-QWZuiA/7J/hPIGocXreCRbx7wyoeet9ooxfbSA+zbIWqyQEE7GMtRn4A37BdYyksnN+/NDnWgfxZH9UVGDw1hg== - dependencies: - "@types/react" "*" + version "18.3.7" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f" + integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ== "@types/react-transition-group@^4.4.6": - version "4.4.7" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.7.tgz#bf69f269d74aa78b99097673ca6dd6824a68ef1c" - integrity sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg== - dependencies: - "@types/react" "*" + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@>=16.9.11": - version "18.2.27" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.27.tgz#746e52b06f3ccd5d7a724fd53769b70792601440" - integrity sha512-Wfv7B7FZiR2r3MIqbAlXoY1+tXm4bOqfz4oRr+nyXdBqapDBZ0l/IGcSlAfvxIHEEJjkPU0MYAc/BlFPOcrgLw== +"@types/react@>=16.9.11": + version "19.1.9" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.9.tgz#f42b24f35474566a39b5c3a98e4d0c425b79a849" + integrity sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -2352,71 +2369,66 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@*": - version "0.16.4" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.4.tgz#fedc3e5b15c26dc18faae96bf1317487cb3658cf" - integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ== - "@types/semver@^7.3.12": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== "@types/send@*": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.2.tgz#af78a4495e3c2b79bfbdac3955fdd50e03cc98f2" - integrity sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw== + version "0.17.5" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-index@^1.9.1": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.2.tgz#cb26e775678a8526b73a5d980a147518740aaecd" - integrity sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig== + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.3.tgz#2cfacfd1fd4520bbc3e292cca432d5e8e2e3ee61" - integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" - "@types/mime" "*" "@types/node" "*" + "@types/send" "*" "@types/sockjs@^0.3.33": - version "0.3.34" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.34.tgz#43e10e549b36d2ba2589278f00f81b5d7ccda167" - integrity sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g== + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/stylis@^4.0.2": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.1.tgz#867fcb0f81719d9ecef533fdda03e32083b959f6" - integrity sha512-OSaMrXUKxVigGlKRrET39V2xdhzlztQ9Aqumn1WbCBKHOi9ry7jKSd7rkyj0GzmWaU960Rd+LpOFpLfx5bMQAg== +"@types/stylis@4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" + integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== "@types/trusted-types@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.4.tgz#2b38784cd16957d3782e8e2b31c03bc1d13b4d65" - integrity sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ== + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== -"@types/warning@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.1.tgz#a62d1d2b7f34376da84ee0afe0145152e62b9699" - integrity sha512-ywJmriP+nvjBKNBEMaNZgj2irZHoxcKeYcyMLbqhYKbDVn8yCIULy2Ol/tvIb37O3IBeZj3RU4tXqQTtGwoAMg== +"@types/warning@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" + integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== "@types/whatwg-streams@^0.0.7": version "0.0.7" @@ -2424,28 +2436,28 @@ integrity sha512-6sDiSEP6DWcY2ZolsJ2s39ZmsoGQ7KVwBDI3sESQsEm9P2dHTcqnDIHRZFRNtLCzWp7hCFGqYbw5GyfpQnJ01A== "@types/ws@^8.5.5": - version "8.5.6" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.6.tgz#e9ad51f0ab79b9110c50916c9fcbddc36d373065" - integrity sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg== + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.28" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.28.tgz#d106e4301fbacde3d1796ab27374dd16588ec851" - integrity sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" @@ -2540,145 +2552,157 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@ungap/structured-clone@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" -"@wry/context@^0.7.0", "@wry/context@^0.7.3": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.3.tgz#240f6dfd4db5ef54f81f6597f6714e58d4f476a1" - integrity sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA== +"@wry/caches@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" + integrity sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA== + dependencies: + tslib "^2.3.0" + +"@wry/context@^0.7.0": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" + integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== dependencies: tslib "^2.3.0" "@wry/equality@^0.5.6": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.6.tgz#cd4a533c72c3752993ab8cbf682d3d20e3cb601e" - integrity sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA== + version "0.5.7" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" + integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== dependencies: tslib "^2.3.0" -"@wry/trie@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" - integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== +"@wry/trie@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.5.0.tgz#11e783f3a53f6e4cd1d42d2d1323f5bc3fa99c94" + integrity sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA== dependencies: tslib "^2.3.0" @@ -2697,12 +2721,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -2718,10 +2737,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-phases@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz#16eb850ba99a056cb7cbfe872ffb8972e18c8bd7" + integrity sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ== acorn-jsx@^5.3.2: version "5.3.2" @@ -2738,10 +2757,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.14.0, acorn@^8.15.0, acorn@^8.2.4, acorn@^8.9.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2756,28 +2775,13 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@6, agent-base@^6.0.2: +agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -2808,14 +2812,14 @@ ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.6.0, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" android-emulator-webrtc@^1.0.18: version "1.0.18" @@ -2838,15 +2842,20 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-html@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.9.tgz#6512d02342ae2cc68131952644a129cb734cd3f0" + integrity sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^3.2.1: version "3.2.1" @@ -2867,6 +2876,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -2880,19 +2894,6 @@ anymatch@^3.0.3, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" @@ -2917,144 +2918,145 @@ aria-query@5.1.3: dependencies: deep-equal "^2.0.5" -aria-query@^5.0.0, aria-query@^5.1.3: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" +aria-query@^5.0.0, aria-query@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-includes@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== +array-includes@^3.1.6, array-includes@^3.1.8, array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" -array.prototype.flatmap@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.2, array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" array.prototype.reduce@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz#63149931808c5fc1e1354814923d92d45f7d96d5" - integrity sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg== + version "1.0.8" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" + integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA== - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== -asynciterator.prototype@^1.0.0: +async-function@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" @@ -3066,39 +3068,39 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -attr-accept@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" - integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== +attr-accept@^2.2.4: + version "2.2.5" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" + integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== autoprefixer@^10.4.13: - version "10.4.16" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + version "10.4.21" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.21.tgz#77189468e7a8ad1d9a37fbc08efc9f480cf0a95d" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" + fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.1.1" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" -axe-core@^4.6.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.8.2.tgz#2f6f3cde40935825cf4465e3c1c9e77b240ff6ae" - integrity sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g== +axe-core@^4.10.0: + version "4.10.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" + integrity sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg== -axobject-query@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== - dependencies: - dequal "^2.0.3" +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== babel-jest@^27.4.2, babel-jest@^27.5.1: version "27.5.1" @@ -3115,12 +3117,12 @@ babel-jest@^27.4.2, babel-jest@^27.5.1: slash "^3.0.0" babel-loader@^8.2.3: - version "8.3.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" - integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + version "8.4.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.4.1.tgz#6ccb75c66e62c3b144e1c5f2eaec5b8f6c08c675" + integrity sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA== dependencies: find-cache-dir "^3.3.1" - loader-utils "^2.0.0" + loader-utils "^2.0.4" make-dir "^3.1.0" schema-utils "^2.6.5" @@ -3159,29 +3161,29 @@ babel-plugin-named-asset-import@^0.3.8: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.6.5" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3189,22 +3191,25 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" babel-preset-jest@^27.5.1: version "27.5.1" @@ -3215,9 +3220,9 @@ babel-preset-jest@^27.5.1: babel-preset-current-node-syntax "^1.0.0" babel-preset-react-app@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz#ed6005a20a24f2c88521809fa9aea99903751584" - integrity sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg== + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz#e367f223f6c27878e6cc28471d0d506a9ab9f96c" + integrity sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg== dependencies: "@babel/core" "^7.16.0" "@babel/plugin-proposal-class-properties" "^7.16.0" @@ -3226,6 +3231,7 @@ babel-preset-react-app@^10.0.1: "@babel/plugin-proposal-numeric-separator" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.0" "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" "@babel/plugin-transform-flow-strip-types" "^7.16.0" "@babel/plugin-transform-react-display-name" "^7.16.0" "@babel/plugin-transform-runtime" "^7.16.4" @@ -3263,40 +3269,38 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" + qs "6.13.0" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" bonjour-service@^1.0.11: - version "1.1.1" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" - integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.3.0.tgz#80d867430b5a0da64e82a8047fc1e355bdb71722" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -3306,51 +3310,51 @@ boolbase@^1.0.0, boolbase@~1.0.0: integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== bootstrap-icons@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.11.1.tgz#79e32494871d8c98e9d14f4bcdc278cee9b1dafd" - integrity sha512-F0DDp7nKUX+x/QtpfRZ+XHFya60ng9nfdpdS59vDDfs4Uhuxp7zym/QavMsu/xx51txkoM9eVmpE7D08N35blw== + version "1.13.1" + resolved "https://registry.yarnpkg.com/bootstrap-icons/-/bootstrap-icons-1.13.1.tgz#0aad3f5b55b67402990e729ce3883416f9cef6c5" + integrity sha512-ijombt4v6bv5CLeXvRWKy7CuM3TRTuPEuGaGKvTV5cz65rQSY8RQ2JcHt6b90cBBAC7s8fsf2EkQDldzCoXUjw== -bootstrap@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.2.tgz#97226583f27aae93b2b28ab23f4c114757ff16ae" - integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== +bootstrap@^5.3.7: + version "5.3.7" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.7.tgz#8640065036124d961d885d80b5945745e1154d90" + integrity sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw== brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.24.0, browserslist@^4.24.4, browserslist@^4.25.1: + version "4.25.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.1.tgz#ba9e8e6f298a1d86f829c9b975e07948967bb111" + integrity sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001726" + electron-to-chromium "^1.5.173" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" bser@2.1.1: version "2.1.1" @@ -3369,71 +3373,36 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.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.0" - tar "^6.1.11" - unique-filename "^2.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -3453,15 +3422,6 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -3487,17 +3447,17 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001612" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz" - integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001726: + version "1.0.30001733" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz#918405ed6647a62840fb328832cf5a03f986974b" + integrity sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3506,15 +3466,7 @@ chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3528,19 +3480,19 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== char-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" - integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== + version "2.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.2.tgz#81385bb071af4df774bff8721d0ca15ef29ea0bb" + integrity sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg== check-types@^11.2.3: version "11.2.3" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.3.tgz#1ffdf68faae4e941fce252840b1787b8edc93b71" integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== -chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.4.2, chokidar@^3.5.3, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -3552,15 +3504,17 @@ chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== ci-info@^3.2.0: version "3.9.0" @@ -3568,27 +3522,22 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== -classnames@^2.2.5, classnames@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== +classnames@^2.3.2, classnames@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" + integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3598,15 +3547,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -3664,11 +3604,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - colord@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" @@ -3691,11 +3626,16 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.0, commander@^4.0.1: +commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -3706,11 +3646,6 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -3721,7 +3656,7 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== @@ -3729,16 +3664,16 @@ compressible@~2.0.16: mime-db ">= 1.43.0 < 2" compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: @@ -3756,11 +3691,6 @@ connect-history-api-fallback@^2.0.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - content-disposition@0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -3768,7 +3698,7 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4: +content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -3788,27 +3718,32 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0, cookie@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.33.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966" - integrity sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +core-js-compat@^3.43.0: + version "3.45.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.0.tgz#bc0017525dcb7a42ba3241d02f6fce9bae8e5c33" + integrity sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA== dependencies: - browserslist "^4.22.1" + browserslist "^4.25.1" core-js-pure@^3.23.3: - version "3.33.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.0.tgz#938a28754b4d82017a7a8cbd2727b1abecc63591" - integrity sha512-FKSIDtJnds/YFIEaZ4HszRX7hkxGpNKM7FC9aJ9WLJbSd3lD4vOltFuVIBLR8asSx9frkTSqL0dw90SKQxgKrg== + version "3.45.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.45.0.tgz#c753b80daf1bf732e56bf0b8cbd62797c0c1f235" + integrity sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA== core-js@^3.19.2, core-js@^3.30.2: - version "3.33.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.0.tgz#70366dbf737134761edb017990cf5ce6c6369c40" - integrity sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw== + version "3.45.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.45.0.tgz#556c2af44a2d9c73ea7b49504392474a9f7c947e" + integrity sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA== core-util-is@~1.0.0: version "1.0.3" @@ -3837,10 +3772,10 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -3876,18 +3811,18 @@ css-has-pseudo@^3.0.4: postcss-selector-parser "^6.0.9" css-loader@^6.5.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" - integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + version "6.11.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" + integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.21" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.3" - postcss-modules-scope "^3.0.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" - semver "^7.3.8" + semver "^7.5.4" css-minimizer-webpack-plugin@^3.2.0: version "3.4.1" @@ -3932,7 +3867,7 @@ css-select@^4.1.3: domutils "^2.8.0" nth-check "^2.0.1" -css-to-react-native@^3.2.0: +css-to-react-native@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== @@ -3963,9 +3898,9 @@ css-what@^3.2.1: integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== css-what@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + version "6.2.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" + integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== css.escape@^1.5.1: version "1.5.1" @@ -3973,9 +3908,9 @@ css.escape@^1.5.1: integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssdb@^7.1.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.8.0.tgz#ac41fa025371b74eb2ccfe3d41f5c4dbd444fbe3" - integrity sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg== + version "7.11.2" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.11.2.tgz#127a2f5b946ee653361a5af5333ea85a39df5ae5" + integrity sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A== cssesc@^3.0.0: version "3.0.0" @@ -4055,10 +3990,10 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2, csstype@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== +csstype@3.1.3, csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== damerau-levenshtein@^1.0.8: version "1.0.8" @@ -4074,6 +4009,33 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -4081,12 +4043,12 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^3.2.7: version "3.2.7" @@ -4095,23 +4057,10 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== dedent@^0.7.0: version "0.7.0" @@ -4119,14 +4068,14 @@ dedent@^0.7.0: integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.5" es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" is-arguments "^1.1.1" is-array-buffer "^3.0.2" is-date-object "^1.0.5" @@ -4136,11 +4085,11 @@ deep-equal@^2.0.5: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" + regexp.prototype.flags "^1.5.1" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" @@ -4159,21 +4108,21 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -4187,11 +4136,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4212,6 +4156,16 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-europe-js@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/detect-europe-js/-/detect-europe-js-0.1.2.tgz#aa76642e05dae786efc2e01a23d4792cd24c7b88" + integrity sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4252,11 +4206,6 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - dns-packet@^5.2.2: version "5.6.1" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" @@ -4278,11 +4227,16 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -4374,27 +4328,41 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@^3.1.6: - version "3.1.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" - integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.535: - version "1.4.548" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.548.tgz#e695d769e0e801fa6d438b63f6bc9b80372000d6" - integrity sha512-R77KD6mXv37DOyKLN/eW1rGS61N6yHOfapNSX9w+y9DdPG83l9Gkuv7qkCFZ4Ta4JPhrjgQfYbv4Y3TnM1Hi2Q== +electron-to-chromium@^1.5.173: + version "1.5.199" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz#4d8be9c78362c05f095eb7392e9a54f1fb14fd3a" + integrity sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ== emittery@^0.10.2: version "0.10.2" @@ -4426,17 +4394,15 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.17.2: + version "5.18.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" + integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4446,16 +4412,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4470,56 +4426,81 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.17.2, es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" +es-abstract@^1.17.2, es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.12.3" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -4535,60 +4516,70 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== +es-iterator-helpers@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" + es-errors "^1.3.0" -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== +es-set-tostringtag@^2.0.3, es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - has "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + hasown "^2.0.2" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" @@ -4653,7 +4644,7 @@ eslint-config-react-app@^7.0.1: eslint-plugin-react-hooks "^4.3.0" eslint-plugin-testing-library "^5.0.1" -eslint-import-resolver-node@^0.3.7: +eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== @@ -4662,10 +4653,10 @@ eslint-import-resolver-node@^0.3.7: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" @@ -4678,27 +4669,29 @@ eslint-plugin-flowtype@^8.0.3: string-natural-compare "^3.0.1" eslint-plugin-import@^2.25.3: - version "2.28.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" - integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== - dependencies: - array-includes "^3.1.6" - array.prototype.findlastindex "^1.2.2" - array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.1" + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.7" - eslint-module-utils "^2.8.0" - has "^1.0.3" - is-core-module "^2.13.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.1" + hasown "^2.0.2" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.6" - object.groupby "^1.0.0" - object.values "^1.1.6" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.1" semver "^6.3.1" - tsconfig-paths "^3.14.2" + string.prototype.trimend "^1.0.9" + tsconfig-paths "^3.15.0" eslint-plugin-jest@^25.3.0: version "25.7.0" @@ -4708,53 +4701,54 @@ eslint-plugin-jest@^25.3.0: "@typescript-eslint/experimental-utils" "^5.0.0" eslint-plugin-jsx-a11y@^6.5.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" - integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== - dependencies: - "@babel/runtime" "^7.20.7" - aria-query "^5.1.3" - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - ast-types-flow "^0.0.7" - axe-core "^4.6.2" - axobject-query "^3.1.1" + version "6.10.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz#d2812bb23bf1ab4665f1718ea442e8372e638483" + integrity sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q== + dependencies: + aria-query "^5.3.2" + array-includes "^3.1.8" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "^4.10.0" + axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - has "^1.0.3" - jsx-ast-utils "^3.3.3" - language-tags "=1.0.5" + hasown "^2.0.2" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - semver "^6.3.0" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.1" eslint-plugin-react-hooks@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.27.1: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.2.1" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" eslint-plugin-testing-library@^5.0.1: version "5.11.1" @@ -4801,17 +4795,18 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0: - version "8.51.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.51.0.tgz#4a82dae60d209ac89a5cff1604fea978ba4950f3" - integrity sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.51.0" - "@humanwhocodes/config-array" "^0.11.11" + "@eslint/eslintrc" "^2.1.4" + "@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.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4863,9 +4858,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -4942,36 +4937,36 @@ expect@^27.5.1: jest-message-util "^27.5.1" express@^4.17.3: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.1" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.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.12" 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" @@ -4983,16 +4978,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" @@ -5004,10 +4999,15 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -5045,12 +5045,12 @@ file-loader@^6.2.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -file-selector@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.6.0.tgz#fa0a8d9007b829504db4d07dd4de0310b65287dc" - integrity sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw== +file-selector@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" + integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== dependencies: - tslib "^2.4.0" + tslib "^2.7.0" filelist@^1.0.4: version "1.0.4" @@ -5064,20 +5064,20 @@ filesize@^8.0.6: resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== 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" @@ -5126,30 +5126,38 @@ find-up@^5.0.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.0.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - is-callable "^1.1.3" + cross-spawn "^7.0.6" + signal-exit "^4.0.1" fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" @@ -5171,12 +5179,25 @@ fork-ts-checker-webpack-plugin@^6.5.0: tapable "^1.0.0" form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + version "3.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.4.tgz#938273171d3f999286a4557528ce022dc2c98df1" + integrity sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" + +form-data@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" forwarded@0.2.0: @@ -5184,10 +5205,10 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.6.tgz#e9e3acec6c9a28cf7bc36cbe35eea4ceb2c5c92d" - integrity sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg== +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" @@ -5213,17 +5234,10 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.1.0.tgz#632aa15a20e71828ed56b24303363fb1414e5997" + integrity sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw== fs-readdir-recursive@^1.1.0: version "1.1.0" @@ -5240,47 +5254,28 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^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" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5291,15 +5286,21 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" +get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" @@ -5311,23 +5312,27 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -5348,19 +5353,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5372,29 +5377,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@~7.1.1: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -5411,24 +5393,20 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.0.4, globby@^11.1.0: version "11.1.0" @@ -5442,28 +5420,17 @@ globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globule@^1.0.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.4.tgz#7c11c43056055a75a6e68294453c17f2796170fb" - integrity sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg== - dependencies: - glob "~7.1.1" - lodash "^4.17.21" - minimatch "~3.0.2" - google-protobuf@^3.21.2: - version "3.21.2" - resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.2.tgz#4580a2bea8bbb291ee579d1fefb14d6fa3070ea4" - integrity sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA== + version "3.21.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5481,14 +5448,14 @@ graphql-tag@^2.12.6: tslib "^2.1.0" graphql@^16.8.1: - version "16.8.1" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.1.tgz#1930a965bef1170603702acdb68aedd3f3cf6f07" - integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== + version "16.11.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" + integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== grpc-web@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/grpc-web/-/grpc-web-1.4.2.tgz#86995f76471ce6b2119106ec26f909b7b69e7d43" - integrity sha512-gUxWq42l5ldaRplcKb4Pw5O4XBONWZgz3vxIIXnfIeJj8Jc3wYiq2O4c9xzx/NGbbPEej4rhI62C9eTENwLGNw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/grpc-web/-/grpc-web-1.5.0.tgz#154e4007ab59a94bf7726b87ef6c5bd8815ecf6e" + integrity sha512-y1tS3BBIoiVSzKTDF3Hm7E8hV2n7YY7pO0Uo7depfWJqKzWE+SKr0jvHNIJsJJYILQlpYShpi/DRJJMbosgDMQ== gzip-size@^6.0.0: version "6.0.0" @@ -5502,20 +5469,15 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - harmony-reflect@^1.4.6: version "1.6.2" resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" @@ -5527,39 +5489,38 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.1.1" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.1, has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + has-symbols "^1.0.3" -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" he@^1.2.0: version "1.2.0" @@ -5585,18 +5546,6 @@ hoopy@^0.1.4: resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -5615,9 +5564,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^2.1.0, html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8" + integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ== html-escaper@^2.0.0: version "2.0.2" @@ -5638,9 +5587,9 @@ html-minifier-terser@^6.0.2: terser "^5.10.0" html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== + version "5.6.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz#a31145f0fee4184d53a794f9513147df1e653685" + integrity sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -5658,11 +5607,6 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5690,9 +5634,9 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + version "0.5.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.10.tgz#b3277bd6d7ed5588e20ea73bf724fcbe44609075" + integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== http-proxy-agent@^4.0.1: version "4.0.1" @@ -5703,19 +5647,10 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + version "2.0.9" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" + integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" @@ -5723,6 +5658,18 @@ http-proxy-middleware@^2.0.3: is-plain-obj "^3.0.0" micromatch "^4.0.2" +http-proxy-middleware@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz#9dcde663edc44079bc5a9c63e03fe5e5d6037fab" + integrity sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg== + dependencies: + "@types/http-proxy" "^1.17.15" + debug "^4.3.6" + http-proxy "^1.18.1" + is-glob "^4.0.3" + is-plain-object "^5.0.0" + micromatch "^4.0.8" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -5745,13 +5692,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5759,7 +5699,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -5784,9 +5724,9 @@ identity-obj-proxy@^3.0.0: harmony-reflect "^1.4.6" ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immer@^9.0.21, immer@^9.0.7: version "9.0.21" @@ -5798,18 +5738,23 @@ immutable@^3.8.2: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" integrity sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg== +immutable@^5.0.2: + version "5.1.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.3.tgz#e6486694c8b76c37c063cca92399fa64098634d4" + integrity sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg== + import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -5824,11 +5769,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5852,14 +5792,14 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.4, internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" invariant@^2.2.4: version "2.2.4" @@ -5868,37 +5808,32 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" @@ -5906,18 +5841,22 @@ is-arrayish@^0.2.1: integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-tostringtag "^1.0.0" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" @@ -5926,32 +5865,42 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: - has "^1.0.3" + hasown "^2.0.2" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" @@ -5963,12 +5912,12 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -5981,11 +5930,14 @@ is-generator-fn@^2.0.0: integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" @@ -5994,32 +5946,28 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" @@ -6036,11 +5984,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - is-plain-obj@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" @@ -6053,18 +5996,25 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.1.4, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-regexp@^1.0.0: version "1.0.0" @@ -6076,68 +6026,76 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" + +is-standalone-pwa@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz#7a1b0459471a95378aa0764d5dc0a9cec95f2871" + integrity sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g== is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.16" is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-wsl@^2.2.0: version "2.2.0" @@ -6167,9 +6125,9 @@ isobject@^3.0.1: integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" @@ -6201,33 +6159,42 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== +iterator.prototype@^1.1.4: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== dependencies: - async "^3.2.3" - chalk "^4.0.2" + async "^3.2.6" filelist "^1.0.4" - minimatch "^3.1.2" + picocolors "^1.1.1" jest-changed-files@^27.5.1: version "27.5.1" @@ -6711,15 +6678,10 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" -jiti@^1.18.2: - version "1.20.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" - integrity sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA== - -js-base64@^2.4.9: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== +jiti@^1.21.6: + version "1.21.7" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -6774,15 +6736,15 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -6849,7 +6811,7 @@ jsonpointer@^5.0.0: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== @@ -6866,7 +6828,7 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" -kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -6881,25 +6843,25 @@ klona@^2.0.4, klona@^2.0.5: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== -language-subtag-registry@~0.3.2: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== +language-subtag-registry@^0.3.20: + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== -language-tags@=1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" launch-editor@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== + version "2.11.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.11.1.tgz#61a0b7314a42fd84a6cbb564573d9e9ffcf3d72b" + integrity sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg== dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" + picocolors "^1.1.1" + shell-quote "^1.8.3" leven@^3.1.0: version "3.1.0" @@ -6922,11 +6884,16 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lilconfig@^2.0.3, lilconfig@^2.0.5, lilconfig@^2.1.0: +lilconfig@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== +lilconfig@^3.0.0, lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -6952,9 +6919,9 @@ loader-utils@^2.0.0, loader-utils@^2.0.4: json5 "^2.1.2" loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.3.1.tgz#735b9a19fd63648ca7adbd31c2327dfe281304e5" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== locate-path@^3.0.0: version "3.0.0" @@ -7003,12 +6970,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: +lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7022,6 +6989,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -7029,18 +7001,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" @@ -7075,66 +7035,17 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-fetch-happen@^10.0.4: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mdn-data@2.0.14: version "2.0.14" @@ -7158,28 +7069,10 @@ memfs@^3.1.2, memfs@^3.4.3: dependencies: fs-monkey "^1.0.4" -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" @@ -7196,20 +7089,25 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +"mime-db@>= 1.43.0 < 2": + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -7232,11 +7130,12 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.7.6" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" - integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== + version "2.9.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.3.tgz#3dcb896f21cdcbd24528eb7e9b89f91635508198" + integrity sha512-tRA0+PsS4kLVijnN1w9jUu5lkxBwUk9E8SbgEB5dBJqchE6pVYdawROG6uQtpmAri7tdCK9i7b1bULeVWqS6Ag== dependencies: schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0: version "1.0.1" @@ -7257,107 +7156,28 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@~3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" - integrity sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q== +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" + brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== mitt@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -7370,12 +7190,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -7397,15 +7212,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.17.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== +nanoid@^3.3.11, nanoid@^3.3.7: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare-lite@^1.4.0: version "1.4.0" @@ -7417,11 +7227,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -7435,6 +7250,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + node-environment-flags@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" @@ -7443,83 +7263,27 @@ node-environment-flags@^1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@^1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -node-sass@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-9.0.0.tgz#c21cd17bd9379c2d09362b3baf2cbf089bce08ed" - integrity sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg== - dependencies: - async-foreach "^0.1.3" - chalk "^4.1.2" - cross-spawn "^7.0.3" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - lodash "^4.17.15" - make-fetch-happen "^10.0.4" - meow "^9.0.0" - nan "^2.17.0" - node-gyp "^8.4.1" - sass-graph "^4.0.1" - stdout-stream "^1.4.0" - "true-case-path" "^2.2.1" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7543,16 +7307,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7568,9 +7322,9 @@ nth-check@^2.0.1: boolbase "^1.0.0" nwsapi@^2.2.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.21" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.21.tgz#8df7797079350adda208910d8c33fc4c2d7520c3" + integrity sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA== object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" @@ -7582,89 +7336,87 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" -object.fromentries@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.7" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz#7a466a356cd7da4ba8b9e94ff6d35c3eeab5d56a" - integrity sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g== + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: array.prototype.reduce "^1.0.6" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - safe-array-concat "^1.0.0" - -object.groupby@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -object.values@^1.1.0, object.values@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -7678,10 +7430,10 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== once@^1.3.0: version "1.4.0" @@ -7706,13 +7458,14 @@ open@^8.0.9, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -optimism@^0.17.5: - version "0.17.5" - resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.17.5.tgz#a4c78b3ad12c58623abedbebb4f2f2c19b8e8816" - integrity sha512-TEcp8ZwK1RczmvMnvktxHSF2tKgMWjJ71xEFGX5ApLh67VsMSTy1ZUlipJw8W+KaqgOmQ+4pqwkeivY89j+4Vw== +optimism@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.1.tgz#5cf16847921413dbb0ac809907370388b9c6335f" + integrity sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ== dependencies: + "@wry/caches" "^1.0.0" "@wry/context" "^0.7.0" - "@wry/trie" "^0.4.3" + "@wry/trie" "^0.5.0" tslib "^2.3.0" optionator@^0.8.1: @@ -7728,16 +7481,25 @@ optionator@^0.8.1: word-wrap "~1.2.3" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" @@ -7774,13 +7536,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-retry@^4.5.0: version "4.6.2" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" @@ -7794,6 +7549,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -7867,10 +7627,18 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-type@^4.0.0: version "4.0.0" @@ -7887,10 +7655,10 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -7907,10 +7675,10 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pirates@^4.0.1, pirates@^4.0.4, pirates@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^3.0.0: version "3.0.0" @@ -7933,6 +7701,11 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + postcss-attribute-case-insensitive@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz#03d761b24afc04c09e757e92ff53716ae8ea2741" @@ -8127,13 +7900,13 @@ postcss-lab-function@^4.2.1: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-load-config@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" - integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== +postcss-load-config@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^2.0.5" - yaml "^2.1.1" + lilconfig "^3.0.0" + yaml "^2.3.4" postcss-loader@^6.2.1: version "6.2.1" @@ -8204,26 +7977,26 @@ postcss-minify-selectors@^5.2.1: dependencies: postcss-selector-parser "^6.0.5" -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== -postcss-modules-local-by-default@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz#d150f43837831dae25e4085596e84f6f5d6ec368" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== dependencies: icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" + postcss-selector-parser "^7.0.0" postcss-value-parser "^4.1.0" -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz#1bbccddcb398f1d7a511e0a2d1d047718af4078c" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== dependencies: - postcss-selector-parser "^6.0.4" + postcss-selector-parser "^7.0.0" postcss-modules-values@^4.0.0: version "4.0.0" @@ -8232,12 +8005,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== +postcss-nested@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: - postcss-selector-parser "^6.0.11" + postcss-selector-parser "^6.1.1" postcss-nesting@^10.2.0: version "10.2.0" @@ -8440,10 +8213,18 @@ postcss-selector-not@^6.0.1: dependencies: postcss-selector-parser "^6.0.10" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz#4d6af97eba65d73bc4d84bcb343e865d7dd16262" + integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -8468,6 +8249,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@8.4.49: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + postcss@^7.0.35: version "7.0.39" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" @@ -8476,14 +8266,14 @@ postcss@^7.0.35: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.4: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== +postcss@^8.3.5, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4.47: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -8532,19 +8322,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - promise@^8.1.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -8586,26 +8363,28 @@ proxy-addr@~2.0.7: ipaddr.js "1.9.1" psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" querystringify@^2.1.1: version "2.2.0" @@ -8617,11 +8396,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -8641,10 +8415,10 @@ range-parser@^1.2.1, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -8663,28 +8437,15 @@ react-app-polyfill@^3.0.0: regenerator-runtime "^0.13.9" whatwg-fetch "^3.6.2" -react-bootstrap-table-next@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/react-bootstrap-table-next/-/react-bootstrap-table-next-4.0.3.tgz#b55873b01adfe22a7181904b784a9d24ac2822cf" - integrity sha512-uKxC73qUdUfusRf2uzDfMiF9LvTG5vuhTZa0lbAgHWSLLLaKTsI0iHf1e4+c7gP71q8dFsp7StvkP65SxC1JRg== - dependencies: - classnames "^2.2.5" - react-transition-group "^4.2.0" - underscore "1.9.1" - -react-bootstrap-table2-paginator@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-bootstrap-table2-paginator/-/react-bootstrap-table2-paginator-2.1.2.tgz#a62151909e594719db568cede6e5d2962cbf8ddb" - integrity sha512-LC5znEphhgKJvaSY1q8d+Gj0Nc/1X+VS3tKJjkmWmfv9P61YC/BnwJ+aoqEmQzsLiVGowrzss+i/u+Tip5H+Iw== - react-bootstrap@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.9.0.tgz#10493a3bb7c0429fee886f5571b195ece6c436f0" - integrity sha512-dGh6fGjqR9MBzPOp2KbXJznt1Zy6SWepXYUdxMT18Zu/wJ73HCU8JNZe9dfzjmVssZYsJH9N3HHE4wAtQvNz7g== + version "2.10.10" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.10.10.tgz#be0b0d951a69987152d75c0e6986c80425efdf21" + integrity sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ== dependencies: - "@babel/runtime" "^7.22.5" + "@babel/runtime" "^7.24.7" "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.6.6" + "@restart/ui" "^1.9.4" + "@types/prop-types" "^15.7.12" "@types/react-transition-group" "^4.4.6" classnames "^2.3.2" dom-helpers "^5.2.1" @@ -8696,11 +8457,11 @@ react-bootstrap@^2.9.0: warning "^4.0.3" react-cookie@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-6.1.1.tgz#af61c82ea7f41119d3cf8fd3534f8b6c0408f350" - integrity sha512-fuFRpf8LH6SfmVMowDUIRywJF5jAUDUWrm0EI5VdXfTl5bPcJ7B0zWbuYpT0Tvikx7Gs18MlvAT+P+744dUz2g== + version "6.1.3" + resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-6.1.3.tgz#f48242f784a44fe51e2c71859a5501daaa93cdfe" + integrity sha512-cOToXQPdxvLfK0MH4ZFrrL3cOpDwbboKupFS96MCvrHsHMABMk48vdd1fRWkNG6F5D1JZMvoI5Y74sj8vtHGpA== dependencies: - "@types/hoist-non-react-statics" "^3.3.1" + "@types/hoist-non-react-statics" "^3.3.5" hoist-non-react-statics "^3.3.2" universal-cookie "^6.0.0" @@ -8734,39 +8495,31 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-device-detect@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-device-detect/-/react-device-detect-2.1.2.tgz#60abb6fa361ec4cc839469a0c4c3e9b8ea17d6b5" - integrity sha512-N42xttwez3ECgu4KpOL2ICesdfoz8NCBfmc1rH9FRYSjH7NmMyANPSrQ3EvAtJyj/6TzJNhrANSO38iXjCB2Ug== - dependencies: - ua-parser-js "^0.7.30" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^19.0.0: + version "19.1.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.1.tgz#2daa9ff7f3ae384aeb30e76d5ee38c046dc89893" + integrity sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.26.0" react-dropzone@^14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.2.3.tgz#0acab68308fda2d54d1273a1e626264e13d4e84b" - integrity sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug== + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== dependencies: - attr-accept "^2.2.2" - file-selector "^0.6.0" + attr-accept "^2.2.4" + file-selector "^2.1.0" prop-types "^15.8.1" react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.1.0.tgz#22b86256beb1c5856f08a9a228adb8121dd985f2" + integrity sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ== react-icons@^4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.11.0.tgz#4b0e31c9bfc919608095cc429c4f1846f4d66c65" - integrity sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA== + version "4.12.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.12.0.tgz#54806159a966961bfd5cdb26e492f4dafd6a8d78" + integrity sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw== react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: version "16.13.1" @@ -8779,9 +8532,9 @@ react-is@^17.0.1: integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-lazylog@^4.5.3: version "4.5.3" @@ -8821,19 +8574,19 @@ react-refresh@^0.11.0: integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== react-router-dom@^6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.16.0.tgz#86f24658da35eb66727e75ecbb1a029e33ee39d9" - integrity sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg== + version "6.30.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.1.tgz#da2580c272ddb61325e435478566be9563a4a237" + integrity sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw== dependencies: - "@remix-run/router" "1.9.0" - react-router "6.16.0" + "@remix-run/router" "1.23.0" + react-router "6.30.1" -react-router@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.16.0.tgz#abbf3d5bdc9c108c9b822a18be10ee004096fb81" - integrity sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA== +react-router@6.30.1: + version "6.30.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.1.tgz#ecb3b883c9ba6dbf5d319ddbc996747f4ab9f4c3" + integrity sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ== dependencies: - "@remix-run/router" "1.9.0" + "@remix-run/router" "1.23.0" react-scripts@^5.0.1: version "5.0.1" @@ -8898,14 +8651,15 @@ react-string-replace@^0.4.1: lodash "^4.17.4" react-terminal@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-terminal/-/react-terminal-1.3.1.tgz#7feaaf732b956b806edc1c7c07600983309e4ddc" - integrity sha512-lbkrih1be0nlJptZR7uwV6YF8PMuxKJOKhGN+GVuFKp9dY/qpSYF76KMGZZJnWbbxAt5Bkf+aUt4iyy5F8NBdQ== + version "1.4.5" + resolved "https://registry.yarnpkg.com/react-terminal/-/react-terminal-1.4.5.tgz#6c43f89f7b097871f94f60d7dac03d774de2cc0f" + integrity sha512-uv50LYNb4G/ACr8ghPUuZkypY0UxWm+YBK3M0MLaBG6kALeS9FxNCBhmQw/Uu9ckkE2k5E3kZPUVbR5D6uGOlA== dependencies: - prop-types "^15.7.2" - react-device-detect "2.1.2" + react "^19.0.0" + react-dom "^19.0.0" + ua-parser-js "^2.0.0" -react-transition-group@^4.2.0, react-transition-group@^4.4.5: +react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -8916,9 +8670,9 @@ react-transition-group@^4.2.0, react-transition-group@^4.4.5: prop-types "^15.6.2" react-virtualized@^9.21.0: - version "9.22.5" - resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.5.tgz#bfb96fed519de378b50d8c0064b92994b3b91620" - integrity sha512-YqQMRzlVANBv1L/7r63OHa2b0ZsAaDp1UhVNEdUaXI8A5u6hTpA5NYtUueLH2rFuY/27mTGIBl7ZhqFKzw18YQ== + version "9.22.6" + resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.6.tgz#3ae2aa69eca61cf3af332e2f9d6b4aa5638786d5" + integrity sha512-U5j7KuUQt3AaMatlMJ0UJddqSiX+Km0YJxSqbAzIiGw5EmNz0khMyqP2hzgu4+QUtm+QPIrxzUX4raJxmVJnHg== dependencies: "@babel/runtime" "^7.7.2" clsx "^1.0.4" @@ -8927,12 +8681,10 @@ react-virtualized@^9.21.0: prop-types "^15.7.2" react-lifecycles-compat "^3.0.4" -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@^19.0.0: + version "19.1.1" + resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af" + integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ== read-cache@^1.0.0: version "1.0.0" @@ -8941,25 +8693,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - readable-stream@^2.0.1: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -8973,7 +8706,7 @@ readable-stream@^2.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.0: +readable-stream@^3.0.6: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -8982,6 +8715,11 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -9016,22 +8754,24 @@ redux@^4.2.1: dependencies: "@babel/runtime" "^7.9.2" -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -9046,49 +8786,55 @@ regenerator-runtime@^0.13.9: integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regex-parser@^2.2.11: - version "2.2.11" - resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" - integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + version "2.3.1" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.1.tgz#ee3f70e50bdd81a221d505242cb9a9c275a2ad91" + integrity sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: - "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" + +rehackt@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" + integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== relateurl@^0.2.7: version "0.2.7" @@ -9159,43 +8905,33 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== +resolve@^1.1.7, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.4, resolve@^1.22.8: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -response-iterator@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" - integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -9215,9 +8951,9 @@ rollup-plugin-terser@^7.0.0: terser "^5.0.0" rollup@^2.43.1: - version "2.79.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" - integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + version "2.79.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.2.tgz#f150e4a5db4b121a21a747d762f701e5e9f49090" + integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== optionalDependencies: fsevents "~2.3.2" @@ -9228,34 +8964,43 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.0.0, safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" @@ -9267,16 +9012,6 @@ sanitize.css@*: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== -sass-graph@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-4.0.1.tgz#2ff8ca477224d694055bf4093f414cf6cfad1d2e" - integrity sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA== - dependencies: - glob "^7.0.0" - lodash "^4.17.11" - scss-tokenizer "^0.4.3" - yargs "^17.2.1" - sass-loader@^12.3.0: version "12.6.0" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" @@ -9285,6 +9020,17 @@ sass-loader@^12.3.0: klona "^2.0.4" neo-async "^2.6.2" +sass@^1.90.0: + version "1.90.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.90.0.tgz#d6fc2be49c7c086ce86ea0b231a35bf9e33cb84b" + integrity sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -9297,12 +9043,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.26.0: + version "0.26.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337" + integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== schema-utils@2.7.0: version "2.7.0" @@ -9322,7 +9066,7 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: +schema-utils@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -9331,37 +9075,30 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== +schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" + integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -scss-tokenizer@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz#1058400ee7d814d71049c29923d2b25e61dc026c" - integrity sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw== - dependencies: - js-base64 "^2.4.9" - source-map "^0.7.3" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" -"semver@2 || 3 || 4 || 5", semver@^5.6.0, semver@^5.7.0: +semver@^5.6.0, semver@^5.7.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -9371,17 +9108,15 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -9404,10 +9139,10 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -9424,29 +9159,46 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== 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" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" setprototypeof@1.1.0: version "1.1.0" @@ -9465,7 +9217,7 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -shallowequal@^1.1.0: +shallowequal@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== @@ -9482,25 +9234,61 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.7.3, shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== +shell-quote@^1.7.3, shell-quote@^1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" + integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.4, side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -9521,11 +9309,6 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -9535,41 +9318,15 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-loader@^3.0.0: version "3.0.2" @@ -9594,9 +9351,9 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== source-map@^0.8.0-beta.0: version "0.8.0-beta.0" @@ -9610,32 +9367,6 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -9664,20 +9395,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -9712,19 +9429,13 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== +stop-iteration-iterator@^1.0.0, stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: - internal-slot "^1.0.4" + es-errors "^1.3.0" + internal-slot "^1.1.0" string-length@^4.0.1: version "4.0.2" @@ -9747,7 +9458,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9756,47 +9467,91 @@ string-natural-compare@^3.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.includes@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" + integrity sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.matchall@^4.0.12, string.prototype.matchall@^4.0.6: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -9821,6 +9576,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -9868,34 +9630,24 @@ strip-json-comments@^3.1.1: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== style-loader@^3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" - integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== + version "3.3.4" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.4.tgz#f30f786c36db03a45cbd55b6a70d930c479090e7" + integrity sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w== styled-components@^6.0.8: - version "6.0.8" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.0.8.tgz#90617ad60de39772e03a81c8f3b8e66c12f51c44" - integrity sha512-AwI02MTWZwqjzfXgR5QcbmcSn5xVjY4N2TLjSuYnmuBGF3y7GicHz3ysbpUq2EMJP5M8/Nc22vcmF3V3WNZDFA== - dependencies: - "@babel/cli" "^7.21.0" - "@babel/core" "^7.21.0" - "@babel/helper-module-imports" "^7.18.6" - "@babel/plugin-external-helpers" "^7.18.6" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/preset-env" "^7.20.2" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.21.0" - "@babel/traverse" "^7.21.2" - "@emotion/is-prop-valid" "^1.2.1" - "@emotion/unitless" "^0.8.0" - "@types/stylis" "^4.0.2" - css-to-react-native "^3.2.0" - csstype "^3.1.2" - postcss "^8.4.23" - shallowequal "^1.1.0" - stylis "^4.3.0" - tslib "^2.5.0" + version "6.1.19" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-6.1.19.tgz#9a41b4db79a3b7a2477daecabe8dd917235263d6" + integrity sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA== + dependencies: + "@emotion/is-prop-valid" "1.2.2" + "@emotion/unitless" "0.8.1" + "@types/stylis" "4.2.5" + css-to-react-native "3.2.0" + csstype "3.1.3" + postcss "8.4.49" + shallowequal "1.1.0" + stylis "4.3.2" + tslib "2.6.2" stylehacks@^5.1.1: version "5.1.1" @@ -9905,19 +9657,19 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylis@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" - integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== +stylis@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" + integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== -sucrase@^3.32.0: - version "3.34.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.34.0.tgz#1e0e2d8fcf07f8b9c3569067d92fbd8690fb576f" - integrity sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== +sucrase@^3.35.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" commander "^4.0.0" - glob "7.1.6" + glob "^10.3.10" lines-and-columns "^1.1.6" mz "^2.7.0" pirates "^4.0.1" @@ -10005,54 +9757,42 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tailwindcss@^3.0.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.3.tgz#90da807393a2859189e48e9e7000e6880a736daf" - integrity sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w== + version "3.4.17" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" + integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" - chokidar "^3.5.3" + chokidar "^3.6.0" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.2.12" + fast-glob "^3.3.2" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.18.2" - lilconfig "^2.1.0" - micromatch "^4.0.5" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" normalize-path "^3.0.0" object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" + picocolors "^1.1.1" + postcss "^8.4.47" postcss-import "^15.1.0" postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== temp-dir@^2.0.0: version "2.0.0" @@ -10077,24 +9817,24 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== +terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.11: + version "5.3.14" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz#9031d48e57ab27567f02ace85c7d690db66c3e06" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== dependencies: - "@jridgewell/trace-mapping" "^0.3.17" + "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" -terser@^5.0.0, terser@^5.10.0, terser@^5.16.8: - version "5.21.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.21.0.tgz#d2b27e92b5e56650bc83b6defa00a110f0b124b2" - integrity sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw== +terser@^5.0.0, terser@^5.10.0, terser@^5.31.1: + version "5.43.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.43.1.tgz#88387f4f9794ff1a29e7ad61fb2932e25b4fdb6d" + integrity sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" + acorn "^8.14.0" commander "^2.20.0" source-map-support "~0.5.20" @@ -10146,11 +9886,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -10164,9 +9899,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -10187,15 +9922,10 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -"true-case-path@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" - integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tryer@^1.0.1: version "1.0.1" @@ -10214,25 +9944,30 @@ ts-invariant@^0.10.3: dependencies: tslib "^2.1.0" -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.7.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tsutils@^3.21.0: version "3.21.0" @@ -10265,11 +10000,6 @@ type-fest@^0.16.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -10280,16 +10010,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10298,44 +10018,50 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typedarray-to-buffer@^3.1.5: version "3.1.5" @@ -10344,20 +10070,31 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -ua-parser-js@^0.7.30: - version "0.7.36" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.36.tgz#382c5d6fc09141b6541be2cae446ecfcec284db2" - integrity sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q== +ua-is-frozen@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz#bfbc5f06336e379590e36beca444188c7dc3a7f3" + integrity sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +ua-parser-js@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-2.0.4.tgz#ea6698b055af2a61661d8793f069452cf456c0df" + integrity sha512-XiBOnM/UpUq21ZZ91q2AVDOnGROE6UQd37WrO9WBgw4u2eGvUCNOheMmZ3EfEUj7DLHr8tre+Um/436Of/Vwzg== dependencies: - call-bind "^1.0.2" + "@types/node-fetch" "^2.6.12" + detect-europe-js "^0.1.2" + is-standalone-pwa "^0.1.1" + node-fetch "^2.7.0" + ua-is-frozen "^0.1.2" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" uncontrollable@^7.2.1: version "7.2.1" @@ -10369,7 +10106,7 @@ uncontrollable@^7.2.1: invariant "^2.2.4" react-lifecycles-compat "^3.0.4" -uncontrollable@^8.0.1: +uncontrollable@^8.0.4: version "8.0.4" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== @@ -10379,20 +10116,15 @@ underscore@1.12.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== -underscore@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== - -undici-types@~5.25.1: - version "5.25.3" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3" - integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -10403,43 +10135,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -10448,12 +10152,12 @@ unique-string@^2.0.0: crypto-random-string "^2.0.0" universal-cookie@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-6.1.1.tgz#2d619e21804c93b39ff0c77fe47dafd7a492346d" - integrity sha512-33S9x3CpdUnnjwTNs2Fgc41WGve2tdLtvaK2kPSbZRc5pGpz2vQFbRWMxlATsxNNe/Cy8SzmnmbuBM85jpZPtA== + version "6.1.3" + resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-6.1.3.tgz#891386460f4407f8443d416d07f7334440c5516c" + integrity sha512-AETYRrhpRgl9T1YtnODmQE32G81U3A+f3HO3ZeK7efbXqe3x+RNOW4RTpV0iff7zJWhGYJA6EI0Mm+w50aFTAw== dependencies: - "@types/cookie" "^0.5.1" - cookie "^0.5.0" + "@types/cookie" "^0.6.0" + cookie "^0.6.0" universalify@^0.2.0: version "0.2.0" @@ -10461,9 +10165,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -10480,13 +10184,13 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -10504,9 +10208,9 @@ url-parse@^1.5.3: requires-port "^1.0.0" use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -10554,14 +10258,6 @@ v8flags@^3.1.1: dependencies: homedir-polyfill "^1.0.1" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -10595,10 +10291,10 @@ warning@^4.0.0, warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== +watchpack@^2.4.1: + version "2.4.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947" + integrity sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -10610,6 +10306,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10625,10 +10326,10 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== +webpack-dev-middleware@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" + integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== dependencies: colorette "^2.0.10" memfs "^3.4.3" @@ -10637,9 +10338,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.6.0: - version "4.15.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== + version "4.15.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz#9e0c70a42a012560860adb186986da1248333173" + integrity sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -10669,7 +10370,7 @@ webpack-dev-server@^4.6.0: serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" + webpack-dev-middleware "^5.3.4" ws "^8.13.0" webpack-manifest-plugin@^4.0.2: @@ -10696,40 +10397,41 @@ webpack-sources@^2.2.0: source-list-map "^2.0.1" source-map "^0.6.1" -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +webpack-sources@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.3.tgz#d4bf7f9909675d7a070ff14d0ef2a4f3c982c723" + integrity sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg== webpack@^5.64.4: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" + version "5.101.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.101.0.tgz#4b81407ffad9857f81ff03f872e3369b9198cc9d" + integrity sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.8" + "@types/json-schema" "^7.0.15" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.15.0" + acorn-import-phases "^1.0.3" + browserslist "^4.24.0" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" + enhanced-resolve "^5.17.2" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.2.0" + schema-utils "^4.3.2" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.1" + webpack-sources "^3.3.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" @@ -10758,15 +10460,23 @@ whatwg-fetch@^2.0.4: integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== whatwg-fetch@^3.6.2: - version "3.6.19" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz#caefd92ae630b91c07345537e67f8354db470973" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -10785,55 +10495,58 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.1.0" webidl-conversions "^6.1.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +which-boxed-primitive@^1.0.2, which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" is-generator-function "^1.0.10" - is-regex "^1.1.4" + is-regex "^1.2.1" is-weakref "^1.0.2" isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.13, which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^1.3.1: version "1.3.1" @@ -10842,21 +10555,14 @@ which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@~1.2.3: +word-wrap@^1.2.5, word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -11030,6 +10736,15 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -11039,6 +10754,15 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -11055,14 +10779,14 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.13.0: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== xml-name-validator@^3.0.0: version "3.0.0" @@ -11084,31 +10808,21 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.1.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== +yaml@^2.3.4: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== -yargs-parser@^20.2.2, yargs-parser@^20.2.3: +yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -11122,23 +10836,10 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.2.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yarn@^1.22.19: - version "1.22.19" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.19.tgz#4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + version "1.22.22" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz#ac34549e6aa8e7ead463a7407e1c7390f61a6610" + integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== yocto-queue@^0.1.0: version "0.1.0" From 972208eeaecd9ba0fd83194b179dd05aac16c7d6 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Tue, 12 Aug 2025 12:20:59 +0200 Subject: [PATCH 02/31] Migrate to Vite + TypeScript and clean up project * Remove unused pages & update dependencies * Migrate to Vite and more cleanup * Remove React logos * Migrate to TypeScript --- public/index.html => index.html | 16 +- jsconfig.json | 8 - package.json | 71 +- public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes src/{App.js => App.tsx} | 3 +- src/{EnvConfig.js => EnvConfig.ts} | 0 src/assets/scss/App.scss | 2 +- src/components/auth/JwtAuthentcation.js | 5 - .../cards/scanner-controls/ScannerCard.js | 35 - .../UploadDropzones/FirmwareUploadDropzone.js | 90 - .../{EmulatorView.js => EmulatorView.jsx} | 0 src/components/emulator/LogcatTabView.js | 46 - src/components/emulator/LogcatView.js | 44 - .../login/{LoginForm.js => LoginForm.tsx} | 14 +- .../navigation/Navbar/SideNavbar.js | 0 .../TopNavbar.js => navbar/TopNavbar.tsx} | 11 +- .../{RedirectToMain.js => RedirectToMain.ts} | 0 src/components/register/RegisterUserForm.js | 168 - .../{PrivateRoute.js => PrivateRoute.jsx} | 0 src/components/search/SearchEngine.js | 24 - .../tables/AndroidAppTables/AppScanTable.js | 183 - .../tables/FirmwareTables/FirmwareTable.js | 58 - .../tables/UserTables/AdminUserTable.js | 41 - .../toggle/ThemeToggle/ThemeToggle.js | 59 - src/env.d.ts | 12 + .../administration/AdminDashboard.js | 24 - .../administration/ServerControls.js | 20 - src/fragments/administration/ServerLogs.js | 20 - .../administration/ServerSettings.js | 19 - .../administration/UserManagement.js | 20 - .../scanner-controls/FirmwareControls.js | 75 - .../scanner-controls/ScannerControls.js | 73 - src/graphql/{mutations.js => mutations.ts} | 0 src/graphql/{queries.js => queries.ts} | 12 - src/hooks/fetch/useFetch.js | 27 - ...Authentication.js => useAuthentication.ts} | 0 .../{useDarkMode.js => useDarkMode.ts} | 17 +- src/hooks/validation/useEmailValidation.js | 37 - src/hooks/validation/usePasswordValidation.js | 57 - src/hooks/validation/useUsernameValidation.js | 38 - src/index.js | 53 - src/index.tsx | 46 + src/old/App.test.js | 8 - src/old/reportWebVitals.js | 13 - src/old/setupTests.js | 5 - src/pages/{AboutPage.js => AboutPage.tsx} | 0 src/pages/AdminPage.js | 69 - .../{EmulatorPage.js => EmulatorPage.jsx} | 0 src/pages/{LandingPage.js => LandingPage.tsx} | 1 - src/pages/{LoginPage.js => LoginPage.tsx} | 0 src/pages/{LogoutPage.js => LogoutPage.tsx} | 1 - src/pages/ProfilePage.js | 14 - src/pages/RegisterPage.js | 45 - src/pages/ResetPasswordPage.js | 0 src/pages/ScanReportPage.js | 11 - src/pages/ScannerPage.js | 212 - src/pages/SearchPage.js | 15 - src/pages/StatisticsPage.js | 0 src/pages/UploadPage.js | 48 - src/redux/features/jwtAuthToken.js | 22 - src/redux/store.js | 9 - src/utils/formatters/TableDataFormatter.js | 8 - tsconfig.json | 47 + vite.config.ts | 18 + yarn.lock | 11917 +++------------- 66 files changed, 1948 insertions(+), 11943 deletions(-) rename public/index.html => index.html (61%) delete mode 100644 jsconfig.json delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png rename src/{App.js => App.tsx} (93%) rename src/{EnvConfig.js => EnvConfig.ts} (100%) delete mode 100644 src/components/auth/JwtAuthentcation.js delete mode 100644 src/components/cards/scanner-controls/ScannerCard.js delete mode 100644 src/components/dropzone/UploadDropzones/FirmwareUploadDropzone.js rename src/components/emulator/{EmulatorView.js => EmulatorView.jsx} (100%) delete mode 100644 src/components/emulator/LogcatTabView.js delete mode 100644 src/components/emulator/LogcatView.js rename src/components/login/{LoginForm.js => LoginForm.tsx} (84%) delete mode 100644 src/components/navigation/Navbar/SideNavbar.js rename src/components/navigation/{Navbar/TopNavbar.js => navbar/TopNavbar.tsx} (84%) rename src/components/redirects/{RedirectToMain.js => RedirectToMain.ts} (100%) delete mode 100644 src/components/register/RegisterUserForm.js rename src/components/routes/{PrivateRoute.js => PrivateRoute.jsx} (100%) delete mode 100644 src/components/search/SearchEngine.js delete mode 100644 src/components/tables/AndroidAppTables/AppScanTable.js delete mode 100644 src/components/tables/FirmwareTables/FirmwareTable.js delete mode 100644 src/components/tables/UserTables/AdminUserTable.js delete mode 100644 src/components/toggle/ThemeToggle/ThemeToggle.js create mode 100644 src/env.d.ts delete mode 100644 src/fragments/administration/AdminDashboard.js delete mode 100644 src/fragments/administration/ServerControls.js delete mode 100644 src/fragments/administration/ServerLogs.js delete mode 100644 src/fragments/administration/ServerSettings.js delete mode 100644 src/fragments/administration/UserManagement.js delete mode 100644 src/fragments/administration/scanner-controls/FirmwareControls.js delete mode 100644 src/fragments/administration/scanner-controls/ScannerControls.js rename src/graphql/{mutations.js => mutations.ts} (100%) rename src/graphql/{queries.js => queries.ts} (71%) delete mode 100644 src/hooks/fetch/useFetch.js rename src/hooks/login/{useAuthentication.js => useAuthentication.ts} (100%) rename src/hooks/theming/{useDarkMode.js => useDarkMode.ts} (50%) delete mode 100644 src/hooks/validation/useEmailValidation.js delete mode 100644 src/hooks/validation/usePasswordValidation.js delete mode 100644 src/hooks/validation/useUsernameValidation.js delete mode 100644 src/index.js create mode 100644 src/index.tsx delete mode 100644 src/old/App.test.js delete mode 100644 src/old/reportWebVitals.js delete mode 100644 src/old/setupTests.js rename src/pages/{AboutPage.js => AboutPage.tsx} (100%) delete mode 100644 src/pages/AdminPage.js rename src/pages/{EmulatorPage.js => EmulatorPage.jsx} (100%) rename src/pages/{LandingPage.js => LandingPage.tsx} (97%) rename src/pages/{LoginPage.js => LoginPage.tsx} (100%) rename src/pages/{LogoutPage.js => LogoutPage.tsx} (97%) delete mode 100644 src/pages/ProfilePage.js delete mode 100644 src/pages/RegisterPage.js delete mode 100644 src/pages/ResetPasswordPage.js delete mode 100644 src/pages/ScanReportPage.js delete mode 100644 src/pages/ScannerPage.js delete mode 100644 src/pages/SearchPage.js delete mode 100644 src/pages/StatisticsPage.js delete mode 100644 src/pages/UploadPage.js delete mode 100644 src/redux/features/jwtAuthToken.js delete mode 100644 src/redux/store.js delete mode 100644 src/utils/formatters/TableDataFormatter.js create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/public/index.html b/index.html similarity index 61% rename from public/index.html rename to index.html index d9b52e02..80297656 100644 --- a/public/index.html +++ b/index.html @@ -2,33 +2,25 @@ - + - + - - + FirmwareDroid
+ - + FirmwareDroid - - + +
- - - + + diff --git a/package.json b/package.json index 71a45bc2..83599c46 100644 --- a/package.json +++ b/package.json @@ -1,68 +1,75 @@ { - "name": "firmwaredroid-client", - "version": "0.1.0", + "name": "firmware-droid-client", "private": true, + "version": "0.2.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint firmware-droid-client", + "preview": "vite preview", + "build_docker_image": "docker ../build ./ -f ./Dockerfile -t firmwaredroid-frontend --platform=\"linux/amd64\"", + "dev_deploy": "vite build && rm -R -f ../FirmwareDroid/firmware-droid-client/build/ && cp -v -r ./dist ../FirmwareDroid/firmware-droid-client/build/", + "schema:export": "docker compose exec -T web sh -lc 'cd /var/www/source && python manage.py graphql_schema --schema api.v2.schema.FirmwareDroidRootSchema.schema --out /var/www/firmware-droid-client/schema/schema.graphql --indent 2'", + "codegen": "graphql-codegen", + "codegen:all": "yarn schema:export && yarn codegen" + }, "dependencies": { "@apollo/client": "^3.13.9", + "@hookform/resolvers": "^5.2.1", "@popperjs/core": "^2.11.8", - "@types/react": "^19", + "@radix-ui/react-avatar": "^1.1.10", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.7", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/vite": "^4.1.12", + "@tanstack/react-table": "^8.21.3", "android-emulator-webrtc": "^1.0.18", - "bootstrap": "^5.3.7", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "events": "^3.3.0", "graphql": "^16.11.0", + "lucide-react": "^0.540.0", + "next-themes": "^0.4.6", "react": "^19.1.1", - "react-bootstrap": "^2.10.10", - "react-cookie": "^8.0.1", "react-dom": "^19.1.1", - "react-icons": "^5.5.0", - "react-router-dom": "^7.8.0", - "react-terminal": "^1.4.5", + "react-dropzone": "^14.3.8", + "react-hook-form": "^7.62.0", + "react-resizable-panels": "^3.0.4", + "react-router": "^7.8.0", "sass": "^1.90.0", - "styled-components": "^6.1.19" - }, - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview", - "build_docker_image": "docker build ./ -f ./Dockerfile -t firmwaredroid-frontend --platform=\"linux/amd64\"", - "dev_deploy": "vite build && rm -R -f ../FirmwareDroid/firmware-droid-client/build/ && cp -v -r ./dist ../FirmwareDroid/firmware-droid-client/build/", - "schema:export": "docker compose exec -T web sh -lc 'cd /var/www/source && python manage.py graphql_schema --schema api.v2.schema.FirmwareDroidRootSchema.schema --out /var/www/firmware-droid-client/schema/schema.graphql --indent 2'", - "codegen": "graphql-codegen", - "codegen:all": "yarn schema:export && yarn codegen" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] + "shadcn": "^2.10.0", + "sonner": "^2.0.7", + "styled-components": "^6.1.19", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4.1.12", + "zod": "^4.0.17" }, "devDependencies": { + "@eslint/js": "^9.33.0", "@graphql-codegen/cli": "^5.0.7", "@graphql-codegen/client-preset": "^4.8.3", - "@graphql-typed-document-node/core": "^3.2.0", - "@testing-library/dom": "^10.4.1", - "@testing-library/jest-dom": "^6.6.4", - "@testing-library/react": "^16.3.0", - "@testing-library/user-event": "^14.6.1", "@types/node": "^24.2.1", - "@types/react-dom": "^19", - "@typescript-eslint/eslint-plugin": "^8.39.1", - "@typescript-eslint/parser": "^8.39.1", + "@types/react": "^19.1.10", + "@types/react-dom": "^19.1.7", "@vitejs/plugin-react": "^5.0.0", "eslint": "^9.33.0", - "typescript": "^5.9.2", - "vite": "^7.1.1" + "eslint-plugin-react-dom": "^1.52.4", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "eslint-plugin-react-x": "^1.52.4", + "globals": "^16.3.0", + "tw-animate-css": "^1.3.6", + "typescript": "~5.8.3", + "typescript-eslint": "^8.39.1", + "vite": "^7.1.2" } } diff --git a/src/App.tsx b/src/App.tsx index cac372d4..0f7f8ca4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,45 +1,31 @@ -import React from "react"; -import { ThemeProvider } from 'styled-components'; -import { lightTheme, darkTheme } from './assets/theming/theme'; -import { GlobalStyles } from './assets/theming/global'; -import { useDarkMode } from './hooks/theming/useDarkMode'; -import {Container, Spinner} from "react-bootstrap"; -import { useQuery } from "@apollo/client"; -import LandingPage from "./pages/LandingPage"; -import TopNavbar from "./components/navigation/navbar/TopNavbar"; -import {GET_API_HEALTH} from "./graphql/api-health.graphql"; +import {Navigate, Route, Routes} from "react-router"; +import LoginPage from "@/pages/login-page.tsx"; +import PublicOnlyRoute from "@/routes/PublicOnlyRoute.tsx"; +import ProtectedLayout from "@/routes/ProtectedLayout.tsx"; +import HomePage from "@/pages/home-page.tsx"; +import EmulatorPage from "@/pages/EmulatorPage"; +import {ImporterPage} from "@/pages/importer-page.tsx"; +import {ScannerPage} from "@/pages/scanner-page.tsx"; +import {FirmwaresPage} from "@/pages/firmwares-page.tsx"; function App() { - const [theme, toggleTheme, componentMounted] = useDarkMode(); - const themeMode = theme === 'light' ? lightTheme : darkTheme; - const { loading, error, data } = useQuery(GET_API_HEALTH); - - if (!componentMounted || loading) { return ( - - - Loading... - - ); - } - - if (error) { - return `Error! ${error.message}`; - } + + }> + }/> + - if (data?.isApiUp) { - return ( - - - - - - - - ); - } - - return "API is down!"; + }> + }/> + }/> + }/> + }/> + }/> + }/> + {/*}/>*/} {/*TOOD: Add 404 page?*/} + + + ); } -export default App; +export default App diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 9b4fc8fd..3a89b959 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -15,15 +15,43 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, + "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": typeof types.GetApkObjectIdsByFirmwareObjectIdsDocument, + "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": typeof types.AppTableRowScannerFragmentDoc, + "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": typeof types.GetAppsByObjectIdsScannerDocument, + "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": typeof types.CreateApkScanJobDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": typeof types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, - "\n query GetCurrentUser {\n me {\n email\n firstName\n isActive\n isStaff\n isSuperuser\n lastLogin\n lastName\n username\n dateJoined\n id\n }\n }\n": typeof types.GetCurrentUserDocument, + "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, + "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, + "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, + "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": typeof types.GetFirmwareObjectIdListDocument, + "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": typeof types.FirmwareTableRowFragmentDoc, + "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, + "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareTableRowImporterFragmentDoc, + "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": typeof types.GetFirmwaresByObjectIdsImporterDocument, + "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": typeof types.FirmwareTableRowScannerFragmentDoc, + "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": typeof types.GetFirmwaresByObjectIdsScannerDocument, + "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": typeof types.DeleteFirmwareByObjectIdDocument, }; const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, + "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": types.GetApkObjectIdsByFirmwareObjectIdsDocument, + "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": types.AppTableRowScannerFragmentDoc, + "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": types.GetAppsByObjectIdsScannerDocument, + "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": types.CreateApkScanJobDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, - "\n query GetCurrentUser {\n me {\n email\n firstName\n isActive\n isStaff\n isSuperuser\n lastLogin\n lastName\n username\n dateJoined\n id\n }\n }\n": types.GetCurrentUserDocument, + "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, + "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, + "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, + "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": types.GetFirmwareObjectIdListDocument, + "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": types.FirmwareTableRowFragmentDoc, + "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, + "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareTableRowImporterFragmentDoc, + "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": types.GetFirmwaresByObjectIdsImporterDocument, + "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": types.FirmwareTableRowScannerFragmentDoc, + "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": types.GetFirmwaresByObjectIdsScannerDocument, + "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": types.DeleteFirmwareByObjectIdDocument, }; /** @@ -44,6 +72,22 @@ export function gql(source: string): unknown; * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n query GetApiHealth {\n isApiUp\n }\n"): (typeof documents)["\n query GetApiHealth {\n isApiUp\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n"): (typeof documents)["\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n"): (typeof documents)["\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n"): (typeof documents)["\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -55,7 +99,47 @@ export function gql(source: "\n mutation DeleteTokenCookie {\n deleteT /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetCurrentUser {\n me {\n email\n firstName\n isActive\n isStaff\n isSuperuser\n lastLogin\n lastName\n username\n dateJoined\n id\n }\n }\n"): (typeof documents)["\n query GetCurrentUser {\n me {\n email\n firstName\n isActive\n isStaff\n isSuperuser\n lastLogin\n lastName\n username\n dateJoined\n id\n }\n }\n"]; +export function gql(source: "\n query GetCurrentUserId {\n me {\n id\n }\n }\n"): (typeof documents)["\n query GetCurrentUserId {\n me {\n id\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"): (typeof documents)["\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n"): (typeof documents)["\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"): (typeof documents)["\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"): (typeof documents)["\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n"): (typeof documents)["\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n"]; export function gql(source: string) { return (documents as any)[source] ?? {}; diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 0edd002b..d6d6a486 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2031,6 +2031,31 @@ export type GetApiHealthQueryVariables = Exact<{ [key: string]: never; }>; export type GetApiHealthQuery = { __typename?: 'Query', isApiUp?: boolean | null }; +export type GetApkObjectIdsByFirmwareObjectIdsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetApkObjectIdsByFirmwareObjectIdsQuery = { __typename?: 'Query', android_app_id_list?: Array | null }; + +export type AppTableRowScannerFragment = { __typename?: 'AndroidAppType', id: string } & { ' $fragmentName'?: 'AppTableRowScannerFragment' }; + +export type GetAppsByObjectIdsScannerQueryVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; +}>; + + +export type GetAppsByObjectIdsScannerQuery = { __typename?: 'Query', android_app_list?: Array<( + { __typename?: 'AndroidAppType' } + & { ' $fragmentRefs'?: { 'AppTableRowScannerFragment': AppTableRowScannerFragment } } + ) | null> | null }; + +export type CreateApkScanJobMutationVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; + scannerName: Scalars['String']['input']; +}>; + + +export type CreateApkScanJobMutation = { __typename?: 'Mutation', createApkScanJob?: { __typename?: 'CreateApkScanJob', jobIdList?: Array | null } | null }; + export type GetAuthTokenQueryVariables = Exact<{ password: Scalars['String']['input']; username: Scalars['String']['input']; @@ -2044,13 +2069,86 @@ export type DeleteTokenCookieMutationVariables = Exact<{ [key: string]: never; } export type DeleteTokenCookieMutation = { __typename?: 'Mutation', deleteTokenCookie?: { __typename?: 'DeleteJSONWebTokenCookie', deleted: boolean } | null }; -export type GetCurrentUserQueryVariables = Exact<{ [key: string]: never; }>; +export type GetCurrentUserIdQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetCurrentUserIdQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', id: string } | null }; + +export type GetCurrentUserEmailAndUsernameQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetCurrentUserEmailAndUsernameQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, username: string } | null }; + +export type CreateFirmwareExtractorJobMutationVariables = Exact<{ + storageIndex: Scalars['Int']['input']; +}>; + +export type CreateFirmwareExtractorJobMutation = { __typename?: 'Mutation', createFirmwareExtractorJob?: { __typename?: 'CreateFirmwareExtractorJob', jobId?: string | null } | null }; + +export type GetFirmwareObjectIdListQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetFirmwareObjectIdListQuery = { __typename?: 'Query', android_firmware_id_list?: Array | null }; + +export type FirmwareTableRowFragment = { __typename?: 'AndroidFirmwareType', id: string, absoluteStorePath: string, aecsBuildFilePath?: string | null, filename: string, hasFileIndex?: boolean | null, hasFuzzyHashIndex?: boolean | null, indexedDate?: any | null, md5: string, originalFilename: string, osVendor: string, relativeStorePath: string, sha1: string, sha256: string, tag?: string | null, versionDetected?: number | null, pk?: string | null } & { ' $fragmentName'?: 'FirmwareTableRowFragment' }; + +export type GetFirmwaresByObjectIdsQueryVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; +}>; + + +export type GetFirmwaresByObjectIdsQuery = { __typename?: 'Query', android_firmware_list?: Array<( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareTableRowFragment': FirmwareTableRowFragment } } + ) | null> | null }; + +export type FirmwareTableRowImporterFragment = { __typename?: 'AndroidFirmwareType', id: string, indexedDate?: any | null, originalFilename: string, osVendor: string, versionDetected?: number | null } & { ' $fragmentName'?: 'FirmwareTableRowImporterFragment' }; + +export type GetFirmwaresByObjectIdsImporterQueryVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; +}>; + + +export type GetFirmwaresByObjectIdsImporterQuery = { __typename?: 'Query', android_firmware_list?: Array<( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareTableRowImporterFragment': FirmwareTableRowImporterFragment } } + ) | null> | null }; + +export type FirmwareTableRowScannerFragment = { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } & { ' $fragmentName'?: 'FirmwareTableRowScannerFragment' }; + +export type GetFirmwaresByObjectIdsScannerQueryVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; +}>; + + +export type GetFirmwaresByObjectIdsScannerQuery = { __typename?: 'Query', android_firmware_list?: Array<( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareTableRowScannerFragment': FirmwareTableRowScannerFragment } } + ) | null> | null }; + +export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; +}>; -export type GetCurrentUserQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, firstName: string, isActive: boolean, isStaff: boolean, isSuperuser: boolean, lastLogin?: any | null, lastName: string, username: string, dateJoined: any, id: string } | null }; +export type DeleteFirmwareByObjectIdMutation = { __typename?: 'Mutation', deleteAndroidFirmware?: { __typename?: 'DeleteAndroidFirmwareMutation', jobId?: string | null } | null }; +export const AppTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; +export const FirmwareTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; +export const FirmwareTableRowImporterFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const FirmwareTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; +export const GetApkObjectIdsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApkObjectIdsByFirmwareObjectIds"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_id_list"}}]}}]} as unknown as DocumentNode; +export const GetAppsByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; +export const CreateApkScanJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateApkScanJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; -export const GetCurrentUserDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"firstName"}},{"kind":"Field","name":{"kind":"Name","value":"isActive"}},{"kind":"Field","name":{"kind":"Name","value":"isStaff"}},{"kind":"Field","name":{"kind":"Name","value":"isSuperuser"}},{"kind":"Field","name":{"kind":"Name","value":"lastLogin"}},{"kind":"Field","name":{"kind":"Name","value":"lastName"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"dateJoined"}},{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; +export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; +export const GetFirmwareObjectIdListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwareObjectIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_id_list"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresByObjectIdsImporterDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsImporter"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowImporter"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; +export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/assets/theming/global.js b/src/assets/emulator/theming/global.js similarity index 100% rename from src/assets/theming/global.js rename to src/assets/emulator/theming/global.js diff --git a/src/assets/theming/theme.js b/src/assets/emulator/theming/theme.js similarity index 100% rename from src/assets/theming/theme.js rename to src/assets/emulator/theming/theme.js diff --git a/src/assets/images/logo.svg b/src/assets/images/logo.svg deleted file mode 100644 index 9dfc1c05..00000000 --- a/src/assets/images/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/assets/scss/App.scss b/src/assets/scss/App.scss deleted file mode 100644 index 1f7644bd..00000000 --- a/src/assets/scss/App.scss +++ /dev/null @@ -1 +0,0 @@ -@use "bootstrap/scss/bootstrap" as *; \ No newline at end of file diff --git a/src/components/emulator/EmulatorView.jsx b/src/components/emulator/EmulatorView.jsx deleted file mode 100644 index c28e1c94..00000000 --- a/src/components/emulator/EmulatorView.jsx +++ /dev/null @@ -1,248 +0,0 @@ -import {Button, ButtonGroup, Col, Container, Form, InputGroup, Row, Spinner, ToggleButton} from "react-bootstrap"; -import {CiLocationOn} from "react-icons/ci"; -import React, {useContext, useEffect, useState} from "react"; -import {Emulator} from "android-emulator-webrtc/emulator"; - -function EmulatorView({ index, - emulatorConnectionState, - setEmulatorConnectionState, - hasEmulatorAudio, - setHasEmulatorAudio, - longitudeValue, - setLongitudeValue, - latitudeValue, - setLatitudeValue, - hasEmulatorError, - setHasEmulatorError, - emulatorErrorMessage, - setEmulatorErrorMessage, - gpsLocation, - setGpsLocation, - volumeState, - setVolumeState, - radioEmulatorViewValue, - setRadioEmulatorViewValue, - emulatorUri, - setEmulatorUri, - radiosEmulatorView, - selectedEmulatorViewIndex, - onSelect}) { - const [showEmulator, setShowEmulator] = useState(false); - const [isLoading, setIsLoading] = useState(false); - const isSelected = index === selectedEmulatorViewIndex; - useEffect(() => { - if (emulatorConnectionState.emuState === "connecting") { - setIsLoading(true); - setShowEmulator(true); - } - }, [emulatorConnectionState]); - - const handleEmulatorUriChange = (e) => { - const newUri = String(e.target.value); - let emulatorUris = JSON.parse(sessionStorage.getItem('emulatorUris')) || []; - emulatorUris[index] = newUri; - sessionStorage.setItem('emulatorUris', JSON.stringify(emulatorUris)); - setEmulatorUri(newUri); - }; - - const onChangeEmulatorView = (e) => { - setRadioEmulatorViewValue(e.currentTarget.value) - }; - - const onEmulatorError = (error) => { - console.error("Emulator error", error) - if (!error.contains("receiveJsepMessages")) { - setHasEmulatorError(true); - setEmulatorErrorMessage(error); - } - } - - const onEmulatorStateChange = (state) => { - console.info("Emulator state changed", state) - setEmulatorConnectionState({ emuState: state }); - if (state === "disconnected") { - setIsLoading(false); - } - if (state === "connecting") { - setShowEmulator(true); - setIsLoading(true); - } - if (state === "connected") { - setIsLoading(false); - } - } - - const onClickConnect = () => { - if (showEmulator) { - setShowEmulator(false); - setIsLoading(false); - }else { - setShowEmulator(true); - setIsLoading(true); - } - }; - - function onClickDisconnect() { - setShowEmulator(false); - setIsLoading(false); - } - - - return (<> - - - - {hasEmulatorError && -

Oopps...some connection problem occurred!

- } - {isLoading && showEmulator && -
- -
- } - {showEmulator && !hasEmulatorError && - setHasEmulatorAudio({hasAudio: audioState})} - view={radioEmulatorViewValue} - gps={gpsLocation} - volume={volumeState.volume} - muted={volumeState.muted} - /> - } - {!showEmulator && -
- -
- } - - - {showEmulator && - - } - {!isSelected && - - } - {!hasEmulatorError &&

State: {emulatorConnectionState.emuState}

} - {hasEmulatorError &&

State: ERROR

} -
- - - -
- {isSelected && - <> - - {radiosEmulatorView.map((radio, idx) => ( - - {radio.name} - - ))} - - - - setLongitudeValue(Number(e.target.value))} - placeholder="Longitude" - /> - setLatitudeValue(Number(e.target.value))} - placeholder="Latitude" - /> - -
- - Volume {Math.floor(volumeState.volume * 100)}% - - { - let value = Number(e.target.value) - let muted = value === 0 - setVolumeState({volume: value, muted: muted}) - }} - value={volumeState.volume} - disabled={false} - /> - - - } - -
-
- - ); -} - -export default EmulatorView; - - - - diff --git a/src/graphql/api-health.graphql.ts b/src/components/graphql/api-health.graphql.ts similarity index 69% rename from src/graphql/api-health.graphql.ts rename to src/components/graphql/api-health.graphql.ts index dd6817e9..5ba17c66 100644 --- a/src/graphql/api-health.graphql.ts +++ b/src/components/graphql/api-health.graphql.ts @@ -1,4 +1,4 @@ -import {gql} from "../__generated__"; +import {gql} from "@/__generated__"; export const GET_API_HEALTH = gql(` query GetApiHealth { diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts new file mode 100644 index 00000000..80529f55 --- /dev/null +++ b/src/components/graphql/app.graphql.ts @@ -0,0 +1,33 @@ +import {gql} from "@/__generated__"; + +export const GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS = gql(` + query GetApkObjectIdsByFirmwareObjectIds { + android_app_id_list + } +`); + +export const APP_TABLE_ROW_SCANNER = gql(` + fragment AppTableRowScanner on AndroidAppType { + id + } +`); + +export const GET_APPS_BY_OBJECT_IDS_SCANNER = gql(` + query GetAppsByObjectIdsScanner($objectIds: [String!]!) { + android_app_list(objectIdList: $objectIds) { + ...AppTableRowScanner + } + } +`); + +export const CREATE_APK_SCAN_JOB = gql(` + mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) { + createApkScanJob( + moduleName: $scannerName + objectIdList: $objectIds + queueName: "high-python" + ) { + jobIdList + } + } +`); \ No newline at end of file diff --git a/src/graphql/auth.graphql.ts b/src/components/graphql/auth.graphql.ts similarity index 90% rename from src/graphql/auth.graphql.ts rename to src/components/graphql/auth.graphql.ts index f30a272e..49e0b666 100644 --- a/src/graphql/auth.graphql.ts +++ b/src/components/graphql/auth.graphql.ts @@ -1,4 +1,4 @@ -import {gql} from "../__generated__"; +import {gql} from "@/__generated__"; export const GET_AUTH_TOKEN = gql(` query GetAuthToken($password: String!, $username: String!) { diff --git a/src/components/graphql/current-user.graphql.ts b/src/components/graphql/current-user.graphql.ts new file mode 100644 index 00000000..538c589f --- /dev/null +++ b/src/components/graphql/current-user.graphql.ts @@ -0,0 +1,18 @@ +import {gql} from "@/__generated__"; + +export const GET_CURRENT_USER_ID = gql(` + query GetCurrentUserId { + me { + id + } + } +`); + +export const GET_CURRENT_USER_EMAIL_AND_USERNAME = gql(` + query GetCurrentUserEmailAndUsername { + me { + email + username + } + } +`); diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts new file mode 100644 index 00000000..496bf356 --- /dev/null +++ b/src/components/graphql/firmware.graphql.ts @@ -0,0 +1,111 @@ +import {gql} from "@/__generated__"; + +// ---------------------------------------------------------------------------------------------------- +// FIRMWARE EXTRACTION +// ---------------------------------------------------------------------------------------------------- + +export const CREATE_FIRMWARE_EXTRACTOR_JOB = gql(` + mutation CreateFirmwareExtractorJob($storageIndex: Int!) { + createFirmwareExtractorJob( + createFuzzyHashes: false + queueName: "high-python" + storageIndex: $storageIndex + ) { + jobId + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// GET FIRMWARES (ALL FIELDS) +// ---------------------------------------------------------------------------------------------------- + +export const GET_FIRMWARE_OBJECT_ID_LIST = gql(` + query GetFirmwareObjectIdList { + android_firmware_id_list + } +`); + +export const FIRMWARE_TABLE_ROW = gql(` + fragment FirmwareTableRow on AndroidFirmwareType { + id + absoluteStorePath + aecsBuildFilePath +# fileSizeBytes + filename + hasFileIndex + hasFuzzyHashIndex + indexedDate + md5 + originalFilename + osVendor +# partitionInfoDict + relativeStorePath + sha1 + sha256 + tag + versionDetected + pk + } +`); + +export const GET_FIRMWARES_BY_OBJECT_IDS = gql(` + query GetFirmwaresByObjectIds($objectIds: [String!]!) { + android_firmware_list(objectIdList: $objectIds) { + ...FirmwareTableRow + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// GET FIRMWARES FOR IMPORTER PAGE +// ---------------------------------------------------------------------------------------------------- + +export const FIRMWARE_TABLE_ROW_IMPORTER = gql(` + fragment FirmwareTableRowImporter on AndroidFirmwareType { + id + indexedDate + originalFilename + osVendor + versionDetected + } +`); + +export const GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER = gql(` + query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) { + android_firmware_list(objectIdList: $objectIds) { + ...FirmwareTableRowImporter + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// GET FIRMWARES FOR SCANNER PAGE +// ---------------------------------------------------------------------------------------------------- + +export const FIRMWARE_TABLE_ROW_SCANNER = gql(` + fragment FirmwareTableRowScanner on AndroidFirmwareType { + id + originalFilename + } +`); + +export const GET_FIRMWARES_BY_OBJECT_IDS_SCANNER = gql(` + query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) { + android_firmware_list(objectIdList: $objectIds) { + ...FirmwareTableRowScanner + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// DELETE FIRMWARES +// ---------------------------------------------------------------------------------------------------- + +export const DELETE_FIRMWARE_BY_OBJECT_ID = gql(` + mutation DeleteFirmwareByObjectId($objectIds: [String!]!) { + deleteAndroidFirmware(firmwareIdList: $objectIds) { + jobId + } + } +`); diff --git a/src/components/login/LoginForm.tsx b/src/components/login/LoginForm.tsx deleted file mode 100644 index f898880b..00000000 --- a/src/components/login/LoginForm.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import Form from "react-bootstrap/esm/Form"; -import React, { useState, type ChangeEvent, type FormEvent } from "react"; -import Button from "react-bootstrap/esm/Button"; -import { useNavigate } from 'react-router-dom'; -import { Alert, Container, Spinner } from "react-bootstrap"; -import { useLazyQuery } from "@apollo/client"; -import { useAuthentication } from "../../hooks/login/useAuthentication"; -import {GET_AUTH_TOKEN} from "../../graphql/auth.graphql"; - -const LoginForm = () => { - let renderResponse; - const navigate = useNavigate(); - const [showPasswordAlert, setShowPasswordAlert] = useState(false); - const [password, setPassword] = useState(""); - const [username, setUsername] = useState(""); - const {isAuthenticated, setAuthenticated} = useAuthentication(); - - let [login, {loading, data, error}] = useLazyQuery(GET_AUTH_TOKEN, { - onCompleted: (data) => { - setAuthenticated(true) - navigate("/", {replace: true}); - window.location.reload(); - }, - onError: (error) => { - setShowPasswordAlert(true); - } - }); - - const onSubmitLoginForm = ((event: FormEvent) => { - event.preventDefault(); - login({variables : {username : username, password: password}}); - }); - - const onChangePassword = ((event: ChangeEvent) => { - setPassword(event.target.value) - }); - - const onChangeEmail = ((event: ChangeEvent) => { - setUsername(event.target.value); - }); - - if(loading) { - renderResponse = - - - Login... - - }else{ - renderResponse = ( - <> - {showPasswordAlert && setShowPasswordAlert(false)} dismissible> - Seems like a wrong password or username! - } -
- - Username - - - - - Password - - - - -
- - ); - } - return renderResponse -}; - - -export default LoginForm; \ No newline at end of file diff --git a/src/components/navigation/navbar/TopNavbar.tsx b/src/components/navigation/navbar/TopNavbar.tsx deleted file mode 100644 index c8846b8d..00000000 --- a/src/components/navigation/navbar/TopNavbar.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import Nav from "react-bootstrap/Nav"; -import Navbar from "react-bootstrap/Navbar"; -import { useAuthentication } from "../../../hooks/login/useAuthentication"; - -type TopNavbarProps = { theme: 'light' | 'dark' }; - -const TopNavbar: React.FC = ({ theme }) => { - const { isAuthenticated } = useAuthentication(); - return ( - - FirmwareDroid - - - - ); -}; - -export default TopNavbar; \ No newline at end of file diff --git a/src/components/redirects/RedirectToMain.ts b/src/components/redirects/RedirectToMain.ts deleted file mode 100644 index d955a2ce..00000000 --- a/src/components/redirects/RedirectToMain.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; - -const RedirectToMain = () => { - const navigate = useNavigate(); - - useEffect(() => { - navigate('/'); - }, [navigate]); - - return null; -}; - -export default RedirectToMain; \ No newline at end of file diff --git a/src/components/routes/PrivateRoute.jsx b/src/components/routes/PrivateRoute.jsx deleted file mode 100644 index 63397f8d..00000000 --- a/src/components/routes/PrivateRoute.jsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import { useAuthentication } from '../../hooks/login/useAuthentication'; - -const withAuthentication = (WrappedComponent, RedirectComponent) => { - return (props) => { - const { isAuthenticated } = useAuthentication(); - - if (!isAuthenticated) { - return ; - } - - return ; - }; -}; - -export default withAuthentication; \ No newline at end of file diff --git a/src/components/ui/alert.tsx b/src/components/ui/alert.tsx new file mode 100644 index 00000000..14213546 --- /dev/null +++ b/src/components/ui/alert.tsx @@ -0,0 +1,66 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", + { + variants: { + variant: { + default: "bg-card text-card-foreground", + destructive: + "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Alert({ + className, + variant, + ...props +}: React.ComponentProps<"div"> & VariantProps) { + return ( +
+ ) +} + +function AlertTitle({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function AlertDescription({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Alert, AlertTitle, AlertDescription } diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx new file mode 100644 index 00000000..71e428b4 --- /dev/null +++ b/src/components/ui/avatar.tsx @@ -0,0 +1,53 @@ +"use client" + +import * as React from "react" +import * as AvatarPrimitive from "@radix-ui/react-avatar" + +import { cn } from "@/lib/utils" + +function Avatar({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarImage({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function AvatarFallback({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Avatar, AvatarImage, AvatarFallback } diff --git a/src/components/ui/breadcrumb.tsx b/src/components/ui/breadcrumb.tsx new file mode 100644 index 00000000..eb88f321 --- /dev/null +++ b/src/components/ui/breadcrumb.tsx @@ -0,0 +1,109 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { ChevronRight, MoreHorizontal } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { + return +
+ + ); +} diff --git a/src/components/ui/sidebar/site-header.tsx b/src/components/ui/sidebar/site-header.tsx new file mode 100644 index 00000000..fd5ff391 --- /dev/null +++ b/src/components/ui/sidebar/site-header.tsx @@ -0,0 +1,64 @@ +"use client" + +import {SidebarIcon} from "lucide-react" + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/components/ui/breadcrumb.tsx" +import {Button} from "@/components/ui/button.tsx" +import {Separator} from "@/components/ui/separator.tsx" +import {useSidebar} from "@/components/ui/sidebar.tsx" +import {ModeToggle} from "@/components/ui/theming/mode-toggle.tsx"; + +export function SiteHeader() { + const {toggleSidebar} = useSidebar() + + return ( +
+
+
+ + + + + + + Firmwares + + + + + + Firmware XYZ + + + + + + App XYZ + + + + + Report XYZ + + + +
+ +
+
+ ) +} diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 00000000..32ea0ef7 --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,13 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +export { Skeleton } diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 00000000..cd62aff2 --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,23 @@ +import { useTheme } from "next-themes" +import { Toaster as Sonner, ToasterProps } from "sonner" + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + + return ( + + ) +} + +export { Toaster } diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx new file mode 100644 index 00000000..5513a5cd --- /dev/null +++ b/src/components/ui/table.tsx @@ -0,0 +1,114 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Table({ className, ...props }: React.ComponentProps<"table">) { + return ( +
+ + + ) +} + +function TableHeader({ className, ...props }: React.ComponentProps<"thead">) { + return ( + + ) +} + +function TableBody({ className, ...props }: React.ComponentProps<"tbody">) { + return ( + + ) +} + +function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) { + return ( + tr]:last:border-b-0", + className + )} + {...props} + /> + ) +} + +function TableRow({ className, ...props }: React.ComponentProps<"tr">) { + return ( + + ) +} + +function TableHead({ className, ...props }: React.ComponentProps<"th">) { + return ( + - {selectedEmulatorViewIndex === null ? ( - <> - - - - ): ( - setSelectedEmulatorView(null)}>Multiple Emulator Views - - )} + {selectedEmulatorViewIndex === null ? (<> + + + ) : ( setSelectedEmulatorViewIndex(null)}>Multiple Emulator Views + )} - {selectedEmulatorViewIndex !== null ? ( - + {selectedEmulatorViewIndex !== null ? (+ updateEmulatorView(selectedEmulatorViewIndex, 'emulatorConnectionState', value)} + hasEmulatorAudio={emulatorViews[selectedEmulatorViewIndex].hasEmulatorAudio} + setHasEmulatorAudio={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorAudio', value)} + longitudeValue={emulatorViews[selectedEmulatorViewIndex].longitudeValue} + setLongitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'longitudeValue', value)} + latitudeValue={emulatorViews[selectedEmulatorViewIndex].latitudeValue} + setLatitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'latitudeValue', value)} + hasEmulatorError={emulatorViews[selectedEmulatorViewIndex].hasEmulatorError} + setHasEmulatorError={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorError', value)} + emulatorErrorMessage={emulatorViews[selectedEmulatorViewIndex].emulatorErrorMessage} + setEmulatorErrorMessage={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorErrorMessage', value)} + gpsLocation={emulatorViews[selectedEmulatorViewIndex].gpsLocation} + setGpsLocation={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'gpsLocation', value)} + volumeState={emulatorViews[selectedEmulatorViewIndex].volumeState} + setVolumeState={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'volumeState', value)} + radioEmulatorViewValue={emulatorViews[selectedEmulatorViewIndex].radioEmulatorViewValue} + setRadioEmulatorViewValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'radioEmulatorViewValue', value)} + emulatorUri={emulatorViews[selectedEmulatorViewIndex].emulatorUri} + setEmulatorUri={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorUri', value)} + radiosEmulatorView={emulatorViews[selectedEmulatorViewIndex].radiosEmulatorView} + onSelect={() => setSelectedEmulatorViewIndex(selectedEmulatorViewIndex)} + selectedEmulatorViewIndex={selectedEmulatorViewIndex} + /> + ) : (emulatorViews.map((emulatorView, index) => ( + updateEmulatorView(selectedEmulatorViewIndex, 'emulatorConnectionState', value)} - hasEmulatorAudio={emulatorViews[selectedEmulatorViewIndex].hasEmulatorAudio} - setHasEmulatorAudio={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorAudio', value)} - longitudeValue={emulatorViews[selectedEmulatorViewIndex].longitudeValue} - setLongitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'longitudeValue', value)} - latitudeValue={emulatorViews[selectedEmulatorViewIndex].latitudeValue} - setLatitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'latitudeValue', value)} - hasEmulatorError={emulatorViews[selectedEmulatorViewIndex].hasEmulatorError} - setHasEmulatorError={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorError', value)} - emulatorErrorMessage={emulatorViews[selectedEmulatorViewIndex].emulatorErrorMessage} - setEmulatorErrorMessage={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorErrorMessage', value)} - gpsLocation={emulatorViews[selectedEmulatorViewIndex].gpsLocation} - setGpsLocation={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'gpsLocation', value)} - volumeState={emulatorViews[selectedEmulatorViewIndex].volumeState} - setVolumeState={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'volumeState', value)} - radioEmulatorViewValue={emulatorViews[selectedEmulatorViewIndex].radioEmulatorViewValue} - setRadioEmulatorViewValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'radioEmulatorViewValue', value)} - emulatorUri={emulatorViews[selectedEmulatorViewIndex].emulatorUri} - setEmulatorUri={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorUri', value)} - radiosEmulatorView={emulatorViews[selectedEmulatorViewIndex].radiosEmulatorView} - onSelect={() => setSelectedEmulatorView(selectedEmulatorViewIndex)} - selectedEmulatorViewIndex={selectedEmulatorViewIndex} + index={index} + emulatorConnectionState={emulatorView.emulatorConnectionState} + setEmulatorConnectionState={(value) => updateEmulatorView(index, 'emulatorConnectionState', value)} + hasEmulatorAudio={emulatorView.hasEmulatorAudio} + setHasEmulatorAudio={(value) => updateEmulatorView(index, 'hasEmulatorAudio', value)} + longitudeValue={emulatorView.longitudeValue} + setLongitudeValue={(value) => updateEmulatorView(index, 'longitudeValue', value)} + latitudeValue={emulatorView.latitudeValue} + setLatitudeValue={(value) => updateEmulatorView(index, 'latitudeValue', value)} + hasEmulatorError={emulatorView.hasEmulatorError} + setHasEmulatorError={(value) => updateEmulatorView(index, 'hasEmulatorError', value)} + emulatorErrorMessage={emulatorView.emulatorErrorMessage} + setEmulatorErrorMessage={(value) => updateEmulatorView(index, 'emulatorErrorMessage', value)} + gpsLocation={emulatorView.gpsLocation} + setGpsLocation={(value) => updateEmulatorView(index, 'gpsLocation', value)} + volumeState={emulatorView.volumeState} + setVolumeState={(value) => updateEmulatorView(index, 'volumeState', value)} + radioEmulatorViewValue={emulatorView.radioEmulatorViewValue} + setRadioEmulatorViewValue={(value) => updateEmulatorView(index, 'radioEmulatorViewValue', value)} + emulatorUri={emulatorView.emulatorUri} + setEmulatorUri={(value) => updateEmulatorView(index, 'emulatorUri', value)} + radiosEmulatorView={emulatorView.radiosEmulatorView} + onSelect={() => setSelectedEmulatorViewIndex(index)} + selectedEmulatorViewIndex={null} /> - - ) : (emulatorViews.map((emulatorView, index) => ( - - updateEmulatorView(index, 'emulatorConnectionState', value)} - hasEmulatorAudio={emulatorView.hasEmulatorAudio} - setHasEmulatorAudio={(value) => updateEmulatorView(index, 'hasEmulatorAudio', value)} - longitudeValue={emulatorView.longitudeValue} - setLongitudeValue={(value) => updateEmulatorView(index, 'longitudeValue', value)} - latitudeValue={emulatorView.latitudeValue} - setLatitudeValue={(value) => updateEmulatorView(index, 'latitudeValue', value)} - hasEmulatorError={emulatorView.hasEmulatorError} - setHasEmulatorError={(value) => updateEmulatorView(index, 'hasEmulatorError', value)} - emulatorErrorMessage={emulatorView.emulatorErrorMessage} - setEmulatorErrorMessage={(value) => updateEmulatorView(index, 'emulatorErrorMessage', value)} - gpsLocation={emulatorView.gpsLocation} - setGpsLocation={(value) => updateEmulatorView(index, 'gpsLocation', value)} - volumeState={emulatorView.volumeState} - setVolumeState={(value) => updateEmulatorView(index, 'volumeState', value)} - radioEmulatorViewValue={emulatorView.radioEmulatorViewValue} - setRadioEmulatorViewValue={(value) => updateEmulatorView(index, 'radioEmulatorViewValue', value)} - emulatorUri={emulatorView.emulatorUri} - setEmulatorUri={(value) => updateEmulatorView(index, 'emulatorUri', value)} - radiosEmulatorView={emulatorView.radiosEmulatorView} - onSelect={() => setSelectedEmulatorView(index)} - selectedEmulatorViewIndex={null} - /> - - )) - )} + )))} - + + ); +} + +function EmulatorView({ index, + emulatorConnectionState, + setEmulatorConnectionState, + hasEmulatorAudio, + setHasEmulatorAudio, + longitudeValue, + setLongitudeValue, + latitudeValue, + setLatitudeValue, + hasEmulatorError, + setHasEmulatorError, + emulatorErrorMessage, + setEmulatorErrorMessage, + gpsLocation, + setGpsLocation, + volumeState, + setVolumeState, + radioEmulatorViewValue, + setRadioEmulatorViewValue, + emulatorUri, + setEmulatorUri, + radiosEmulatorView, + selectedEmulatorViewIndex, + onSelect}) { + const [showEmulator, setShowEmulator] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const isSelected = index === selectedEmulatorViewIndex; + useEffect(() => { + if (emulatorConnectionState.emuState === "connecting") { + setIsLoading(true); + setShowEmulator(true); + } + }, [emulatorConnectionState]); + + const handleEmulatorUriChange = (e) => { + const newUri = String(e.target.value); + let emulatorUris = JSON.parse(sessionStorage.getItem('emulatorUris')) || []; + emulatorUris[index] = newUri; + sessionStorage.setItem('emulatorUris', JSON.stringify(emulatorUris)); + setEmulatorUri(newUri); + }; + + const onChangeEmulatorView = (e) => { + setRadioEmulatorViewValue(e.currentTarget.value) + }; + + const onEmulatorError = (error) => { + console.error("Emulator error", error) + if (!error.contains("receiveJsepMessages")) { + setHasEmulatorError(true); + setEmulatorErrorMessage(error); + } + } + + const onEmulatorStateChange = (state) => { + console.info("Emulator state changed", state) + setEmulatorConnectionState({ emuState: state }); + if (state === "disconnected") { + setIsLoading(false); + } + if (state === "connecting") { + setShowEmulator(true); + setIsLoading(true); + } + if (state === "connected") { + setIsLoading(false); + } + } + + const onClickConnect = () => { + if (showEmulator) { + setShowEmulator(false); + setIsLoading(false); + }else { + setShowEmulator(true); + setIsLoading(true); + } + }; + + function onClickDisconnect() { + setShowEmulator(false); + setIsLoading(false); + } + + + return ( + + + + {hasEmulatorError && +

Oopps...some connection problem occurred!

+ } + {isLoading && showEmulator && +
+ +
+ } + {showEmulator && !hasEmulatorError && + setHasEmulatorAudio({hasAudio: audioState})} + view={radioEmulatorViewValue} + gps={gpsLocation} + volume={volumeState.volume} + muted={volumeState.muted} + /> + } + {!showEmulator && +
+ +
+ } + +
+ {showEmulator && + + } + {!isSelected && + + } + {!hasEmulatorError &&

State: {emulatorConnectionState.emuState}

} + {hasEmulatorError &&

State: ERROR

} + + + + + + {isSelected && + <> + + {radiosEmulatorView.map((radio, idx) => ( + + {radio.name} + + ))} + + + + setLongitudeValue(Number(e.target.value))} + placeholder="Longitude" + /> + setLatitudeValue(Number(e.target.value))} + placeholder="Latitude" + /> + + + + Volume {Math.floor(volumeState.volume * 100)}% + + { + let value = Number(e.target.value) + let muted = value === 0 + setVolumeState({volume: value, muted: muted}) + }} + value={volumeState.volume} + disabled={false} + /> + + + } + + + ); } diff --git a/src/pages/LandingPage.tsx b/src/pages/LandingPage.tsx deleted file mode 100644 index 59dffdca..00000000 --- a/src/pages/LandingPage.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import Container from "react-bootstrap/esm/Container"; -import {BrowserRouter, Route, Routes} from "react-router-dom"; -import AboutPage from "./AboutPage"; -import React from "react"; -import withAuthentication from "../components/routes/PrivateRoute"; -import EmulatorPage from "./EmulatorPage"; -import LoginPage from "./LoginPage"; -import LogoutPage from "./LogoutPage"; -import RedirectToMain from "../components/redirects/RedirectToMain"; - -const LandingPage = () => { - const AuthenticatedLoginPage = withAuthentication(RedirectToMain, LoginPage); - const AuthenticatedEmulatorPage = withAuthentication(EmulatorPage, LoginPage); - const AuthenticatedLogoutPagePage = withAuthentication(LogoutPage, LoginPage); - - return ( - - - - - } /> - } /> - } /> - } /> - - - - - ); -}; - -export default LandingPage; \ No newline at end of file diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx deleted file mode 100644 index 8d343100..00000000 --- a/src/pages/LoginPage.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import LoginForm from "../components/login/LoginForm"; -import Container from "react-bootstrap/esm/Container"; -import Col from "react-bootstrap/esm/Col"; -import Row from "react-bootstrap/esm/Row"; -import React from "react"; - - -function LoginPage() { - - return ( - - - -

Sign in

- - - - - ); -} - -export default LoginPage; diff --git a/src/pages/LogoutPage.tsx b/src/pages/LogoutPage.tsx deleted file mode 100644 index 6d2457a8..00000000 --- a/src/pages/LogoutPage.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { useAuthentication } from '../hooks/login/useAuthentication'; -import { useMutation } from "@apollo/client"; -import { Container, Spinner, Alert } from "react-bootstrap"; -import {DELETE_TOKEN_COOKIE} from "../graphql/auth.graphql"; - -const LogoutPage = () => { - const navigate = useNavigate(); - const { setAuthenticated } = useAuthentication(); - const [logout, { loading, error }] = useMutation(DELETE_TOKEN_COOKIE, { - onCompleted: (data) => { - if (data.deleteTokenCookie?.deleted) { - setAuthenticated(false); - navigate("/", { replace: true }); - window.location.reload(); - } - }, - }); - - useEffect(() => { - logout(); - }, [logout]); - - if (loading) { - return ( - - - Logging out... - - ); - } - - if (error) { - return ( - - Whoops...something went wrong! Please, try again. - - ); - } - - return null; -}; - -export default LogoutPage; \ No newline at end of file diff --git a/src/pages/base-page.tsx b/src/pages/base-page.tsx new file mode 100644 index 00000000..3df2cfa8 --- /dev/null +++ b/src/pages/base-page.tsx @@ -0,0 +1,25 @@ +import {ReactNode} from "react"; +import {TypographyH1} from "@/components/ui/typography/headings.tsx"; +import {cn} from "@/lib/utils.ts"; + +type Props = { + className?: string; + children: ReactNode, + title: string, +} + +export function BasePage( + { + className, + children, + title, + }: Readonly) { + return ( +
+ {title} +
+ {children} +
+
+ ); +} \ No newline at end of file diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx new file mode 100644 index 00000000..a0839e73 --- /dev/null +++ b/src/pages/firmwares-page.tsx @@ -0,0 +1,58 @@ +import {ColumnDef} from "@tanstack/react-table"; +import {BasePage} from "@/pages/base-page.tsx"; +import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {FirmwareTableRowFragment} from "@/__generated__/graphql.ts"; +import {useQuery} from "@apollo/client"; +import { + FIRMWARE_TABLE_ROW, + GET_FIRMWARE_OBJECT_ID_LIST, GET_FIRMWARES_BY_OBJECT_IDS, +} from "@/components/graphql/firmware.graphql.ts"; +import {useMemo} from "react"; +import {useFragment} from "@/__generated__"; +import {nonNullable} from "@/lib/non-nullable.ts"; + +const columns: ColumnDef[] = [ + { + accessorKey: "id", + header: "ID", + }, + { + accessorKey: "absoluteStorePath", + header: "Absolute Store Path", + } +]; + +export function FirmwaresPage() { + const { + data: idsData, + } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); + + const objectIds = useMemo(() => + (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], + [idsData] + ); + + const { + data: firmwaresData, + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { + variables: {objectIds}, + skip: objectIds.length === 0, + }); + + const firmwares: FirmwareTableRowFragment[] = useMemo( + () => + ((firmwaresData?.android_firmware_list ?? []) + .filter(nonNullable) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map((item) => useFragment(FIRMWARE_TABLE_ROW, item)) + .filter(nonNullable) + ), + [firmwaresData] + ); + + return ( + + + + ); +} \ No newline at end of file diff --git a/src/pages/home-page.tsx b/src/pages/home-page.tsx new file mode 100644 index 00000000..6d43bd4b --- /dev/null +++ b/src/pages/home-page.tsx @@ -0,0 +1,23 @@ +import { + Card, + CardContent, +} from "@/components/ui/card.tsx"; + +function HomePage() { + return ( +
+ + +

+ FirmwareDroid is a framework made for analysing Android firmware on scale. The initial framework was + developed at the Zurich University of Applied Sciences (ZHAW) by Thomas Sutter. You can find more + infos about the project on our Github + repository. +

+
+
+
+ ); +} + +export default HomePage; \ No newline at end of file diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx new file mode 100644 index 00000000..43329117 --- /dev/null +++ b/src/pages/importer-page.tsx @@ -0,0 +1,169 @@ +import {TypographyH2} from "@/components/ui/typography/headings.tsx"; +import {BasePage} from "@/pages/base-page.tsx"; +import {Dropzone} from "@/components/ui/importer/dropzone.tsx"; +import {Separator} from "@/components/ui/separator.tsx"; +import {Button} from "@/components/ui/button.tsx"; +import {useMutation, useQuery} from "@apollo/client"; +import { + CREATE_FIRMWARE_EXTRACTOR_JOB, DELETE_FIRMWARE_BY_OBJECT_ID, + FIRMWARE_TABLE_ROW_IMPORTER, GET_FIRMWARE_OBJECT_ID_LIST, + GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, +} from "@/components/graphql/firmware.graphql.ts"; +import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon, LoaderCircle, Trash} from "lucide-react"; +import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; +import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {useMemo} from "react"; +import {nonNullable} from "@/lib/non-nullable.ts"; +import {useFragment} from "@/__generated__"; +import {ScrollArea, ScrollBar} from "@/components/ui/scroll-area.tsx"; +import {Skeleton} from "@/components/ui/skeleton.tsx"; + +import type {ColumnDef} from "@tanstack/react-table"; +import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts"; + +export function ImporterPage() { + const [createFirmwareExtractorJob, {loading: extractorJobLoading}] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); + + const { + data: idsData, + loading: idsLoading, + error: idsError, + } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); + + const objectIds = useMemo(() => + (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], + [idsData] + ); + + const { + data: firmwaresData, + loading: firmwaresLoading, + error: firmwaresError, + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, { + variables: {objectIds}, + skip: objectIds.length === 0, + }); + + const firmwares: FirmwareTableRowImporterFragment[] = useMemo( + () => + ((firmwaresData?.android_firmware_list ?? []) + .filter(nonNullable) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map((item) => useFragment(FIRMWARE_TABLE_ROW_IMPORTER, item)) + .filter(nonNullable) + ), + [firmwaresData] + ); + + return ( + + Upload Firmwares + + + + Extracted Firmwares + + {(idsLoading || firmwaresLoading) && ( + + )} + + {idsError && ( + + + Unable to load firmware IDs. + Error message: "{idsError.message}" + + )} + + {firmwaresError && ( + + + Unable to load firmwares. + Error message: "{firmwaresError.message}" + + )} + + {!idsLoading && !firmwaresLoading && !idsError && !firmwaresError && ( + + + + + )} + + ); +} + +const columns: ColumnDef[] = [ + { + id: "delete", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const [deleteFirmware, {loading, error}] = useMutation( + DELETE_FIRMWARE_BY_OBJECT_ID, { + variables: { + objectIds: convertIdToObjectId(row.getValue("id")) + } + } + ); + + if (loading) { + return ( + + ); + } + + if (error) { + return ( + + + + ); + } + + return ( + + ); + }, + }, + { + accessorKey: "id", + header: "ID", + }, + { + accessorKey: "originalFilename", + header: "Original Filename", + }, + { + accessorKey: "indexedDate", + header: "Indexed Date", + cell: ({row}) => { + const padStart = (value: number): string => + value.toString().padStart(2, "0"); + + const date: Date = new Date(row.getValue("indexedDate")); + return `${date.getFullYear().toString()}-${padStart(date.getMonth() + 1)}-${padStart(date.getDate())} ${padStart(date.getHours())}:${padStart(date.getMinutes())}`; + } + }, + { + accessorKey: "osVendor", + header: "OS Vendor", + }, + { + accessorKey: "versionDetected", + header: "Android Version", + }, +]; diff --git a/src/pages/login-page.tsx b/src/pages/login-page.tsx new file mode 100644 index 00000000..e51d116b --- /dev/null +++ b/src/pages/login-page.tsx @@ -0,0 +1,126 @@ +import {useAuth} from "@/lib/auth.tsx"; +import {useLocation, useNavigate} from "react-router"; +import {FormEvent, useEffect, useState} from "react"; +import {useLazyQuery} from "@apollo/client"; +import {GET_AUTH_TOKEN} from "@/components/graphql/auth.graphql.ts"; +import {Card, CardContent, CardDescription, CardHeader, CardTitle} from "@/components/ui/card.tsx"; +import {Label} from "@/components/ui/label.tsx"; +import {Input} from "@/components/ui/input.tsx"; +import {cn} from "@/lib/utils.ts"; +import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon} from "lucide-react"; +import {Button} from "@/components/ui/button.tsx"; + +export default function LoginPage() { + const {isAuthenticated, initializing} = useAuth(); + const navigate = useNavigate(); + + useEffect(() => { + if (!initializing && isAuthenticated) { + void navigate("/", {replace: true}); + } + }, [isAuthenticated, initializing, navigate]); + + if (initializing) return null; + + return ( +
+
+ +
+
+ ); +} + +type GetAuthTokenResult = { tokenAuth: { token: string } | null }; +type GetAuthTokenVars = { username: string; password: string; }; + +function LoginForm({className, ...props}: React.ComponentProps<"div">) { + const [username, setUsername] = useState(""); + const [password, setPassword] = useState(""); + const {logIn} = useAuth(); + const navigate = useNavigate(); + const location = useLocation() as any; + + const [requestToken, {data, loading, error}] = useLazyQuery< + GetAuthTokenResult, + GetAuthTokenVars + >(GET_AUTH_TOKEN, {fetchPolicy: "no-cache"}); + + useEffect(() => { + const token = data?.tokenAuth?.token; + if (!token) return; + + void (async () => { + await logIn(); + const dest = location?.state?.from?.pathname ?? "/"; + navigate(dest, {replace: true}); + })(); + }, [data, logIn, navigate, location]); + + const onSubmit = (e: FormEvent) => { + e.preventDefault(); + if (!username || !password || loading) return; + void requestToken({variables: {username: username, password: password}}); + } + + return ( +
+ + + Login to your account + + Enter your username and password below + + + +
+
+
+ + { setUsername(e.target.value); }} + disabled={loading} + /> +
+ +
+
+ +
+ { setPassword(e.target.value); }} + disabled={loading} + /> +
+ + {error && ( + + + Authentication failed. + Please verify your credentials and try again. + + )} + +
+ +
+
+ +
+
+
+ ) +} diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx new file mode 100644 index 00000000..2dfb0d4b --- /dev/null +++ b/src/pages/scanner-page.tsx @@ -0,0 +1,216 @@ +import {BasePage} from "@/pages/base-page.tsx"; +import {ResizableHandle, ResizablePanel, ResizablePanelGroup} from "@/components/ui/resizable.tsx"; +import {TypographyH4} from "@/components/ui/typography/headings.tsx"; +import {CheckboxForm} from "@/components/ui/checkbox-form.tsx"; +import {ColumnDef} from "@tanstack/react-table"; +import {Checkbox} from "@/components/ui/checkbox.tsx"; +import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {useQuery} from "@apollo/client"; +import { + FIRMWARE_TABLE_ROW_SCANNER, + GET_FIRMWARE_OBJECT_ID_LIST, + GET_FIRMWARES_BY_OBJECT_IDS_SCANNER +} from "@/components/graphql/firmware.graphql.ts"; +import {useMemo} from "react"; +import { + AppTableRowScannerFragment, + FirmwareTableRowScannerFragment +} from "@/__generated__/graphql.ts"; +import {nonNullable} from "@/lib/non-nullable.ts"; +import {useFragment} from "@/__generated__"; +import { + APP_TABLE_ROW_SCANNER, + GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS, + GET_APPS_BY_OBJECT_IDS_SCANNER +} from "@/components/graphql/app.graphql.ts"; + +export function ScannerPage() { + return ( + +
+ + + + + + + + + + + + + +
+
+ ); +} + +function FirmwaresPanel() { + const columns: ColumnDef[] = [ + { + id: "select", + header: ({table}) => ( + { + table.toggleAllPageRowsSelected(!!value); + }} + aria-label="Select all" + /> + ), + cell: ({row}) => ( + { + row.toggleSelected(!!value); + }} + aria-label="Select row" + /> + ), + }, + { + id: "id", + header: "ID", + }, + { + accessorKey: "originalFilename", + header: "Original Filename", + }, + ]; + + const { + data: idsData, + } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); + + const objectIds = useMemo(() => + (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], + [idsData] + ); + + const { + data: firmwaresData, + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS_SCANNER, { + variables: {objectIds}, + skip: objectIds.length === 0, + }); + + const firmwares: FirmwareTableRowScannerFragment[] = useMemo( + () => + ((firmwaresData?.android_firmware_list ?? []) + .filter(nonNullable) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map((item) => useFragment(FIRMWARE_TABLE_ROW_SCANNER, item)) + .filter(nonNullable) + ), + [firmwaresData] + ); + + return ( +
+ Firmwares + +
+ ); +} + +function AppsPanel() { + const columns: ColumnDef[] = [ + { + id: "select", + header: ({table}) => ( + { + table.toggleAllPageRowsSelected(!!value); + }} + aria-label="Select all" + /> + ), + cell: ({row}) => ( + { + row.toggleSelected(!!value); + }} + aria-label="Select row" + /> + ), + }, + { + accessorKey: "id", + header: "ID", + } + ]; + + const { + data: idsData, + } = useQuery(GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS); + + const objectIds = useMemo(() => + (idsData?.android_app_id_list ?? []).filter(Boolean) as string[], + [idsData] + ); + + const { + data: appsData, + } = useQuery(GET_APPS_BY_OBJECT_IDS_SCANNER, { + variables: {objectIds}, + skip: objectIds.length === 0, + }); + + const apps: AppTableRowScannerFragment[] = useMemo( + () => + ((appsData?.android_app_list ?? []) + .filter(nonNullable) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map((item) => useFragment(APP_TABLE_ROW_SCANNER, item)) + .filter(nonNullable) + ), + [appsData] + ); + + return ( +
+ Apps + +
+ ); +} + +function ScannersPanel() { + const scanners = [ + "AndroGuard", + "APKiD", + "APKLeaks", + "APKscan", + "Exodus-Core", + "FlowDroid", + "MobSFScan", + "Trueseeing", + "Quark-Engine", + "Qark", + "Androwarn", + "SUPER Android Analyzer", + ]; + + return ( +
+ Scanners + ({ + id: scanner, + label: scanner, + }))} + validateOnMount={true} + validationMode="onChange" + /> +
+ ); +} \ No newline at end of file diff --git a/src/routes/ProtectedLayout.tsx b/src/routes/ProtectedLayout.tsx new file mode 100644 index 00000000..7c0c5e3f --- /dev/null +++ b/src/routes/ProtectedLayout.tsx @@ -0,0 +1,29 @@ +import {useAuth} from "@/lib/auth.tsx"; +import {Navigate, Outlet, useLocation} from "react-router"; +import {SidebarInset, SidebarProvider} from "@/components/ui/sidebar.tsx"; +import {SiteHeader} from "@/components/ui/sidebar/site-header.tsx"; +import {AppSidebar} from "@/components/ui/sidebar/app-sidebar.tsx"; + +export default function ProtectedLayout() { + const {isAuthenticated, initializing} = useAuth(); + const location = useLocation(); + + if (initializing) return null; + if (!isAuthenticated) { + return + } + + return ( +
+ + +
+ + + + +
+
+
+ ); +} \ No newline at end of file diff --git a/src/routes/PublicOnlyRoute.tsx b/src/routes/PublicOnlyRoute.tsx new file mode 100644 index 00000000..71ffeff8 --- /dev/null +++ b/src/routes/PublicOnlyRoute.tsx @@ -0,0 +1,11 @@ +import {useAuth} from "@/lib/auth.tsx"; +import {Navigate, Outlet} from "react-router"; + +export default function PublicOnlyRoute() { + const {isAuthenticated, initializing} = useAuth(); + + if (initializing) return null; + if (isAuthenticated) return ; + + return ; +} \ No newline at end of file diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 00000000..238aaf5f --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,44 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true, + + /* Required by Shadcn UI */ + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + }, + + // Migration from JS (remove if fully migrated to JS) + "allowJs": true, + "checkJs": false + }, + "include": [ + "src" + ], + "exclude": [ + "src/__generated__" + ] +} diff --git a/tsconfig.json b/tsconfig.json index b30bdfc6..44355730 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,47 +1,14 @@ { - // Visit https://aka.ms/tsconfig to read more about this file + "files": [], + "references": [ + { "path": "./tsconfig.app.json"}, + { "path": "./tsconfig.node.json"} + ], + /* These compiler options are required by Shadcn UI */ "compilerOptions": { - // File Layout - // "rootDir": "./src", - // "outDir": "./dist", - - // Environment Settings - // See also https://aka.ms/tsconfig/module - "module": "esnext", - "moduleResolution": "Bundler", - "target": "es2022", - "types": ["vite/client"], - "lib": ["es2022", "dom", "dom.iterable"], - - // Stricter Typechecking Options - "noUncheckedIndexedAccess": true, - "exactOptionalPropertyTypes": true, - - // Style Options - // "noImplicitReturns": true, - // "noImplicitOverride": true, - // "noUnusedLocals": true, - // "noUnusedParameters": true, - // "noFallthroughCasesInSwitch": true, - // "noPropertyAccessFromIndexSignature": true, - - // Recommended Options - "strict": true, - "jsx": "react-jsx", - // "verbatimModuleSyntax": true, - "isolatedModules": true, - "noUncheckedSideEffectImports": true, - "moduleDetection": "force", - "skipLibCheck": true, - - // Migration from JS (remove if fully migrated to JS) - "allowJs": true, - "checkJs": false, - - // Quality of life - "forceConsistentCasingInFileNames": true, - "noEmit": true - }, - "include": ["src", "src/env.d.ts"], - "exclude": ["node_modules", "build"] + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } } diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..fe8c3a78 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": [ + "vite.config.ts" + ] +} diff --git a/vite.config.ts b/vite.config.ts index 06ab5501..2374726d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,8 +1,16 @@ -import { defineConfig } from "vite"; -import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +import path from "path" +// https://vite.dev/config/ export default defineConfig({ - plugins: [react()], + plugins: [react(), tailwindcss()], + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, build: { outDir: 'build', }, @@ -15,4 +23,4 @@ export default defineConfig({ }, }, }, -}); \ No newline at end of file +}); diff --git a/yarn.lock b/yarn.lock index c297f289..27d66538 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@adobe/css-tools@^4.4.0": - version "4.4.3" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.3.tgz#beebbefb0264fdeb32d3052acae0e0d94315a9a2" - integrity sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA== - "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" @@ -15,6 +10,11 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@antfu/ni@^23.2.0": + version "23.3.1" + resolved "https://registry.yarnpkg.com/@antfu/ni/-/ni-23.3.1.tgz#a9dc6e41735cb0fbdc5b1b938ed4388ab47c32d1" + integrity sha512-C90iyzm/jLV7Lomv2UzwWUzRv9WZr1oRsFRKsX5HjQL4EXrbi9H/RtBkjCP+NF+ABZXUKpAa4F1dkoTaea4zHg== + "@apollo/client@^3.13.9": version "3.13.9" resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.13.9.tgz#311e0df1734aaa5598e01a292bb7982df49cc062" @@ -50,7 +50,7 @@ relay-runtime "12.0.0" signedsource "^1.0.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -64,38 +64,45 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790" integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw== -"@babel/core@^7.26.10", "@babel/core@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.0.tgz#55dad808d5bf3445a108eefc88ea3fdf034749a4" - integrity sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ== +"@babel/core@^7.22.1", "@babel/core@^7.26.10", "@babel/core@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb" + integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.0" + "@babel/generator" "^7.28.3" "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.27.3" - "@babel/helpers" "^7.27.6" - "@babel/parser" "^7.28.0" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.3" + "@babel/parser" "^7.28.3" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.0" - "@babel/types" "^7.28.0" + "@babel/traverse" "^7.28.3" + "@babel/types" "^7.28.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.18.13", "@babel/generator@^7.26.10", "@babel/generator@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.0.tgz#9cc2f7bd6eb054d77dc66c2664148a0c5118acd2" - integrity sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg== +"@babel/generator@^7.18.13", "@babel/generator@^7.26.10", "@babel/generator@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" + integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== dependencies: - "@babel/parser" "^7.28.0" - "@babel/types" "^7.28.0" + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" +"@babel/helper-annotate-as-pure@^7.27.3": + version "7.27.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" + integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== + dependencies: + "@babel/types" "^7.27.3" + "@babel/helper-compilation-targets@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" @@ -107,11 +114,32 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.27.1": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" + integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.28.3" + semver "^6.3.1" + "@babel/helper-globals@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/helper-module-imports@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" @@ -120,20 +148,44 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.27.3": - version "7.27.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz#db0bbcfba5802f9ef7870705a7ef8788508ede02" - integrity sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg== +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: "@babel/helper-module-imports" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.3" + "@babel/traverse" "^7.28.3" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" @@ -149,20 +201,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.27.6": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.2.tgz#80f0918fecbfebea9af856c419763230040ee850" - integrity sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw== +"@babel/helpers@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441" + integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw== dependencies: "@babel/template" "^7.27.2" "@babel/types" "^7.28.2" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.26.10", "@babel/parser@^7.27.2", "@babel/parser@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.0.tgz#979829fbab51a29e13901e5a80713dbcb840825e" - integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.6", "@babel/parser@^7.26.10", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71" + integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA== dependencies: - "@babel/types" "^7.28.0" + "@babel/types" "^7.28.2" "@babel/plugin-syntax-import-assertions@^7.26.0": version "7.27.1" @@ -171,6 +223,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" +"@babel/plugin-syntax-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-react-jsx-self@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92" @@ -185,10 +244,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.24.7", "@babel/runtime@^7.26.0", "@babel/runtime@^7.26.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.2.tgz#2ae5a9d51cc583bd1f5673b3bb70d6d819682473" - integrity sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA== +"@babel/plugin-transform-typescript@^7.22.5": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" + integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.3" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.26.10": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.3.tgz#75c5034b55ba868121668be5d5bb31cc64e6e61a" + integrity sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA== "@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.27.2": version "7.27.2" @@ -199,20 +269,20 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.26.10", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" - integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== +"@babel/traverse@^7.26.10", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.3.tgz#6911a10795d2cce43ec6a28cffc440cca2593434" + integrity sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.0" + "@babel/generator" "^7.28.3" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.0" + "@babel/parser" "^7.28.3" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.0" + "@babel/types" "^7.28.2" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.26.10", "@babel/types@^7.27.1", "@babel/types@^7.28.0", "@babel/types@^7.28.2": +"@babel/types@^7.0.0", "@babel/types@^7.18.13", "@babel/types@^7.20.7", "@babel/types@^7.26.10", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2": version "7.28.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== @@ -220,6 +290,50 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@bundled-es-modules/cookie@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz#b41376af6a06b3e32a15241d927b840a9b4de507" + integrity sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw== + dependencies: + cookie "^0.7.2" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + +"@bundled-es-modules/tough-cookie@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz#fa9cd3cedfeecd6783e8b0d378b4a99e52bde5d3" + integrity sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw== + dependencies: + "@types/tough-cookie" "^4.0.5" + tough-cookie "^4.1.4" + +"@emnapi/core@^1.4.3", "@emnapi/core@^1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb" + integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== + dependencies: + "@emnapi/wasi-threads" "1.0.4" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.4.5": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" + integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.4", "@emnapi/wasi-threads@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4" + integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== + dependencies: + tslib "^2.4.0" + "@emotion/is-prop-valid@1.2.2": version "1.2.2" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz#d4175076679c6a26faa92b03bb786f9e52612337" @@ -263,135 +377,135 @@ "@whatwg-node/promise-helpers" "^1.0.0" tslib "^2.5.0" -"@esbuild/aix-ppc64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz#a1414903bb38027382f85f03dda6065056757727" - integrity sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA== - -"@esbuild/android-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz#c859994089e9767224269884061f89dae6fb51c6" - integrity sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w== - -"@esbuild/android-arm@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.8.tgz#96a8f2ca91c6cd29ea90b1af79d83761c8ba0059" - integrity sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw== - -"@esbuild/android-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.8.tgz#a3a626c4fec4a024a9fa8c7679c39996e92916f0" - integrity sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA== - -"@esbuild/darwin-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz#a5e1252ca2983d566af1c0ea39aded65736fc66d" - integrity sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw== - -"@esbuild/darwin-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz#5271b0df2bb12ce8df886704bfdd1c7cc01385d2" - integrity sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg== - -"@esbuild/freebsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz#d0a0e7fdf19733b8bb1566b81df1aa0bb7e46ada" - integrity sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA== - -"@esbuild/freebsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz#2de8b2e0899d08f1cb1ef3128e159616e7e85343" - integrity sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw== - -"@esbuild/linux-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz#a4209efadc0c2975716458484a4e90c237c48ae9" - integrity sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w== - -"@esbuild/linux-arm@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz#ccd9e291c24cd8d9142d819d463e2e7200d25b19" - integrity sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg== - -"@esbuild/linux-ia32@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz#006ad1536d0c2b28fb3a1cf0b53bcb85aaf92c4d" - integrity sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg== - -"@esbuild/linux-loong64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz#127b3fbfb2c2e08b1397e985932f718f09a8f5c4" - integrity sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ== - -"@esbuild/linux-mips64el@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz#837d1449517791e3fa7d82675a2d06d9f56cb340" - integrity sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw== - -"@esbuild/linux-ppc64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz#aa2e3bd93ab8df084212f1895ca4b03c42d9e0fe" - integrity sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ== - -"@esbuild/linux-riscv64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz#a340620e31093fef72767dd28ab04214b3442083" - integrity sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg== - -"@esbuild/linux-s390x@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz#ddfed266c8c13f5efb3105a0cd47f6dcd0e79e71" - integrity sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg== - -"@esbuild/linux-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz#9a4f78c75c051e8c060183ebb39a269ba936a2ac" - integrity sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ== - -"@esbuild/netbsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz#902c80e1d678047926387230bc037e63e00697d0" - integrity sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw== - -"@esbuild/netbsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz#2d9eb4692add2681ff05a14ce99de54fbed7079c" - integrity sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg== - -"@esbuild/openbsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz#89c3b998c6de739db38ab7fb71a8a76b3fa84a45" - integrity sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ== - -"@esbuild/openbsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz#2f01615cf472b0e48c077045cfd96b5c149365cc" - integrity sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ== - -"@esbuild/openharmony-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz#a201f720cd2c3ebf9a6033fcc3feb069a54b509a" - integrity sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg== - -"@esbuild/sunos-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz#07046c977985a3334667f19e6ab3a01a80862afb" - integrity sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w== - -"@esbuild/win32-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz#4a5470caf0d16127c05d4833d4934213c69392d1" - integrity sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ== - -"@esbuild/win32-ia32@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz#3de3e8470b7b328d99dbc3e9ec1eace207e5bbc4" - integrity sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg== - -"@esbuild/win32-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz#610d7ea539d2fcdbe39237b5cc175eb2c4451f9c" - integrity sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw== +"@esbuild/aix-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz#bef96351f16520055c947aba28802eede3c9e9a9" + integrity sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA== + +"@esbuild/android-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz#d2e70be7d51a529425422091e0dcb90374c1546c" + integrity sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg== + +"@esbuild/android-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.9.tgz#d2a753fe2a4c73b79437d0ba1480e2d760097419" + integrity sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ== + +"@esbuild/android-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.9.tgz#5278836e3c7ae75761626962f902a0d55352e683" + integrity sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw== + +"@esbuild/darwin-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz#f1513eaf9ec8fa15dcaf4c341b0f005d3e8b47ae" + integrity sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg== + +"@esbuild/darwin-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz#e27dbc3b507b3a1cea3b9280a04b8b6b725f82be" + integrity sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ== + +"@esbuild/freebsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz#364e3e5b7a1fd45d92be08c6cc5d890ca75908ca" + integrity sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q== + +"@esbuild/freebsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz#7c869b45faeb3df668e19ace07335a0711ec56ab" + integrity sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg== + +"@esbuild/linux-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz#48d42861758c940b61abea43ba9a29b186d6cb8b" + integrity sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw== + +"@esbuild/linux-arm@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz#6ce4b9cabf148274101701d112b89dc67cc52f37" + integrity sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw== + +"@esbuild/linux-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz#207e54899b79cac9c26c323fc1caa32e3143f1c4" + integrity sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A== + +"@esbuild/linux-loong64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz#0ba48a127159a8f6abb5827f21198b999ffd1fc0" + integrity sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ== + +"@esbuild/linux-mips64el@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz#a4d4cc693d185f66a6afde94f772b38ce5d64eb5" + integrity sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA== + +"@esbuild/linux-ppc64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz#0f5805c1c6d6435a1dafdc043cb07a19050357db" + integrity sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w== + +"@esbuild/linux-riscv64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz#6776edece0f8fca79f3386398b5183ff2a827547" + integrity sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg== + +"@esbuild/linux-s390x@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz#3f6f29ef036938447c2218d309dc875225861830" + integrity sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA== + +"@esbuild/linux-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz#831fe0b0e1a80a8b8391224ea2377d5520e1527f" + integrity sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg== + +"@esbuild/netbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz#06f99d7eebe035fbbe43de01c9d7e98d2a0aa548" + integrity sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q== + +"@esbuild/netbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz#db99858e6bed6e73911f92a88e4edd3a8c429a52" + integrity sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g== + +"@esbuild/openbsd-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz#afb886c867e36f9d86bb21e878e1185f5d5a0935" + integrity sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ== + +"@esbuild/openbsd-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz#30855c9f8381fac6a0ef5b5f31ac6e7108a66ecf" + integrity sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA== + +"@esbuild/openharmony-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz#2f2144af31e67adc2a8e3705c20c2bd97bd88314" + integrity sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg== + +"@esbuild/sunos-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz#69b99a9b5bd226c9eb9c6a73f990fddd497d732e" + integrity sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw== + +"@esbuild/win32-arm64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz#d789330a712af916c88325f4ffe465f885719c6b" + integrity sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ== + +"@esbuild/win32-ia32@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz#52fc735406bd49688253e74e4e837ac2ba0789e3" + integrity sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww== + +"@esbuild/win32-x64@0.25.9": + version "0.25.9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz#585624dc829cfb6e7c0aa6c3ca7d7e6daa87e34f" + integrity sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.7.0": version "4.7.0" @@ -405,6 +519,74 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== +"@eslint-react/ast@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/ast/-/ast-1.52.6.tgz#5d83442d22f20b30bf769df4228b5d4e84337965" + integrity sha512-yBJ8dVflLezQslQ15YN2tc792ceYpXUQWR/VefN508mWMpZ4wUEwf5/BKm33nzcMdLc8IyoUhKjmgW2HZCrboA== + dependencies: + "@eslint-react/eff" "1.52.6" + "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/typescript-estree" "^8.39.1" + "@typescript-eslint/utils" "^8.39.1" + string-ts "^2.2.1" + ts-pattern "^5.8.0" + +"@eslint-react/core@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/core/-/core-1.52.6.tgz#057cd4bdc3034ef55979953c33aeba7813722faa" + integrity sha512-Nas0c5E9wwvHaD78YDTr6VB9M6xhWICtn1nWn2ChoqKHnbw3UNveYErVUwcuUcfbAGn9taVE0fqaj+MY6zQlag== + dependencies: + "@eslint-react/ast" "1.52.6" + "@eslint-react/eff" "1.52.6" + "@eslint-react/kit" "1.52.6" + "@eslint-react/shared" "1.52.6" + "@eslint-react/var" "1.52.6" + "@typescript-eslint/scope-manager" "^8.39.1" + "@typescript-eslint/type-utils" "^8.39.1" + "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/utils" "^8.39.1" + birecord "^0.1.1" + ts-pattern "^5.8.0" + +"@eslint-react/eff@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/eff/-/eff-1.52.6.tgz#33b55de88cb437d33dd2fd6aa49c1ee1f9bebe59" + integrity sha512-UpiV0zSIHRFCx6rmDu48gDwrS4wn/+5Ciimukxt3c0PoTGOI/kKpPuHXsQBlP15CqvPOCD6wt8VxOnNug/cKmA== + +"@eslint-react/kit@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/kit/-/kit-1.52.6.tgz#d98ab7d2d9c9420928826f017c1f9f26428d3b8a" + integrity sha512-4xkVhPQkeGcyjdoM9mocbjCF96lFP1jXXE2XrsThiy+U/e/BQEz0oOdHBFXdzVmmMGGFjHsbQo6MAIZCoVAAGg== + dependencies: + "@eslint-react/eff" "1.52.6" + "@typescript-eslint/utils" "^8.39.1" + ts-pattern "^5.8.0" + zod "^4.0.17" + +"@eslint-react/shared@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/shared/-/shared-1.52.6.tgz#4c9188ee4b9efd4b3e027b85beed7689cab7cc54" + integrity sha512-gIvwDQtRXqxa5IoRQDjKZBGZSj7GlGOwwKUqgaLmerlmNbrEyFn/AG0E6e1NBh80WdAmFSiuJG+2Lct1p8SnZg== + dependencies: + "@eslint-react/eff" "1.52.6" + "@eslint-react/kit" "1.52.6" + "@typescript-eslint/utils" "^8.39.1" + ts-pattern "^5.8.0" + zod "^4.0.17" + +"@eslint-react/var@1.52.6": + version "1.52.6" + resolved "https://registry.yarnpkg.com/@eslint-react/var/-/var-1.52.6.tgz#eae0b77fc10d4091f7502b41861403013f78f540" + integrity sha512-oeAexe8FhImk3RstFvSSbVBFYRMPAVvuUscOrKBbhf9xc0/3drYpLXSPceA++2VaOk/M1mD91ceca9+V0UfNkw== + dependencies: + "@eslint-react/ast" "1.52.6" + "@eslint-react/eff" "1.52.6" + "@typescript-eslint/scope-manager" "^8.39.1" + "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/utils" "^8.39.1" + string-ts "^2.2.1" + ts-pattern "^5.8.0" + "@eslint/config-array@^0.21.0": version "0.21.0" resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" @@ -441,7 +623,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.33.0": +"@eslint/js@9.33.0", "@eslint/js@^9.33.0": version "9.33.0" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.33.0.tgz#475c92fdddab59b8b8cab960e3de2564a44bf368" integrity sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A== @@ -460,9 +642,36 @@ levn "^0.4.1" "@fastify/busboy@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.1.1.tgz#af3aea7f1e52ec916d8b5c9dcc0f09d4c060a3fc" - integrity sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.2.0.tgz#13ed8212f3b9ba697611529d15347f8528058cea" + integrity sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA== + +"@floating-ui/core@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" + integrity sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w== + dependencies: + "@floating-ui/utils" "^0.2.10" + +"@floating-ui/dom@^1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.4.tgz#ee667549998745c9c3e3e84683b909c31d6c9a77" + integrity sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA== + dependencies: + "@floating-ui/core" "^1.7.3" + "@floating-ui/utils" "^0.2.10" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.6.tgz#189f681043c1400561f62972f461b93f01bf2231" + integrity sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw== + dependencies: + "@floating-ui/dom" "^1.7.4" + +"@floating-ui/utils@^0.2.10": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" + integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== "@graphql-codegen/add@^5.0.3": version "5.0.3" @@ -928,6 +1137,13 @@ resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== +"@hookform/resolvers@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-5.2.1.tgz#3332b4662fe301a969ac1b795d663cf728329166" + integrity sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ== + dependencies: + "@standard-schema/utils" "^0.3.0" + "@humanfs/core@^0.19.1": version "0.19.1" resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" @@ -956,14 +1172,53 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@inquirer/confirm@^5.0.0": + version "5.1.15" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.15.tgz#c502d5c642fdba0669b17442b40794c97bdbccb4" + integrity sha512-SwHMGa8Z47LawQN0rog0sT+6JpiL0B7eW9p1Bb7iCeKDGTI5Ez25TSc2l8kw52VV7hA4sX/C78CGkMrKXfuspA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" + +"@inquirer/core@^10.1.15": + version "10.1.15" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.15.tgz#8feb69fd536786181a2b6bfb84d8674faa9d2e59" + integrity sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA== + dependencies: + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + "@inquirer/external-editor@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.0.tgz#a4b53af494049093ebc3c5c73fa949258e013cec" - integrity sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.1.tgz#ab0a82c5719a963fb469021cde5cd2b74fea30f8" + integrity sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q== dependencies: chardet "^2.1.0" iconv-lite "^0.6.3" +"@inquirer/figures@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" + integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== + +"@inquirer/type@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" + integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" @@ -972,6 +1227,14 @@ "@jridgewell/sourcemap-codec" "^1.5.0" "@jridgewell/trace-mapping" "^0.3.24" +"@jridgewell/remapping@^2.3.4": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" @@ -990,6 +1253,45 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@modelcontextprotocol/sdk@^1.10.2": + version "1.17.3" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz#cf92354220f0183d28179e96a9bf3a8f6d3211ae" + integrity sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg== + dependencies: + ajv "^6.12.6" + content-type "^1.0.5" + cors "^2.8.5" + cross-spawn "^7.0.5" + eventsource "^3.0.2" + eventsource-parser "^3.0.0" + express "^5.0.1" + express-rate-limit "^7.5.0" + pkce-challenge "^5.0.0" + raw-body "^3.0.0" + zod "^3.23.8" + zod-to-json-schema "^3.24.1" + +"@mswjs/interceptors@^0.39.1": + version "0.39.6" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.39.6.tgz#44094a578f20da4749d1a0eaf3cdb7973604004b" + integrity sha512-bndDP83naYYkfayr/qhBHMhk0YGwS1iv6vaEGcr0SQbO0IZtbOPqjKjds/WcG+bJA+1T5vCx6kprKOzn5Bg+Vw== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.4.3" + strict-event-emitter "^0.5.1" + +"@napi-rs/wasm-runtime@^0.2.12": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.10.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1011,6 +1313,24 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@parcel/watcher-android-arm64@2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" @@ -1105,197 +1425,637 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@react-aria/ssr@^3.5.0": - version "3.9.10" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.10.tgz#7fdc09e811944ce0df1d7e713de1449abd7435e6" - integrity sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ== +"@radix-ui/number@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090" + integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g== + +"@radix-ui/primitive@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.3.tgz#e2dbc13bdc5e4168f4334f75832d7bdd3e2de5ba" + integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg== + +"@radix-ui/react-arrow@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz#e14a2657c81d961598c5e72b73dd6098acc04f09" + integrity sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-avatar@^1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz#c58a8800ef3d3ee783b3168fee7c76f6534bfd93" + integrity sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog== + dependencies: + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-is-hydrated" "0.1.0" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-checkbox@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz#db45ca8a6d5c056a92f74edbb564acee05318b79" + integrity sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + +"@radix-ui/react-collapsible@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz#e2cc69a4490a2920f97c3c3150b0bf21281e3c49" + integrity sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-collection@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.7.tgz#d05c25ca9ac4695cc19ba91f42f686e3ea2d9aec" + integrity sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + +"@radix-ui/react-compose-refs@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30" + integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg== + +"@radix-ui/react-context@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36" + integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA== + +"@radix-ui/react-dialog@^1.1.15": + version "1.1.15" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz#1de3d7a7e9a17a9874d29c07f5940a18a119b632" + integrity sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-direction@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14" + integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw== + +"@radix-ui/react-dismissable-layer@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz#e33ab6f6bdaa00f8f7327c408d9f631376b88b37" + integrity sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-escape-keydown" "1.1.1" + +"@radix-ui/react-dropdown-menu@^2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz#5ee045c62bad8122347981c479d92b1ff24c7254" + integrity sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-menu" "2.1.16" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-focus-guards@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz#2a5669e464ad5fde9f86d22f7fdc17781a4dfa7f" + integrity sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw== + +"@radix-ui/react-focus-scope@1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz#dfe76fc103537d80bf42723a183773fd07bfb58d" + integrity sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-id@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7" + integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-label@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.7.tgz#ad959ff9c6e4968d533329eb95696e1ba8ad72ab" + integrity sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-menu@2.1.16": + version "2.1.16" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.16.tgz#528a5a973c3a7413d3d49eb9ccd229aa52402911" + integrity sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus" "1.1.11" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-navigation-menu@^1.2.14": + version "1.2.14" + resolved "https://registry.yarnpkg.com/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz#4e6d1172be3c89752e564f8721706f78574ad7dd" + integrity sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-visually-hidden" "1.2.3" + +"@radix-ui/react-popper@1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.8.tgz#a79f39cdd2b09ab9fb50bf95250918422c4d9602" + integrity sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-rect" "1.1.1" + "@radix-ui/react-use-size" "1.1.1" + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-portal@1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.9.tgz#14c3649fe48ec474ac51ed9f2b9f5da4d91c4472" + integrity sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-presence@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.5.tgz#5d8f28ac316c32f078afce2996839250c10693db" + integrity sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-primitive@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz#db9b8bcff49e01be510ad79893fb0e4cda50f1bc" + integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ== + dependencies: + "@radix-ui/react-slot" "1.2.3" + +"@radix-ui/react-roving-focus@1.1.11": + version "1.1.11" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz#ef54384b7361afc6480dcf9907ef2fedb5080fd9" + integrity sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + +"@radix-ui/react-scroll-area@^1.2.10": + version "1.2.10" + resolved "https://registry.yarnpkg.com/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz#e4fd3b4a79bb77bec1a52f0c8f26d8f3f1ca4b22" + integrity sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A== + dependencies: + "@radix-ui/number" "1.1.1" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-select@^2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.2.6.tgz#022cf8dab16bf05d0d1b4df9e53e4bea1b744fd9" + integrity sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ== + dependencies: + "@radix-ui/number" "1.1.1" + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-collection" "1.1.7" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-direction" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-focus-guards" "1.1.3" + "@radix-ui/react-focus-scope" "1.1.7" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-callback-ref" "1.1.1" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + "@radix-ui/react-use-previous" "1.1.1" + "@radix-ui/react-visually-hidden" "1.2.3" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-separator@^1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.1.7.tgz#a18bd7fd07c10fda1bba14f2a3032e7b1a2b3470" + integrity sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/react-slot@1.2.3", "@radix-ui/react-slot@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.3.tgz#502d6e354fc847d4169c3bc5f189de777f68cfe1" + integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A== + dependencies: + "@radix-ui/react-compose-refs" "1.1.2" + +"@radix-ui/react-tooltip@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz#3f50267e25bccfc9e20bb3036bfd9ab4c2c30c2c" + integrity sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg== + dependencies: + "@radix-ui/primitive" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.2" + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.11" + "@radix-ui/react-id" "1.1.1" + "@radix-ui/react-popper" "1.2.8" + "@radix-ui/react-portal" "1.1.9" + "@radix-ui/react-presence" "1.1.5" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-slot" "1.2.3" + "@radix-ui/react-use-controllable-state" "1.2.2" + "@radix-ui/react-visually-hidden" "1.2.3" + +"@radix-ui/react-use-callback-ref@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40" + integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg== + +"@radix-ui/react-use-controllable-state@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190" + integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg== + dependencies: + "@radix-ui/react-use-effect-event" "0.0.2" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-effect-event@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907" + integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-use-escape-keydown@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29" + integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.1" + +"@radix-ui/react-use-is-hydrated@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz#544da73369517036c77659d7cdd019dc0f5ff9a0" + integrity sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA== + dependencies: + use-sync-external-store "^1.5.0" + +"@radix-ui/react-use-layout-effect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e" + integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ== + +"@radix-ui/react-use-previous@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz#1a1ad5568973d24051ed0af687766f6c7cb9b5b5" + integrity sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ== + +"@radix-ui/react-use-rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152" + integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w== + dependencies: + "@radix-ui/rect" "1.1.1" + +"@radix-ui/react-use-size@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37" + integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ== dependencies: - "@swc/helpers" "^0.5.0" + "@radix-ui/react-use-layout-effect" "1.1.1" + +"@radix-ui/react-visually-hidden@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz#a8c38c8607735dc9f05c32f87ab0f9c2b109efbf" + integrity sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug== + dependencies: + "@radix-ui/react-primitive" "2.1.3" + +"@radix-ui/rect@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb" + integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw== "@repeaterjs/repeater@^3.0.4", "@repeaterjs/repeater@^3.0.6": version "3.0.6" resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.6.tgz#be23df0143ceec3c69f8b6c2517971a5578fdaa2" integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA== -"@restart/hooks@^0.4.9": - version "0.4.16" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.16.tgz#95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb" - integrity sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w== - dependencies: - dequal "^2.0.3" - -"@restart/hooks@^0.5.0": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.5.1.tgz#6776b3859e33aea72b23b81fc47021edf17fd247" - integrity sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q== - dependencies: - dequal "^2.0.3" - -"@restart/ui@^1.9.4": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@restart/ui/-/ui-1.9.4.tgz#9d61f56f2647f5ab8a33d87b278b9ce183511a26" - integrity sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA== - dependencies: - "@babel/runtime" "^7.26.0" - "@popperjs/core" "^2.11.8" - "@react-aria/ssr" "^3.5.0" - "@restart/hooks" "^0.5.0" - "@types/warning" "^3.0.3" - dequal "^2.0.3" - dom-helpers "^5.2.0" - uncontrollable "^8.0.4" - warning "^4.0.3" - -"@rolldown/pluginutils@1.0.0-beta.30": - version "1.0.0-beta.30" - resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.30.tgz#ac55a2215c78a54ba67276524ac3dc8c195316d0" - integrity sha512-whXaSoNUFiyDAjkUF8OBpOm77Szdbk5lGNqFe6CbVbJFrhCCPinCbRA3NjawwlNHla1No7xvXXh+CpSxnPfUEw== - -"@rollup/rollup-android-arm-eabi@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz#292e25953d4988d3bd1af0f5ebbd5ee4d65c90b4" - integrity sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA== - -"@rollup/rollup-android-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz#053b3def3451e6fc1a9078188f22799e868d7c59" - integrity sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ== - -"@rollup/rollup-darwin-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz#98d90445282dec54fd05440305a5e8df79a91ece" - integrity sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ== - -"@rollup/rollup-darwin-x64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz#fe05f95a736423af5f9c3a59a70f41ece52a1f20" - integrity sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA== - -"@rollup/rollup-freebsd-arm64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz#41e1fbdc1f8c3dc9afb6bc1d6e3fb3104bd81eee" - integrity sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg== - -"@rollup/rollup-freebsd-x64@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz#69131e69cb149d547abb65ef3b38fc746c940e24" - integrity sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw== - -"@rollup/rollup-linux-arm-gnueabihf@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz#977ded91c7cf6fc0d9443bb9c0a064e45a805267" - integrity sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA== - -"@rollup/rollup-linux-arm-musleabihf@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz#dc034fc3c0f0eb5c75b6bc3eca3b0b97fd35f49a" - integrity sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ== - -"@rollup/rollup-linux-arm64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz#5e92613768d3de3ffcabc965627dd0a59b3e7dfc" - integrity sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng== - -"@rollup/rollup-linux-arm64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz#2a44f88e83d28b646591df6e50aa0a5a931833d8" - integrity sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg== - -"@rollup/rollup-linux-loongarch64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz#bd5897e92db7fbf7dc456f61d90fff96c4651f2e" - integrity sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA== - -"@rollup/rollup-linux-ppc64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz#a7065025411c14ad9ec34cc1cd1414900ec2a303" - integrity sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw== - -"@rollup/rollup-linux-riscv64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz#17f9c0c675e13ef4567cfaa3730752417257ccc3" - integrity sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ== - -"@rollup/rollup-linux-riscv64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz#bc6ed3db2cedc1ba9c0a2183620fe2f792c3bf3f" - integrity sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw== - -"@rollup/rollup-linux-s390x-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz#440c4f6753274e2928e06d2a25613e5a1cf97b41" - integrity sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA== - -"@rollup/rollup-linux-x64-gnu@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz#1e936446f90b2574ea4a83b4842a762cc0a0aed3" - integrity sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA== - -"@rollup/rollup-linux-x64-musl@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz#c6f304dfba1d5faf2be5d8b153ccbd8b5d6f1166" - integrity sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA== - -"@rollup/rollup-win32-arm64-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz#b4ad4a79219892aac112ed1c9d1356cad0566ef5" - integrity sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g== - -"@rollup/rollup-win32-ia32-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz#b1b22eb2a9568048961e4a6f540438b4a762aa62" - integrity sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ== - -"@rollup/rollup-win32-x64-msvc@4.46.2": - version "4.46.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz#87079f137b5fdb75da11508419aa998cc8cc3d8b" - integrity sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg== - -"@swc/helpers@^0.5.0": - version "0.5.17" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" - integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== - dependencies: +"@rolldown/pluginutils@1.0.0-beta.32": + version "1.0.0-beta.32" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz#40a51db68a3c967183a9d58c5f5179adf6214cce" + integrity sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g== + +"@rollup/rollup-android-arm-eabi@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.1.tgz#6e236cd2fd29bb01a300ad4ff6ed0f1a17550e69" + integrity sha512-lTahKRJip0knffA/GTNFJMrToD+CM+JJ+Qt5kjzBK/sFQ0EWqfKW3AYQSlZXN98tX0lx66083U9JYIMioMMK7g== + +"@rollup/rollup-android-arm64@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.1.tgz#808f2c9c7e68161add613ebcb0eac5a058a0df3c" + integrity sha512-uqxkb3RJLzlBbh/bbNQ4r7YpSZnjgMgyoEOY7Fy6GCbelkDSAzeiogxMG9TfLsBbqmGsdDObo3mzGqa8hps4MA== + +"@rollup/rollup-darwin-arm64@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.1.tgz#fa41e413c8e73d61039d6375b234595f24b1e5e3" + integrity sha512-tV6reObmxBDS4DDyLzTDIpymthNlxrLBGAoQx6m2a7eifSNEZdkXQl1PE4ZjCkEDPVgNXSzND/k9AQ3mC4IOEQ== + +"@rollup/rollup-darwin-x64@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.1.tgz#9aac64e886435493f2e3a0aa5e4aad098a90814c" + integrity sha512-XuJRPTnMk1lwsSnS3vYyVMu4x/+WIw1MMSiqj5C4j3QOWsMzbJEK90zG+SWV1h0B1ABGCQ0UZUjti+TQK35uHQ== + +"@rollup/rollup-freebsd-arm64@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.1.tgz#9fc804264f7b7a7cdad3747950299f990163be1f" + integrity sha512-79BAm8Ag/tmJ5asCqgOXsb3WY28Rdd5Lxj8ONiQzWzy9LvWORd5qVuOnjlqiWWZJw+dWewEktZb5yiM1DLLaHw== + +"@rollup/rollup-freebsd-x64@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.1.tgz#933feaff864feb03bbbcd0c18ea351ade957cf79" + integrity sha512-OQ2/ZDGzdOOlyfqBiip0ZX/jVFekzYrGtUsqAfLDbWy0jh1PUU18+jYp8UMpqhly5ltEqotc2miLngf9FPSWIA== + +"@rollup/rollup-linux-arm-gnueabihf@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.1.tgz#02915e6b2c55fe5961c27404aba2d9c8ef48ac6c" + integrity sha512-HZZBXJL1udxlCVvoVadstgiU26seKkHbbAMLg7680gAcMnRNP9SAwTMVet02ANA94kXEI2VhBnXs4e5nf7KG2A== + +"@rollup/rollup-linux-arm-musleabihf@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.1.tgz#1afef33191b26e76ae7f0d0dc767efc6be1285ce" + integrity sha512-sZ5p2I9UA7T950JmuZ3pgdKA6+RTBr+0FpK427ExW0t7n+QwYOcmDTK/aRlzoBrWyTpJNlS3kacgSlSTUg6P/Q== + +"@rollup/rollup-linux-arm64-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.1.tgz#6e7f38fb99d14143de3ce33204e6cd61e1c2c780" + integrity sha512-3hBFoqPyU89Dyf1mQRXCdpc6qC6At3LV6jbbIOZd72jcx7xNk3aAp+EjzAtN6sDlmHFzsDJN5yeUySvorWeRXA== + +"@rollup/rollup-linux-arm64-musl@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.1.tgz#25ab09f14bbcba85a604bcee2962d2486db90794" + integrity sha512-49J4FnMHfGodJWPw73Ve+/hsPjZgcXQGkmqBGZFvltzBKRS+cvMiWNLadOMXKGnYRhs1ToTGM0sItKISoSGUNA== + +"@rollup/rollup-linux-loongarch64-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.1.tgz#d3e3a3fd61e21b2753094391dee9b515a2bc9ecd" + integrity sha512-4yYU8p7AneEpQkRX03pbpLmE21z5JNys16F1BZBZg5fP9rIlb0TkeQjn5du5w4agConCCEoYIG57sNxjryHEGg== + +"@rollup/rollup-linux-ppc64-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.1.tgz#6b44445e2bd5866692010de241bf18d2ae8b0cb8" + integrity sha512-fAiq+J28l2YMWgC39jz/zPi2jqc0y3GSRo1yyxlBHt6UN0yYgnegHSRPa3pnHS5amT/efXQrm0ug5+aNEu9UuQ== + +"@rollup/rollup-linux-riscv64-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.1.tgz#3ff412d20d3b157e6aadabf84788e8c5cb221ba7" + integrity sha512-daoT0PMENNdjVYYU9xec30Y2prb1AbEIbb64sqkcQcSaR0zYuKkoPuhIztfxuqN82KYCKKrj+tQe4Gi7OSm1ow== + +"@rollup/rollup-linux-riscv64-musl@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.1.tgz#104f451497d53d82a49c6d08c13c59f5f30eed57" + integrity sha512-JNyXaAhWtdzfXu5pUcHAuNwGQKevR+6z/poYQKVW+pLaYOj9G1meYc57/1Xv2u4uTxfu9qEWmNTjv/H/EpAisw== + +"@rollup/rollup-linux-s390x-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.1.tgz#d04de7b21d181f30750760cb3553946306506172" + integrity sha512-U/CHbqKSwEQyZXjCpY43/GLYcTVKEXeRHw0rMBJP7fP3x6WpYG4LTJWR3ic6TeYKX6ZK7mrhltP4ppolyVhLVQ== + +"@rollup/rollup-linux-x64-gnu@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.1.tgz#a6ba88ff7480940a435b1e67ddbb3f207a7ae02f" + integrity sha512-uTLEakjxOTElfeZIGWkC34u2auLHB1AYS6wBjPGI00bWdxdLcCzK5awjs25YXpqB9lS8S0vbO0t9ZcBeNibA7g== + +"@rollup/rollup-linux-x64-musl@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.1.tgz#c912c8ffa0c242ed3175cd91cdeaef98109afa54" + integrity sha512-Ft+d/9DXs30BK7CHCTX11FtQGHUdpNDLJW0HHLign4lgMgBcPFN3NkdIXhC5r9iwsMwYreBBc4Rho5ieOmKNVQ== + +"@rollup/rollup-win32-arm64-msvc@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.1.tgz#ca5eaae89443554b461bb359112a056528cfdac0" + integrity sha512-N9X5WqGYzZnjGAFsKSfYFtAShYjwOmFJoWbLg3dYixZOZqU7hdMq+/xyS14zKLhFhZDhP9VfkzQnsdk0ZDS9IA== + +"@rollup/rollup-win32-ia32-msvc@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.1.tgz#34e76172515fb4b374eb990d59f54faff938246e" + integrity sha512-O+KcfeCORZADEY8oQJk4HK8wtEOCRE4MdOkb8qGZQNun3jzmj2nmhV/B/ZaaZOkPmJyvm/gW9n0gsB4eRa1eiQ== + +"@rollup/rollup-win32-x64-msvc@4.47.1": + version "4.47.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.1.tgz#e5e0a0bae2c9d4858cc9b8dc508b2e10d7f0df8b" + integrity sha512-CpKnYa8eHthJa3c+C38v/E+/KZyF1Jdh2Cz3DyKZqEWYgrM1IHFArXNWvBLPQCKUEsAqqKX27tTqVEFbDNUcOA== + +"@standard-schema/utils@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b" + integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g== + +"@tailwindcss/node@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.12.tgz#9099c7c9a6b719b2cae265fecbb37e08ed3fd2a2" + integrity sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ== + dependencies: + "@jridgewell/remapping" "^2.3.4" + enhanced-resolve "^5.18.3" + jiti "^2.5.1" + lightningcss "1.30.1" + magic-string "^0.30.17" + source-map-js "^1.2.1" + tailwindcss "4.1.12" + +"@tailwindcss/oxide-android-arm64@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.12.tgz#27920fe61fa2743afe8a8ca296fa640b609d17d5" + integrity sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ== + +"@tailwindcss/oxide-darwin-arm64@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.12.tgz#e8bd4798f26ec1d012bf0683aeb77449f71505cd" + integrity sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw== + +"@tailwindcss/oxide-darwin-x64@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.12.tgz#8ddb7e5ddfd9b049ec84a2bda99f2b04a86859f5" + integrity sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg== + +"@tailwindcss/oxide-freebsd-x64@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.12.tgz#da1c0b16b7a5f95a1e400f299a3ec94fb6fd40ac" + integrity sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww== + +"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.12.tgz#34e558aa6e869c6fe9867cb78ed7ba651b9fcaa4" + integrity sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ== + +"@tailwindcss/oxide-linux-arm64-gnu@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.12.tgz#0a00a8146ab6215f81b2d385056c991441bf390e" + integrity sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g== + +"@tailwindcss/oxide-linux-arm64-musl@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.12.tgz#b138f494068884ae0d8c343dc1904b22f5e98dc6" + integrity sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA== + +"@tailwindcss/oxide-linux-x64-gnu@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.12.tgz#5b9d5f23b15cdb714639f5b9741c0df5d610f794" + integrity sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q== + +"@tailwindcss/oxide-linux-x64-musl@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.12.tgz#f68ec530d3ca6875ea9015bcd5dd0762ee5e2f5d" + integrity sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A== + +"@tailwindcss/oxide-wasm32-wasi@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.12.tgz#9fd15a1ebde6076c42c445c5e305c31673ead965" + integrity sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg== + dependencies: + "@emnapi/core" "^1.4.5" + "@emnapi/runtime" "^1.4.5" + "@emnapi/wasi-threads" "^1.0.4" + "@napi-rs/wasm-runtime" "^0.2.12" + "@tybys/wasm-util" "^0.10.0" tslib "^2.8.0" -"@testing-library/dom@^10.4.1": - version "10.4.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.1.tgz#d444f8a889e9a46e9a3b4f3b88e0fcb3efb6cf95" - integrity sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.3.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - picocolors "1.1.1" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@^6.6.4": - version "6.6.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.6.4.tgz#577a1761768bda5458c42241add3b1570c34d39c" - integrity sha512-xDXgLjVunjHqczScfkCJ9iyjdNOVHvvCdqHSSxwM9L0l/wHkTRum67SDc020uAlCoqktJplgO2AAQeLP1wgqDQ== - dependencies: - "@adobe/css-tools" "^4.4.0" - aria-query "^5.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.6.3" - lodash "^4.17.21" - picocolors "^1.1.1" - redent "^3.0.0" +"@tailwindcss/oxide-win32-arm64-msvc@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.12.tgz#938bcc6a82e1120ea4fe2ce94be0a8cdf3ae92c7" + integrity sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg== -"@testing-library/react@^16.3.0": - version "16.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.0.tgz#3a85bb9bdebf180cd76dba16454e242564d598a6" - integrity sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw== - dependencies: - "@babel/runtime" "^7.12.5" +"@tailwindcss/oxide-win32-x64-msvc@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.12.tgz#b1ee2ed0ef2c4095ddec3684a1987e2b3613af36" + integrity sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA== -"@testing-library/user-event@^14.6.1": - version "14.6.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.6.1.tgz#13e09a32d7a8b7060fe38304788ebf4197cd2149" - integrity sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw== +"@tailwindcss/oxide@4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.12.tgz#13a6f806aafa9c83629c9a04acd92031aef83f1c" + integrity sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw== + dependencies: + detect-libc "^2.0.4" + tar "^7.4.3" + optionalDependencies: + "@tailwindcss/oxide-android-arm64" "4.1.12" + "@tailwindcss/oxide-darwin-arm64" "4.1.12" + "@tailwindcss/oxide-darwin-x64" "4.1.12" + "@tailwindcss/oxide-freebsd-x64" "4.1.12" + "@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.12" + "@tailwindcss/oxide-linux-arm64-gnu" "4.1.12" + "@tailwindcss/oxide-linux-arm64-musl" "4.1.12" + "@tailwindcss/oxide-linux-x64-gnu" "4.1.12" + "@tailwindcss/oxide-linux-x64-musl" "4.1.12" + "@tailwindcss/oxide-wasm32-wasi" "4.1.12" + "@tailwindcss/oxide-win32-arm64-msvc" "4.1.12" + "@tailwindcss/oxide-win32-x64-msvc" "4.1.12" + +"@tailwindcss/vite@^4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@tailwindcss/vite/-/vite-4.1.12.tgz#f2839180aa7ba938a5247114e32ee9d57215e7f8" + integrity sha512-4pt0AMFDx7gzIrAOIYgYP0KCBuKWqyW8ayrdiLEjoJTT4pKTjrzG/e4uzWtTLDziC+66R9wbUqZBccJalSE5vQ== + dependencies: + "@tailwindcss/node" "4.1.12" + "@tailwindcss/oxide" "4.1.12" + tailwindcss "4.1.12" + +"@tanstack/react-table@^8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.21.3.tgz#2c38c747a5731c1a07174fda764b9c2b1fb5e91b" + integrity sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww== + dependencies: + "@tanstack/table-core" "8.21.3" + +"@tanstack/table-core@8.21.3": + version "8.21.3" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.21.3.tgz#2977727d8fc8dfa079112d9f4d4c019110f1732c" + integrity sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg== "@theguild/federation-composition@^0.19.0": version "0.19.1" @@ -1307,10 +2067,22 @@ json5 "^2.2.3" lodash.sortby "^4.7.0" -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== +"@ts-morph/common@~0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.19.0.tgz#927fcd81d1bbc09c89c4a310a84577fb55f3694e" + integrity sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ== + dependencies: + fast-glob "^3.2.12" + minimatch "^7.4.3" + mkdirp "^2.1.6" + path-browserify "^1.0.1" + +"@tybys/wasm-util@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" + integrity sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ== + dependencies: + tslib "^2.4.0" "@types/babel__core@^7.20.5": version "7.20.5" @@ -1345,18 +2117,16 @@ dependencies: "@babel/types" "^7.28.2" +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== + "@types/estree@1.0.8", "@types/estree@^1.0.6": version "1.0.8" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/hoist-non-react-statics@^3.3.6": - version "3.3.7" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.7.tgz#306e3a3a73828522efa1341159da4846e7573a6c" - integrity sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g== - dependencies: - hoist-non-react-statics "^3.3.0" - "@types/js-yaml@^4.0.0": version "4.0.9" resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" @@ -1367,52 +2137,39 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/node-fetch@^2.6.12": - version "2.6.13" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.13.tgz#e0c9b7b5edbdb1b50ce32c127e85e880872d56ee" - integrity sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw== - dependencies: - "@types/node" "*" - form-data "^4.0.4" - "@types/node@*", "@types/node@^24.2.1": - version "24.2.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.1.tgz#83e41543f0a518e006594bb394e2cd961de56727" - integrity sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ== + version "24.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.0.tgz#89b09f45cb9a8ee69466f18ee5864e4c3eb84dec" + integrity sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow== dependencies: undici-types "~7.10.0" -"@types/prop-types@^15.7.12": - version "15.7.15" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" - integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== - -"@types/react-dom@^19": +"@types/react-dom@^19.1.7": version "19.1.7" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.7.tgz#2863f2aa89e023592b981204ef92c5221b286410" integrity sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw== -"@types/react-transition-group@^4.4.6": - version "4.4.12" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" - integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== - -"@types/react@>=16.9.11", "@types/react@^19": +"@types/react@^19.1.10": version "19.1.10" resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.10.tgz#a05015952ef328e1b85579c839a71304b07d21d9" integrity sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg== dependencies: csstype "^3.0.2" +"@types/statuses@^2.0.4": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" + integrity sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA== + "@types/stylis@4.2.5": version "4.2.5" resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== -"@types/warning@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798" - integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q== +"@types/tough-cookie@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/ws@^8.0.0": version "8.18.1" @@ -1421,79 +2178,79 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.1.tgz#28dffcb5272d20afe250bfeec3173263db5528a0" - integrity sha512-yYegZ5n3Yr6eOcqgj2nJH8cH/ZZgF+l0YIdKILSDjYFRjgYQMgv/lRjV5Z7Up04b9VYUondt8EPMqg7kTWgJ2g== +"@typescript-eslint/eslint-plugin@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.40.0.tgz#19f959f273b32f5082c891903645e6a85328db4e" + integrity sha512-w/EboPlBwnmOBtRbiOvzjD+wdiZdgFeo17lkltrtn7X37vagKKWJABvyfsJXTlHe6XBzugmYgd4A4nW+k8Mixw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/type-utils" "8.39.1" - "@typescript-eslint/utils" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/type-utils" "8.40.0" + "@typescript-eslint/utils" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" graphemer "^1.4.0" ignore "^7.0.0" natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.39.1.tgz#7f8f9ecfc7e172d67e42c366fa198e42324e5d50" - integrity sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg== +"@typescript-eslint/parser@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.40.0.tgz#1bc9f3701ced29540eb76ff2d95ce0d52ddc7e69" + integrity sha512-jCNyAuXx8dr5KJMkecGmZ8KI61KBUhkCob+SD+C+I5+Y1FWI2Y3QmY4/cxMCC5WAsZqoEtEETVhUiUMIGCf6Bw== dependencies: - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" debug "^4.3.4" -"@typescript-eslint/project-service@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.39.1.tgz#63525878d488ebf27c485f295e83434a1398f52d" - integrity sha512-8fZxek3ONTwBu9ptw5nCKqZOSkXshZB7uAxuFF0J/wTMkKydjXCzqqga7MlFMpHi9DoG4BadhmTkITBcg8Aybw== +"@typescript-eslint/project-service@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.40.0.tgz#1b7ba6079ff580c3215882fe75a43e5d3ed166b9" + integrity sha512-/A89vz7Wf5DEXsGVvcGdYKbVM9F7DyFXj52lNYUDS1L9yJfqjW/fIp5PgMuEJL/KeqVTe2QSbXAGUZljDUpArw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.39.1" - "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/tsconfig-utils" "^8.40.0" + "@typescript-eslint/types" "^8.40.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.1.tgz#1253fe3e1f2f33f08a3e438a05b5dd7faf9fbca6" - integrity sha512-RkBKGBrjgskFGWuyUGz/EtD8AF/GW49S21J8dvMzpJitOF1slLEbbHnNEtAHtnDAnx8qDEdRrULRnWVx27wGBw== +"@typescript-eslint/scope-manager@8.40.0", "@typescript-eslint/scope-manager@^8.39.1": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.40.0.tgz#2fbfcc8643340d8cd692267e61548b946190be8a" + integrity sha512-y9ObStCcdCiZKzwqsE8CcpyuVMwRouJbbSrNuThDpv16dFAj429IkM6LNb1dZ2m7hK5fHyzNcErZf7CEeKXR4w== dependencies: - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" -"@typescript-eslint/tsconfig-utils@8.39.1", "@typescript-eslint/tsconfig-utils@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.1.tgz#17f13b4ad481e7bec7c249ee1854078645b34b12" - integrity sha512-ePUPGVtTMR8XMU2Hee8kD0Pu4NDE1CN9Q1sxGSGd/mbOtGZDM7pnhXNJnzW63zk/q+Z54zVzj44HtwXln5CvHA== +"@typescript-eslint/tsconfig-utils@8.40.0", "@typescript-eslint/tsconfig-utils@^8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.40.0.tgz#8e8fdb9b988854aedd04abdde3239c4bdd2d26e4" + integrity sha512-jtMytmUaG9d/9kqSl/W3E3xaWESo4hFDxAIHGVW/WKKtQhesnRIJSAJO6XckluuJ6KDB5woD1EiqknriCtAmcw== -"@typescript-eslint/type-utils@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.39.1.tgz#642f9fb96173649e2928fea0375b1d74d31906c2" - integrity sha512-gu9/ahyatyAdQbKeHnhT4R+y3YLtqqHyvkfDxaBYk97EcbfChSJXyaJnIL3ygUv7OuZatePHmQvuH5ru0lnVeA== +"@typescript-eslint/type-utils@8.40.0", "@typescript-eslint/type-utils@^8.0.0", "@typescript-eslint/type-utils@^8.39.1": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.40.0.tgz#a7e4a1f0815dd0ba3e4eef945cc87193ca32c422" + integrity sha512-eE60cK4KzAc6ZrzlJnflXdrMqOBaugeukWICO2rB0KNvwdIMaEaYiywwHMzA1qFpTxrLhN9Lp4E/00EgWcD3Ow== dependencies: - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" - "@typescript-eslint/utils" "8.39.1" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/utils" "8.40.0" debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@8.39.1", "@typescript-eslint/types@^8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.39.1.tgz#f0ab996c8ab2c3b046bbf86bb1990b03529869a1" - integrity sha512-7sPDKQQp+S11laqTrhHqeAbsCfMkwJMrV7oTDvtDds4mEofJYir414bYKUEb8YPUm9QL3U+8f6L6YExSoAGdQw== +"@typescript-eslint/types@8.40.0", "@typescript-eslint/types@^8.39.1", "@typescript-eslint/types@^8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.40.0.tgz#0b580fdf643737aa5c01285314b5c6e9543846a9" + integrity sha512-ETdbFlgbAmXHyFPwqUIYrfc12ArvpBhEVgGAxVYSwli26dn8Ko+lIo4Su9vI9ykTZdJn+vJprs/0eZU0YMAEQg== -"@typescript-eslint/typescript-estree@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.1.tgz#8825d3ea7ea2144c577859ae489eec24ef7318a5" - integrity sha512-EKkpcPuIux48dddVDXyQBlKdeTPMmALqBUbEk38McWv0qVEZwOpVJBi7ugK5qVNgeuYjGNQxrrnoM/5+TI/BPw== +"@typescript-eslint/typescript-estree@8.40.0", "@typescript-eslint/typescript-estree@^8.39.1": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.40.0.tgz#295149440ce7da81c790a4e14e327599a3a1e5c9" + integrity sha512-k1z9+GJReVVOkc1WfVKs1vBrR5MIKKbdAjDTPvIK3L8De6KbFfPFt6BKpdkdk7rZS2GtC/m6yI5MYX+UsuvVYQ== dependencies: - "@typescript-eslint/project-service" "8.39.1" - "@typescript-eslint/tsconfig-utils" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/visitor-keys" "8.39.1" + "@typescript-eslint/project-service" "8.40.0" + "@typescript-eslint/tsconfig-utils" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/visitor-keys" "8.40.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -1501,33 +2258,33 @@ semver "^7.6.0" ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.39.1.tgz#58a834f89f93b786ada2cd14d77fa63c3c8f408b" - integrity sha512-VF5tZ2XnUSTuiqZFXCZfZs1cgkdd3O/sSYmdo2EpSyDlC86UM/8YytTmKnehOW3TGAlivqTDT6bS87B/GQ/jyg== +"@typescript-eslint/utils@8.40.0", "@typescript-eslint/utils@^8.39.1": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.40.0.tgz#8d0c6430ed2f5dc350784bb0d8be514da1e54054" + integrity sha512-Cgzi2MXSZyAUOY+BFwGs17s7ad/7L+gKt6Y8rAVVWS+7o6wrjeFN4nVfTpbE25MNcxyJ+iYUXflbs2xR9h4UBg== dependencies: "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.39.1" - "@typescript-eslint/types" "8.39.1" - "@typescript-eslint/typescript-estree" "8.39.1" + "@typescript-eslint/scope-manager" "8.40.0" + "@typescript-eslint/types" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" -"@typescript-eslint/visitor-keys@8.39.1": - version "8.39.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.1.tgz#a467742a98f2fa3c03d7bed4979dc0db3850a77a" - integrity sha512-W8FQi6kEh2e8zVhQ0eeRnxdvIoOkAp/CPAahcNio6nO9dsIwb9b34z90KOlheoyuVf6LSOEdjlkxSkapNEc+4A== +"@typescript-eslint/visitor-keys@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.40.0.tgz#c1b45196981311fed7256863be4bfb2d3eda332a" + integrity sha512-8CZ47QwalyRjsypfwnbI3hKy5gJDPmrkLjkgMxhi0+DZZ2QNx2naS6/hWoVYUHU7LU2zleF68V9miaVZvhFfTA== dependencies: - "@typescript-eslint/types" "8.39.1" + "@typescript-eslint/types" "8.40.0" eslint-visitor-keys "^4.2.1" "@vitejs/plugin-react@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.0.0.tgz#5cfe3d3665d3d04b0df7a8356ffd59359f5d0220" - integrity sha512-Jx9JfsTa05bYkS9xo0hkofp2dCmp1blrKjw9JONs5BTHOvJCgLbaPSuZLGSVJW6u2qe0tc4eevY0+gSNNi0YCw== + version "5.0.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-5.0.1.tgz#02c074f3fd9a82e4676c51e0fe9603a26ca614a3" + integrity sha512-DE4UNaBXwtVoDJ0ccBdLVjFTWL70NRuWNCxEieTI3lrq9ORB9aOCQEKstwDXBl87NvFdbqh/p7eINGyj0BthJA== dependencies: - "@babel/core" "^7.28.0" + "@babel/core" "^7.28.3" "@babel/plugin-transform-react-jsx-self" "^7.27.1" "@babel/plugin-transform-react-jsx-source" "^7.27.1" - "@rolldown/pluginutils" "1.0.0-beta.30" + "@rolldown/pluginutils" "1.0.0-beta.32" "@types/babel__core" "^7.20.5" react-refresh "^0.17.0" @@ -1592,6 +2349,14 @@ dependencies: tslib "^2.3.0" +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1602,7 +2367,7 @@ acorn@^8.15.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -agent-base@^7.1.0, agent-base@^7.1.2: +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.4" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== @@ -1615,7 +2380,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.12.4: +ajv@^6.12.4, ajv@^6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1634,7 +2399,7 @@ android-emulator-webrtc@^1.0.18: grpc-web "^1.4.2" prop-types "^15.8.1" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -1646,6 +2411,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.0.tgz#2f302e7550431b1b7762705fffb52cf1ffa20447" + integrity sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg== + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -1653,27 +2423,17 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== +aria-hidden@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.6.tgz#73051c9b088114c795b1ea414e9c0fff874ffc1a" + integrity sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA== dependencies: - dequal "^2.0.3" - -aria-query@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" - integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + tslib "^2.0.0" array-union@^2.1.0: version "2.1.0" @@ -1685,15 +2445,22 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +ast-types@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" + integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== + dependencies: + tslib "^2.0.1" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +attr-accept@^2.2.4: + version "2.2.5" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.5.tgz#d7061d958e6d4f97bf8665c68b75851a0713ab5e" + integrity sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ== auto-bind@~4.0.0: version "4.0.0" @@ -1710,6 +2477,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +birecord@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/birecord/-/birecord-0.1.1.tgz#abc07c8187bf24fb1e0055cd9feb18b30e477a03" + integrity sha512-VUpsf/qykW0heRlC8LooCq28Kxn3mAqKohhDG/49rrsQ1dT1CXyj/pgXS+5BSRzFTR/3DyIBOqQOrGyZOh71Aw== + bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -1719,10 +2491,29 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bootstrap@^5.3.7: - version "5.3.7" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.7.tgz#8640065036124d961d885d80b5945745e1154d90" - integrity sha512-7KgiD8UHjfcPBHEpDNg+zGz8L3LqR3GVwqZiBRFX04a1BCArZOz1r2kjly2HQ0WokqTO0v1nF+QAt8dsW4lKlw== +bl@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" + integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== + dependencies: + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" + integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== + dependencies: + bytes "^3.1.2" + content-type "^1.0.5" + debug "^4.4.0" + http-errors "^2.0.0" + iconv-lite "^0.6.3" + on-finished "^2.4.1" + qs "^6.14.0" + raw-body "^3.0.0" + type-is "^2.0.0" brace-expansion@^1.1.7: version "1.1.12" @@ -1747,12 +2538,12 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.24.0: - version "4.25.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.2.tgz#90c1507143742d743544ae6e92bca3348adff667" - integrity sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA== + version "4.25.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.3.tgz#9167c9cbb40473f15f75f85189290678b99b16c5" + integrity sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ== dependencies: - caniuse-lite "^1.0.30001733" - electron-to-chromium "^1.5.199" + caniuse-lite "^1.0.30001735" + electron-to-chromium "^1.5.204" node-releases "^2.0.19" update-browserslist-db "^1.1.3" @@ -1771,6 +2562,19 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.1.2, bytes@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" @@ -1779,6 +2583,14 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1797,10 +2609,10 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== -caniuse-lite@^1.0.30001733: - version "1.0.30001734" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz#f97e08599e2d75664543ae4b6ef25dc2183c5cc6" - integrity sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A== +caniuse-lite@^1.0.30001735: + version "1.0.30001736" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001736.tgz#3710a99cf154b653590fb6a57f81ee34173c3b47" + integrity sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw== capital-case@^1.0.4: version "1.0.4" @@ -1819,6 +2631,11 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.0.tgz#a1a8d294ea3526dbb77660f12649a08490e33ab8" + integrity sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ== + change-case-all@1.0.15: version "1.0.15" resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.15.tgz#de29393167fc101d646cd76b0ef23e27d09756ad" @@ -1865,10 +2682,17 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" -classnames@^2.3.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" - integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +class-variance-authority@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/class-variance-authority/-/class-variance-authority-0.7.1.tgz#4008a798a0e4553a781a57ac5177c9fb5d043787" + integrity sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg== + dependencies: + clsx "^2.1.1" clean-stack@^2.0.0: version "2.2.0" @@ -1882,7 +2706,14 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.5.0: +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== + dependencies: + restore-cursor "^4.0.0" + +cli-spinners@^2.5.0, cli-spinners@^2.6.1: version "2.9.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== @@ -1900,6 +2731,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1914,6 +2750,16 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +code-block-writer@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" + integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1931,18 +2777,21 @@ colorette@^2.0.16: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== common-tags@1.8.2: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== +compare-versions@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1957,16 +2806,46 @@ constant-case@^3.0.4: tslib "^2.0.3" upper-case "^2.0.2" +content-disposition@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2" + integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie@^1.0.1, cookie@^1.0.2: +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + +cookie@^0.7.1, cookie@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cookie@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig@^8.1.0, cosmiconfig@^8.1.3: version "8.3.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" @@ -1991,7 +2870,7 @@ cross-inspect@1.0.1: dependencies: tslib "^2.4.0" -cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2014,11 +2893,6 @@ css-to-react-native@3.2.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - csstype@3.1.3, csstype@^3.0.2: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" @@ -2039,7 +2913,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@4, debug@4.4.1, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@4.4.1, debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0: version "4.4.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== @@ -2051,6 +2925,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + defaults@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" @@ -2058,26 +2937,16 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +depd@2.0.0, depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== dependency-graph@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27" integrity sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-europe-js@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/detect-europe-js/-/detect-europe-js-0.1.2.tgz#aa76642e05dae786efc2e01a23d4792cd24c7b88" - integrity sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow== - detect-indent@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" @@ -2088,6 +2957,21 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.3, detect-libc@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== + +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + +diff@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2095,24 +2979,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-accessibility-api@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" - integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== - -dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -2140,16 +3006,34 @@ dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -electron-to-chromium@^1.5.199: - version "1.5.200" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz#adffa5db97390ce9d48987f528117a608ed0d7c9" - integrity sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w== +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.204: + version "1.5.207" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz#0fedde3eec615065ee95531c09a10578644c5552" + integrity sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encodeurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +enhanced-resolve@^5.18.3: + version "5.18.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44" + integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2174,53 +3058,48 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - esbuild@^0.25.0: - version "0.25.8" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.8.tgz#482d42198b427c9c2f3a81b63d7663aecb1dda07" - integrity sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q== + version "0.25.9" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.9.tgz#15ab8e39ae6cdc64c24ff8a2c0aef5b3fd9fa976" + integrity sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g== optionalDependencies: - "@esbuild/aix-ppc64" "0.25.8" - "@esbuild/android-arm" "0.25.8" - "@esbuild/android-arm64" "0.25.8" - "@esbuild/android-x64" "0.25.8" - "@esbuild/darwin-arm64" "0.25.8" - "@esbuild/darwin-x64" "0.25.8" - "@esbuild/freebsd-arm64" "0.25.8" - "@esbuild/freebsd-x64" "0.25.8" - "@esbuild/linux-arm" "0.25.8" - "@esbuild/linux-arm64" "0.25.8" - "@esbuild/linux-ia32" "0.25.8" - "@esbuild/linux-loong64" "0.25.8" - "@esbuild/linux-mips64el" "0.25.8" - "@esbuild/linux-ppc64" "0.25.8" - "@esbuild/linux-riscv64" "0.25.8" - "@esbuild/linux-s390x" "0.25.8" - "@esbuild/linux-x64" "0.25.8" - "@esbuild/netbsd-arm64" "0.25.8" - "@esbuild/netbsd-x64" "0.25.8" - "@esbuild/openbsd-arm64" "0.25.8" - "@esbuild/openbsd-x64" "0.25.8" - "@esbuild/openharmony-arm64" "0.25.8" - "@esbuild/sunos-x64" "0.25.8" - "@esbuild/win32-arm64" "0.25.8" - "@esbuild/win32-ia32" "0.25.8" - "@esbuild/win32-x64" "0.25.8" + "@esbuild/aix-ppc64" "0.25.9" + "@esbuild/android-arm" "0.25.9" + "@esbuild/android-arm64" "0.25.9" + "@esbuild/android-x64" "0.25.9" + "@esbuild/darwin-arm64" "0.25.9" + "@esbuild/darwin-x64" "0.25.9" + "@esbuild/freebsd-arm64" "0.25.9" + "@esbuild/freebsd-x64" "0.25.9" + "@esbuild/linux-arm" "0.25.9" + "@esbuild/linux-arm64" "0.25.9" + "@esbuild/linux-ia32" "0.25.9" + "@esbuild/linux-loong64" "0.25.9" + "@esbuild/linux-mips64el" "0.25.9" + "@esbuild/linux-ppc64" "0.25.9" + "@esbuild/linux-riscv64" "0.25.9" + "@esbuild/linux-s390x" "0.25.9" + "@esbuild/linux-x64" "0.25.9" + "@esbuild/netbsd-arm64" "0.25.9" + "@esbuild/netbsd-x64" "0.25.9" + "@esbuild/openbsd-arm64" "0.25.9" + "@esbuild/openbsd-x64" "0.25.9" + "@esbuild/openharmony-arm64" "0.25.9" + "@esbuild/sunos-x64" "0.25.9" + "@esbuild/win32-arm64" "0.25.9" + "@esbuild/win32-ia32" "0.25.9" + "@esbuild/win32-x64" "0.25.9" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2231,6 +3110,54 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-plugin-react-dom@^1.52.4: + version "1.52.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-dom/-/eslint-plugin-react-dom-1.52.6.tgz#e4748c9654415013614a718a98c6fd72205290aa" + integrity sha512-5C8jW9JesuVIkaDQw/70Vj5L2xcHIQW8wiUbjkKdCN0aiyMU0dyCwId8O3V4Vt8r+spVriEmYnmx0mFSWXbuEw== + dependencies: + "@eslint-react/ast" "1.52.6" + "@eslint-react/core" "1.52.6" + "@eslint-react/eff" "1.52.6" + "@eslint-react/kit" "1.52.6" + "@eslint-react/shared" "1.52.6" + "@eslint-react/var" "1.52.6" + "@typescript-eslint/scope-manager" "^8.39.1" + "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/utils" "^8.39.1" + compare-versions "^6.1.1" + string-ts "^2.2.1" + ts-pattern "^5.8.0" + +eslint-plugin-react-hooks@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz#1be0080901e6ac31ce7971beed3d3ec0a423d9e3" + integrity sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== + +eslint-plugin-react-refresh@^0.4.20: + version "0.4.20" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz#3bbfb5c8637e28d19ce3443686445e502ecd18ba" + integrity sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA== + +eslint-plugin-react-x@^1.52.4: + version "1.52.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-x/-/eslint-plugin-react-x-1.52.6.tgz#11a3efeadb18b154604b7a488095b465044c882c" + integrity sha512-xLW8UG66c16p9WnROysfYkomflVEry/bxPnB1Ef0YZikpCCMDvvoPT6nAUUy4byVvq3c6CJWENT3O85twwkY8w== + dependencies: + "@eslint-react/ast" "1.52.6" + "@eslint-react/core" "1.52.6" + "@eslint-react/eff" "1.52.6" + "@eslint-react/kit" "1.52.6" + "@eslint-react/shared" "1.52.6" + "@eslint-react/var" "1.52.6" + "@typescript-eslint/scope-manager" "^8.39.1" + "@typescript-eslint/type-utils" "^8.39.1" + "@typescript-eslint/types" "^8.39.1" + "@typescript-eslint/utils" "^8.39.1" + compare-versions "^6.1.1" + is-immutable-type "^5.0.1" + string-ts "^2.2.1" + ts-pattern "^5.8.0" + eslint-scope@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" @@ -2299,6 +3226,11 @@ espree@^10.0.1, espree@^10.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.2.1" +esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" @@ -2323,17 +3255,87 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: + version "3.0.5" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.5.tgz#1346314851df0a3bd72450339f58bd9bc8cb77df" + integrity sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ== + +eventsource@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" + integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== + dependencies: + eventsource-parser "^3.0.1" + +execa@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +express-rate-limit@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== + +express@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" + integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== + dependencies: + accepts "^2.0.0" + body-parser "^2.2.0" + content-disposition "^1.0.0" + content-type "^1.0.5" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.7" + qs "^6.14.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.0.1" + vary "^1.1.2" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9, fast-glob@^3.3.2: +fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -2386,10 +3388,10 @@ fbjs@^3.0.0: setimmediate "^1.0.5" ua-parser-js "^1.0.35" -fdir@^6.4.4, fdir@^6.4.6: - version "6.4.6" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" - integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== +fdir@^6.4.4, fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" @@ -2413,6 +3415,13 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-selector@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-2.1.2.tgz#fe7c7ee9e550952dfbc863d73b14dc740d7de8b4" + integrity sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig== + dependencies: + tslib "^2.7.0" + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -2420,6 +3429,18 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" +finalhandler@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" + integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -2441,17 +3462,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -form-data@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" - integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" - formdata-polyfill@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" @@ -2459,6 +3469,25 @@ formdata-polyfill@^4.0.10: dependencies: fetch-blob "^3.1.2" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + +fs-extra@^11.1.0: + version "11.3.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74" + integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" @@ -2479,7 +3508,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.6: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -2495,6 +3524,16 @@ get-intrinsic@^1.2.6: hasown "^2.0.2" math-intrinsics "^1.1.0" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + +get-own-enumerable-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz#59bbda0f7e7469c8c74086e08f79f1381b203899" + integrity sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA== + get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" @@ -2503,6 +3542,11 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2522,6 +3566,11 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +globals@^16.3.0: + version "16.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.3.0.tgz#66118e765ddaf9e2d880f7e17658543f93f1f667" + integrity sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ== + globby@^11.0.3: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -2544,6 +3593,11 @@ gopd@^1.2.0: resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -2586,7 +3640,7 @@ graphql-ws@^6.0.6: resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-6.0.6.tgz#e9c9ff85f4ddb5bbe6faa2721c0d27e6c11746d2" integrity sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw== -graphql@^16.11.0: +graphql@^16.11.0, graphql@^16.8.1: version "16.11.0" resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== @@ -2601,18 +3655,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3, has-symbols@^1.1.0: +has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -2628,13 +3675,29 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +headers-polyfill@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.3.tgz#922a0155de30ecc1f785bcf04be77844ca95ad07" + integrity sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ== + +hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" +http-errors@2.0.0, http-errors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" @@ -2643,6 +3706,14 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" +https-proxy-agent@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-6.2.1.tgz#0965ab47371b3e531cf6794d1eb148710a992ba7" + integrity sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA== + dependencies: + agent-base "^7.0.2" + debug "4" + https-proxy-agent@^7.0.0: version "7.0.6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" @@ -2651,14 +3722,19 @@ https-proxy-agent@^7.0.0: agent-base "^7.1.2" debug "4" -iconv-lite@^0.6.3: +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +iconv-lite@0.6.3, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2706,7 +3782,7 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inherits@^2.0.3, inherits@^2.0.4: +inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2739,6 +3815,11 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -2769,11 +3850,25 @@ is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" +is-immutable-type@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/is-immutable-type/-/is-immutable-type-5.0.1.tgz#bfc2a10d995891b4205a448710b4f4c8260986fa" + integrity sha512-LkHEOGVZZXxGl8vDs+10k3DvP++SEoYEAJLRk6buTFi6kD7QekThV7xHS0j6gpnUCQ0zpud/gMDGiV4dQneLTg== + dependencies: + "@typescript-eslint/type-utils" "^8.0.0" + ts-api-utils "^2.0.0" + ts-declaration-location "^1.0.4" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-interactive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" + integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== + is-lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-2.0.2.tgz#1c0884d3012c841556243483aa5d522f47396d2a" @@ -2781,11 +3876,31 @@ is-lower-case@^2.0.2: dependencies: tslib "^2.0.3" +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-3.0.0.tgz#b0889f1f9f8cb87e87df53a8d1230a2250f8b9be" + integrity sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ== + +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + +is-regexp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-3.1.0.tgz#0235eab9cda5b83f96ac4a263d8c32c9d5ad7422" + integrity sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA== + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -2793,10 +3908,10 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-standalone-pwa@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz#7a1b0459471a95378aa0764d5dc0a9cec95f2871" - integrity sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-unc-path@^1.0.0: version "1.0.0" @@ -2810,6 +3925,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-unicode-supported@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + is-upper-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-2.0.2.tgz#f1105ced1fe4de906a5f39553e7d3803fd804649" @@ -2837,7 +3957,7 @@ jiti@^1.17.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== -jiti@^2.0.0: +jiti@^2.0.0, jiti@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.5.1.tgz#bd099c1c2be1c59bbea4e5adcd127363446759d0" integrity sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w== @@ -2892,11 +4012,20 @@ json-to-pretty-yaml@^1.2.2: remedial "^1.0.7" remove-trailing-spaces "^1.0.6" -json5@^2.2.3: +json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -2904,6 +4033,16 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2912,6 +4051,74 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lightningcss-darwin-arm64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae" + integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ== + +lightningcss-darwin-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22" + integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA== + +lightningcss-freebsd-x64@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4" + integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig== + +lightningcss-linux-arm-gnueabihf@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908" + integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q== + +lightningcss-linux-arm64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009" + integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw== + +lightningcss-linux-arm64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe" + integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ== + +lightningcss-linux-x64-gnu@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157" + integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw== + +lightningcss-linux-x64-musl@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26" + integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ== + +lightningcss-win32-arm64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039" + integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA== + +lightningcss-win32-x64-msvc@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352" + integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg== + +lightningcss@1.30.1: + version "1.30.1" + resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d" + integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg== + dependencies: + detect-libc "^2.0.3" + optionalDependencies: + lightningcss-darwin-arm64 "1.30.1" + lightningcss-darwin-x64 "1.30.1" + lightningcss-freebsd-x64 "1.30.1" + lightningcss-linux-arm-gnueabihf "1.30.1" + lightningcss-linux-arm64-gnu "1.30.1" + lightningcss-linux-arm64-musl "1.30.1" + lightningcss-linux-x64-gnu "1.30.1" + lightningcss-linux-x64-musl "1.30.1" + lightningcss-win32-arm64-msvc "1.30.1" + lightningcss-win32-x64-msvc "1.30.1" + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -2961,6 +4168,14 @@ log-symbols@^4.0.0, log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-symbols@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" + integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== + dependencies: + chalk "^5.0.0" + is-unicode-supported "^1.1.0" + log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -2999,10 +4214,17 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== +lucide-react@^0.540.0: + version "0.540.0" + resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.540.0.tgz#c681f67c245c619de67c26dbe83a88412b5e7ff8" + integrity sha512-armkCAqQvO62EIX4Hq7hqX/q11WSZu0Jd23cnnqx0/49yIxGXyL/zyZfBxNN9YDx0ensPTb4L+DjTh3yQXUxtQ== + +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" map-cache@^0.2.0: version "0.2.2" @@ -3014,6 +4236,21 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +media-typer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -3032,27 +4269,27 @@ micromatch@^4.0.5, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== +mime-types@^3.0.0, mime-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" + integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== dependencies: - mime-db "1.52.0" + mime-db "^1.54.0" mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== minimatch@^3.1.2: version "3.1.2" @@ -3061,6 +4298,13 @@ minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^7.4.3: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" @@ -3068,16 +4312,72 @@ minimatch@^9.0.4, minimatch@^9.0.5: dependencies: brace-expansion "^2.0.1" +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^7.0.4, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.2.tgz#f33d638eb279f664439aa38dc5f91607468cb574" + integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== + dependencies: + minipass "^7.1.2" + +mkdirp@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +msw@^2.7.1: + version "2.10.5" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.10.5.tgz#3e43f12e97581c260bf38d8817732b9fec3bfdb0" + integrity sha512-0EsQCrCI1HbhpBWd89DvmxY6plmvrM96b0sCIztnvcNHQbXn5vqwm1KlXslo6u4wN9LFGLC1WFjjgljcQhe40A== + dependencies: + "@bundled-es-modules/cookie" "^2.0.1" + "@bundled-es-modules/statuses" "^1.0.1" + "@bundled-es-modules/tough-cookie" "^0.1.6" + "@inquirer/confirm" "^5.0.0" + "@mswjs/interceptors" "^0.39.1" + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + graphql "^16.8.1" + headers-polyfill "^4.0.2" + is-node-process "^1.2.0" + outvariant "^1.4.3" + path-to-regexp "^6.3.0" + picocolors "^1.1.1" + strict-event-emitter "^0.5.1" + type-fest "^4.26.1" + yargs "^17.7.2" + mute-stream@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + nanoid@^3.3.11, nanoid@^3.3.7: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" @@ -3088,6 +4388,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +next-themes@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.4.6.tgz#8d7e92d03b8fea6582892a50a928c9b23502e8b6" + integrity sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -3113,7 +4423,7 @@ node-fetch@^2.7.0: dependencies: whatwg-url "^5.0.0" -node-fetch@^3.3.2: +node-fetch@^3.3.0, node-fetch@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== @@ -3139,16 +4449,42 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +on-finished@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + onetime@^5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -3156,6 +4492,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + optimism@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.1.tgz#5cf16847921413dbb0ac809907370388b9c6335f" @@ -3193,6 +4536,26 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" +ora@^6.1.2: + version "6.3.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-6.3.1.tgz#a4e9e5c2cf5ee73c259e8b410273e706a2ad3ed6" + integrity sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ== + dependencies: + chalk "^5.0.0" + cli-cursor "^4.0.0" + cli-spinners "^2.6.1" + is-interactive "^2.0.0" + is-unicode-supported "^1.1.0" + log-symbols "^5.1.0" + stdin-discarder "^0.1.0" + strip-ansi "^7.0.1" + wcwidth "^1.0.1" + +outvariant@^1.4.0, outvariant@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + p-limit@3.1.0, p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -3248,6 +4611,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parseurl@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" @@ -3256,6 +4624,11 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" @@ -3274,6 +4647,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" @@ -3286,12 +4664,22 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" +path-to-regexp@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz#2b6a26a337737a8e1416f9272ed0766b1c0389f4" + integrity sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ== + +path-to-regexp@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" + integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@1.1.1, picocolors@^1.1.1: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -3306,6 +4694,11 @@ picomatch@^4.0.2, picomatch@^4.0.3: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== +pkce-challenge@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.0.tgz#c3a405cb49e272094a38e890a2b51da0228c4d97" + integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ== + postcss-value-parser@^4.0.2: version "4.2.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" @@ -3320,7 +4713,7 @@ postcss@8.4.49: picocolors "^1.1.1" source-map-js "^1.2.1" -postcss@^8.5.6: +postcss@^8.4.24, postcss@^8.5.6: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== @@ -3334,15 +4727,6 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -3350,15 +4734,15 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types-extra@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" - integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: - react-is "^16.3.2" - warning "^4.0.0" + kleur "^3.0.3" + sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -3367,111 +4751,130 @@ prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" -punycode@^2.1.0: +proxy-addr@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +psl@^1.1.33: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +qs@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-bootstrap@^2.10.10: - version "2.10.10" - resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-2.10.10.tgz#be0b0d951a69987152d75c0e6986c80425efdf21" - integrity sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ== - dependencies: - "@babel/runtime" "^7.24.7" - "@restart/hooks" "^0.4.9" - "@restart/ui" "^1.9.4" - "@types/prop-types" "^15.7.12" - "@types/react-transition-group" "^4.4.6" - classnames "^2.3.2" - dom-helpers "^5.2.1" - invariant "^2.2.4" - prop-types "^15.8.1" - prop-types-extra "^1.1.0" - react-transition-group "^4.4.5" - uncontrollable "^7.2.1" - warning "^4.0.3" +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-cookie@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/react-cookie/-/react-cookie-8.0.1.tgz#0d7f5112c9003b61c70d3d53f1f0a5b741e9f2e9" - integrity sha512-QNdAd0MLuAiDiLcDU/2s/eyKmmfMHtjPUKJ2dZ/5CcQ9QKUium4B3o61/haq6PQl/YWFqC5PO8GvxeHKhy3GFA== +raw-body@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f" + integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g== dependencies: - "@types/hoist-non-react-statics" "^3.3.6" - hoist-non-react-statics "^3.3.2" - universal-cookie "^8.0.0" + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.6.3" + unpipe "1.0.0" -react-dom@^19.0.0, react-dom@^19.1.1: +react-dom@^19.1.1: version "19.1.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.1.tgz#2daa9ff7f3ae384aeb30e76d5ee38c046dc89893" integrity sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw== dependencies: scheduler "^0.26.0" -react-icons@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.5.0.tgz#8aa25d3543ff84231685d3331164c00299cdfaf2" - integrity sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw== +react-dropzone@^14.3.8: + version "14.3.8" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-14.3.8.tgz#a7eab118f8a452fe3f8b162d64454e81ba830582" + integrity sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug== + dependencies: + attr-accept "^2.2.4" + file-selector "^2.1.0" + prop-types "^15.8.1" + +react-hook-form@^7.62.0: + version "7.62.0" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.62.0.tgz#2d81e13c2c6b6d636548e440818341ca753218d0" + integrity sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA== -react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - react-refresh@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53" integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ== -react-router-dom@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.8.0.tgz#8c5e6f86e6c1f82037586124130df5926fdab10c" - integrity sha512-ntInsnDVnVRdtSu6ODmTQ41cbluak/ENeTif7GBce0L6eztFg6/e1hXAysFQI8X25C8ipKmT9cClbJwxx3Kaqw== +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== dependencies: - react-router "7.8.0" + react-style-singleton "^2.2.2" + tslib "^2.0.0" -react-router@7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.8.0.tgz#2bc07e0a9ff74d88ee38c2f27897e968b8f59170" - integrity sha512-r15M3+LHKgM4SOapNmsH3smAizWds1vJ0Z9C4mWaKnT9/wD7+d/0jYcj6LmOvonkrO4Rgdyp4KQ/29gWN2i1eg== +react-remove-scroll@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz#d2101d414f6d81d7d3bf033f3c1cb4785789f753" + integrity sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA== dependencies: - cookie "^1.0.1" - set-cookie-parser "^2.6.0" + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" -react-terminal@^1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/react-terminal/-/react-terminal-1.4.5.tgz#6c43f89f7b097871f94f60d7dac03d774de2cc0f" - integrity sha512-uv50LYNb4G/ACr8ghPUuZkypY0UxWm+YBK3M0MLaBG6kALeS9FxNCBhmQw/Uu9ckkE2k5E3kZPUVbR5D6uGOlA== +react-resizable-panels@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-resizable-panels/-/react-resizable-panels-3.0.4.tgz#8ad4b3cf07a5a6d665e8379e502ffb8f8c8a79f9" + integrity sha512-8Y4KNgV94XhUvI2LeByyPIjoUJb71M/0hyhtzkHaqpVHs+ZQs8b627HmzyhmVYi3C9YP6R+XD1KmG7hHjEZXFQ== + +react-router@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.8.1.tgz#62d62bc1a3fcde79c3ced8f7114f7b4f86916ce2" + integrity sha512-5cy/M8DHcG51/KUIka1nfZ2QeylS4PJRs6TT8I4PF5axVsI5JUxp0hC0NZ/AEEj8Vw7xsEoD7L/6FY+zoYaOGA== dependencies: - react "^19.0.0" - react-dom "^19.0.0" - ua-parser-js "^2.0.0" + cookie "^1.0.1" + set-cookie-parser "^2.6.0" -react-transition-group@^4.4.5: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" + get-nonce "^1.0.0" + tslib "^2.0.0" -react@^19.0.0, react@^19.1.1: +react@^19.1.1: version "19.1.1" resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af" integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ== @@ -3490,13 +4893,16 @@ readdirp@^4.0.1: resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== +recast@^0.23.2: + version "0.23.11" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.11.tgz#8885570bb28cf773ba1dc600da7f502f7883f73f" + integrity sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA== dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" + ast-types "^0.16.1" + esprima "~4.0.0" + source-map "~0.6.1" + tiny-invariant "^1.3.3" + tslib "^2.0.1" rehackt@^0.1.0: version "0.1.0" @@ -3532,6 +4938,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-from@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" @@ -3550,6 +4961,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" @@ -3561,34 +4980,45 @@ rfdc@^1.3.0: integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rollup@^4.43.0: - version "4.46.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.46.2.tgz#09b1a45d811e26d09bed63dc3ecfb6831c16ce32" - integrity sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg== + version "4.47.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.47.1.tgz#c40bce25b7140265dbe5467cd32871f71e9f9f0b" + integrity sha512-iasGAQoZ5dWDzULEUX3jiW0oB1qyFOepSyDyoU6S/OhVlDIwj5knI5QBa5RRQ0sK7OE0v+8VIi2JuV+G+3tfNg== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.46.2" - "@rollup/rollup-android-arm64" "4.46.2" - "@rollup/rollup-darwin-arm64" "4.46.2" - "@rollup/rollup-darwin-x64" "4.46.2" - "@rollup/rollup-freebsd-arm64" "4.46.2" - "@rollup/rollup-freebsd-x64" "4.46.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.46.2" - "@rollup/rollup-linux-arm-musleabihf" "4.46.2" - "@rollup/rollup-linux-arm64-gnu" "4.46.2" - "@rollup/rollup-linux-arm64-musl" "4.46.2" - "@rollup/rollup-linux-loongarch64-gnu" "4.46.2" - "@rollup/rollup-linux-ppc64-gnu" "4.46.2" - "@rollup/rollup-linux-riscv64-gnu" "4.46.2" - "@rollup/rollup-linux-riscv64-musl" "4.46.2" - "@rollup/rollup-linux-s390x-gnu" "4.46.2" - "@rollup/rollup-linux-x64-gnu" "4.46.2" - "@rollup/rollup-linux-x64-musl" "4.46.2" - "@rollup/rollup-win32-arm64-msvc" "4.46.2" - "@rollup/rollup-win32-ia32-msvc" "4.46.2" - "@rollup/rollup-win32-x64-msvc" "4.46.2" + "@rollup/rollup-android-arm-eabi" "4.47.1" + "@rollup/rollup-android-arm64" "4.47.1" + "@rollup/rollup-darwin-arm64" "4.47.1" + "@rollup/rollup-darwin-x64" "4.47.1" + "@rollup/rollup-freebsd-arm64" "4.47.1" + "@rollup/rollup-freebsd-x64" "4.47.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.47.1" + "@rollup/rollup-linux-arm-musleabihf" "4.47.1" + "@rollup/rollup-linux-arm64-gnu" "4.47.1" + "@rollup/rollup-linux-arm64-musl" "4.47.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.47.1" + "@rollup/rollup-linux-ppc64-gnu" "4.47.1" + "@rollup/rollup-linux-riscv64-gnu" "4.47.1" + "@rollup/rollup-linux-riscv64-musl" "4.47.1" + "@rollup/rollup-linux-s390x-gnu" "4.47.1" + "@rollup/rollup-linux-x64-gnu" "4.47.1" + "@rollup/rollup-linux-x64-musl" "4.47.1" + "@rollup/rollup-win32-arm64-msvc" "4.47.1" + "@rollup/rollup-win32-ia32-msvc" "4.47.1" + "@rollup/rollup-win32-x64-msvc" "4.47.1" fsevents "~2.3.2" +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -3608,7 +5038,7 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -3649,6 +5079,23 @@ semver@^7.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +send@^1.1.0, send@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" + integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== + dependencies: + debug "^4.3.5" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.0" + mime-types "^3.0.1" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.1" + sentence-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" @@ -3658,6 +5105,16 @@ sentence-case@^3.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +serve-static@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" + integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + set-cookie-parser@^2.6.0: version "2.7.1" resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" @@ -3668,6 +5125,42 @@ setimmediate@^1.0.5: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shadcn@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/shadcn/-/shadcn-2.10.0.tgz#e8235ec8bc8f13812f23a39b72ba0130e264e7d9" + integrity sha512-/zxjmHGbaYVFtI6bUridFVV7VFStIv3vU/w1h7xenhz7KRzc9pqHsyFvcExZprG7dlA5kW9knRgv8+Cl/H7w9w== + dependencies: + "@antfu/ni" "^23.2.0" + "@babel/core" "^7.22.1" + "@babel/parser" "^7.22.6" + "@babel/plugin-transform-typescript" "^7.22.5" + "@modelcontextprotocol/sdk" "^1.10.2" + commander "^10.0.0" + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + diff "^5.1.0" + execa "^7.0.0" + fast-glob "^3.3.2" + fs-extra "^11.1.0" + https-proxy-agent "^6.2.0" + kleur "^4.1.5" + msw "^2.7.1" + node-fetch "^3.3.0" + ora "^6.1.2" + postcss "^8.4.24" + prompts "^2.4.2" + recast "^0.23.2" + stringify-object "^5.0.0" + ts-morph "^18.0.0" + tsconfig-paths "^4.2.0" + zod "^3.20.2" + zod-to-json-schema "^3.24.5" + shallowequal@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -3690,16 +5183,66 @@ shell-quote@^1.7.3: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -signal-exit@^3.0.2: +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + signedsource@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" integrity sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww== +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3731,11 +5274,21 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +sonner@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/sonner/-/sonner-2.0.7.tgz#810c1487a67ec3370126e0f400dfb9edddc3e4f6" + integrity sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w== + "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sponge-case@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sponge-case/-/sponge-case-1.0.1.tgz#260833b86453883d974f84854cdb63aecc5aef4c" @@ -3743,11 +5296,38 @@ sponge-case@^1.0.1: dependencies: tslib "^2.0.3" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +statuses@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +stdin-discarder@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" + integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== + dependencies: + bl "^5.0.0" + +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + string-env-interpolation@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== +string-ts@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/string-ts/-/string-ts-2.2.1.tgz#9cf9a93d210f778080a9db86ca37cba37f55e44c" + integrity sha512-Q2u0gko67PLLhbte5HmPfdOjNvUKbKQM+mCNQae6jE91DmoFHY6HH9GcdqCeNx87DZ2KKjiFxmA0R/42OneGWw== + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3764,6 +5344,15 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +stringify-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-5.0.0.tgz#d5b05649fedaf8860640471641f70906fea7f351" + integrity sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg== + dependencies: + get-own-enumerable-keys "^1.0.0" + is-obj "^3.0.0" + is-regexp "^3.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -3771,12 +5360,22 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - min-indent "^1.0.0" + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@^3.1.1: version "3.1.1" @@ -3831,6 +5430,33 @@ sync-fetch@0.6.0-2: timeout-signal "^2.0.0" whatwg-mimetype "^4.0.0" +tailwind-merge@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-3.3.1.tgz#a7e7db7c714f6020319e626ecfb7e7dac8393a4b" + integrity sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g== + +tailwindcss@4.1.12, tailwindcss@^4.1.12: + version "4.1.12" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.12.tgz#7baeed5b5ac77370571c2baa72ee06e0050fc0a8" + integrity sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA== + +tapable@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" + integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== + +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -3841,6 +5467,11 @@ timeout-signal@^2.0.0: resolved "https://registry.yarnpkg.com/timeout-signal/-/timeout-signal-2.0.0.tgz#23207ea448d50258bb0defe3beea4a467643abba" integrity sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA== +tiny-invariant@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tinyglobby@^0.2.14: version "0.2.14" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" @@ -3863,16 +5494,38 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^2.1.0: +ts-api-utils@^2.0.0, ts-api-utils@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== +ts-declaration-location@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz#d4068fe9975828b3b453b3ab112b4711d8267688" + integrity sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA== + dependencies: + picomatch "^4.0.2" + ts-invariant@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" @@ -3885,12 +5538,34 @@ ts-log@^2.2.3: resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.7.tgz#4f4512144898b77c9984e91587076fcb8518688e" integrity sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg== +ts-morph@^18.0.0: + version "18.0.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-18.0.0.tgz#b9e7a898ea115064585a8a775d86da6edc9c5b4e" + integrity sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA== + dependencies: + "@ts-morph/common" "~0.19.0" + code-block-writer "^12.0.0" + +ts-pattern@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-5.8.0.tgz#1bf2dcdc58ae96ac7b64e59c9515d7ce1bf0ff19" + integrity sha512-kIjN2qmWiHnhgr5DAkAafF9fwb0T5OhMVSWrm8XEdTFnX6+wfXwYOFjeF86UZ54vduqiR7BfqScFmXSzSaH8oA== + +tsconfig-paths@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + tslib@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.3, tslib@^2.8.0, tslib@^2.8.1: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.3, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -3900,6 +5575,11 @@ tslib@~2.6.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tw-animate-css@^1.3.6: + version "1.3.7" + resolved "https://registry.yarnpkg.com/tw-animate-css/-/tw-animate-css-1.3.7.tgz#39bd63799cf5a67d17de33fd1b9714f1e2c60967" + integrity sha512-lvLb3hTIpB5oGsk8JmLoAjeCHV58nKa2zHYn8yWOoG5JJusH3bhJlF2DLAZ/5NmJ+jyH3ssiAx/2KmbhavJy/A== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3912,63 +5592,59 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@^5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== - -ua-is-frozen@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz#bfbc5f06336e379590e36beca444188c7dc3a7f3" - integrity sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw== +type-fest@^4.26.1: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -ua-parser-js@^1.0.35: - version "1.0.40" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.40.tgz#ac6aff4fd8ea3e794a6aa743ec9c2fc29e75b675" - integrity sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew== +type-is@^2.0.0, type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" -ua-parser-js@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-2.0.4.tgz#ea6698b055af2a61661d8793f069452cf456c0df" - integrity sha512-XiBOnM/UpUq21ZZ91q2AVDOnGROE6UQd37WrO9WBgw4u2eGvUCNOheMmZ3EfEUj7DLHr8tre+Um/436Of/Vwzg== +typescript-eslint@^8.39.1: + version "8.40.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.40.0.tgz#27541748f3ca889c9698327bdacf815f7dc61804" + integrity sha512-Xvd2l+ZmFDPEt4oj1QEXzA4A2uUK6opvKu3eGN9aGjB8au02lIVcLyi375w94hHyejTOmzIU77L8ol2sRg9n7Q== dependencies: - "@types/node-fetch" "^2.6.12" - detect-europe-js "^0.1.2" - is-standalone-pwa "^0.1.1" - node-fetch "^2.7.0" - ua-is-frozen "^0.1.2" + "@typescript-eslint/eslint-plugin" "8.40.0" + "@typescript-eslint/parser" "8.40.0" + "@typescript-eslint/typescript-estree" "8.40.0" + "@typescript-eslint/utils" "8.40.0" + +typescript@~5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +ua-parser-js@^1.0.35: + version "1.0.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.41.tgz#bd04dc9ec830fcf9e4fad35cf22dcedd2e3b4e9c" + integrity sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug== unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== -uncontrollable@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" - integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== - dependencies: - "@babel/runtime" "^7.6.3" - "@types/react" ">=16.9.11" - invariant "^2.2.4" - react-lifecycles-compat "^3.0.4" - -uncontrollable@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-8.0.4.tgz#a0a8307f638795162fafd0550f4a1efa0f8c5eb6" - integrity sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ== - undici-types@~7.10.0: version "7.10.0" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== -universal-cookie@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-8.0.1.tgz#19263fcda6889978a081c610a90fc395eeaeec64" - integrity sha512-B6ks9FLLnP1UbPPcveOidfvB9pHjP+wekP2uRYB9YDfKVpvcjKgy1W5Zj+cEXJ9KTPnqOKGfVDQBmn8/YCQfRg== - dependencies: - cookie "^1.0.2" +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unixify@^1.0.0: version "1.0.0" @@ -3977,6 +5653,11 @@ unixify@^1.0.0: dependencies: normalize-path "^2.1.1" +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + update-browserslist-db@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" @@ -4006,23 +5687,56 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + urlpattern-polyfill@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" + integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +use-sync-external-store@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== + util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vite@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.2.tgz#62ffd8a915977ff387fbe7a731af1a650ec5006e" - integrity sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ== +vary@^1, vary@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.1.3.tgz#8d70cb02fd6346b4bf1329a6760800538ef0faea" + integrity sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw== dependencies: esbuild "^0.25.0" - fdir "^6.4.6" + fdir "^6.5.0" picomatch "^4.0.3" postcss "^8.5.6" rollup "^4.43.0" @@ -4030,13 +5744,6 @@ vite@^7.1.1: optionalDependencies: fsevents "~2.3.3" -warning@^4.0.0, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -4097,6 +5804,11 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + ws@^8.17.1, ws@^8.18.3: version "8.18.3" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" @@ -4112,6 +5824,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + yaml-ast-parser@^0.0.43: version "0.0.43" resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" @@ -4127,7 +5844,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.0.0: +yargs@^17.0.0, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -4145,6 +5862,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + zen-observable-ts@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" @@ -4156,3 +5878,18 @@ zen-observable@0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + +zod-to-json-schema@^3.24.1, zod-to-json-schema@^3.24.5: + version "3.24.6" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d" + integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== + +zod@^3.20.2, zod@^3.23.8: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== + +zod@^4.0.17: + version "4.0.17" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.0.17.tgz#95931170715f73f7426c385c237b7477750d6c8d" + integrity sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ== From 37529da64c5229e7e307a42a91147e68144565a6 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Thu, 21 Aug 2025 17:06:10 +0200 Subject: [PATCH 06/31] Fix overflow due to sidebar --- src/components/ui/sidebar.tsx | 2 +- src/routes/ProtectedLayout.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ui/sidebar.tsx b/src/components/ui/sidebar.tsx index 0718edc3..2f7143a3 100644 --- a/src/components/ui/sidebar.tsx +++ b/src/components/ui/sidebar.tsx @@ -310,7 +310,7 @@ function SidebarInset({ className, ...props }: React.ComponentProps<"main">) {
-
+
From 993e0d39698de0c7b33ac3041d3211d514a014d9 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Thu, 21 Aug 2025 17:10:33 +0200 Subject: [PATCH 07/31] Create and use data table wrappers --- src/components/ui/table/data-table.tsx | 77 ++++++++++++++++++++++++-- src/pages/firmwares-page.tsx | 75 +++++++++++++++++++++++-- src/pages/importer-page.tsx | 44 ++++----------- src/pages/scanner-page.tsx | 17 +++++- 4 files changed, 168 insertions(+), 45 deletions(-) diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index c22c10b3..1eb6ce40 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -25,7 +25,11 @@ import { } from "@/components/ui/dropdown-menu.tsx"; import {DataTablePagination} from "@/components/ui/table/data-table-pagination.tsx"; import {cn} from "@/lib/utils.ts"; -import {ChevronRightIcon} from "lucide-react"; +import {AlertCircleIcon, ChevronRightIcon} from "lucide-react"; +import {ScrollArea, ScrollBar} from "@/components/ui/scroll-area.tsx"; +import {Skeleton} from "@/components/ui/skeleton.tsx"; +import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; +import {ApolloError} from "@apollo/client"; interface DataTableProps { className?: string; @@ -33,12 +37,13 @@ interface DataTableProps { data: TData[]; } -export function DataTable( +function DataTable( { className, columns, data, - }: Readonly>) { + }: Readonly> +) { const [sorting, setSorting] = useState([]); const [columnVisibility, setColumnVisibility] = useState({}); const [rowSelection, setRowSelection] = useState({}); @@ -148,4 +153,68 @@ export function DataTable(
); -} \ No newline at end of file +} + +function ScrollableDataTable( + { + columns, + data, + }: Readonly> +) { + return ( + + + + + ); +} + +function StateHandlingScrollableDataTable( + { + columns, + data, + idsLoading, + dataLoading, + idsError, + dataError, + }: Readonly> & { + idsLoading: boolean, + dataLoading: boolean, + idsError: ApolloError | undefined, + dataError: ApolloError | undefined, + } +) { + return ( + <> + {(idsLoading || dataLoading) && ( + + )} + + {idsError && ( + + + Unable to load firmware IDs. + Error message: "{idsError.message}" + + )} + + {dataError && ( + + + Unable to load firmwares. + Error message: "{dataError.message}" + + )} + + {!idsLoading && !dataLoading && !idsError && !dataError && ( + + )} + + ); +} + +export { + DataTable, + ScrollableDataTable, + StateHandlingScrollableDataTable, +} diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index a0839e73..b5d85320 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -1,6 +1,6 @@ -import {ColumnDef} from "@tanstack/react-table"; import {BasePage} from "@/pages/base-page.tsx"; -import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {ColumnDef} from "@tanstack/react-table"; +import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {FirmwareTableRowFragment} from "@/__generated__/graphql.ts"; import {useQuery} from "@apollo/client"; import { @@ -19,11 +19,69 @@ const columns: ColumnDef[] = [ { accessorKey: "absoluteStorePath", header: "Absolute Store Path", - } + }, + { + accessorKey: "aecsBuildFilePath", + header: "AECS Build File Path", + }, + { + accessorKey: "filename", + header: "Filename", + }, + { + accessorKey: "hasFileIndex", + header: "Has File Index", + }, + { + accessorKey: "hasFuzzyHashIndex", + header: "Has Fuzzy Hash Index", + }, + { + accessorKey: "indexedDate", + header: "Indexed Date", + }, + { + accessorKey: "md5", + header: "MD5", + }, + { + accessorKey: "originalFilename", + header: "Original Filename", + }, + { + accessorKey: "osVendor", + header: "OS Vendor", + }, + { + accessorKey: "relativeStorePath", + header: "Relative Store Path", + }, + { + accessorKey: "sha1", + header: "SHA-1", + }, + { + accessorKey: "sha256", + header: "SHA-256", + }, + { + accessorKey: "tag", + header: "Tag", + }, + { + accessorKey: "versionDetected", + header: "Version Detected", + }, + { + accessorKey: "pk", + header: "Object ID", + }, ]; export function FirmwaresPage() { const { + loading: idsLoading, + error: idsError, data: idsData, } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); @@ -33,6 +91,8 @@ export function FirmwaresPage() { ); const { + loading: firmwaresLoading, + error: firmwaresError, data: firmwaresData, } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { variables: {objectIds}, @@ -52,7 +112,14 @@ export function FirmwaresPage() { return ( - + ); } \ No newline at end of file diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 43329117..fe341255 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -9,15 +9,13 @@ import { FIRMWARE_TABLE_ROW_IMPORTER, GET_FIRMWARE_OBJECT_ID_LIST, GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, } from "@/components/graphql/firmware.graphql.ts"; -import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; +import {Alert} from "@/components/ui/alert.tsx"; import {AlertCircleIcon, LoaderCircle, Trash} from "lucide-react"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; -import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {useMemo} from "react"; import {nonNullable} from "@/lib/non-nullable.ts"; import {useFragment} from "@/__generated__"; -import {ScrollArea, ScrollBar} from "@/components/ui/scroll-area.tsx"; -import {Skeleton} from "@/components/ui/skeleton.tsx"; import type {ColumnDef} from "@tanstack/react-table"; import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts"; @@ -71,36 +69,14 @@ export function ImporterPage() { Extracted Firmwares - - {(idsLoading || firmwaresLoading) && ( - - )} - - {idsError && ( - - - Unable to load firmware IDs. - Error message: "{idsError.message}" - - )} - - {firmwaresError && ( - - - Unable to load firmwares. - Error message: "{firmwaresError.message}" - - )} - - {!idsLoading && !firmwaresLoading && !idsError && !firmwaresError && ( - - - - - )} + ); } diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index 2dfb0d4b..0c0edc01 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -4,7 +4,7 @@ import {TypographyH4} from "@/components/ui/typography/headings.tsx"; import {CheckboxForm} from "@/components/ui/checkbox-form.tsx"; import {ColumnDef} from "@tanstack/react-table"; import {Checkbox} from "@/components/ui/checkbox.tsx"; -import {DataTable} from "@/components/ui/table/data-table.tsx"; +import {DataTable, StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {useQuery} from "@apollo/client"; import { FIRMWARE_TABLE_ROW_SCANNER, @@ -83,6 +83,8 @@ function FirmwaresPanel() { ]; const { + loading: idsLoading, + error: idsError, data: idsData, } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); @@ -92,6 +94,8 @@ function FirmwaresPanel() { ); const { + loading: firmwaresLoading, + error: firmwaresError, data: firmwaresData, } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS_SCANNER, { variables: {objectIds}, @@ -110,9 +114,16 @@ function FirmwaresPanel() { ); return ( -
+
Firmwares - +
); } From bb4e472db631a58e2503eb7d80be8332acc9104d Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Thu, 21 Aug 2025 17:15:48 +0200 Subject: [PATCH 08/31] Renamings for consistency --- src/{App.tsx => app.tsx} | 4 ++-- src/main.tsx | 2 +- src/routes/{ProtectedLayout.tsx => protected-layout.tsx} | 0 src/routes/{PublicOnlyRoute.tsx => public-only-route.tsx} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename src/{App.tsx => app.tsx} (90%) rename src/routes/{ProtectedLayout.tsx => protected-layout.tsx} (100%) rename src/routes/{PublicOnlyRoute.tsx => public-only-route.tsx} (100%) diff --git a/src/App.tsx b/src/app.tsx similarity index 90% rename from src/App.tsx rename to src/app.tsx index 0f7f8ca4..8c838896 100644 --- a/src/App.tsx +++ b/src/app.tsx @@ -1,7 +1,7 @@ import {Navigate, Route, Routes} from "react-router"; import LoginPage from "@/pages/login-page.tsx"; -import PublicOnlyRoute from "@/routes/PublicOnlyRoute.tsx"; -import ProtectedLayout from "@/routes/ProtectedLayout.tsx"; +import PublicOnlyRoute from "@/routes/public-only-route.tsx"; +import ProtectedLayout from "@/routes/protected-layout.tsx"; import HomePage from "@/pages/home-page.tsx"; import EmulatorPage from "@/pages/EmulatorPage"; import {ImporterPage} from "@/pages/importer-page.tsx"; diff --git a/src/main.tsx b/src/main.tsx index 43390f1f..8b7b1bb8 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,6 +1,6 @@ import {StrictMode} from 'react' import {createRoot} from 'react-dom/client' -import App from './App.tsx' +import App from './app.tsx' import {ApolloProvider} from "@apollo/client"; import {client} from "./lib/graphql/apolloClient.ts"; import {BrowserRouter} from "react-router"; diff --git a/src/routes/ProtectedLayout.tsx b/src/routes/protected-layout.tsx similarity index 100% rename from src/routes/ProtectedLayout.tsx rename to src/routes/protected-layout.tsx diff --git a/src/routes/PublicOnlyRoute.tsx b/src/routes/public-only-route.tsx similarity index 100% rename from src/routes/PublicOnlyRoute.tsx rename to src/routes/public-only-route.tsx From 2147fcde6fb39213b84eb86c17efe72bc4fcc211 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Thu, 21 Aug 2025 18:44:16 +0200 Subject: [PATCH 09/31] Fix checkbox CSS issue in data table --- src/components/ui/table.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx index 5513a5cd..31bcb7bc 100644 --- a/src/components/ui/table.tsx +++ b/src/components/ui/table.tsx @@ -68,7 +68,7 @@ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
[role=checkbox]]:translate-y-[2px]", + className + )} + {...props} + /> + ) +} + +function TableCell({ className, ...props }: React.ComponentProps<"td">) { + return ( + [role=checkbox]]:translate-y-[2px]", + className + )} + {...props} + /> + ) +} + +function TableCaption({ + className, + ...props +}: React.ComponentProps<"caption">) { + return ( +
+ ) +} + +export { + Table, + TableHeader, + TableBody, + TableFooter, + TableHead, + TableRow, + TableCell, + TableCaption, +} diff --git a/src/components/ui/table/data-table-column-header.tsx b/src/components/ui/table/data-table-column-header.tsx new file mode 100644 index 00000000..bb1f4562 --- /dev/null +++ b/src/components/ui/table/data-table-column-header.tsx @@ -0,0 +1,73 @@ +import {Column} from "@tanstack/react-table" +import {ArrowDown, ArrowUp, ChevronsUpDown, EyeOff} from "lucide-react" + +import {cn} from "@/lib/utils.ts" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu.tsx"; +import {Button} from "@/components/ui/button.tsx"; +import {HTMLAttributes} from "react"; + +interface DataTableColumnHeaderProps + extends HTMLAttributes { + column: Column + title: string +} + +export function DataTableColumnHeader( + { + column, + title, + className, + }: Readonly>) { + if (!column.getCanSort()) { + return
{title}
+ } + + return ( +
+ + + + + + { + column.toggleSorting(false); + }}> + + Asc + + { + column.toggleSorting(true); + }}> + + Desc + + + { + column.toggleVisibility(false); + }}> + + Hide + + + +
+ ) +} diff --git a/src/components/ui/table/data-table-column-visbility.tsx b/src/components/ui/table/data-table-column-visbility.tsx new file mode 100644 index 00000000..06bc016d --- /dev/null +++ b/src/components/ui/table/data-table-column-visbility.tsx @@ -0,0 +1,56 @@ +"use client" + +import {DropdownMenuTrigger} from "@radix-ui/react-dropdown-menu" +import {Table} from "@tanstack/react-table" +import {Settings2} from "lucide-react" +import { + DropdownMenu, DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuSeparator +} from "@/components/ui/dropdown-menu.tsx"; +import {Button} from "@/components/ui/button.tsx"; + +export function DataTableViewOptions( + { + table, + }: Readonly<{ table: Table }>) { + return ( + + + + + + Toggle columns + + {table + .getAllColumns() + .filter( + (column) => + typeof column.accessorFn !== "undefined" && column.getCanHide() + ) + .map((column) => { + return ( + { + column.toggleVisibility(value); + }} + > + {column.id} + + ) + })} + + + ) +} diff --git a/src/components/ui/table/data-table-pagination.tsx b/src/components/ui/table/data-table-pagination.tsx new file mode 100644 index 00000000..7fa6590a --- /dev/null +++ b/src/components/ui/table/data-table-pagination.tsx @@ -0,0 +1,99 @@ +import {Table} from "@tanstack/react-table" +import { + ChevronLeft, + ChevronRight, + ChevronsLeft, + ChevronsRight, +} from "lucide-react" +import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue} from "@/components/ui/select.tsx"; +import {Button} from "@/components/ui/button.tsx"; + +interface DataTablePaginationProps { + table: Table +} + +export function DataTablePagination( + { + table, + }: Readonly>) { + return ( +
+
+
+

Rows per page

+ +
+
+ Page {table.getState().pagination.pageIndex + 1} of{" "} + {table.getPageCount()} +
+
+ + + + +
+
+
+ ) +} diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx new file mode 100644 index 00000000..c22c10b3 --- /dev/null +++ b/src/components/ui/table/data-table.tsx @@ -0,0 +1,151 @@ +"use client" + +import { + ColumnDef, + flexRender, + getCoreRowModel, getPaginationRowModel, getSortedRowModel, SortingState, + useReactTable, VisibilityState, +} from "@tanstack/react-table" + +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table.tsx" +import {Button} from "@/components/ui/button.tsx"; +import {useState} from "react"; +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu.tsx"; +import {DataTablePagination} from "@/components/ui/table/data-table-pagination.tsx"; +import {cn} from "@/lib/utils.ts"; +import {ChevronRightIcon} from "lucide-react"; + +interface DataTableProps { + className?: string; + columns: ColumnDef[]; + data: TData[]; +} + +export function DataTable( + { + className, + columns, + data, + }: Readonly>) { + const [sorting, setSorting] = useState([]); + const [columnVisibility, setColumnVisibility] = useState({}); + const [rowSelection, setRowSelection] = useState({}); + const [isColumnMenuOpen, setIsColumnMenuOpen] = useState(false); + + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + getPaginationRowModel: getPaginationRowModel(), + onSortingChange: setSorting, + getSortedRowModel: getSortedRowModel(), + onColumnVisibilityChange: setColumnVisibility, + onRowSelectionChange: setRowSelection, + state: { + sorting, + columnVisibility, + rowSelection, + }, + }); + + return ( +
+
+ + + + + + {table + .getAllColumns() + .filter( + (column) => column.getCanHide() + ) + .map((column) => { + return ( + { + column.toggleVisibility(value); + }} + > + {column.id} + + ) + })} + + +
+
+ + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows.length ? ( + table.getRowModel().rows.map((row) => ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + )) + ) : ( + + + No results. + + + )} + +
+
+
+
+ {table.getFilteredSelectedRowModel().rows.length} of{" "} + {table.getFilteredRowModel().rows.length} row(s) selected. +
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/components/ui/theming/mode-toggle.tsx b/src/components/ui/theming/mode-toggle.tsx new file mode 100644 index 00000000..be36fee4 --- /dev/null +++ b/src/components/ui/theming/mode-toggle.tsx @@ -0,0 +1,37 @@ +import { Moon, Sun } from "lucide-react" + +import { Button } from "@/components/ui/button.tsx" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu.tsx" +import { useTheme } from "@/components/ui/theming/theme-provider.tsx" + +export function ModeToggle() { + const { setTheme } = useTheme() + + return ( + + + + + + { setTheme("light"); }}> + Light + + { setTheme("dark"); }}> + Dark + + { setTheme("system"); }}> + System + + + + ) +} \ No newline at end of file diff --git a/src/components/ui/theming/theme-provider.tsx b/src/components/ui/theming/theme-provider.tsx new file mode 100644 index 00000000..0c941b4d --- /dev/null +++ b/src/components/ui/theming/theme-provider.tsx @@ -0,0 +1,75 @@ +import { createContext, useContext, useEffect, useState } from "react" + +type Theme = "dark" | "light" | "system" + +type ThemeProviderProps = { + children: React.ReactNode + defaultTheme?: Theme + storageKey?: string +} + +type ThemeProviderState = { + theme: Theme + setTheme: (theme: Theme) => void +} + +const initialState: ThemeProviderState = { + theme: "system", + setTheme: () => null, +} + +const ThemeProviderContext = createContext(initialState) + +export function ThemeProvider({ + children, + defaultTheme = "system", + storageKey = "vite-ui-theme", + ...props + }: ThemeProviderProps) { + const [theme, setTheme] = useState( + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme + ) + + useEffect(() => { + const root = window.document.documentElement + + root.classList.remove("light", "dark") + + if (theme === "system") { + const systemTheme = window.matchMedia("(prefers-color-scheme: dark)") + .matches + ? "dark" + : "light" + + root.classList.add(systemTheme) + return + } + + root.classList.add(theme) + }, [theme]) + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme) + setTheme(theme) + }, + } + + return ( + + {children} + + ) +} + +export const useTheme = () => { + const context = useContext(ThemeProviderContext) + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (context === undefined) + throw new Error("useTheme must be used within a ThemeProvider") + + return context +} \ No newline at end of file diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx new file mode 100644 index 00000000..71ee0fe1 --- /dev/null +++ b/src/components/ui/tooltip.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import * as TooltipPrimitive from "@radix-ui/react-tooltip" + +import { cn } from "@/lib/utils" + +function TooltipProvider({ + delayDuration = 0, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function Tooltip({ + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +function TooltipTrigger({ + ...props +}: React.ComponentProps) { + return +} + +function TooltipContent({ + className, + sideOffset = 0, + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + + + ) +} + +export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } diff --git a/src/components/ui/typography/headings.tsx b/src/components/ui/typography/headings.tsx new file mode 100644 index 00000000..c3442ecc --- /dev/null +++ b/src/components/ui/typography/headings.tsx @@ -0,0 +1,46 @@ +import {ReactNode} from "react"; +import {cn} from "@/lib/utils.ts"; + +type props = { + children: ReactNode, + className?: string, +} + +function TypographyH1({children, className}: Readonly) { + return ( +

+ {children} +

+ ) +} + +function TypographyH2({children, className}: Readonly) { + return ( +

+ {children} +

+ ) +} + +function TypographyH3({children, className}: Readonly) { + return ( +

+ {children} +

+ ) +} + +function TypographyH4({children, className}: Readonly) { + return ( +

+ {children} +

+ ) +} + +export { + TypographyH1, + TypographyH2, + TypographyH3, + TypographyH4, +} diff --git a/src/env.d.ts b/src/env.d.ts deleted file mode 100644 index 076f7396..00000000 --- a/src/env.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -declare module '*.module.scss' { - const classes: Record; - export default classes; -} - -declare module '*.module.css' { - const classes: Record; - export default classes; -} - -declare module '*.scss'; -declare module '*css'; \ No newline at end of file diff --git a/src/global.css b/src/global.css new file mode 100644 index 00000000..0837b2da --- /dev/null +++ b/src/global.css @@ -0,0 +1,120 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.65rem; + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.623 0.214 259.815); + --primary-foreground: oklch(0.97 0.014 254.604); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.623 0.214 259.815); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.141 0.005 285.823); + --sidebar-primary: oklch(0.623 0.214 259.815); + --sidebar-primary-foreground: oklch(0.97 0.014 254.604); + --sidebar-accent: oklch(0.967 0.001 286.375); + --sidebar-accent-foreground: oklch(0.21 0.006 285.885); + --sidebar-border: oklch(0.92 0.004 286.32); + --sidebar-ring: oklch(0.623 0.214 259.815); +} + +.dark { + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.21 0.006 285.885); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.546 0.245 262.881); + --primary-foreground: oklch(0.97 0.014 254.604); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.488 0.243 264.376); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.21 0.006 285.885); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.546 0.245 262.881); + --sidebar-primary-foreground: oklch(0.379 0.146 265.522); + --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.488 0.243 264.376); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/src/graphql/current-user.graphql.ts b/src/graphql/current-user.graphql.ts deleted file mode 100644 index a8379fa7..00000000 --- a/src/graphql/current-user.graphql.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {gql} from "../__generated__"; - -export const GET_CURRENT_USER = gql(` - query GetCurrentUser { - me { - email - firstName - isActive - isStaff - isSuperuser - lastLogin - lastName - username - dateJoined - id - } - } -`); diff --git a/src/hooks/theming/useDarkMode.ts b/src/hooks/emulator/theming/useDarkMode.ts similarity index 100% rename from src/hooks/theming/useDarkMode.ts rename to src/hooks/emulator/theming/useDarkMode.ts diff --git a/src/hooks/login/useAuthentication.ts b/src/hooks/login/useAuthentication.ts deleted file mode 100644 index bebd7d32..00000000 --- a/src/hooks/login/useAuthentication.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {useEffect, useState} from 'react'; -import { useQuery } from "@apollo/client"; -import {GET_CURRENT_USER} from "../../graphql/current-user.graphql"; - - -export const useAuthentication = () => { - const [isAuthenticated, setIsAuthenticated] = useState(false); - const { error, data } = useQuery(GET_CURRENT_USER); - - useEffect(() => { - if (data?.me?.id) { - setIsAuthenticated(true); - } else { - setIsAuthenticated(false); - } - }, [data, error]); - - return { isAuthenticated, setAuthenticated: setIsAuthenticated }; -}; diff --git a/src/hooks/use-mobile.ts b/src/hooks/use-mobile.ts new file mode 100644 index 00000000..2b0fe1df --- /dev/null +++ b/src/hooks/use-mobile.ts @@ -0,0 +1,19 @@ +import * as React from "react" + +const MOBILE_BREAKPOINT = 768 + +export function useIsMobile() { + const [isMobile, setIsMobile] = React.useState(undefined) + + React.useEffect(() => { + const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) + const onChange = () => { + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) + } + mql.addEventListener("change", onChange) + setIsMobile(window.innerWidth < MOBILE_BREAKPOINT) + return () => mql.removeEventListener("change", onChange) + }, []) + + return !!isMobile +} diff --git a/src/index.tsx b/src/index.tsx deleted file mode 100644 index 560eea05..00000000 --- a/src/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; -import './assets/scss/App.scss'; -import App from './App'; -import { CookiesProvider } from "react-cookie"; -import { ApolloProvider, ApolloClient, InMemoryCache, HttpLink, from} from "@apollo/client"; -import { GRAPHQL_URL, CSRF_URL } from "./EnvConfig"; -import { RetryLink } from "@apollo/client/link/retry"; - -type CsrfResponse = { csrfToken: string }; - -const customFetch: typeof fetch = async (uri, options) => { - const res = await fetch(CSRF_URL); - const { csrfToken } = (await res.json()) as CsrfResponse; - - const headers = new Headers(options?.headers); - headers.set('X-CSRFToken', csrfToken); - - return fetch(uri, { ...options, headers }); -}; - -const httpLink = new HttpLink({ - fetch: customFetch, - uri: GRAPHQL_URL, -}); - -const additiveLink = from([new RetryLink(), httpLink]); - -const gqlClient = new ApolloClient({ - link: additiveLink, - cache: new InMemoryCache() -}); - -const container = document.getElementById('root'); -if (!container) throw new Error('Root container element not found'); - -const root = createRoot(container); -root.render( - - - - - - - , -); diff --git a/src/lib/auth.tsx b/src/lib/auth.tsx new file mode 100644 index 00000000..c708b46c --- /dev/null +++ b/src/lib/auth.tsx @@ -0,0 +1,83 @@ +import {createContext, type ReactNode, useCallback, useContext, useEffect, useMemo, useState} from "react"; +import {useApolloClient, useMutation, useQuery} from "@apollo/client"; +import {GET_CURRENT_USER_ID} from "@/components/graphql/current-user.graphql.ts"; +import {DELETE_TOKEN_COOKIE} from "@/components/graphql/auth.graphql.ts"; + + +type AuthContextValue = { + currentUser: {__typename?: "UserType", id: string} | null | undefined; + isAuthenticated: boolean; + initializing: boolean; + refreshMe: () => Promise; + logIn: () => Promise; + logOut: () => Promise; +} + +const AuthContext = createContext(null); + +export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { + const {data, loading, refetch} = useQuery(GET_CURRENT_USER_ID, { + fetchPolicy: "network-only", + errorPolicy: "ignore", + }); + + const client = useApolloClient(); + const [doLogout] = useMutation(DELETE_TOKEN_COOKIE); + + // Avoid flashing during initial load + const [bootstrapped, setBootstrapped] = useState(false); + useEffect(() => { + if (!loading) setBootstrapped(true); + }, [loading]); + + const currentUser = data?.me ?? null; + const isAuthenticated = !!currentUser; + const initializing = !bootstrapped; + + const refreshMe = useCallback(async () => { + try { + const res = await refetch(); + return Boolean(res.data.me); + } catch { + return false; + } + }, [refetch]); + + const logIn = useCallback(async () => { + return refreshMe(); + }, [refreshMe]); + + const logOut = useCallback(async () => { + try { + await doLogout({fetchPolicy: "no-cache"}); + } catch { + // ignore + } + await client.clearStore().catch(() => {}); + try { + await refetch(); + } catch { + // ignore + } + }, [client, doLogout, refetch]); + + const value = useMemo( + () => ({ + currentUser, + isAuthenticated, + initializing, + refreshMe, + logIn, + logOut, + }), + [currentUser, isAuthenticated, initializing, refreshMe, logIn, logOut] + ); + + return {children}; +} + +export function useAuth() { + const context = useContext(AuthContext); + if (!context) throw new Error('useAuth must be used within a AuthProvider'); + return context; +} diff --git a/src/lib/graphql/apolloClient.ts b/src/lib/graphql/apolloClient.ts new file mode 100644 index 00000000..945dc573 --- /dev/null +++ b/src/lib/graphql/apolloClient.ts @@ -0,0 +1,39 @@ +import {ApolloClient, from, HttpLink, InMemoryCache} from "@apollo/client"; +import {RetryLink} from "@apollo/client/link/retry"; +import {CSRF_URL, GRAPHQL_URL} from "../../envconfig.ts"; + +let cachedCsrf: string | null = null; +let inflightCsrf: Promise | null = null; + +async function getCsrf(): Promise { + if (cachedCsrf) return cachedCsrf; + if (inflightCsrf) return inflightCsrf; + + inflightCsrf = fetch(CSRF_URL, { credentials: "include" }) + .then(r => r.json()) + .then(({ csrfToken }) => { + cachedCsrf = csrfToken; + inflightCsrf = null; + return csrfToken; + }) + .catch(e => { inflightCsrf = null; throw e;}); + return inflightCsrf; +} + +const customFetch: typeof fetch = async (uri, options) => { + const csrfToken = await getCsrf(); + const headers = new Headers(options?.headers); + headers.set("X-CSRFToken", csrfToken); + return fetch(uri, { ...options, headers, credentials: "include" }); +}; + +const httpLink = new HttpLink({ + uri: GRAPHQL_URL, + fetch: customFetch, + credentials: "same-origin", +}); + +export const client = new ApolloClient({ + link: from([new RetryLink(), httpLink]), + cache: new InMemoryCache(), +}); \ No newline at end of file diff --git a/src/lib/graphql/graphql-utils.ts b/src/lib/graphql/graphql-utils.ts new file mode 100644 index 00000000..a7397c95 --- /dev/null +++ b/src/lib/graphql/graphql-utils.ts @@ -0,0 +1,4 @@ +export function convertIdToObjectId(id: string): string { + const decoded = atob(id); + return decoded.split(":").at(1) ?? ""; +} \ No newline at end of file diff --git a/src/lib/non-nullable.ts b/src/lib/non-nullable.ts new file mode 100644 index 00000000..5f9dc9ab --- /dev/null +++ b/src/lib/non-nullable.ts @@ -0,0 +1,3 @@ +export function nonNullable(v: T | null | undefined): v is T { + return v != null; +} \ No newline at end of file diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 00000000..bd0c391d --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 00000000..43390f1f --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,23 @@ +import {StrictMode} from 'react' +import {createRoot} from 'react-dom/client' +import App from './App.tsx' +import {ApolloProvider} from "@apollo/client"; +import {client} from "./lib/graphql/apolloClient.ts"; +import {BrowserRouter} from "react-router"; +import {ThemeProvider} from "@/components/ui/theming/theme-provider.tsx"; +import {AuthProvider} from "@/lib/auth.tsx"; + +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +createRoot(document.getElementById('root')!).render( + + + + + + + + + + + +) diff --git a/src/pages/AboutPage.tsx b/src/pages/AboutPage.tsx deleted file mode 100644 index b174c558..00000000 --- a/src/pages/AboutPage.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import Container from "react-bootstrap/esm/Container"; -import {Card} from "react-bootstrap"; -import React from "react"; - -function AboutPage() { - const theme = localStorage.getItem("theme"); - const cardTextTheme = theme === 'light' ? 'dark' : 'white'; - const cartBorderTheme = theme === 'light' ? 'white' : 'success'; - const cardClassTheme = theme === 'light' ? "light-card" : "dark-card"; - - - return ( - - - -
-

FirmwareDroid is a framework made for analysing Android firmware on scale. The initial framework was - developed at the Zurich University of Applied Sciences (ZHAW) by Thomas Sutter. You can find more - infos about the project on our Github repository. -

-
-
-
-
- ); -} - -export default AboutPage; \ No newline at end of file diff --git a/src/pages/EmulatorPage.jsx b/src/pages/EmulatorPage.jsx index 569ee3bf..4274e352 100644 --- a/src/pages/EmulatorPage.jsx +++ b/src/pages/EmulatorPage.jsx @@ -1,63 +1,52 @@ -import { - Button, - Col, - Container, - Row, -} from "react-bootstrap"; import React, {useState} from 'react'; -import EmulatorView from "../components/emulator/EmulatorView"; - +import {GlobalStyles} from "../assets/emulator/theming/global.js"; +import {ThemeProvider} from "styled-components"; +import {useDarkMode} from "../hooks/emulator/theming/useDarkMode.js"; +import {darkTheme, lightTheme} from "../assets/emulator/theming/theme.js"; +import {Button} from "@/components/ui/button.js"; function EmulatorPage() { const emulatorUrisFromStorage = JSON.parse(sessionStorage.getItem('emulatorUris')) || []; - const radiosEmulatorView = [ - {name: 'WebRTC', value: 'webrtc'}, - {name: 'PNG', value: 'png'}, - ] + const radiosEmulatorView = [{name: 'WebRTC', value: 'webrtc'}, {name: 'PNG', value: 'png'},] const [emulatorViewCounter, setEmulatorViewCounter] = useState(2); - const [emulatorViews, setEmulatorViews] = useState([ - { - emulatorConnectionState: {emuState: ""}, - hasEmulatorAudio: {hasAudio: false}, - longitudeValue: 8.72932, - latitudeValue: 47.4974, - hasEmulatorError: false, - emulatorErrorMessage: null, - gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, - volumeState: {volume: 0, muted: true}, - radioEmulatorViewValue: 'png', - emulatorUri: emulatorUrisFromStorage[0] || "https://fmd.localhost:4443/", - radiosEmulatorView: radiosEmulatorView, - }, - { - emulatorConnectionState: {emuState: ""}, - hasEmulatorAudio: {hasAudio: false}, - longitudeValue: 8.72932, - latitudeValue: 47.4974, - hasEmulatorError: false, - emulatorErrorMessage: null, - gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, - volumeState: {volume: 0, muted: true}, - radioEmulatorViewValue: 'png', - emulatorUri: emulatorUrisFromStorage[1] || "https://fmd-aosp.init-lab.ch:4443/0", - radiosEmulatorView: radiosEmulatorView, - }, - { - emulatorConnectionState: {emuState: ""}, - hasEmulatorAudio: {hasAudio: false}, - longitudeValue: 8.72932, - latitudeValue: 47.4974, - hasEmulatorError: false, - emulatorErrorMessage: null, - gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, - volumeState: {volume: 0, muted: true}, - radioEmulatorViewValue: 'png', - emulatorUri: emulatorUrisFromStorage[1] || "https://fmd-aosp.init-lab.ch:4443/1", - radiosEmulatorView: radiosEmulatorView, - } - ]); - const [selectedEmulatorViewIndex, setSelectedEmulatorView] = useState(null); - + const [emulatorViews, setEmulatorViews] = useState([{ + emulatorConnectionState: {emuState: ""}, + hasEmulatorAudio: {hasAudio: false}, + longitudeValue: 8.72932, + latitudeValue: 47.4974, + hasEmulatorError: false, + emulatorErrorMessage: null, + gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, + volumeState: {volume: 0, muted: true}, + radioEmulatorViewValue: 'png', + emulatorUri: emulatorUrisFromStorage[0] || "https://fmd.localhost:4443/", + radiosEmulatorView: radiosEmulatorView, + }, { + emulatorConnectionState: {emuState: ""}, + hasEmulatorAudio: {hasAudio: false}, + longitudeValue: 8.72932, + latitudeValue: 47.4974, + hasEmulatorError: false, + emulatorErrorMessage: null, + gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, + volumeState: {volume: 0, muted: true}, + radioEmulatorViewValue: 'png', + emulatorUri: emulatorUrisFromStorage[1] || "https://fmd-aosp.init-lab.ch:4443/0", + radiosEmulatorView: radiosEmulatorView, + }, { + emulatorConnectionState: {emuState: ""}, + hasEmulatorAudio: {hasAudio: false}, + longitudeValue: 8.72932, + latitudeValue: 47.4974, + hasEmulatorError: false, + emulatorErrorMessage: null, + gpsLocation: {gps: {latitude: 47.4974, longitude: 8.72932}}, + volumeState: {volume: 0, muted: true}, + radioEmulatorViewValue: 'png', + emulatorUri: emulatorUrisFromStorage[1] || "https://fmd-aosp.init-lab.ch:4443/1", + radiosEmulatorView: radiosEmulatorView, + }]); + const [selectedEmulatorViewIndex, setSelectedEmulatorViewIndex] = useState(null); const updateEmulatorView = (index, key, value) => { @@ -94,96 +83,329 @@ function EmulatorPage() { }); }; + const [theme] = useDarkMode(); + const themeMode = theme === 'light' ? lightTheme : darkTheme; - return (<> + return ( + +
Emulator (experimental)
[role=checkbox]]:translate-y-[2px]", + "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] [&:has([role=checkbox])]:inline-flex [&:has([role=checkbox])]:items-center", className )} {...props} @@ -81,7 +81,7 @@ function TableCell({ className, ...props }: React.ComponentProps<"td">) { [role=checkbox]]:translate-y-[2px]", + "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px] [&:has([role=checkbox])]:inline-flex [&:has([role=checkbox])]:items-center", className )} {...props} From 34512fbcd8336a443783ca33975a88cf53cc957b Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Fri, 22 Aug 2025 12:48:34 +0200 Subject: [PATCH 10/31] Small design changes on scanner page --- src/components/ui/checkbox-form.tsx | 19 ++++++----- src/pages/scanner-page.tsx | 49 +++++++++++++++++------------ 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/components/ui/checkbox-form.tsx b/src/components/ui/checkbox-form.tsx index af927075..adb8dd28 100644 --- a/src/components/ui/checkbox-form.tsx +++ b/src/components/ui/checkbox-form.tsx @@ -31,7 +31,7 @@ type CheckboxFormProps = { const DefaultSchema = z.object({ items: z.array(z.string()).refine((value) => value.some((item) => item), { - message: "You have to select at least one item.", + message: "Select at least one item.", }), }) @@ -69,12 +69,14 @@ export function CheckboxForm( name="items" render={() => ( - {(label || description) && (
- {label && {label}} - {description && - {description} - } -
)} + {(label || description) && ( +
+ {label && {label}} + {description && + {description} + } +
+ )}
{items.map((item) => ( @@ -103,7 +105,8 @@ function ItemField({item, form}: Readonly) { render={({field}) => { return ( - + -
- - - - - - - - - - - - - -
+ + + + + + + + + + + + + ); } @@ -114,7 +112,7 @@ function FirmwaresPanel() { ); return ( -
+
Firmwares +
Apps - +
); } @@ -212,7 +221,7 @@ function ScannersPanel() { ]; return ( -
+
Scanners ({ From d29afeb8a57856ebadb44823dccd49c353ff4f1e Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Fri, 22 Aug 2025 14:53:05 +0200 Subject: [PATCH 11/31] Finally fix CSS checkbox issue in data tables --- src/components/ui/table.tsx | 4 ++-- src/components/ui/table/data-table.tsx | 2 +- src/pages/importer-page.tsx | 29 +++++++++++++++++++++++++- src/pages/scanner-page.tsx | 4 ++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/components/ui/table.tsx b/src/components/ui/table.tsx index 31bcb7bc..eb0def50 100644 --- a/src/components/ui/table.tsx +++ b/src/components/ui/table.tsx @@ -68,7 +68,7 @@ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
[role=checkbox]]:translate-y-[2px] [&:has([role=checkbox])]:inline-flex [&:has([role=checkbox])]:items-center", + "p-2 text-foreground text-left align-middle font-medium whitespace-nowrap", className )} {...props} @@ -81,7 +81,7 @@ function TableCell({ className, ...props }: React.ComponentProps<"td">) { [role=checkbox]]:translate-y-[2px] [&:has([role=checkbox])]:inline-flex [&:has([role=checkbox])]:items-center", + "px-2 py-1 align-middle whitespace-nowrap", className )} {...props} diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index 1eb6ce40..be17179c 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -136,7 +136,7 @@ function DataTable( )) ) : ( - + No results. diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index fe341255..3ca00a97 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -19,6 +19,7 @@ import {useFragment} from "@/__generated__"; import type {ColumnDef} from "@tanstack/react-table"; import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts"; +import {Checkbox} from "@/components/ui/checkbox.tsx"; export function ImporterPage() { const [createFirmwareExtractorJob, {loading: extractorJobLoading}] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); @@ -82,6 +83,32 @@ export function ImporterPage() { } const columns: ColumnDef[] = [ + { + id: "select", + header: ({table}) => ( + { + table.toggleAllPageRowsSelected(!!value); + }} + aria-label="Select all" + /> + ), + cell: ({row}) => ( + { + row.toggleSelected(!!value); + }} + aria-label="Select row" + /> + ), + }, { id: "delete", cell: ({row}) => { @@ -109,7 +136,7 @@ const columns: ColumnDef[] = [ } return ( - ); diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index a4708be8..ffcb4a6a 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -50,6 +50,7 @@ function FirmwaresPanel() { id: "select", header: ({table}) => ( ( { row.toggleSelected(!!value); @@ -132,6 +134,7 @@ function AppsPanel() { id: "select", header: ({table}) => ( ( { row.toggleSelected(!!value); From a9270edb6ff59a6d2c36c8c6aa539eba8f1776e5 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Sat, 23 Aug 2025 09:58:29 +0200 Subject: [PATCH 12/31] Add firmware action columns --- src/components/ui/button.tsx | 2 +- src/components/ui/firmware-action-columns.tsx | 180 ++++++++++++++++++ src/pages/firmwares-page.tsx | 2 + src/pages/importer-page.tsx | 67 +------ src/pages/scanner-page.tsx | 30 +-- 5 files changed, 189 insertions(+), 92 deletions(-) create mode 100644 src/components/ui/firmware-action-columns.tsx diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index a2df8dce..16c0beed 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -12,7 +12,7 @@ const buttonVariants = cva( default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", destructive: - "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 dark:hover:bg-destructive/50", outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", secondary: diff --git a/src/components/ui/firmware-action-columns.tsx b/src/components/ui/firmware-action-columns.tsx new file mode 100644 index 00000000..046c7e38 --- /dev/null +++ b/src/components/ui/firmware-action-columns.tsx @@ -0,0 +1,180 @@ +import type {ColumnDef, Table} from "@tanstack/react-table"; +import {Checkbox} from "@/components/ui/checkbox.tsx"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {Button} from "@/components/ui/button.tsx"; +import {AlertCircleIcon, LoaderCircle, LoaderCircleIcon, Trash, TrashIcon, ViewIcon} from "lucide-react"; +import {useMutation} from "@apollo/client"; +import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; +import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; +import {Alert} from "@/components/ui/alert.tsx"; + +type WithId = { id: string }; + +function DeleteSelectedButton({table}: Readonly<{ table: Table }>) { + const selectedObjectIds = table.getSelectedRowModel().rows.map((row) => convertIdToObjectId(row.original.id)); + const [deleteFirmwares, {loading, error}] = useMutation(DELETE_FIRMWARE_BY_OBJECT_ID, { + variables: {objectIds: selectedObjectIds}, + }); + + if (loading) { + return ( + + ); + } + + if (error) { + return ( + + + + + + + +

Error: '{error.message}'

+
+
+ ); + } + + const disabled = selectedObjectIds.length === 0; + + return ( + + + + + +

Delete selected firmwares

+
+
+ ) +} + +function DeleteRowButton({id}: Readonly<{ id: string }>) { + const [deleteFirmware, {loading, error}] = useMutation( + DELETE_FIRMWARE_BY_OBJECT_ID, { + variables: { + objectIds: convertIdToObjectId(id) + } + } + ); + + if (loading) { + return ( + + ); + } + + if (error) { + return ( + + + + + + + +

Error: '{error.message}'

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

Delete firmware

+
+
+ ); +} + +function buildSelectEntityColumn(): ColumnDef { + return ( + { + id: "select", + header: ({table}) => ( + { + table.toggleAllPageRowsSelected(!!value); + }} + aria-label="Select all" + /> + ), + cell: ({row}) => ( + { + row.toggleSelected(!!value); + }} + aria-label="Select row" + /> + ), + } + ); +} + +function buildViewEntityColumn(): ColumnDef { + return ( + { + id: "view", + cell: () => { + return ( + + + + + +

View firmware

+
+
+ ); + }, + } + ); +} + +function buildDeleteEntityColumn(): ColumnDef { + return ( + { + id: "delete", + header: ({table}) => table={table}/>, + cell: ({row}) => , + } + ); +} + +function buildFirmwareActionColumns(): ColumnDef[] { + return [ + buildSelectEntityColumn(), + buildViewEntityColumn(), + buildDeleteEntityColumn(), + ]; +} + +export { + buildSelectEntityColumn, + buildViewEntityColumn, + buildDeleteEntityColumn, + buildFirmwareActionColumns, +} diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index b5d85320..65d45ee4 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -10,8 +10,10 @@ import { import {useMemo} from "react"; import {useFragment} from "@/__generated__"; import {nonNullable} from "@/lib/non-nullable.ts"; +import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; const columns: ColumnDef[] = [ + ...buildFirmwareActionColumns(), { accessorKey: "id", header: "ID", diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 3ca00a97..eef24b16 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -5,13 +5,10 @@ import {Separator} from "@/components/ui/separator.tsx"; import {Button} from "@/components/ui/button.tsx"; import {useMutation, useQuery} from "@apollo/client"; import { - CREATE_FIRMWARE_EXTRACTOR_JOB, DELETE_FIRMWARE_BY_OBJECT_ID, + CREATE_FIRMWARE_EXTRACTOR_JOB, FIRMWARE_TABLE_ROW_IMPORTER, GET_FIRMWARE_OBJECT_ID_LIST, GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, } from "@/components/graphql/firmware.graphql.ts"; -import {Alert} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon, LoaderCircle, Trash} from "lucide-react"; -import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {useMemo} from "react"; import {nonNullable} from "@/lib/non-nullable.ts"; @@ -19,7 +16,7 @@ import {useFragment} from "@/__generated__"; import type {ColumnDef} from "@tanstack/react-table"; import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts"; -import {Checkbox} from "@/components/ui/checkbox.tsx"; +import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; export function ImporterPage() { const [createFirmwareExtractorJob, {loading: extractorJobLoading}] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); @@ -83,65 +80,7 @@ export function ImporterPage() { } const columns: ColumnDef[] = [ - { - id: "select", - header: ({table}) => ( - { - table.toggleAllPageRowsSelected(!!value); - }} - aria-label="Select all" - /> - ), - cell: ({row}) => ( - { - row.toggleSelected(!!value); - }} - aria-label="Select row" - /> - ), - }, - { - id: "delete", - cell: ({row}) => { - // eslint-disable-next-line react-hooks/rules-of-hooks - const [deleteFirmware, {loading, error}] = useMutation( - DELETE_FIRMWARE_BY_OBJECT_ID, { - variables: { - objectIds: convertIdToObjectId(row.getValue("id")) - } - } - ); - - if (loading) { - return ( - - ); - } - - if (error) { - return ( - - - - ); - } - - return ( - - ); - }, - }, + ...buildFirmwareActionColumns(), { accessorKey: "id", header: "ID", diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index ffcb4a6a..e9482b72 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -23,6 +23,7 @@ import { GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS, GET_APPS_BY_OBJECT_IDS_SCANNER } from "@/components/graphql/app.graphql.ts"; +import {buildSelectEntityColumn} from "@/components/ui/firmware-action-columns.tsx"; export function ScannerPage() { return ( @@ -46,34 +47,9 @@ export function ScannerPage() { function FirmwaresPanel() { const columns: ColumnDef[] = [ + buildSelectEntityColumn(), { - id: "select", - header: ({table}) => ( - { - table.toggleAllPageRowsSelected(!!value); - }} - aria-label="Select all" - /> - ), - cell: ({row}) => ( - { - row.toggleSelected(!!value); - }} - aria-label="Select row" - /> - ), - }, - { - id: "id", + accessorKey: "id", header: "ID", }, { From 18730677616078bc7d9f875758790ce82ac782ba Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Tue, 2 Sep 2025 12:57:51 +0200 Subject: [PATCH 13/31] Generate updated GraphQL schema --- schema/schema.graphql | 112 ++++++++++++++++++++++++++++----- src/__generated__/graphql.ts | 116 ++++++++++++++++++++++++++++------- 2 files changed, 193 insertions(+), 35 deletions(-) diff --git a/schema/schema.graphql b/schema/schema.graphql index 1e48452c..cd2b28d6 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -1,9 +1,28 @@ type Query { - build_prop_file_id_list(objectIdList: [String], fieldFilter: BuildPropFileFilter): [BuildPropFileType] + build_prop_file_id_list(objectIdList: [String], fieldFilter: ExtendedBuildPropFileFilter): [BuildPropFileType] firmware_importer_setting_list: [FirmwareImporterSettingType] aecs_job_list(objectIdList: [String], fieldFilter: AecsJobFilter): [AecsJobType] isApiUp: Boolean rq_queue_name_list: [String] + rq_job_list( + """Filter jobs by queue name""" + queueName: String + + """List of specific job IDs to retrieve""" + jobIds: [String] + + """ + Filter jobs by status (queued, started, finished, failed, scheduled, deferred) + """ + status: String + ): [RqJobType] + rq_job( + """Job ID to retrieve""" + jobId: String! + + """Queue name (optional, will search all queues if not provided)""" + queueName: String + ): RqJobType app_certificate_list(objectIdList: [String], fieldFilter: AppCertificateFilter): [AppCertificateType] tlsh_hash_list(objectIdList: [String], fieldFilter: TlshHashFilter): [TlshHashType] ssdeep_cluster_analysis_list(objectIdList: [String], fieldFilter: SsDeepClusterAnalysisFilter): [SsDeepClusterAnalysisType] @@ -27,8 +46,10 @@ type Query { androwarn_report_list(objectIdList: [String], fieldFilter: AndrowarnReportFilter): [AndrowarnReportType] android_app_list(objectIdList: [String], fieldFilter: AndroidAppFilter): [AndroidAppType] android_app_id_list(objectIdList: [String], fieldFilter: AndroidAppFilter): [String] + scanner_module_name_list: [String] android_firmware_list(objectIdList: [String], fieldFilter: AndroidFirmwareFilter): [AndroidFirmwareType] android_firmware_id_list(fieldFilter: AndroidFirmwareFilter): [String] + android_firmware_connection(objectIdList: [String], fieldFilter: AndroidFirmwareFilter, before: String, after: String, first: Int, last: Int): AndroidFirmwareConnection users: [UserType] me: UserType store_settings_list(fieldFilter: StoreSettingFilter): [StoreSettingsType] @@ -54,7 +75,7 @@ type BuildPropFileType implements Node { """""" properties: JSONString! pk: String - propertyValues(keys: [String]!): JSONString + propertyValues: JSONString propertyKeys: [String] } @@ -474,9 +495,7 @@ type AndroidFirmwareType implements Node { """""" aecsBuildFilePath: String - - """""" - fileSizeBytes: Int! + fileSizeBytes: Float """""" filename: String! @@ -835,7 +854,7 @@ type TlshHashType { id: ID } -input BuildPropFileFilter { +input ExtendedBuildPropFileFilter { """Filter by firmware_id_reference""" firmware_id_reference: String @@ -850,8 +869,21 @@ input BuildPropFileFilter { """Filter by id""" id: String + + """Filter by property keys""" + propertyKeys: [String] + + """Filter by property values""" + propertyValues: [GenericScalar] } +""" +The `GenericScalar` scalar type represents a generic +GraphQL scalar value that could be: +String, Boolean, Int, Float, List or Object. +""" +scalar GenericScalar + type FirmwareImporterSettingType { """""" createDate: DateTime @@ -866,7 +898,7 @@ type FirmwareImporterSettingType { type AecsJobType implements Node { """""" arch: String - firmwareIdList(before: String, after: String, first: Int, last: Int, absoluteStorePath: String, aecsBuildFilePath: String, fileSizeBytes: Int, filename: String, hasFileIndex: Boolean, hasFuzzyHashIndex: Boolean, id: ID, indexedDate: DateTime, md5: String, originalFilename: String, osVendor: String, partitionInfoDict: JSONString, relativeStorePath: String, sha1: String, sha256: String, tag: String, versionDetected: Int): AndroidFirmwareTypeConnection + firmwareIdList(before: String, after: String, first: Int, last: Int, absoluteStorePath: String, aecsBuildFilePath: String, fileSizeBytes: Float, filename: String, hasFileIndex: Boolean, hasFuzzyHashIndex: Boolean, id: ID, indexedDate: DateTime, md5: String, originalFilename: String, osVendor: String, partitionInfoDict: JSONString, relativeStorePath: String, sha1: String, sha256: String, tag: String, versionDetected: Int): AndroidFirmwareTypeConnection """The ID of the object""" id: ID! @@ -901,6 +933,48 @@ input AecsJobFilter { id: String } +"""GraphQL type representing an RQ job""" +type RqJobType { + """Unique job identifier""" + id: String + + """Job status (queued, started, finished, failed, etc.)""" + status: String + + """When the job was created""" + createdAt: DateTime + + """When the job started executing""" + startedAt: DateTime + + """When the job finished""" + endedAt: DateTime + + """Description of the job function""" + description: String + + """Name of the function being executed""" + funcName: String + + """Job timeout in seconds""" + timeout: Int + + """Name of the queue the job belongs to""" + queueName: String + + """Whether the job has finished""" + isFinished: Boolean + + """Whether the job has failed""" + isFailed: Boolean + + """String representation of job result""" + result: String + + """Exception information if job failed""" + excInfo: String +} + input AppCertificateFilter { """Filter by android_app_id_reference""" android_app_id_reference: String @@ -2024,6 +2098,23 @@ input AndroidFirmwareFilter { id: String } +type AndroidFirmwareConnection { + """Pagination data for this connection.""" + pageInfo: PageInfo! + + """Contains the nodes in this connection.""" + edges: [AndroidFirmwareEdge]! +} + +"""A Relay edge containing a `AndroidFirmware` and its cursor.""" +type AndroidFirmwareEdge { + """The item at the end of the edge""" + node: AndroidFirmwareType + + """A cursor for use in pagination""" + cursor: String! +} + type UserType { id: ID! lastLogin: DateTime @@ -2182,13 +2273,6 @@ type ObtainJSONWebToken { token: String! } -""" -The `GenericScalar` scalar type represents a generic -GraphQL scalar value that could be: -String, Boolean, Int, Float, List or Object. -""" -scalar GenericScalar - type Verify { payload: GenericScalar! } diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index d6d6a486..0632894e 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -59,7 +59,7 @@ export type AecsJobTypeFirmwareIdListArgs = { aecsBuildFilePath?: InputMaybe; after?: InputMaybe; before?: InputMaybe; - fileSizeBytes?: InputMaybe; + fileSizeBytes?: InputMaybe; filename?: InputMaybe; first?: InputMaybe; hasFileIndex?: InputMaybe; @@ -438,6 +438,23 @@ export type AndroidAppTypeEdge = { node?: Maybe; }; +export type AndroidFirmwareConnection = { + __typename?: 'AndroidFirmwareConnection'; + /** Contains the nodes in this connection. */ + edges: Array>; + /** Pagination data for this connection. */ + pageInfo: PageInfo; +}; + +/** A Relay edge containing a `AndroidFirmware` and its cursor. */ +export type AndroidFirmwareEdge = { + __typename?: 'AndroidFirmwareEdge'; + /** A cursor for use in pagination */ + cursor: Scalars['String']['output']; + /** The item at the end of the edge */ + node?: Maybe; +}; + export type AndroidFirmwareFilter = { /** Filter by absolute_store_path */ absolute_store_path?: InputMaybe; @@ -487,7 +504,7 @@ export type AndroidFirmwareType = Node & { aecsBuildFilePath?: Maybe; androidAppIdList?: Maybe; buildPropFileIdList?: Maybe; - fileSizeBytes: Scalars['Int']['output']; + fileSizeBytes?: Maybe; filename: Scalars['String']['output']; firmwareFileIdList?: Maybe; hasFileIndex?: Maybe; @@ -908,19 +925,6 @@ export type AppCertificateTypeEdge = { node?: Maybe; }; -export type BuildPropFileFilter = { - /** Filter by build_prop_file */ - build_prop_file?: InputMaybe; - /** Filter by firmware_file_id_reference */ - firmware_file_id_reference?: InputMaybe; - /** Filter by firmware_id_reference */ - firmware_id_reference?: InputMaybe; - /** Filter by id */ - id?: InputMaybe; - /** Filter by properties */ - properties?: InputMaybe; -}; - export type BuildPropFileType = Node & { __typename?: 'BuildPropFileType'; firmwareFileIdReference: FirmwareFileType; @@ -933,11 +937,6 @@ export type BuildPropFileType = Node & { propertyValues?: Maybe; }; - -export type BuildPropFileTypePropertyValuesArgs = { - keys: Array>; -}; - export type BuildPropFileTypeConnection = { __typename?: 'BuildPropFileTypeConnection'; /** Contains the nodes in this connection. */ @@ -1152,6 +1151,23 @@ export type ExportFirmwareFileByRegexMutation = { jobId?: Maybe; }; +export type ExtendedBuildPropFileFilter = { + /** Filter by build_prop_file */ + build_prop_file?: InputMaybe; + /** Filter by firmware_file_id_reference */ + firmware_file_id_reference?: InputMaybe; + /** Filter by firmware_id_reference */ + firmware_id_reference?: InputMaybe; + /** Filter by id */ + id?: InputMaybe; + /** Filter by properties */ + properties?: InputMaybe; + /** Filter by property keys */ + propertyKeys?: InputMaybe>>; + /** Filter by property values */ + propertyValues?: InputMaybe>>; +}; + export type FileFieldType = { __typename?: 'FileFieldType'; chunkSize?: Maybe; @@ -1538,6 +1554,7 @@ export type Query = { androguard_report_list?: Maybe>>; android_app_id_list?: Maybe>>; android_app_list?: Maybe>>; + android_firmware_connection?: Maybe; android_firmware_id_list?: Maybe>>; android_firmware_list?: Maybe>>; androwarn_report_list?: Maybe>>; @@ -1559,7 +1576,10 @@ export type Query = { quark_engine_report_list?: Maybe>>; quark_engine_statistics_report_list?: Maybe>>; refreshToken?: Maybe; + rq_job?: Maybe; + rq_job_list?: Maybe>>; rq_queue_name_list?: Maybe>>; + scanner_module_name_list?: Maybe>>; ssdeep_cluster_analysis_list?: Maybe>>; statistics_report_list?: Maybe>>; store_settings_list?: Maybe>>; @@ -1599,6 +1619,16 @@ export type QueryAndroid_App_ListArgs = { }; +export type QueryAndroid_Firmware_ConnectionArgs = { + after?: InputMaybe; + before?: InputMaybe; + fieldFilter?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + objectIdList?: InputMaybe>>; +}; + + export type QueryAndroid_Firmware_Id_ListArgs = { fieldFilter?: InputMaybe; }; @@ -1647,7 +1677,7 @@ export type QueryApp_Certificate_ListArgs = { export type QueryBuild_Prop_File_Id_ListArgs = { - fieldFilter?: InputMaybe; + fieldFilter?: InputMaybe; objectIdList?: InputMaybe>>; }; @@ -1705,6 +1735,19 @@ export type QueryRefreshTokenArgs = { }; +export type QueryRq_JobArgs = { + jobId: Scalars['String']['input']; + queueName?: InputMaybe; +}; + + +export type QueryRq_Job_ListArgs = { + jobIds?: InputMaybe>>; + queueName?: InputMaybe; + status?: InputMaybe; +}; + + export type QuerySsdeep_Cluster_Analysis_ListArgs = { fieldFilter?: InputMaybe; objectIdList?: InputMaybe>>; @@ -1763,6 +1806,37 @@ export type Refresh = { token: Scalars['String']['output']; }; +/** GraphQL type representing an RQ job */ +export type RqJobType = { + __typename?: 'RqJobType'; + /** When the job was created */ + createdAt?: Maybe; + /** Description of the job function */ + description?: Maybe; + /** When the job finished */ + endedAt?: Maybe; + /** Exception information if job failed */ + excInfo?: Maybe; + /** Name of the function being executed */ + funcName?: Maybe; + /** Unique job identifier */ + id?: Maybe; + /** Whether the job has failed */ + isFailed?: Maybe; + /** Whether the job has finished */ + isFinished?: Maybe; + /** Name of the queue the job belongs to */ + queueName?: Maybe; + /** String representation of job result */ + result?: Maybe; + /** When the job started executing */ + startedAt?: Maybe; + /** Job status (queued, started, finished, failed, etc.) */ + status?: Maybe; + /** Job timeout in seconds */ + timeout?: Maybe; +}; + export type SsDeepClusterAnalysisFilter = { /** Filter by cluster_list */ cluster_list?: InputMaybe>>; From 10e098bb59b7cefe93ede30c6479f288f446843a Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Wed, 10 Sep 2025 18:20:53 +0200 Subject: [PATCH 14/31] Rename EnvConfig.ts to EnvConfig.js --- src/{EnvConfig.ts => EnvConfig.js} | 0 src/lib/graphql/apolloClient.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{EnvConfig.ts => EnvConfig.js} (100%) diff --git a/src/EnvConfig.ts b/src/EnvConfig.js similarity index 100% rename from src/EnvConfig.ts rename to src/EnvConfig.js diff --git a/src/lib/graphql/apolloClient.ts b/src/lib/graphql/apolloClient.ts index 945dc573..f02600a5 100644 --- a/src/lib/graphql/apolloClient.ts +++ b/src/lib/graphql/apolloClient.ts @@ -1,6 +1,6 @@ import {ApolloClient, from, HttpLink, InMemoryCache} from "@apollo/client"; import {RetryLink} from "@apollo/client/link/retry"; -import {CSRF_URL, GRAPHQL_URL} from "../../envconfig.ts"; +import {CSRF_URL, GRAPHQL_URL} from "../../EnvConfig.js"; let cachedCsrf: string | null = null; let inflightCsrf: Promise | null = null; From e76265c5c0c60560d8088308697cf7c7693208b6 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Sat, 20 Sep 2025 13:38:33 +0200 Subject: [PATCH 15/31] Implement Importer Page * Cleanup dropzone * Add POST request * Implement firmware upload * Cleanup dropzone * Display upload errors * Automatically start firmware extraction * Add upload dialog * Fix behavior of cancel button when there is an error * Support APK import --- package.json | 1 + schema/schema.graphql | 30 +- src/__generated__/gql.ts | 12 + src/__generated__/graphql.ts | 35 ++ src/components/graphql/firmware.graphql.ts | 33 ++ src/components/ui/dialog.tsx | 141 +++++++ src/components/ui/importer/dropzone.tsx | 465 +++++++++++++++------ src/components/ui/progress.tsx | 29 ++ src/lib/auth.tsx | 44 +- src/pages/importer-page.tsx | 21 +- src/pages/login-page.tsx | 6 +- yarn.lock | 8 + 12 files changed, 669 insertions(+), 156 deletions(-) create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/progress.tsx diff --git a/package.json b/package.json index 83599c46..997394b5 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-label": "^2.1.7", "@radix-ui/react-navigation-menu": "^1.2.14", + "@radix-ui/react-progress": "^1.1.7", "@radix-ui/react-scroll-area": "^1.2.10", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.7", diff --git a/schema/schema.graphql b/schema/schema.graphql index cd2b28d6..c778619a 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -1,5 +1,13 @@ type Query { - build_prop_file_id_list(objectIdList: [String], fieldFilter: ExtendedBuildPropFileFilter): [BuildPropFileType] + build_prop_file_id_list( + objectIdList: [String] + fieldFilter: ExtendedBuildPropFileFilter + + """ + Return distinct records based on the specified field (e.g., 'firmware_id_reference') + """ + distinctOn: String + ): [BuildPropFileType] firmware_importer_setting_list: [FirmwareImporterSettingType] aecs_job_list(objectIdList: [String], fieldFilter: AecsJobFilter): [AecsJobType] isApiUp: Boolean @@ -2311,6 +2319,18 @@ type Mutation { """ createFirmwareReImportJob(createFuzzyHashes: Boolean = false, firmwareIdList: [String!]!, queueName: String! = "high-python"): CreateFirmwareReImportJob + """ + Updates OS vendor information for firmware based on build.prop files. + This mutation analyzes build.prop files to detect and set the os_vendor field. + """ + updateFirmwareVendor( + """ + Specific firmware IDs to update. If not provided, updates all firmware with 'Unknown' vendor + """ + firmwareIdList: [String] + queueName: String! = "default-python" + ): UpdateFirmwareVendorMutation + """ Create or update the aecs-job. There can only be one aecs-job in the database. In case a new job is created the old will be overwritten by the new. The aecs-job is used to store a @@ -2378,6 +2398,14 @@ type CreateFirmwareReImportJob { jobId: String } +""" +Updates OS vendor information for firmware based on build.prop files. +This mutation analyzes build.prop files to detect and set the os_vendor field. +""" +type UpdateFirmwareVendorMutation { + jobId: String +} + """ Create or update the aecs-job. There can only be one aecs-job in the database. In case a new job is created the old will be overwritten by the new. The aecs-job is used to store a diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 3a89b959..cc79c3c1 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -23,7 +23,9 @@ type Documents = { "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, + "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, + "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": typeof types.GetFirmwareObjectIdListDocument, "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": typeof types.FirmwareTableRowFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, @@ -43,7 +45,9 @@ const documents: Documents = { "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, + "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, + "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": types.GetFirmwareObjectIdListDocument, "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": types.FirmwareTableRowFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, @@ -104,10 +108,18 @@ export function gql(source: "\n query GetCurrentUserId {\n me {\n * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"): (typeof documents)["\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"): (typeof documents)["\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 0632894e..7cf5b3c2 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -1339,6 +1339,11 @@ export type Mutation = { deleteTokenCookie?: Maybe; exportFirmwareFile?: Maybe; updateFirmwareImporterSetting?: Maybe; + /** + * Updates OS vendor information for firmware based on build.prop files. + * This mutation analyzes build.prop files to detect and set the os_vendor field. + */ + updateFirmwareVendor?: Maybe; /** * Create or update the aecs-job. There can only be one aecs-job in the database. In case a new * job is created the old will be overwritten by the new. The aecs-job is used to store a @@ -1424,6 +1429,12 @@ export type MutationUpdateFirmwareImporterSettingArgs = { }; +export type MutationUpdateFirmwareVendorArgs = { + firmwareIdList?: InputMaybe>>; + queueName?: Scalars['String']['input']; +}; + + export type MutationUpdateOrCreateAecsJobArgs = { acesJobId?: InputMaybe; arch?: InputMaybe; @@ -1677,6 +1688,7 @@ export type QueryApp_Certificate_ListArgs = { export type QueryBuild_Prop_File_Id_ListArgs = { + distinctOn?: InputMaybe; fieldFilter?: InputMaybe; objectIdList?: InputMaybe>>; }; @@ -2024,6 +2036,15 @@ export type UpdateFirmwareImportSetting = { jobId?: Maybe; }; +/** + * Updates OS vendor information for firmware based on build.prop files. + * This mutation analyzes build.prop files to detect and set the os_vendor field. + */ +export type UpdateFirmwareVendorMutation = { + __typename?: 'UpdateFirmwareVendorMutation'; + jobId?: Maybe; +}; + /** * Create or update the aecs-job. There can only be one aecs-job in the database. In case a new * job is created the old will be overwritten by the new. The aecs-job is used to store a @@ -2153,6 +2174,11 @@ export type GetCurrentUserEmailAndUsernameQueryVariables = Exact<{ [key: string] export type GetCurrentUserEmailAndUsernameQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, username: string } | null }; +export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; + export type CreateFirmwareExtractorJobMutationVariables = Exact<{ storageIndex: Scalars['Int']['input']; }>; @@ -2160,6 +2186,13 @@ export type CreateFirmwareExtractorJobMutationVariables = Exact<{ export type CreateFirmwareExtractorJobMutation = { __typename?: 'Mutation', createFirmwareExtractorJob?: { __typename?: 'CreateFirmwareExtractorJob', jobId?: string | null } | null }; +export type CreateAppImportJobMutationVariables = Exact<{ + storageIndex: Scalars['Int']['input']; +}>; + + +export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; + export type GetFirmwareObjectIdListQueryVariables = Exact<{ [key: string]: never; }>; @@ -2220,7 +2253,9 @@ export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"O export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; +export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; +export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwareObjectIdListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwareObjectIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_id_list"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsImporterDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsImporter"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowImporter"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index 496bf356..44f5765f 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -1,5 +1,23 @@ import {gql} from "@/__generated__"; + +// ---------------------------------------------------------------------------------------------------- +// RQ JOBS +// ---------------------------------------------------------------------------------------------------- + +export const GET_RQ_JOB_LIST = gql(` + query GetRqJobList { + rq_job_list { + funcName + id + isFailed + isFinished + startedAt + status + } + } +`); + // ---------------------------------------------------------------------------------------------------- // FIRMWARE EXTRACTION // ---------------------------------------------------------------------------------------------------- @@ -16,6 +34,21 @@ export const CREATE_FIRMWARE_EXTRACTOR_JOB = gql(` } `); +// ---------------------------------------------------------------------------------------------------- +// APK IMPORT +// ---------------------------------------------------------------------------------------------------- + +export const CREATE_APP_IMPORT_JOB = gql(` + mutation CreateAppImportJob($storageIndex: Int!) { + createAppImportJob( + queueName: "high-python", + storageIndex: $storageIndex + ) { + jobId + } + } +`); + // ---------------------------------------------------------------------------------------------------- // GET FIRMWARES (ALL FIELDS) // ---------------------------------------------------------------------------------------------------- diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx new file mode 100644 index 00000000..6cb123b3 --- /dev/null +++ b/src/components/ui/dialog.tsx @@ -0,0 +1,141 @@ +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { XIcon } from "lucide-react" + +import { cn } from "@/lib/utils" + +function Dialog({ + ...props +}: React.ComponentProps) { + return +} + +function DialogTrigger({ + ...props +}: React.ComponentProps) { + return +} + +function DialogPortal({ + ...props +}: React.ComponentProps) { + return +} + +function DialogClose({ + ...props +}: React.ComponentProps) { + return +} + +function DialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: React.ComponentProps & { + showCloseButton?: boolean +}) { + return ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + + ) +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ) +} + +function DialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function DialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +} diff --git a/src/components/ui/importer/dropzone.tsx b/src/components/ui/importer/dropzone.tsx index 921ebfe3..4b6d85cf 100644 --- a/src/components/ui/importer/dropzone.tsx +++ b/src/components/ui/importer/dropzone.tsx @@ -1,161 +1,380 @@ -import {useCallback, useMemo, useState} from "react"; +import {Dispatch, SetStateAction, useCallback, useState} from "react"; import {useDropzone} from "react-dropzone"; import {Card} from "@/components/ui/card.tsx"; import {cn} from "@/lib/utils.ts"; -import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; - -type FileState = - | { status: "queued"; file: File } - | { status: "uploading"; file: File; progress: number } - | { status: "done"; file: File; uploadId: string | null } - | { status: "error"; file: File; error: string }; - -async function uploadInChunks( - file: File, - opts: { - endpoint?: string; - storageIndex?: number; - chunkSize?: number; // bytes - onProgress?: (received: number, total: number, uploadId: string | null) => void; - } = {}, -): Promise<{ uploadId: string | null }> { - const endpoint = opts.endpoint ?? "/upload/firmware/"; - const storageIndex = opts.storageIndex ?? 0; - const chunkSize = opts.chunkSize ?? 1024; - - let offset = 0; - let uploadId: string | null = null; - - while (offset < file.size) { - const end = Math.min(offset + chunkSize, file.size); - const blob = file.slice(offset, end); - const body = await blob.arrayBuffer(); - - const res: Response = await fetch(endpoint, { - method: "POST", - headers: { - "Content-Type": "application/octet-stream", - "Content-Range": `bytes ${offset}-${end - 1}/${file.size}`, - "X-File-Name": file.name, - "X-Upload-Id": uploadId ?? "", - "X-Storage-Index": String(storageIndex), - }, - body, - credentials: "include", - }); +import {useAuth} from "@/lib/auth.tsx"; +import {Progress} from "@/components/ui/progress.tsx"; +import { + CircleAlertIcon, + CircleCheckBigIcon, + CloudAlertIcon, + LoaderCircleIcon, + ShieldEllipsisIcon, + XIcon +} from "lucide-react"; +import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; +import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table.tsx"; +import {ApolloQueryResult, useMutation, useQuery} from "@apollo/client"; +import { + CREATE_APP_IMPORT_JOB, + CREATE_FIRMWARE_EXTRACTOR_JOB, + GET_RQ_JOB_LIST +} from "@/components/graphql/firmware.graphql.ts"; +import {Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle,} from "@/components/ui/dialog.tsx"; +import {Button} from "@/components/ui/button.tsx"; +import {Exact, GetRqJobListQuery} from "@/__generated__/graphql.ts"; - if (!res.ok) { - throw new Error(`Chunk upload failed: ${res.status}`); - } +type DropzoneProps = { + className?: string; + message?: string; + storageIndex?: number; +} + +type UploadType = "firmware" | "apk"; + +type FileUpload = { + id: string; + file: File; + type: UploadType; + percentComplete: number; + serverResponded: boolean; + error?: string; + xhr?: XMLHttpRequest; + importStarted?: boolean; +} - const data = await res.json() as { uploadId?: string | null; received?: number; total?: number }; - uploadId = data.uploadId ?? uploadId; +const MIME_TYPE_ZIP = "application/zip"; +const MIME_TYPE_ZIP_COMPRESSED = "application/x-zip-compressed"; +const MIME_TYPE_APK = "application/vnd.android.package-archive"; - if (opts.onProgress) { - opts.onProgress(data.received ?? end, data.total ?? file.size, uploadId); +const FIRMWARE_IMPORT_JOB_FUNC_NAME = "firmware_handler.firmware_importer.start_firmware_mass_import"; +const APP_IMPORT_JOB_FUNC_NAME = "android_app_importer.standalone_importer.start_android_app_standalone_importer"; + +const makeUploadId = (file: File) => `${file.name}:${file.size.toString()}:${file.lastModified.toString()}`; + +const getUploadType = (file: File): UploadType => file.type === MIME_TYPE_APK ? "apk" : "firmware"; + +function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload, refetchRqJobList}: Readonly<{ + storageIndex: number; + fileUploads: FileUpload[]; + setFileUploads: Dispatch>; + removeUpload: (id: string) => void; + refetchRqJobList: (variables?: (Partial>)) => Promise>; +}>) { + const cancelUpload = (upload: FileUpload) => { + if (upload.xhr) { + const readyStateBefore = upload.xhr.readyState; + upload.xhr.abort(); + if (readyStateBefore === XMLHttpRequest.DONE || readyStateBefore === XMLHttpRequest.UNSENT) { + removeUpload(upload.id); + } + } else { + removeUpload(upload.id); } + } + + const [createFirmwareExtractorJob] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); + const [createAppImportJob] = useMutation(CREATE_APP_IMPORT_JOB); - offset = end; + return ( + 0 && !fileUploads.every(u => u.importStarted)} modal={true}> + + + Uploading and validating... + + + + + Filename + 1. Upload to Server + 2. Server Validation + + + + {fileUploads.map((upload) => { + if (!upload.error) { + return ( + + +
+ {upload.file.name} +
+
+ +
+ {upload.percentComplete < 100 && ( + <> + + + { + cancelUpload(upload); + }} + className="cursor-pointer" + /> + + )} + {upload.percentComplete >= 100 && + } +
+
+ +
+ {upload.percentComplete < 100 && ( + + )} + {upload.percentComplete >= 100 && !upload.serverResponded && ( + + )} + {upload.percentComplete >= 100 && upload.serverResponded && ( + + )} +
+
+
+ ); + } + + return ( + + + + + Error while uploading {upload.file.name} + {upload.error} + + + + ); + })} +
+
+ + + + + + +
+
+ ); +} + +function JobStatus({status, isFinished, isFailed}: Readonly<{ + status: string; + isFinished?: boolean | null; + isFailed?: boolean | null; +}>) { + if (isFinished) { + return ( + + ); + } + + if (isFailed) { + return ( + + ); } - return {uploadId}; + return ( + <> + + {status} + + ); } export function Dropzone( { className = "", - message = "Drag 'n' drop some files here, or click to select files", - } + message = "Drag 'n' drop files here, or click to select files", + storageIndex = 0, + }: Readonly ) { - const [fileStates, setFileStates] = useState([]); - - const onDrop = useCallback(async (acceptedFiles: File[]) => { - const queuedItems: FileState[] = acceptedFiles.map(file => ({status: "queued" as const, file})); - setFileStates(prev => [...prev, ...queuedItems]); - - for (const file of acceptedFiles) { - setFileStates(prev => prev.map(it => (it.file === file ? { - status: "uploading" as const, - file, - progress: 0 - } : it))); - try { - const {uploadId} = await uploadInChunks(file, { - endpoint: "/upload/firmware/", - storageIndex: 0, - chunkSize: 1024, - onProgress: (received, total) => { - const progress = Math.max(0, Math.min(100, Math.round((received / total) * 100))); - setFileStates(prev => prev.map(it => (it.file === file && it.status === "uploading" ? { - ...it, - progress - } : it))); - }, - }); - setFileStates(prev => prev.map(it => (it.file === file ? { - status: "done" as const, - file, - uploadId - } : it))); - } catch (e: any) { - setFileStates(prev => - prev.map(it => - it.file === file - ? {status: "error" as const, file, error: e?.message ?? "Upload failed"} - : it, - ), - ); - } - } + const {getToken} = useAuth(); + const [fileUploads, setFileUploads] = useState([]); + const {data: rqJobListData, refetch: refetchRqJobList} = useQuery(GET_RQ_JOB_LIST, { + fetchPolicy: "cache-and-network", + pollInterval: 5000, + }); + + const importJobs = rqJobListData?.rq_job_list + ?.filter(job => + job?.funcName === FIRMWARE_IMPORT_JOB_FUNC_NAME || + job?.funcName === APP_IMPORT_JOB_FUNC_NAME + ) + .sort((a, b) => new Date(b?.startedAt).getTime() - new Date(a?.startedAt).getTime()); + + + const updateUpload = useCallback((id: string, patch: Partial) => { + setFileUploads(prev => prev.map(upload => (upload.id === id ? {...upload, ...patch} : upload))); }, []); + const removeUpload = useCallback((id: string) => { + setFileUploads(prev => prev.filter(upload => upload.id !== id)); + }, []); + + const onDrop = useCallback((acceptedFiles: File[]) => { + if (acceptedFiles.length === 0) return; + + const token = getToken(); + if (!token) { + console.error("No auth token available."); + return; + } + + setFileUploads(acceptedFiles.map(file => ({ + id: makeUploadId(file), + file: file, + type: getUploadType(file), + percentComplete: 0, + serverResponded: false, + }))); + + acceptedFiles.forEach((file) => { + const id = makeUploadId(file); + + const formData = new FormData(); + formData.append("file", file); + formData.append("type", getUploadType(file)); + formData.append("storage_index", storageIndex.toString()); + + const xhr = new XMLHttpRequest(); + xhr.open("POST", "/upload/file"); + xhr.setRequestHeader("Authorization", `Bearer ${token}`); + + xhr.upload.onprogress = (event) => { + if (event.lengthComputable) { + const percentComplete = Math.round((event.loaded / event.total) * 100); + updateUpload(id, {percentComplete}); + } + }; + + xhr.onload = () => { + if (xhr.status >= 200 && xhr.status < 300) { + updateUpload(id, {serverResponded: true}); + return; + } + + updateUpload(id, {serverResponded: true, error: xhr.responseText}) + }; + + xhr.onerror = () => { + updateUpload(id, {serverResponded: true, error: xhr.statusText}); + }; + + xhr.onabort = () => { + removeUpload(id); + }; + + updateUpload(id, {xhr}); + xhr.send(formData); + }); + }, [getToken, storageIndex, updateUpload, removeUpload]); + const { getRootProps, getInputProps } = useDropzone({ accept: { - // See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types/Common_types - 'application/zip': ['.zip'], - 'application/x-zip-compressed': ['.zip'], - // TODO: Accept 7-zip (.7z)? Ask suth + [MIME_TYPE_ZIP]: ['.zip'], + [MIME_TYPE_ZIP_COMPRESSED]: ['.zip'], + [MIME_TYPE_APK]: ['.apk'], }, multiple: true, onDrop, - disabled: true, // TODO: Enable the dropzone }); - const hasFileStates = useMemo(() => fileStates.length > 0, [fileStates]); - return (
- + - - (CURRENTLY DISABLED) -

{message}

- - {hasFileStates && ( -
- {fileStates.map((state, idx) => ( - -
-
{state.file.name}
-
- {state.status === "queued" && "Queued"} - {state.status === "uploading" && `Uploading… ${state.progress.toString()}%`} - {state.status === "done" && (state.uploadId ? `Uploaded (id: ${state.uploadId})` : "Uploaded")} - {state.status === "error" && `Error: ${state.error}`} -
-
-
- ))} -
+ + {importJobs && importJobs.length > 0 && ( + + + + Job ID + Started At + Type + Status + + + + {importJobs.map((job) => { + if (job) { + return ( + + + {job.id} + + + {job.startedAt} + + + {job.funcName === FIRMWARE_IMPORT_JOB_FUNC_NAME && ( + Firmware + )} + {job.funcName === APP_IMPORT_JOB_FUNC_NAME && ( + APK + )} + + +
+ {job.status ? ( + + ) : ( + <> + + Unknown status + + )} +
+
+
+ ); + } + })} +
+
)}
); diff --git a/src/components/ui/progress.tsx b/src/components/ui/progress.tsx new file mode 100644 index 00000000..10af7e63 --- /dev/null +++ b/src/components/ui/progress.tsx @@ -0,0 +1,29 @@ +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "@/lib/utils" + +function Progress({ + className, + value, + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +export { Progress } diff --git a/src/lib/auth.tsx b/src/lib/auth.tsx index c708b46c..2c206f19 100644 --- a/src/lib/auth.tsx +++ b/src/lib/auth.tsx @@ -3,15 +3,16 @@ import {useApolloClient, useMutation, useQuery} from "@apollo/client"; import {GET_CURRENT_USER_ID} from "@/components/graphql/current-user.graphql.ts"; import {DELETE_TOKEN_COOKIE} from "@/components/graphql/auth.graphql.ts"; - type AuthContextValue = { - currentUser: {__typename?: "UserType", id: string} | null | undefined; + currentUser: { __typename?: "UserType", id: string } | null | undefined; isAuthenticated: boolean; initializing: boolean; refreshMe: () => Promise; - logIn: () => Promise; + logIn: (token?: string) => Promise; logOut: () => Promise; -} + getToken: () => string | null; + setToken: (token: string | null) => void; +}; const AuthContext = createContext(null); @@ -24,8 +25,11 @@ export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { const client = useApolloClient(); const [doLogout] = useMutation(DELETE_TOKEN_COOKIE); - // Avoid flashing during initial load const [bootstrapped, setBootstrapped] = useState(false); + const [jwtToken, setJwtToken] = useState( + () => localStorage.getItem("jwtToken") + ); + useEffect(() => { if (!loading) setBootstrapped(true); }, [loading]); @@ -43,9 +47,16 @@ export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { } }, [refetch]); - const logIn = useCallback(async () => { - return refreshMe(); - }, [refreshMe]); + const logIn = useCallback( + async (token?: string) => { + if (token) { + setJwtToken(token); + localStorage.setItem("jwtToken", token); + } + return refreshMe(); + }, + [refreshMe] + ); const logOut = useCallback(async () => { try { @@ -53,7 +64,10 @@ export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { } catch { // ignore } - await client.clearStore().catch(() => {}); + setJwtToken(null); + localStorage.removeItem("jwtToken"); + await client.clearStore().catch(() => { + }); try { await refetch(); } catch { @@ -69,8 +83,14 @@ export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { refreshMe, logIn, logOut, + getToken: () => jwtToken, + setToken: (token) => { + setJwtToken(token); + if (token) localStorage.setItem("jwtToken", token); + else localStorage.removeItem("jwtToken"); + }, }), - [currentUser, isAuthenticated, initializing, refreshMe, logIn, logOut] + [currentUser, isAuthenticated, initializing, refreshMe, logIn, logOut, jwtToken] ); return {children}; @@ -78,6 +98,6 @@ export function AuthProvider({children}: Readonly<{ children: ReactNode }>) { export function useAuth() { const context = useContext(AuthContext); - if (!context) throw new Error('useAuth must be used within a AuthProvider'); + if (!context) throw new Error("useAuth must be used within a AuthProvider"); return context; -} +} \ No newline at end of file diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index eef24b16..5c6865a9 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -2,10 +2,8 @@ import {TypographyH2} from "@/components/ui/typography/headings.tsx"; import {BasePage} from "@/pages/base-page.tsx"; import {Dropzone} from "@/components/ui/importer/dropzone.tsx"; import {Separator} from "@/components/ui/separator.tsx"; -import {Button} from "@/components/ui/button.tsx"; -import {useMutation, useQuery} from "@apollo/client"; +import {useQuery} from "@apollo/client"; import { - CREATE_FIRMWARE_EXTRACTOR_JOB, FIRMWARE_TABLE_ROW_IMPORTER, GET_FIRMWARE_OBJECT_ID_LIST, GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, } from "@/components/graphql/firmware.graphql.ts"; @@ -19,8 +17,6 @@ import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts" import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; export function ImporterPage() { - const [createFirmwareExtractorJob, {loading: extractorJobLoading}] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); - const { data: idsData, loading: idsLoading, @@ -53,18 +49,9 @@ export function ImporterPage() { ); return ( - - Upload Firmwares - - + + Import Firmwares and APKs + Extracted Firmwares { if (!initializing && isAuthenticated) { - void navigate("/", {replace: true}); + navigate("/", {replace: true}); } }, [isAuthenticated, initializing, navigate]); @@ -52,7 +52,7 @@ function LoginForm({className, ...props}: React.ComponentProps<"div">) { if (!token) return; void (async () => { - await logIn(); + await logIn(token); const dest = location?.state?.from?.pathname ?? "/"; navigate(dest, {replace: true}); })(); diff --git a/yarn.lock b/yarn.lock index 27d66538..ba33ec61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1661,6 +1661,14 @@ dependencies: "@radix-ui/react-slot" "1.2.3" +"@radix-ui/react-progress@^1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@radix-ui/react-progress/-/react-progress-1.1.7.tgz#a2b76398b3f24b6bd5e37f112b1e30fbedd4f38e" + integrity sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg== + dependencies: + "@radix-ui/react-context" "1.1.2" + "@radix-ui/react-primitive" "2.1.3" + "@radix-ui/react-roving-focus@1.1.11": version "1.1.11" resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz#ef54384b7361afc6480dcf9907ef2fedb5080fd9" From 14d1dc59fe24620901c228e6e6cfcd652ef03898 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Sat, 20 Sep 2025 15:17:48 +0200 Subject: [PATCH 16/31] Add basic firmware page --- src/__generated__/gql.ts | 6 +- src/__generated__/graphql.ts | 6 +- src/app.tsx | 2 + src/components/graphql/firmware.graphql.ts | 4 +- src/components/ui/firmware-action-columns.tsx | 11 +- src/components/ui/sidebar/site-header.tsx | 44 ++++--- src/pages/firmware-page.tsx | 111 ++++++++++++++++++ 7 files changed, 150 insertions(+), 34 deletions(-) create mode 100644 src/pages/firmware-page.tsx diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index cc79c3c1..d481828a 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -27,7 +27,7 @@ type Documents = { "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": typeof types.GetFirmwareObjectIdListDocument, - "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": typeof types.FirmwareTableRowFragmentDoc, + "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": typeof types.FirmwareTableRowFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareTableRowImporterFragmentDoc, "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": typeof types.GetFirmwaresByObjectIdsImporterDocument, @@ -49,7 +49,7 @@ const documents: Documents = { "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": types.GetFirmwareObjectIdListDocument, - "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": types.FirmwareTableRowFragmentDoc, + "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": types.FirmwareTableRowFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareTableRowImporterFragmentDoc, "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": types.GetFirmwaresByObjectIdsImporterDocument, @@ -127,7 +127,7 @@ export function gql(source: "\n query GetFirmwareObjectIdList {\n andr /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"): (typeof documents)["\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n# fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n# partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"]; +export function gql(source: "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"): (typeof documents)["\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 7cf5b3c2..96517d63 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2198,7 +2198,7 @@ export type GetFirmwareObjectIdListQueryVariables = Exact<{ [key: string]: never export type GetFirmwareObjectIdListQuery = { __typename?: 'Query', android_firmware_id_list?: Array | null }; -export type FirmwareTableRowFragment = { __typename?: 'AndroidFirmwareType', id: string, absoluteStorePath: string, aecsBuildFilePath?: string | null, filename: string, hasFileIndex?: boolean | null, hasFuzzyHashIndex?: boolean | null, indexedDate?: any | null, md5: string, originalFilename: string, osVendor: string, relativeStorePath: string, sha1: string, sha256: string, tag?: string | null, versionDetected?: number | null, pk?: string | null } & { ' $fragmentName'?: 'FirmwareTableRowFragment' }; +export type FirmwareTableRowFragment = { __typename?: 'AndroidFirmwareType', id: string, absoluteStorePath: string, aecsBuildFilePath?: string | null, fileSizeBytes?: number | null, filename: string, hasFileIndex?: boolean | null, hasFuzzyHashIndex?: boolean | null, indexedDate?: any | null, md5: string, originalFilename: string, osVendor: string, partitionInfoDict?: any | null, relativeStorePath: string, sha1: string, sha256: string, tag?: string | null, versionDetected?: number | null, pk?: string | null } & { ' $fragmentName'?: 'FirmwareTableRowFragment' }; export type GetFirmwaresByObjectIdsQueryVariables = Exact<{ objectIds: Array | Scalars['String']['input']; @@ -2242,7 +2242,7 @@ export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ export type DeleteFirmwareByObjectIdMutation = { __typename?: 'Mutation', deleteAndroidFirmware?: { __typename?: 'DeleteAndroidFirmwareMutation', jobId?: string | null } | null }; export const AppTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; -export const FirmwareTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; +export const FirmwareTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; export const FirmwareTableRowImporterFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; @@ -2257,7 +2257,7 @@ export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"O export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwareObjectIdListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwareObjectIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_id_list"}}]}}]} as unknown as DocumentNode; -export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsImporterDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsImporter"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowImporter"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/app.tsx b/src/app.tsx index 8c838896..7a1eeae2 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -7,6 +7,7 @@ import EmulatorPage from "@/pages/EmulatorPage"; import {ImporterPage} from "@/pages/importer-page.tsx"; import {ScannerPage} from "@/pages/scanner-page.tsx"; import {FirmwaresPage} from "@/pages/firmwares-page.tsx"; +import {FirmwarePage} from "@/pages/firmware-page.tsx"; function App() { return ( @@ -21,6 +22,7 @@ function App() { }/> }/> }/> + }/> }/> {/*}/>*/} {/*TOOD: Add 404 page?*/} diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index 44f5765f..d0adb4a2 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -64,7 +64,7 @@ export const FIRMWARE_TABLE_ROW = gql(` id absoluteStorePath aecsBuildFilePath -# fileSizeBytes + fileSizeBytes filename hasFileIndex hasFuzzyHashIndex @@ -72,7 +72,7 @@ export const FIRMWARE_TABLE_ROW = gql(` md5 originalFilename osVendor -# partitionInfoDict + partitionInfoDict relativeStorePath sha1 sha256 diff --git a/src/components/ui/firmware-action-columns.tsx b/src/components/ui/firmware-action-columns.tsx index 046c7e38..9dcaaa13 100644 --- a/src/components/ui/firmware-action-columns.tsx +++ b/src/components/ui/firmware-action-columns.tsx @@ -7,6 +7,7 @@ import {useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; import {Alert} from "@/components/ui/alert.tsx"; +import {useNavigate} from "react-router"; type WithId = { id: string }; @@ -136,11 +137,17 @@ function buildViewEntityColumn(): ColumnDef { return ( { id: "view", - cell: () => { + cell: ({row}) => { + const navigate = useNavigate(); + const firmwareId = row.original.id; + return ( - diff --git a/src/components/ui/sidebar/site-header.tsx b/src/components/ui/sidebar/site-header.tsx index fd5ff391..3dd732ad 100644 --- a/src/components/ui/sidebar/site-header.tsx +++ b/src/components/ui/sidebar/site-header.tsx @@ -14,9 +14,13 @@ import {Button} from "@/components/ui/button.tsx" import {Separator} from "@/components/ui/separator.tsx" import {useSidebar} from "@/components/ui/sidebar.tsx" import {ModeToggle} from "@/components/ui/theming/mode-toggle.tsx"; +import {Link, useLocation, useParams} from "react-router"; export function SiteHeader() { - const {toggleSidebar} = useSidebar() + const {toggleSidebar} = useSidebar(); + const location = useLocation(); + const {firmwareId} = useParams<{ firmwareId?: string }>(); + const isFirmwareDetail = location.pathname.startsWith("/firmwares/") && firmwareId; return (
@@ -30,31 +34,23 @@ export function SiteHeader() { > + + - - - - Firmwares - - - - - - Firmware XYZ - - - - - - App XYZ - - - - - Report XYZ - - + {isFirmwareDetail && ( + + + + Firmwares + + + + + {firmwareId} + + + )}
diff --git a/src/pages/firmware-page.tsx b/src/pages/firmware-page.tsx new file mode 100644 index 00000000..46f3a29f --- /dev/null +++ b/src/pages/firmware-page.tsx @@ -0,0 +1,111 @@ +import {BasePage} from "@/pages/base-page.tsx"; +import {useParams} from "react-router"; +import {useQuery} from "@apollo/client"; +import {FIRMWARE_TABLE_ROW, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/firmware.graphql.ts"; +import {FirmwareTableRowFragment} from "@/__generated__/graphql.ts"; +import {useMemo} from "react"; +import {nonNullable} from "@/lib/non-nullable.ts"; +import {useFragment} from "@/__generated__"; +import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon} from "lucide-react"; +import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; +import {Skeleton} from "@/components/ui/skeleton.tsx"; +import {Table, TableBody, TableCell, TableRow} from "@/components/ui/table.tsx"; + +export function FirmwarePage() { + const {firmwareId} = useParams<{ firmwareId: string }>(); + + const { + loading: firmwaresLoading, + // error: firmwaresError, + data: firmwaresData, + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { + variables: {objectIds: convertIdToObjectId(firmwareId as string)}, + skip: !firmwareId, + }); + + const firmwares: FirmwareTableRowFragment[] = useMemo( + () => + ((firmwaresData?.android_firmware_list ?? []) + .filter(nonNullable) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map((item) => useFragment(FIRMWARE_TABLE_ROW, item)) + .filter(nonNullable) + ), + [firmwaresData] + ); + + if (!firmwareId) { + return ( + + + + Missing firmware ID. + + + ); + } + + if (firmwaresLoading) { + return ( + + + + ); + } + + if (firmwares.length === 1) { + const firmware: FirmwareTableRowFragment = firmwares[0]; + + return ( + + + + {Object.entries(firmware).map(([key, value]) => ( + + {key} + + {(() => { + let displayValue = String(value); + + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-argument + const parsed = JSON.parse(value); + displayValue = JSON.stringify(parsed, null, 2); + } catch { + // ignore, we leave it as string if parsing fails + } + + return displayValue; + })()} + + + ))} + +
+
+ ); + } + + if (firmwares.length > 1) { + return ( + + + + Found multiple firmwares with the same ID. + + + ); + } + + if (firmwares.length < 1) { + return ( + + + + Could not find a firmware with ID '{firmwareId}'. + + + ); + } +} From d838c3e6a33077d11794ac7841e53dd39f73c31d Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Thu, 25 Sep 2025 11:24:56 +0200 Subject: [PATCH 17/31] Add loading animation when deleting a firmware --- src/__generated__/gql.ts | 12 +- src/__generated__/graphql.ts | 14 +-- src/components/graphql/firmware.graphql.ts | 18 --- src/components/graphql/rq-job.graphql.ts | 15 +++ src/components/ui/firmware-action-columns.tsx | 107 +++++++++++------- src/components/ui/importer/dropzone.tsx | 4 +- 6 files changed, 94 insertions(+), 76 deletions(-) create mode 100644 src/components/graphql/rq-job.graphql.ts diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index d481828a..f9f17626 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -23,7 +23,6 @@ type Documents = { "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, - "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": typeof types.GetFirmwareObjectIdListDocument, @@ -34,6 +33,7 @@ type Documents = { "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": typeof types.FirmwareTableRowScannerFragmentDoc, "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": typeof types.GetFirmwaresByObjectIdsScannerDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": typeof types.DeleteFirmwareByObjectIdDocument, + "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, }; const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, @@ -45,7 +45,6 @@ const documents: Documents = { "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, - "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": types.GetFirmwareObjectIdListDocument, @@ -56,6 +55,7 @@ const documents: Documents = { "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": types.FirmwareTableRowScannerFragmentDoc, "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": types.GetFirmwaresByObjectIdsScannerDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": types.DeleteFirmwareByObjectIdDocument, + "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, }; /** @@ -108,10 +108,6 @@ export function gql(source: "\n query GetCurrentUserId {\n me {\n * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"): (typeof documents)["\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"]; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql(source: "\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"): (typeof documents)["\n query GetRqJobList {\n rq_job_list {\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -152,6 +148,10 @@ export function gql(source: "\n query GetFirmwaresByObjectIdsScanner($objectI * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"): (typeof documents)["\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"]; export function gql(source: string) { return (documents as any)[source] ?? {}; diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 96517d63..7b11ecf2 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2174,11 +2174,6 @@ export type GetCurrentUserEmailAndUsernameQueryVariables = Exact<{ [key: string] export type GetCurrentUserEmailAndUsernameQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, username: string } | null }; -export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; - export type CreateFirmwareExtractorJobMutationVariables = Exact<{ storageIndex: Scalars['Int']['input']; }>; @@ -2241,6 +2236,11 @@ export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ export type DeleteFirmwareByObjectIdMutation = { __typename?: 'Mutation', deleteAndroidFirmware?: { __typename?: 'DeleteAndroidFirmwareMutation', jobId?: string | null } | null }; +export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; + export const AppTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; export const FirmwareTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; export const FirmwareTableRowImporterFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; @@ -2253,11 +2253,11 @@ export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"O export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; -export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwareObjectIdListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwareObjectIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_id_list"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsImporterDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsImporter"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowImporter"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; -export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; +export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index d0adb4a2..e78073b2 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -1,23 +1,5 @@ import {gql} from "@/__generated__"; - -// ---------------------------------------------------------------------------------------------------- -// RQ JOBS -// ---------------------------------------------------------------------------------------------------- - -export const GET_RQ_JOB_LIST = gql(` - query GetRqJobList { - rq_job_list { - funcName - id - isFailed - isFinished - startedAt - status - } - } -`); - // ---------------------------------------------------------------------------------------------------- // FIRMWARE EXTRACTION // ---------------------------------------------------------------------------------------------------- diff --git a/src/components/graphql/rq-job.graphql.ts b/src/components/graphql/rq-job.graphql.ts new file mode 100644 index 00000000..8cb315cc --- /dev/null +++ b/src/components/graphql/rq-job.graphql.ts @@ -0,0 +1,15 @@ +import {gql} from "@/__generated__"; + +export const GET_RQ_JOB_LIST = gql(` + query GetRqJobList { + rq_job_list { + description + funcName + id + isFailed + isFinished + startedAt + status + } + } +`); diff --git a/src/components/ui/firmware-action-columns.tsx b/src/components/ui/firmware-action-columns.tsx index 9dcaaa13..b1de33ef 100644 --- a/src/components/ui/firmware-action-columns.tsx +++ b/src/components/ui/firmware-action-columns.tsx @@ -2,39 +2,61 @@ import type {ColumnDef, Table} from "@tanstack/react-table"; import {Checkbox} from "@/components/ui/checkbox.tsx"; import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; import {Button} from "@/components/ui/button.tsx"; -import {AlertCircleIcon, LoaderCircle, LoaderCircleIcon, Trash, TrashIcon, ViewIcon} from "lucide-react"; -import {useMutation} from "@apollo/client"; +import {LoaderCircle, LoaderCircleIcon, Trash, TrashIcon, ViewIcon} from "lucide-react"; +import {useLazyQuery, useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; -import {Alert} from "@/components/ui/alert.tsx"; import {useNavigate} from "react-router"; +import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; +import {GetRqJobListQuery} from "@/__generated__/graphql.ts"; type WithId = { id: string }; +const DELETION_JOB_FUNC_NAME = "api.v2.types.GenericDeletion.delete_queryset_background"; + +function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery | undefined) { + // const {data: rqJobListData} = useQuery(GET_RQ_JOB_LIST, { + // fetchPolicy: "cache-and-network", + // pollInterval: 5000, + // }); + // + const ongoingDeletionJobs = rqJobListData?.rq_job_list + ?.filter(job => + job?.funcName === DELETION_JOB_FUNC_NAME && + !job.isFinished && + !job.isFailed + ).filter(job => { + if (!job?.description) return false; + + /* + The job description contains the affected elements in the following format: + "api.v2.types.GenericDeletion.delete_queryset_background(['68d2c1f78773bc31564c1dab', '68d2c2008773bc31564c1dac'], )", + */ + const start = job.description.indexOf("['"); + const end = job.description.indexOf("']"); + const deletedObjectIdsSubstring = job.description.substring(start, end + 2); + // We parse the substring to a string array. But first, we need to replace both ' with ". + const deletedObjectIds = JSON.parse(deletedObjectIdsSubstring.replace(/'/g, '"')) as string[]; + return objectIds.some((id) => deletedObjectIds.includes(id)); + }); + + return (ongoingDeletionJobs?.length ?? 0) > 0; +} + function DeleteSelectedButton({table}: Readonly<{ table: Table }>) { const selectedObjectIds = table.getSelectedRowModel().rows.map((row) => convertIdToObjectId(row.original.id)); - const [deleteFirmwares, {loading, error}] = useMutation(DELETE_FIRMWARE_BY_OBJECT_ID, { + const [deleteFirmwares] = useMutation(DELETE_FIRMWARE_BY_OBJECT_ID, { variables: {objectIds: selectedObjectIds}, }); - if (loading) { - return ( - - ); - } + const [getRqJobList, {data: rqJobListData}] = useLazyQuery(GET_RQ_JOB_LIST, { + fetchPolicy: "cache-and-network", + pollInterval: 5000, + }); - if (error) { + if (isDeletionOngoing(selectedObjectIds, rqJobListData)) { return ( - - - - - - - -

Error: '{error.message}'

-
-
+ ); } @@ -43,10 +65,12 @@ function DeleteSelectedButton({table}: Readonly<{ table: Table return ( - @@ -59,39 +83,35 @@ function DeleteSelectedButton({table}: Readonly<{ table: Table } function DeleteRowButton({id}: Readonly<{ id: string }>) { - const [deleteFirmware, {loading, error}] = useMutation( + const objectId = convertIdToObjectId(id); + const [deleteFirmware] = useMutation( DELETE_FIRMWARE_BY_OBJECT_ID, { variables: { - objectIds: convertIdToObjectId(id) + objectIds: objectId, } } ); - if (loading) { - return ( - - ); - } + const [getRqJobList, {data: rqJobListData}] = useLazyQuery(GET_RQ_JOB_LIST, { + fetchPolicy: "cache-and-network", + pollInterval: 5000, + }); - if (error) { + if (isDeletionOngoing([objectId], rqJobListData)) { return ( - - - - - - - -

Error: '{error.message}'

-
-
+
+ +
); } return ( - @@ -138,6 +158,7 @@ function buildViewEntityColumn(): ColumnDef { { id: "view", cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks const navigate = useNavigate(); const firmwareId = row.original.id; diff --git a/src/components/ui/importer/dropzone.tsx b/src/components/ui/importer/dropzone.tsx index 4b6d85cf..6cb6eeee 100644 --- a/src/components/ui/importer/dropzone.tsx +++ b/src/components/ui/importer/dropzone.tsx @@ -18,11 +18,11 @@ import {ApolloQueryResult, useMutation, useQuery} from "@apollo/client"; import { CREATE_APP_IMPORT_JOB, CREATE_FIRMWARE_EXTRACTOR_JOB, - GET_RQ_JOB_LIST } from "@/components/graphql/firmware.graphql.ts"; import {Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle,} from "@/components/ui/dialog.tsx"; import {Button} from "@/components/ui/button.tsx"; import {Exact, GetRqJobListQuery} from "@/__generated__/graphql.ts"; +import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; type DropzoneProps = { className?: string; @@ -222,7 +222,7 @@ export function Dropzone( const [fileUploads, setFileUploads] = useState([]); const {data: rqJobListData, refetch: refetchRqJobList} = useQuery(GET_RQ_JOB_LIST, { fetchPolicy: "cache-and-network", - pollInterval: 5000, + pollInterval: 10000, }); const importJobs = rqJobListData?.rq_job_list From 3060597b1b198f79e1bd162ffb9a28f476c3adc2 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Fri, 26 Sep 2025 14:09:51 +0200 Subject: [PATCH 18/31] Cleanup GraphQL queries --- src/__generated__/gql.ts | 54 +++++++--------- src/__generated__/graphql.ts | 74 ++++++++++------------ src/components/graphql/app.graphql.ts | 23 +++++++ src/components/graphql/firmware.graphql.ts | 71 +++++++++------------ src/components/ui/importer/dropzone.tsx | 2 +- src/components/ui/table/data-table.tsx | 4 +- src/lib/graphql/graphql-utils.ts | 7 +- src/lib/non-nullable.ts | 3 - src/pages/firmware-page.tsx | 24 +++---- src/pages/firmwares-page.tsx | 47 ++++---------- src/pages/importer-page.tsx | 44 +++---------- src/pages/scanner-page.tsx | 50 ++++----------- 12 files changed, 159 insertions(+), 244 deletions(-) delete mode 100644 src/lib/non-nullable.ts diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index f9f17626..3a1cbfc8 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -15,6 +15,7 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, + "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": typeof types.GetApkObjectIdsByFirmwareObjectIdsDocument, "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": typeof types.AppTableRowScannerFragmentDoc, "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": typeof types.GetAppsByObjectIdsScannerDocument, @@ -24,19 +25,18 @@ type Documents = { "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, - "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, - "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": typeof types.GetFirmwareObjectIdListDocument, - "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": typeof types.FirmwareTableRowFragmentDoc, - "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, - "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareTableRowImporterFragmentDoc, - "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": typeof types.GetFirmwaresByObjectIdsImporterDocument, - "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": typeof types.FirmwareTableRowScannerFragmentDoc, - "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": typeof types.GetFirmwaresByObjectIdsScannerDocument, + "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": typeof types.FirmwareAllFragmentDoc, + "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, + "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareRowImporterPageFragmentDoc, + "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": typeof types.GetFirmwaresImporterPageDocument, + "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n": typeof types.FirmwareRowScannerPageFragmentDoc, + "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n": typeof types.GetFirmwaresScannerPageDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": typeof types.DeleteFirmwareByObjectIdDocument, "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, }; const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, + "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": types.GetApkObjectIdsByFirmwareObjectIdsDocument, "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": types.AppTableRowScannerFragmentDoc, "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": types.GetAppsByObjectIdsScannerDocument, @@ -46,14 +46,12 @@ const documents: Documents = { "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, - "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, - "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n": types.GetFirmwareObjectIdListDocument, - "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n": types.FirmwareTableRowFragmentDoc, - "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, - "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareTableRowImporterFragmentDoc, - "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n": types.GetFirmwaresByObjectIdsImporterDocument, - "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n": types.FirmwareTableRowScannerFragmentDoc, - "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n": types.GetFirmwaresByObjectIdsScannerDocument, + "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": types.FirmwareAllFragmentDoc, + "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, + "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareRowImporterPageFragmentDoc, + "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": types.GetFirmwaresImporterPageDocument, + "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n": types.FirmwareRowScannerPageFragmentDoc, + "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n": types.GetFirmwaresScannerPageDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": types.DeleteFirmwareByObjectIdDocument, "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, }; @@ -76,6 +74,10 @@ export function gql(source: string): unknown; * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n query GetApiHealth {\n isApiUp\n }\n"): (typeof documents)["\n query GetApiHealth {\n isApiUp\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -115,35 +117,27 @@ export function gql(source: "\n mutation CreateFirmwareExtractorJob($storageI /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql(source: "\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n"): (typeof documents)["\n query GetFirmwareObjectIdList {\n android_firmware_id_list\n }\n"]; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql(source: "\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"): (typeof documents)["\n fragment FirmwareTableRow on AndroidFirmwareType {\n id\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n pk\n }\n"]; +export function gql(source: "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n"): (typeof documents)["\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIds($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRow\n }\n }\n"]; +export function gql(source: "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"): (typeof documents)["\n fragment FirmwareTableRowImporter on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"]; +export function gql(source: "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"): (typeof documents)["\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowImporter\n }\n }\n"]; +export function gql(source: "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n"): (typeof documents)["\n fragment FirmwareTableRowScanner on AndroidFirmwareType {\n id\n originalFilename\n }\n"]; +export function gql(source: "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n"): (typeof documents)["\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n"): (typeof documents)["\n query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) {\n android_firmware_list(objectIdList: $objectIds) {\n ...FirmwareTableRowScanner\n }\n }\n"]; +export function gql(source: "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 7b11ecf2..bf6e8f14 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2126,6 +2126,13 @@ export type GetApiHealthQueryVariables = Exact<{ [key: string]: never; }>; export type GetApiHealthQuery = { __typename?: 'Query', isApiUp?: boolean | null }; +export type CreateAppImportJobMutationVariables = Exact<{ + storageIndex: Scalars['Int']['input']; +}>; + + +export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; + export type GetApkObjectIdsByFirmwareObjectIdsQueryVariables = Exact<{ [key: string]: never; }>; @@ -2181,53 +2188,37 @@ export type CreateFirmwareExtractorJobMutationVariables = Exact<{ export type CreateFirmwareExtractorJobMutation = { __typename?: 'Mutation', createFirmwareExtractorJob?: { __typename?: 'CreateFirmwareExtractorJob', jobId?: string | null } | null }; -export type CreateAppImportJobMutationVariables = Exact<{ - storageIndex: Scalars['Int']['input']; -}>; - - -export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; - -export type GetFirmwareObjectIdListQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetFirmwareObjectIdListQuery = { __typename?: 'Query', android_firmware_id_list?: Array | null }; - -export type FirmwareTableRowFragment = { __typename?: 'AndroidFirmwareType', id: string, absoluteStorePath: string, aecsBuildFilePath?: string | null, fileSizeBytes?: number | null, filename: string, hasFileIndex?: boolean | null, hasFuzzyHashIndex?: boolean | null, indexedDate?: any | null, md5: string, originalFilename: string, osVendor: string, partitionInfoDict?: any | null, relativeStorePath: string, sha1: string, sha256: string, tag?: string | null, versionDetected?: number | null, pk?: string | null } & { ' $fragmentName'?: 'FirmwareTableRowFragment' }; +export type FirmwareAllFragment = { __typename?: 'AndroidFirmwareType', absoluteStorePath: string, aecsBuildFilePath?: string | null, fileSizeBytes?: number | null, filename: string, hasFileIndex?: boolean | null, hasFuzzyHashIndex?: boolean | null, id: string, indexedDate?: any | null, md5: string, originalFilename: string, osVendor: string, partitionInfoDict?: any | null, pk?: string | null, relativeStorePath: string, sha1: string, sha256: string, tag?: string | null, versionDetected?: number | null } & { ' $fragmentName'?: 'FirmwareAllFragment' }; export type GetFirmwaresByObjectIdsQueryVariables = Exact<{ - objectIds: Array | Scalars['String']['input']; + objectIds?: InputMaybe | Scalars['String']['input']>; }>; -export type GetFirmwaresByObjectIdsQuery = { __typename?: 'Query', android_firmware_list?: Array<( - { __typename?: 'AndroidFirmwareType' } - & { ' $fragmentRefs'?: { 'FirmwareTableRowFragment': FirmwareTableRowFragment } } - ) | null> | null }; +export type GetFirmwaresByObjectIdsQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: ( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareAllFragment': FirmwareAllFragment } } + ) | null } | null> } | null }; -export type FirmwareTableRowImporterFragment = { __typename?: 'AndroidFirmwareType', id: string, indexedDate?: any | null, originalFilename: string, osVendor: string, versionDetected?: number | null } & { ' $fragmentName'?: 'FirmwareTableRowImporterFragment' }; +export type FirmwareRowImporterPageFragment = { __typename?: 'AndroidFirmwareType', id: string, indexedDate?: any | null, originalFilename: string, osVendor: string, versionDetected?: number | null } & { ' $fragmentName'?: 'FirmwareRowImporterPageFragment' }; -export type GetFirmwaresByObjectIdsImporterQueryVariables = Exact<{ - objectIds: Array | Scalars['String']['input']; -}>; +export type GetFirmwaresImporterPageQueryVariables = Exact<{ [key: string]: never; }>; -export type GetFirmwaresByObjectIdsImporterQuery = { __typename?: 'Query', android_firmware_list?: Array<( - { __typename?: 'AndroidFirmwareType' } - & { ' $fragmentRefs'?: { 'FirmwareTableRowImporterFragment': FirmwareTableRowImporterFragment } } - ) | null> | null }; +export type GetFirmwaresImporterPageQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: ( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareRowImporterPageFragment': FirmwareRowImporterPageFragment } } + ) | null } | null> } | null }; -export type FirmwareTableRowScannerFragment = { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } & { ' $fragmentName'?: 'FirmwareTableRowScannerFragment' }; +export type FirmwareRowScannerPageFragment = { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } & { ' $fragmentName'?: 'FirmwareRowScannerPageFragment' }; -export type GetFirmwaresByObjectIdsScannerQueryVariables = Exact<{ - objectIds: Array | Scalars['String']['input']; -}>; +export type GetFirmwaresScannerPageQueryVariables = Exact<{ [key: string]: never; }>; -export type GetFirmwaresByObjectIdsScannerQuery = { __typename?: 'Query', android_firmware_list?: Array<( - { __typename?: 'AndroidFirmwareType' } - & { ' $fragmentRefs'?: { 'FirmwareTableRowScannerFragment': FirmwareTableRowScannerFragment } } - ) | null> | null }; +export type GetFirmwaresScannerPageQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: ( + { __typename?: 'AndroidFirmwareType' } + & { ' $fragmentRefs'?: { 'FirmwareRowScannerPageFragment': FirmwareRowScannerPageFragment } } + ) | null } | null> } | null }; export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; @@ -2242,10 +2233,11 @@ export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; export const AppTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; -export const FirmwareTableRowFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; -export const FirmwareTableRowImporterFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; -export const FirmwareTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; +export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const FirmwareRowScannerPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; +export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetApkObjectIdsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApkObjectIdsByFirmwareObjectIds"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_id_list"}}]}}]} as unknown as DocumentNode; export const GetAppsByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; export const CreateApkScanJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateApkScanJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; @@ -2254,10 +2246,8 @@ export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kin export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const GetFirmwareObjectIdListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwareObjectIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_id_list"}}]}}]} as unknown as DocumentNode; -export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRow"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRow"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}}]}}]} as unknown as DocumentNode; -export const GetFirmwaresByObjectIdsImporterDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsImporter"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowImporter"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowImporter"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; -export const GetFirmwaresByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareAll"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresImporterPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresImporterPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowImporterPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const GetFirmwaresScannerPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresScannerPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowScannerPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index 80529f55..68c24672 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -1,5 +1,24 @@ import {gql} from "@/__generated__"; +// ---------------------------------------------------------------------------------------------------- +// APP IMPORT +// ---------------------------------------------------------------------------------------------------- + +export const CREATE_APP_IMPORT_JOB = gql(` + mutation CreateAppImportJob($storageIndex: Int!) { + createAppImportJob( + queueName: "high-python", + storageIndex: $storageIndex + ) { + jobId + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// RETRIEVE APPS +// ---------------------------------------------------------------------------------------------------- + export const GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS = gql(` query GetApkObjectIdsByFirmwareObjectIds { android_app_id_list @@ -20,6 +39,10 @@ export const GET_APPS_BY_OBJECT_IDS_SCANNER = gql(` } `); +// ---------------------------------------------------------------------------------------------------- +// APK SCAN +// ---------------------------------------------------------------------------------------------------- + export const CREATE_APK_SCAN_JOB = gql(` mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) { createApkScanJob( diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index e78073b2..9d1b1592 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -16,58 +16,41 @@ export const CREATE_FIRMWARE_EXTRACTOR_JOB = gql(` } `); -// ---------------------------------------------------------------------------------------------------- -// APK IMPORT -// ---------------------------------------------------------------------------------------------------- - -export const CREATE_APP_IMPORT_JOB = gql(` - mutation CreateAppImportJob($storageIndex: Int!) { - createAppImportJob( - queueName: "high-python", - storageIndex: $storageIndex - ) { - jobId - } - } -`); - // ---------------------------------------------------------------------------------------------------- // GET FIRMWARES (ALL FIELDS) // ---------------------------------------------------------------------------------------------------- -export const GET_FIRMWARE_OBJECT_ID_LIST = gql(` - query GetFirmwareObjectIdList { - android_firmware_id_list - } -`); - -export const FIRMWARE_TABLE_ROW = gql(` - fragment FirmwareTableRow on AndroidFirmwareType { - id +export const FIRMWARE_ALL = gql(` + fragment FirmwareAll on AndroidFirmwareType { absoluteStorePath aecsBuildFilePath fileSizeBytes filename hasFileIndex hasFuzzyHashIndex + id indexedDate md5 originalFilename osVendor partitionInfoDict + pk relativeStorePath sha1 sha256 tag versionDetected - pk } `); export const GET_FIRMWARES_BY_OBJECT_IDS = gql(` - query GetFirmwaresByObjectIds($objectIds: [String!]!) { - android_firmware_list(objectIdList: $objectIds) { - ...FirmwareTableRow + query GetFirmwaresByObjectIds($objectIds: [String!]) { + android_firmware_connection(objectIdList: $objectIds) { + edges { + node { + ...FirmwareAll + } + } } } `); @@ -76,8 +59,8 @@ export const GET_FIRMWARES_BY_OBJECT_IDS = gql(` // GET FIRMWARES FOR IMPORTER PAGE // ---------------------------------------------------------------------------------------------------- -export const FIRMWARE_TABLE_ROW_IMPORTER = gql(` - fragment FirmwareTableRowImporter on AndroidFirmwareType { +export const FIRMWARE_ROW_IMPORTER_PAGE = gql(` + fragment FirmwareRowImporterPage on AndroidFirmwareType { id indexedDate originalFilename @@ -86,10 +69,14 @@ export const FIRMWARE_TABLE_ROW_IMPORTER = gql(` } `); -export const GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER = gql(` - query GetFirmwaresByObjectIdsImporter($objectIds: [String!]!) { - android_firmware_list(objectIdList: $objectIds) { - ...FirmwareTableRowImporter +export const GET_FIRMWARES_IMPORTER_PAGE = gql(` + query GetFirmwaresImporterPage { + android_firmware_connection { + edges { + node { + ...FirmwareRowImporterPage + } + } } } `); @@ -98,17 +85,21 @@ export const GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER = gql(` // GET FIRMWARES FOR SCANNER PAGE // ---------------------------------------------------------------------------------------------------- -export const FIRMWARE_TABLE_ROW_SCANNER = gql(` - fragment FirmwareTableRowScanner on AndroidFirmwareType { +export const FIRMWARE_ROW_SCANNER_PAGE = gql(` + fragment FirmwareRowScannerPage on AndroidFirmwareType { id originalFilename } `); -export const GET_FIRMWARES_BY_OBJECT_IDS_SCANNER = gql(` - query GetFirmwaresByObjectIdsScanner($objectIds: [String!]!) { - android_firmware_list(objectIdList: $objectIds) { - ...FirmwareTableRowScanner +export const GET_FIRMWARES_SCANNER_PAGE = gql(` + query GetFirmwaresScannerPage { + android_firmware_connection { + edges { + node { + ...FirmwareRowScannerPage + } + } } } `); diff --git a/src/components/ui/importer/dropzone.tsx b/src/components/ui/importer/dropzone.tsx index 6cb6eeee..7becd64b 100644 --- a/src/components/ui/importer/dropzone.tsx +++ b/src/components/ui/importer/dropzone.tsx @@ -16,13 +16,13 @@ import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table.tsx"; import {ApolloQueryResult, useMutation, useQuery} from "@apollo/client"; import { - CREATE_APP_IMPORT_JOB, CREATE_FIRMWARE_EXTRACTOR_JOB, } from "@/components/graphql/firmware.graphql.ts"; import {Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle,} from "@/components/ui/dialog.tsx"; import {Button} from "@/components/ui/button.tsx"; import {Exact, GetRqJobListQuery} from "@/__generated__/graphql.ts"; import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; +import {CREATE_APP_IMPORT_JOB} from "@/components/graphql/app.graphql.ts"; type DropzoneProps = { className?: string; diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index be17179c..47295e16 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -178,9 +178,9 @@ function StateHandlingScrollableDataTable( idsError, dataError, }: Readonly> & { - idsLoading: boolean, + idsLoading?: boolean, dataLoading: boolean, - idsError: ApolloError | undefined, + idsError?: ApolloError, dataError: ApolloError | undefined, } ) { diff --git a/src/lib/graphql/graphql-utils.ts b/src/lib/graphql/graphql-utils.ts index a7397c95..90bcbe37 100644 --- a/src/lib/graphql/graphql-utils.ts +++ b/src/lib/graphql/graphql-utils.ts @@ -1,4 +1,3 @@ -export function convertIdToObjectId(id: string): string { - const decoded = atob(id); - return decoded.split(":").at(1) ?? ""; -} \ No newline at end of file +export const convertIdToObjectId = (id: string) => atob(id).split(":").at(1) ?? ""; + +export const isNonNullish = (v: T | null | undefined): v is T => v != null; diff --git a/src/lib/non-nullable.ts b/src/lib/non-nullable.ts deleted file mode 100644 index 5f9dc9ab..00000000 --- a/src/lib/non-nullable.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function nonNullable(v: T | null | undefined): v is T { - return v != null; -} \ No newline at end of file diff --git a/src/pages/firmware-page.tsx b/src/pages/firmware-page.tsx index 46f3a29f..dc175951 100644 --- a/src/pages/firmware-page.tsx +++ b/src/pages/firmware-page.tsx @@ -1,14 +1,12 @@ import {BasePage} from "@/pages/base-page.tsx"; import {useParams} from "react-router"; import {useQuery} from "@apollo/client"; -import {FIRMWARE_TABLE_ROW, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/firmware.graphql.ts"; -import {FirmwareTableRowFragment} from "@/__generated__/graphql.ts"; -import {useMemo} from "react"; -import {nonNullable} from "@/lib/non-nullable.ts"; +import {FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/firmware.graphql.ts"; +import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; import {AlertCircleIcon} from "lucide-react"; -import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; +import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {Table, TableBody, TableCell, TableRow} from "@/components/ui/table.tsx"; @@ -24,16 +22,10 @@ export function FirmwarePage() { skip: !firmwareId, }); - const firmwares: FirmwareTableRowFragment[] = useMemo( - () => - ((firmwaresData?.android_firmware_list ?? []) - .filter(nonNullable) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map((item) => useFragment(FIRMWARE_TABLE_ROW, item)) - .filter(nonNullable) - ), - [firmwaresData] - ); + const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FIRMWARE_ALL, edge?.node)) + .filter(isNonNullish) if (!firmwareId) { return ( @@ -55,7 +47,7 @@ export function FirmwarePage() { } if (firmwares.length === 1) { - const firmware: FirmwareTableRowFragment = firmwares[0]; + const firmware: FirmwareAllFragment = firmwares[0]; return ( diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index 65d45ee4..c54ff9bd 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -1,19 +1,18 @@ import {BasePage} from "@/pages/base-page.tsx"; import {ColumnDef} from "@tanstack/react-table"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {FirmwareTableRowFragment} from "@/__generated__/graphql.ts"; +import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useQuery} from "@apollo/client"; import { - FIRMWARE_TABLE_ROW, - GET_FIRMWARE_OBJECT_ID_LIST, GET_FIRMWARES_BY_OBJECT_IDS, + FIRMWARE_ALL, + GET_FIRMWARES_BY_OBJECT_IDS, } from "@/components/graphql/firmware.graphql.ts"; -import {useMemo} from "react"; -import {useFragment} from "@/__generated__"; -import {nonNullable} from "@/lib/non-nullable.ts"; import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {useFragment} from "@/__generated__"; -const columns: ColumnDef[] = [ - ...buildFirmwareActionColumns(), +const columns: ColumnDef[] = [ + ...buildFirmwareActionColumns(), { accessorKey: "id", header: "ID", @@ -81,45 +80,23 @@ const columns: ColumnDef[] = [ ]; export function FirmwaresPage() { - const { - loading: idsLoading, - error: idsError, - data: idsData, - } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); - - const objectIds = useMemo(() => - (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], - [idsData] - ); - const { loading: firmwaresLoading, error: firmwaresError, data: firmwaresData, - } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { - variables: {objectIds}, - skip: objectIds.length === 0, - }); + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS); - const firmwares: FirmwareTableRowFragment[] = useMemo( - () => - ((firmwaresData?.android_firmware_list ?? []) - .filter(nonNullable) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map((item) => useFragment(FIRMWARE_TABLE_ROW, item)) - .filter(nonNullable) - ), - [firmwaresData] - ); + const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FIRMWARE_ALL, edge?.node)) + .filter(isNonNullish) return ( diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 5c6865a9..0f60fbdb 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -4,49 +4,27 @@ import {Dropzone} from "@/components/ui/importer/dropzone.tsx"; import {Separator} from "@/components/ui/separator.tsx"; import {useQuery} from "@apollo/client"; import { - FIRMWARE_TABLE_ROW_IMPORTER, GET_FIRMWARE_OBJECT_ID_LIST, - GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, + FIRMWARE_ROW_IMPORTER_PAGE, GET_FIRMWARES_IMPORTER_PAGE, } from "@/components/graphql/firmware.graphql.ts"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {useMemo} from "react"; -import {nonNullable} from "@/lib/non-nullable.ts"; import {useFragment} from "@/__generated__"; import type {ColumnDef} from "@tanstack/react-table"; -import type {FirmwareTableRowImporterFragment} from "@/__generated__/graphql.ts"; import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {FirmwareRowImporterPageFragment} from "@/__generated__/graphql.ts"; export function ImporterPage() { - const { - data: idsData, - loading: idsLoading, - error: idsError, - } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); - - const objectIds = useMemo(() => - (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], - [idsData] - ); - const { data: firmwaresData, loading: firmwaresLoading, error: firmwaresError, - } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS_IMPORTER, { - variables: {objectIds}, - skip: objectIds.length === 0, - }); + } = useQuery(GET_FIRMWARES_IMPORTER_PAGE); - const firmwares: FirmwareTableRowImporterFragment[] = useMemo( - () => - ((firmwaresData?.android_firmware_list ?? []) - .filter(nonNullable) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map((item) => useFragment(FIRMWARE_TABLE_ROW_IMPORTER, item)) - .filter(nonNullable) - ), - [firmwaresData] - ); + const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FIRMWARE_ROW_IMPORTER_PAGE, edge?.node)) + .filter(isNonNullish) return ( @@ -57,17 +35,15 @@ export function ImporterPage() { ); } -const columns: ColumnDef[] = [ - ...buildFirmwareActionColumns(), +const columns: ColumnDef[] = [ + ...buildFirmwareActionColumns(), { accessorKey: "id", header: "ID", diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index e9482b72..d5932b61 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -7,16 +7,13 @@ import {Checkbox} from "@/components/ui/checkbox.tsx"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {useQuery} from "@apollo/client"; import { - FIRMWARE_TABLE_ROW_SCANNER, - GET_FIRMWARE_OBJECT_ID_LIST, - GET_FIRMWARES_BY_OBJECT_IDS_SCANNER + FIRMWARE_ROW_SCANNER_PAGE, + GET_FIRMWARES_SCANNER_PAGE, } from "@/components/graphql/firmware.graphql.ts"; import {useMemo} from "react"; import { - AppTableRowScannerFragment, - FirmwareTableRowScannerFragment + AppTableRowScannerFragment, FirmwareRowScannerPageFragment, } from "@/__generated__/graphql.ts"; -import {nonNullable} from "@/lib/non-nullable.ts"; import {useFragment} from "@/__generated__"; import { APP_TABLE_ROW_SCANNER, @@ -24,6 +21,7 @@ import { GET_APPS_BY_OBJECT_IDS_SCANNER } from "@/components/graphql/app.graphql.ts"; import {buildSelectEntityColumn} from "@/components/ui/firmware-action-columns.tsx"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; export function ScannerPage() { return ( @@ -46,8 +44,8 @@ export function ScannerPage() { } function FirmwaresPanel() { - const columns: ColumnDef[] = [ - buildSelectEntityColumn(), + const columns: ColumnDef[] = [ + buildSelectEntityColumn(), { accessorKey: "id", header: "ID", @@ -58,36 +56,16 @@ function FirmwaresPanel() { }, ]; - const { - loading: idsLoading, - error: idsError, - data: idsData, - } = useQuery(GET_FIRMWARE_OBJECT_ID_LIST); - - const objectIds = useMemo(() => - (idsData?.android_firmware_id_list ?? []).filter(Boolean) as string[], - [idsData] - ); - const { loading: firmwaresLoading, error: firmwaresError, data: firmwaresData, - } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS_SCANNER, { - variables: {objectIds}, - skip: objectIds.length === 0, - }); + } = useQuery(GET_FIRMWARES_SCANNER_PAGE); - const firmwares: FirmwareTableRowScannerFragment[] = useMemo( - () => - ((firmwaresData?.android_firmware_list ?? []) - .filter(nonNullable) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map((item) => useFragment(FIRMWARE_TABLE_ROW_SCANNER, item)) - .filter(nonNullable) - ), - [firmwaresData] - ); + const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FIRMWARE_ROW_SCANNER_PAGE, edge?.node)) + .filter(isNonNullish) return (
@@ -95,9 +73,7 @@ function FirmwaresPanel() {
@@ -161,10 +137,10 @@ function AppsPanel() { const apps: AppTableRowScannerFragment[] = useMemo( () => ((appsData?.android_app_list ?? []) - .filter(nonNullable) + .filter(isNonNullish) // eslint-disable-next-line react-hooks/rules-of-hooks .map((item) => useFragment(APP_TABLE_ROW_SCANNER, item)) - .filter(nonNullable) + .filter(isNonNullish) ), [appsData] ); From 70f78479f6a43e8863372ce6b6880959b6e47cd3 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Tue, 30 Sep 2025 18:18:34 +0200 Subject: [PATCH 19/31] Add App Page * GraphQL - Get apps via firmware connection * Add apps-page.tsx * Add more columns * Add app action columns * Add app-page.tsx * Add entity-table.tsx * Add "Apps" button on firmware page & improve breadcrumb --- src/__generated__/gql.ts | 30 +++-- src/__generated__/graphql.ts | 41 +++++-- src/app.tsx | 6 + src/components/graphql/app.graphql.ts | 84 ++++++++++++-- ...-columns.tsx => entity-action-columns.tsx} | 98 ++++++++++++---- src/components/ui/entity-table.tsx | 38 ++++++ src/components/ui/sidebar/site-header.tsx | 38 +++--- src/components/ui/table/data-table.tsx | 5 +- src/pages/app-page.tsx | 69 +++++++++++ src/pages/apps-page.tsx | 108 ++++++++++++++++++ src/pages/firmware-page.tsx | 59 +++++----- src/pages/firmwares-page.tsx | 4 +- src/pages/importer-page.tsx | 2 +- src/pages/scanner-page.tsx | 46 ++------ 14 files changed, 483 insertions(+), 145 deletions(-) rename src/components/ui/{firmware-action-columns.tsx => entity-action-columns.tsx} (66%) create mode 100644 src/components/ui/entity-table.tsx create mode 100644 src/pages/app-page.tsx create mode 100644 src/pages/apps-page.tsx diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 3a1cbfc8..d168d505 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -16,9 +16,11 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, - "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": typeof types.GetApkObjectIdsByFirmwareObjectIdsDocument, - "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": typeof types.AppTableRowScannerFragmentDoc, - "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": typeof types.GetAppsByObjectIdsScannerDocument, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": typeof types.AppAllFragmentDoc, + "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByFirmwareObjectIdsDocument, + "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByIdDocument, + "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n": typeof types.AppRowScannerPageFragmentDoc, + "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsScannerPageDocument, "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": typeof types.CreateApkScanJobDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": typeof types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, @@ -37,9 +39,11 @@ type Documents = { const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, - "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n": types.GetApkObjectIdsByFirmwareObjectIdsDocument, - "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n": types.AppTableRowScannerFragmentDoc, - "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n": types.GetAppsByObjectIdsScannerDocument, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": types.AppAllFragmentDoc, + "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByFirmwareObjectIdsDocument, + "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByIdDocument, + "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n": types.AppRowScannerPageFragmentDoc, + "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsScannerPageDocument, "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": types.CreateApkScanJobDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, @@ -81,15 +85,23 @@ export function gql(source: "\n mutation CreateAppImportJob($storageIndex: In /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n"): (typeof documents)["\n query GetApkObjectIdsByFirmwareObjectIds {\n android_app_id_list\n }\n"]; +export function gql(source: "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n"): (typeof documents)["\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n"): (typeof documents)["\n fragment AppTableRowScanner on AndroidAppType {\n id\n }\n"]; +export function gql(source: "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n"): (typeof documents)["\n query GetAppsByObjectIdsScanner($objectIds: [String!]!) {\n android_app_list(objectIdList: $objectIds) {\n ...AppTableRowScanner\n }\n }\n"]; +export function gql(source: "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n"): (typeof documents)["\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index bf6e8f14..82d4b54a 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2133,22 +2133,37 @@ export type CreateAppImportJobMutationVariables = Exact<{ export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; -export type GetApkObjectIdsByFirmwareObjectIdsQueryVariables = Exact<{ [key: string]: never; }>; +export type AppAllFragment = { __typename?: 'AndroidAppType', absoluteStorePath?: string | null, androidManifestDict?: any | null, fileSizeBytes: number, filename: string, id: string, indexedDate?: any | null, md5: string, originalFilename?: string | null, packagename?: string | null, partitionName?: string | null, pk?: string | null, relativeFirmwarePath: string, relativeStorePath?: string | null, sha1: string, sha256: string } & { ' $fragmentName'?: 'AppAllFragment' }; +export type GetAppsByFirmwareObjectIdsQueryVariables = Exact<{ + objectIds?: InputMaybe | Scalars['String']['input']>; +}>; -export type GetApkObjectIdsByFirmwareObjectIdsQuery = { __typename?: 'Query', android_app_id_list?: Array | null }; -export type AppTableRowScannerFragment = { __typename?: 'AndroidAppType', id: string } & { ' $fragmentName'?: 'AppTableRowScannerFragment' }; +export type GetAppsByFirmwareObjectIdsQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( + { __typename?: 'AndroidAppType' } + & { ' $fragmentRefs'?: { 'AppAllFragment': AppAllFragment } } + ) | null } | null> } | null } | null } | null> } | null }; -export type GetAppsByObjectIdsScannerQueryVariables = Exact<{ - objectIds: Array | Scalars['String']['input']; +export type GetAppsByIdQueryVariables = Exact<{ + id: Scalars['ID']['input']; }>; -export type GetAppsByObjectIdsScannerQuery = { __typename?: 'Query', android_app_list?: Array<( - { __typename?: 'AndroidAppType' } - & { ' $fragmentRefs'?: { 'AppTableRowScannerFragment': AppTableRowScannerFragment } } - ) | null> | null }; +export type GetAppsByIdQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( + { __typename?: 'AndroidAppType' } + & { ' $fragmentRefs'?: { 'AppAllFragment': AppAllFragment } } + ) | null } | null> } | null } | null } | null> } | null }; + +export type AppRowScannerPageFragment = { __typename?: 'AndroidAppType', id: string } & { ' $fragmentName'?: 'AppRowScannerPageFragment' }; + +export type GetAppsScannerPageQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetAppsScannerPageQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( + { __typename?: 'AndroidAppType' } + & { ' $fragmentRefs'?: { 'AppRowScannerPageFragment': AppRowScannerPageFragment } } + ) | null } | null> } | null } | null } | null> } | null }; export type CreateApkScanJobMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; @@ -2232,14 +2247,16 @@ export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; -export const AppTableRowScannerFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; +export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; +export const AppRowScannerPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowScannerPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const GetApkObjectIdsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApkObjectIdsByFirmwareObjectIds"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_id_list"}}]}}]} as unknown as DocumentNode; -export const GetAppsByObjectIdsScannerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByObjectIdsScanner"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_app_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppTableRowScanner"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppTableRowScanner"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; +export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; +export const GetAppsByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; +export const GetAppsScannerPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsScannerPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppRowScannerPage"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; export const CreateApkScanJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateApkScanJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; diff --git a/src/app.tsx b/src/app.tsx index 7a1eeae2..b8d2ca2e 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -8,6 +8,8 @@ import {ImporterPage} from "@/pages/importer-page.tsx"; import {ScannerPage} from "@/pages/scanner-page.tsx"; import {FirmwaresPage} from "@/pages/firmwares-page.tsx"; import {FirmwarePage} from "@/pages/firmware-page.tsx"; +import {AppsPage} from "@/pages/apps-page.tsx"; +import {AppPage} from "@/pages/app-page.tsx"; function App() { return ( @@ -23,6 +25,10 @@ function App() { }/> }/> }/> + }/> + }/> + }/> + }/> }/> {/*}/>*/} {/*TOOD: Add 404 page?*/} diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index 68c24672..effc071e 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -16,25 +16,89 @@ export const CREATE_APP_IMPORT_JOB = gql(` `); // ---------------------------------------------------------------------------------------------------- -// RETRIEVE APPS +// GET APPS (ALL FIELDS) // ---------------------------------------------------------------------------------------------------- -export const GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS = gql(` - query GetApkObjectIdsByFirmwareObjectIds { - android_app_id_list +export const APP_ALL = gql(` + fragment AppAll on AndroidAppType { + absoluteStorePath + androidManifestDict + fileSizeBytes + filename + id + indexedDate + md5 + originalFilename + packagename + partitionName + pk + relativeFirmwarePath + relativeStorePath + sha1 + sha256 + } +`); + +export const GET_APPS_BY_FIRMWARE_OBJECT_IDS = gql(` + query GetAppsByFirmwareObjectIds($objectIds: [String!]) { + android_firmware_connection(objectIdList: $objectIds) { + edges { + node { + androidAppIdList { + edges { + node { + ...AppAll + } + } + } + } + } + } + } +`); + +export const GET_APP_BY_ID = gql(` + query GetAppsById($id: ID!) { + android_firmware_connection { + edges { + node { + androidAppIdList(id: $id) { + edges { + node { + ...AppAll + } + } + } + } + } + } } `); -export const APP_TABLE_ROW_SCANNER = gql(` - fragment AppTableRowScanner on AndroidAppType { +// ---------------------------------------------------------------------------------------------------- +// GET APPS FOR SCANNER PAGE +// ---------------------------------------------------------------------------------------------------- + +export const APP_ROW_SCANNER_PAGE = gql(` + fragment AppRowScannerPage on AndroidAppType { id } `); -export const GET_APPS_BY_OBJECT_IDS_SCANNER = gql(` - query GetAppsByObjectIdsScanner($objectIds: [String!]!) { - android_app_list(objectIdList: $objectIds) { - ...AppTableRowScanner +export const GET_APPS_SCANNER_PAGE = gql(` + query GetAppsScannerPage { + android_firmware_connection { + edges { + node { + androidAppIdList { + edges { + node { + ...AppRowScannerPage + } + } + } + } + } } } `); diff --git a/src/components/ui/firmware-action-columns.tsx b/src/components/ui/entity-action-columns.tsx similarity index 66% rename from src/components/ui/firmware-action-columns.tsx rename to src/components/ui/entity-action-columns.tsx index b1de33ef..65073395 100644 --- a/src/components/ui/firmware-action-columns.tsx +++ b/src/components/ui/entity-action-columns.tsx @@ -6,20 +6,17 @@ import {LoaderCircle, LoaderCircleIcon, Trash, TrashIcon, ViewIcon} from "lucide import {useLazyQuery, useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; -import {useNavigate} from "react-router"; +import {useNavigate, useParams} from "react-router"; import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; -import {GetRqJobListQuery} from "@/__generated__/graphql.ts"; +import {Exact, GetRqJobListQuery, Scalars} from "@/__generated__/graphql.ts"; +import {TypedDocumentNode} from "@graphql-typed-document-node/core"; type WithId = { id: string }; +type WithTypenameMutation = { __typename?: "Mutation" }; const DELETION_JOB_FUNC_NAME = "api.v2.types.GenericDeletion.delete_queryset_background"; function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery | undefined) { - // const {data: rqJobListData} = useQuery(GET_RQ_JOB_LIST, { - // fetchPolicy: "cache-and-network", - // pollInterval: 5000, - // }); - // const ongoingDeletionJobs = rqJobListData?.rq_job_list ?.filter(job => job?.funcName === DELETION_JOB_FUNC_NAME && @@ -43,9 +40,21 @@ function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery return (ongoingDeletionJobs?.length ?? 0) > 0; } -function DeleteSelectedButton({table}: Readonly<{ table: Table }>) { +function DeleteSelectedButton( + { + tooltip, + table, + deleteMutation, + }: Readonly<{ + tooltip: string; + table: Table; + deleteMutation: TypedDocumentNode | Scalars["String"]["input"] + }>>; + }>, +) { const selectedObjectIds = table.getSelectedRowModel().rows.map((row) => convertIdToObjectId(row.original.id)); - const [deleteFirmwares] = useMutation(DELETE_FIRMWARE_BY_OBJECT_ID, { + const [deleteEntities] = useMutation(deleteMutation, { variables: {objectIds: selectedObjectIds}, }); @@ -68,7 +77,7 @@ function DeleteSelectedButton({table}: Readonly<{ table: Table
-

Delete selected firmwares

+

{tooltip}

) } -function DeleteRowButton({id}: Readonly<{ id: string }>) { +function DeleteRowButton( + { + tooltip, + id, + deleteMutation, + }: Readonly<{ + tooltip: string; + id: string; + deleteMutation: TypedDocumentNode | Scalars["String"]["input"] + }>>; + }>, +) { const objectId = convertIdToObjectId(id); - const [deleteFirmware] = useMutation( - DELETE_FIRMWARE_BY_OBJECT_ID, { + const [deleteEntity] = useMutation( + deleteMutation, { variables: { objectIds: objectId, } @@ -109,14 +130,14 @@ function DeleteRowButton({id}: Readonly<{ id: string }>) { -

Delete firmware

+

{tooltip}

); @@ -153,27 +174,38 @@ function buildSelectEntityColumn(): ColumnDef { ); } -function buildViewEntityColumn(): ColumnDef { +function buildViewEntityColumn( + tooltip: string, + basePath: string, +): ColumnDef { return ( { id: "view", cell: ({row}) => { // eslint-disable-next-line react-hooks/rules-of-hooks const navigate = useNavigate(); - const firmwareId = row.original.id; + // eslint-disable-next-line react-hooks/rules-of-hooks + const {firmwareId} = useParams<{ firmwareId?: string }>(); + const rowOriginalId = row.original.id; return ( -

View firmware

+

{tooltip}

); @@ -182,12 +214,20 @@ function buildViewEntityColumn(): ColumnDef { ); } -function buildDeleteEntityColumn(): ColumnDef { +function buildDeleteEntityColumn( + tooltipSingle: string, + tooltipSelected: string, + deleteMutation: TypedDocumentNode | Scalars["String"]["input"] + }>> +): ColumnDef { return ( { id: "delete", - header: ({table}) => table={table}/>, - cell: ({row}) => , + header: ({table}) => tooltip={tooltipSelected} table={table} + deleteMutation={deleteMutation}/>, + cell: ({row}) => , } ); } @@ -195,8 +235,15 @@ function buildDeleteEntityColumn(): ColumnDef { function buildFirmwareActionColumns(): ColumnDef[] { return [ buildSelectEntityColumn(), - buildViewEntityColumn(), - buildDeleteEntityColumn(), + buildViewEntityColumn("View firmware", "/firmwares"), + buildDeleteEntityColumn("Delete firmware", "Delete selected firmwares", DELETE_FIRMWARE_BY_OBJECT_ID), + ]; +} + +function buildAppActionColumns(): ColumnDef[] { + return [ + buildSelectEntityColumn(), + buildViewEntityColumn("View app", "/apps"), ]; } @@ -205,4 +252,5 @@ export { buildViewEntityColumn, buildDeleteEntityColumn, buildFirmwareActionColumns, + buildAppActionColumns, } diff --git a/src/components/ui/entity-table.tsx b/src/components/ui/entity-table.tsx new file mode 100644 index 00000000..e56647d2 --- /dev/null +++ b/src/components/ui/entity-table.tsx @@ -0,0 +1,38 @@ +import {Table, TableBody, TableCell, TableRow} from "@/components/ui/table.tsx"; + +type WithFragmentName = { " $fragmentName"?: string }; + +export function EntityTable( + { + entity, + }: Readonly<{ + entity: WithFragmentName; + }>, +) { + return ( + + + {Object.entries(entity).map(([key, value]) => ( + + {key} + + {(() => { + let displayValue = value; + + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const parsed = JSON.parse(value); + displayValue = JSON.stringify(parsed, null, 2); + } catch { + // ignore, we leave it as string if parsing fails + } + + return displayValue; + })()} + + + ))} + +
+ ); +} diff --git a/src/components/ui/sidebar/site-header.tsx b/src/components/ui/sidebar/site-header.tsx index 3dd732ad..69703e33 100644 --- a/src/components/ui/sidebar/site-header.tsx +++ b/src/components/ui/sidebar/site-header.tsx @@ -7,20 +7,19 @@ import { BreadcrumbItem, BreadcrumbLink, BreadcrumbList, - BreadcrumbPage, BreadcrumbSeparator, } from "@/components/ui/breadcrumb.tsx" import {Button} from "@/components/ui/button.tsx" import {Separator} from "@/components/ui/separator.tsx" import {useSidebar} from "@/components/ui/sidebar.tsx" import {ModeToggle} from "@/components/ui/theming/mode-toggle.tsx"; -import {Link, useLocation, useParams} from "react-router"; +import {Link, useLocation} from "react-router"; export function SiteHeader() { const {toggleSidebar} = useSidebar(); - const location = useLocation(); - const {firmwareId} = useParams<{ firmwareId?: string }>(); - const isFirmwareDetail = location.pathname.startsWith("/firmwares/") && firmwareId; + const pathname = useLocation().pathname; + const isFirmwaresOrAppsPath = pathname.startsWith("/firmwares") || pathname.startsWith("/apps"); + const splitPathname = pathname.split("/").filter(item => item.length > 0); return (
@@ -38,19 +37,22 @@ export function SiteHeader() { - {isFirmwareDetail && ( - - - - Firmwares - - - - - {firmwareId} - - - )} + + {isFirmwaresOrAppsPath && splitPathname + .map((item, index) => ( + + + + {item} + + + {index < splitPathname.length - 1 && ( + + )} + + ))} +
diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index 47295e16..69f3e4a2 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -93,7 +93,10 @@ function DataTable( column.toggleVisibility(value); }} > - {column.id} + {typeof column.columnDef.header === "string" + ? (column.columnDef.header) + : (column.id) + } ) })} diff --git a/src/pages/app-page.tsx b/src/pages/app-page.tsx new file mode 100644 index 00000000..b105a6b7 --- /dev/null +++ b/src/pages/app-page.tsx @@ -0,0 +1,69 @@ +import {useParams} from "react-router"; +import {BasePage} from "@/pages/base-page.tsx"; +import {useQuery} from "@apollo/client"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {APP_ALL, GET_APP_BY_ID} from "@/components/graphql/app.graphql.ts"; +import {useFragment} from "@/__generated__"; +import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon} from "lucide-react"; +import {Skeleton} from "@/components/ui/skeleton.tsx"; +import {AppAllFragment} from "@/__generated__/graphql.ts"; +import {EntityTable} from "@/components/ui/entity-table.tsx"; + +export function AppPage() { + const {appId} = useParams<{ appId: string }>(); + + const { + loading: appsLoading, + data: appsData, + } = useQuery(GET_APP_BY_ID, { + variables: {id: appId as string}, + skip: !appId, + }); + + if (!appId) { + return ( + + + + Missing App ID. + + + ); + } + + if (appsLoading) { + return ( + + + + ); + } + + const apps = (appsData?.android_firmware_connection?.edges ?? []) + .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(APP_ALL, edge?.node)) + .filter(isNonNullish) + + if (apps.length === 1) { + const app: AppAllFragment = apps[0]; + + return ( + + + + ); + } + + if (apps.length < 1) { + return ( + + + + Could not find an app with ID '{appId}'. + + + ); + } +} \ No newline at end of file diff --git a/src/pages/apps-page.tsx b/src/pages/apps-page.tsx new file mode 100644 index 00000000..5670eeca --- /dev/null +++ b/src/pages/apps-page.tsx @@ -0,0 +1,108 @@ +import {ColumnDef} from "@tanstack/react-table"; +import {AppAllFragment} from "@/__generated__/graphql.ts"; +import {useQuery} from "@apollo/client"; +import {useFragment} from "@/__generated__"; +import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {BasePage} from "@/pages/base-page.tsx"; +import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; +import {APP_ALL, GET_APPS_BY_FIRMWARE_OBJECT_IDS} from "@/components/graphql/app.graphql.ts"; +import {buildAppActionColumns} from "@/components/ui/entity-action-columns.tsx"; +import {useParams} from "react-router"; + +const columns: ColumnDef[] = [ + ...buildAppActionColumns(), + { + accessorKey: "id", + header: "ID", + }, + { + accessorKey: "absoluteStorePath", + header: "Absolute Store Path", + }, + { + accessorKey: "androidManifestDict", + header: "Android Manifest Dict", + }, + { + accessorKey: "fileSizeBytes", + header: "File Size Bytes", + }, + { + accessorKey: "filename", + header: "File name", + }, + { + accessorKey: "indexedDate", + header: "Indexed Date", + }, + { + accessorKey: "md5", + header: "MD5", + }, + { + accessorKey: "originalFilename", + header: "Original Filename", + }, + { + accessorKey: "packagename", + header: "Package name", + }, + { + accessorKey: "partitionName", + header: "Partition Name", + }, + { + accessorKey: "pk", + header: "Object ID", + }, + { + accessorKey: "relativeFirmwarePath", + header: "Relative Firmware Path", + }, + { + accessorKey: "relativeStorePath", + header: "Relative Store Path", + }, + { + accessorKey: "sha1", + header: "SHA-1", + }, + { + accessorKey: "sha256", + header: "SHA-256", + }, +]; + +export function AppsPage() { + const {firmwareId} = useParams<{ firmwareId?: string }>(); + + let objectId: string | undefined; + if (firmwareId) { + objectId = convertIdToObjectId(firmwareId); + } + + const { + loading: appsLoading, + error: appsError, + data: appsData, + } = useQuery(GET_APPS_BY_FIRMWARE_OBJECT_IDS, { + variables: {objectIds: objectId} + }); + + const apps = (appsData?.android_firmware_connection?.edges ?? []) + .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(APP_ALL, edge?.node)) + .filter(isNonNullish) + + return ( + + + + ); +} diff --git a/src/pages/firmware-page.tsx b/src/pages/firmware-page.tsx index dc175951..026dd136 100644 --- a/src/pages/firmware-page.tsx +++ b/src/pages/firmware-page.tsx @@ -1,32 +1,28 @@ import {BasePage} from "@/pages/base-page.tsx"; -import {useParams} from "react-router"; +import {useNavigate, useParams} from "react-router"; import {useQuery} from "@apollo/client"; import {FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/firmware.graphql.ts"; import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon} from "lucide-react"; +import {AlertCircleIcon, FileIcon, SquareIcon} from "lucide-react"; import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {Skeleton} from "@/components/ui/skeleton.tsx"; -import {Table, TableBody, TableCell, TableRow} from "@/components/ui/table.tsx"; +import {EntityTable} from "@/components/ui/entity-table.tsx"; +import {Button} from "@/components/ui/button.tsx"; export function FirmwarePage() { const {firmwareId} = useParams<{ firmwareId: string }>(); + const navigate = useNavigate(); const { loading: firmwaresLoading, - // error: firmwaresError, data: firmwaresData, } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { variables: {objectIds: convertIdToObjectId(firmwareId as string)}, skip: !firmwareId, }); - const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map(edge => useFragment(FIRMWARE_ALL, edge?.node)) - .filter(isNonNullish) - if (!firmwareId) { return ( @@ -46,35 +42,32 @@ export function FirmwarePage() { ); } + const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FIRMWARE_ALL, edge?.node)) + .filter(isNonNullish) + if (firmwares.length === 1) { const firmware: FirmwareAllFragment = firmwares[0]; return ( - - - {Object.entries(firmware).map(([key, value]) => ( - - {key} - - {(() => { - let displayValue = String(value); - - try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-argument - const parsed = JSON.parse(value); - displayValue = JSON.stringify(parsed, null, 2); - } catch { - // ignore, we leave it as string if parsing fails - } - - return displayValue; - })()} - - - ))} - -
+
+ + +
+
); } diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index c54ff9bd..5d9d8567 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -7,7 +7,7 @@ import { FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS, } from "@/components/graphql/firmware.graphql.ts"; -import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; +import {buildFirmwareActionColumns} from "@/components/ui/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {useFragment} from "@/__generated__"; @@ -27,7 +27,7 @@ const columns: ColumnDef[] = [ }, { accessorKey: "filename", - header: "Filename", + header: "File name", }, { accessorKey: "hasFileIndex", diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 0f60fbdb..17798fd0 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -10,7 +10,7 @@ import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table import {useFragment} from "@/__generated__"; import type {ColumnDef} from "@tanstack/react-table"; -import {buildFirmwareActionColumns} from "@/components/ui/firmware-action-columns.tsx"; +import {buildFirmwareActionColumns} from "@/components/ui/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {FirmwareRowImporterPageFragment} from "@/__generated__/graphql.ts"; diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index d5932b61..185a8aee 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -10,17 +10,16 @@ import { FIRMWARE_ROW_SCANNER_PAGE, GET_FIRMWARES_SCANNER_PAGE, } from "@/components/graphql/firmware.graphql.ts"; -import {useMemo} from "react"; import { - AppTableRowScannerFragment, FirmwareRowScannerPageFragment, + AppRowScannerPageFragment, + FirmwareRowScannerPageFragment, } from "@/__generated__/graphql.ts"; import {useFragment} from "@/__generated__"; import { - APP_TABLE_ROW_SCANNER, - GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS, - GET_APPS_BY_OBJECT_IDS_SCANNER + APP_ROW_SCANNER_PAGE, + GET_APPS_SCANNER_PAGE } from "@/components/graphql/app.graphql.ts"; -import {buildSelectEntityColumn} from "@/components/ui/firmware-action-columns.tsx"; +import {buildSelectEntityColumn} from "@/components/ui/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; export function ScannerPage() { @@ -81,7 +80,7 @@ function FirmwaresPanel() { } function AppsPanel() { - const columns: ColumnDef[] = [ + const columns: ColumnDef[] = [ { id: "select", header: ({table}) => ( @@ -114,36 +113,17 @@ function AppsPanel() { } ]; - const { - loading: idsLoading, - error: idsError, - data: idsData, - } = useQuery(GET_APP_OBJECT_IDS_BY_FIRMWARE_OBJECT_IDS); - - const objectIds = useMemo(() => - (idsData?.android_app_id_list ?? []).filter(Boolean) as string[], - [idsData] - ); - const { loading: appsLoading, error: appsError, data: appsData, - } = useQuery(GET_APPS_BY_OBJECT_IDS_SCANNER, { - variables: {objectIds}, - skip: objectIds.length === 0, - }); + } = useQuery(GET_APPS_SCANNER_PAGE); - const apps: AppTableRowScannerFragment[] = useMemo( - () => - ((appsData?.android_app_list ?? []) - .filter(isNonNullish) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map((item) => useFragment(APP_TABLE_ROW_SCANNER, item)) - .filter(isNonNullish) - ), - [appsData] - ); + const apps = (appsData?.android_firmware_connection?.edges ?? []) + .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(APP_ROW_SCANNER_PAGE, edge?.node)) + .filter(isNonNullish) return (
@@ -151,8 +131,6 @@ function AppsPanel() { From aafe3b7300a05b67037da0b2400dcfff66d27ce2 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Fri, 3 Oct 2025 11:44:53 +0200 Subject: [PATCH 20/31] Implement new scanner page * Add stepper * Add APK scan action button * Add column header button for bulk APK scans * Merge DeleteEntityButton implementations * Add scan app button to firmware table * Clear scanner-page.tsx * Implement new ScannerPage * Use RqJobsTable in Dropzone * Fix wrapping on ScannerPage --- src/__generated__/gql.ts | 30 +-- src/__generated__/graphql.ts | 33 +-- src/components/graphql/app.graphql.ts | 40 +--- src/components/graphql/firmware.graphql.ts | 25 +- src/components/ui/badge.tsx | 46 ++++ src/components/ui/checkbox-form.tsx | 131 ---------- src/components/ui/entity-action-columns.tsx | 250 +++++++++++++------- src/components/ui/importer/dropzone.tsx | 102 +------- src/components/ui/resizable.tsx | 54 ----- src/components/ui/rq-jobs-table.tsx | 97 ++++++++ src/components/ui/scanners-table.tsx | 43 ++++ src/components/ui/sidebar/app-sidebar.tsx | 31 +-- src/components/ui/table/data-table.tsx | 34 ++- src/pages/apps-page.tsx | 4 +- src/pages/firmwares-page.tsx | 4 +- src/pages/importer-page.tsx | 4 +- src/pages/scanner-page.tsx | 183 ++------------ 17 files changed, 471 insertions(+), 640 deletions(-) create mode 100644 src/components/ui/badge.tsx delete mode 100644 src/components/ui/checkbox-form.tsx delete mode 100644 src/components/ui/resizable.tsx create mode 100644 src/components/ui/rq-jobs-table.tsx create mode 100644 src/components/ui/scanners-table.tsx diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index d168d505..6aaa497c 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -19,9 +19,8 @@ type Documents = { "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": typeof types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByIdDocument, - "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n": typeof types.AppRowScannerPageFragmentDoc, - "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsScannerPageDocument, - "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": typeof types.CreateApkScanJobDocument, + "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": typeof types.GetScannerModuleNamesDocument, + "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": typeof types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, @@ -31,8 +30,7 @@ type Documents = { "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareRowImporterPageFragmentDoc, "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": typeof types.GetFirmwaresImporterPageDocument, - "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n": typeof types.FirmwareRowScannerPageFragmentDoc, - "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n": typeof types.GetFirmwaresScannerPageDocument, + "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByFirmwareObjectIdsDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": typeof types.DeleteFirmwareByObjectIdDocument, "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, }; @@ -42,9 +40,8 @@ const documents: Documents = { "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByIdDocument, - "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n": types.AppRowScannerPageFragmentDoc, - "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsScannerPageDocument, - "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n": types.CreateApkScanJobDocument, + "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": types.GetScannerModuleNamesDocument, + "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, @@ -54,8 +51,7 @@ const documents: Documents = { "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareRowImporterPageFragmentDoc, "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": types.GetFirmwaresImporterPageDocument, - "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n": types.FirmwareRowScannerPageFragmentDoc, - "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n": types.GetFirmwaresScannerPageDocument, + "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": types.ScanApksByFirmwareObjectIdsDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": types.DeleteFirmwareByObjectIdDocument, "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, }; @@ -97,15 +93,11 @@ export function gql(source: "\n query GetAppsById($id: ID!) {\n androi /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n"): (typeof documents)["\n fragment AppRowScannerPage on AndroidAppType {\n id\n }\n"]; +export function gql(source: "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n"): (typeof documents)["\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppsScannerPage {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppRowScannerPage\n }\n }\n }\n }\n }\n }\n }\n"]; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql(source: "\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n moduleName: $scannerName\n objectIdList: $objectIds\n queueName: \"high-python\"\n ) {\n jobIdList\n }\n }\n"]; +export function gql(source: "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -145,11 +137,7 @@ export function gql(source: "\n query GetFirmwaresImporterPage {\n and /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n"): (typeof documents)["\n fragment FirmwareRowScannerPage on AndroidFirmwareType {\n id\n originalFilename\n }\n"]; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql(source: "\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFirmwaresScannerPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowScannerPage\n }\n }\n }\n }\n"]; +export function gql(source: "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 82d4b54a..c21bf748 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2155,23 +2155,18 @@ export type GetAppsByIdQuery = { __typename?: 'Query', android_firmware_connecti & { ' $fragmentRefs'?: { 'AppAllFragment': AppAllFragment } } ) | null } | null> } | null } | null } | null> } | null }; -export type AppRowScannerPageFragment = { __typename?: 'AndroidAppType', id: string } & { ' $fragmentName'?: 'AppRowScannerPageFragment' }; +export type GetScannerModuleNamesQueryVariables = Exact<{ [key: string]: never; }>; -export type GetAppsScannerPageQueryVariables = Exact<{ [key: string]: never; }>; +export type GetScannerModuleNamesQuery = { __typename?: 'Query', scanner_module_name_list?: Array | null }; -export type GetAppsScannerPageQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( - { __typename?: 'AndroidAppType' } - & { ' $fragmentRefs'?: { 'AppRowScannerPageFragment': AppRowScannerPageFragment } } - ) | null } | null> } | null } | null } | null> } | null }; - -export type CreateApkScanJobMutationVariables = Exact<{ +export type ScanApksByObjectIdsMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; scannerName: Scalars['String']['input']; }>; -export type CreateApkScanJobMutation = { __typename?: 'Mutation', createApkScanJob?: { __typename?: 'CreateApkScanJob', jobIdList?: Array | null } | null }; +export type ScanApksByObjectIdsMutation = { __typename?: 'Mutation', createApkScanJob?: { __typename?: 'CreateApkScanJob', jobIdList?: Array | null } | null }; export type GetAuthTokenQueryVariables = Exact<{ password: Scalars['String']['input']; @@ -2225,15 +2220,13 @@ export type GetFirmwaresImporterPageQuery = { __typename?: 'Query', android_firm & { ' $fragmentRefs'?: { 'FirmwareRowImporterPageFragment': FirmwareRowImporterPageFragment } } ) | null } | null> } | null }; -export type FirmwareRowScannerPageFragment = { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } & { ' $fragmentName'?: 'FirmwareRowScannerPageFragment' }; - -export type GetFirmwaresScannerPageQueryVariables = Exact<{ [key: string]: never; }>; +export type ScanApksByFirmwareObjectIdsMutationVariables = Exact<{ + objectIds: Array | Scalars['String']['input']; + scannerName: Scalars['String']['input']; +}>; -export type GetFirmwaresScannerPageQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: ( - { __typename?: 'AndroidFirmwareType' } - & { ' $fragmentRefs'?: { 'FirmwareRowScannerPageFragment': FirmwareRowScannerPageFragment } } - ) | null } | null> } | null }; +export type ScanApksByFirmwareObjectIdsMutation = { __typename?: 'Mutation', createApkScanJob?: { __typename?: 'CreateApkScanJob', jobIdList?: Array | null } | null }; export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; @@ -2248,16 +2241,14 @@ export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; -export const AppRowScannerPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; -export const FirmwareRowScannerPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; export const GetAppsByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; -export const GetAppsScannerPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsScannerPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppRowScannerPage"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]} as unknown as DocumentNode; -export const CreateApkScanJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateApkScanJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; +export const GetScannerModuleNamesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetScannerModuleNames"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scanner_module_name_list"}}]}}]} as unknown as DocumentNode; +export const ScanApksByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; @@ -2265,6 +2256,6 @@ export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","defini export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareAll"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresImporterPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresImporterPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowImporterPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; -export const GetFirmwaresScannerPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresScannerPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowScannerPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowScannerPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]} as unknown as DocumentNode; +export const ScanApksByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index effc071e..d4df723d 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -76,43 +76,21 @@ export const GET_APP_BY_ID = gql(` `); // ---------------------------------------------------------------------------------------------------- -// GET APPS FOR SCANNER PAGE +// APK SCAN // ---------------------------------------------------------------------------------------------------- -export const APP_ROW_SCANNER_PAGE = gql(` - fragment AppRowScannerPage on AndroidAppType { - id +export const GET_SCANNER_MODULE_NAMES = gql(` + query GetScannerModuleNames { + scanner_module_name_list } `); -export const GET_APPS_SCANNER_PAGE = gql(` - query GetAppsScannerPage { - android_firmware_connection { - edges { - node { - androidAppIdList { - edges { - node { - ...AppRowScannerPage - } - } - } - } - } - } - } -`); - -// ---------------------------------------------------------------------------------------------------- -// APK SCAN -// ---------------------------------------------------------------------------------------------------- - -export const CREATE_APK_SCAN_JOB = gql(` - mutation CreateApkScanJob($objectIds: [String!]!, $scannerName: String!) { +export const SCAN_APKS_BY_OBJECT_IDS = gql(` + mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) { createApkScanJob( - moduleName: $scannerName - objectIdList: $objectIds - queueName: "high-python" + objectIdList: $objectIds, + moduleName: $scannerName, + queueName: "default-python", ) { jobIdList } diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index 9d1b1592..26899720 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -82,24 +82,17 @@ export const GET_FIRMWARES_IMPORTER_PAGE = gql(` `); // ---------------------------------------------------------------------------------------------------- -// GET FIRMWARES FOR SCANNER PAGE +// SCAN ALL APKs OF FIRMWARES // ---------------------------------------------------------------------------------------------------- -export const FIRMWARE_ROW_SCANNER_PAGE = gql(` - fragment FirmwareRowScannerPage on AndroidFirmwareType { - id - originalFilename - } -`); - -export const GET_FIRMWARES_SCANNER_PAGE = gql(` - query GetFirmwaresScannerPage { - android_firmware_connection { - edges { - node { - ...FirmwareRowScannerPage - } - } +export const SCAN_APKS_BY_FIRMWARE_OBJECT_IDS = gql(` + mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) { + createApkScanJob( + firmwareIdList: $objectIds, + moduleName: $scannerName, + queueName: "default-python", + ) { + jobIdList } } `); diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx new file mode 100644 index 00000000..02054139 --- /dev/null +++ b/src/components/ui/badge.tsx @@ -0,0 +1,46 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + secondary: + "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + destructive: + "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +function Badge({ + className, + variant, + asChild = false, + ...props +}: React.ComponentProps<"span"> & + VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : "span" + + return ( + + ) +} + +export { Badge, badgeVariants } diff --git a/src/components/ui/checkbox-form.tsx b/src/components/ui/checkbox-form.tsx deleted file mode 100644 index adb8dd28..00000000 --- a/src/components/ui/checkbox-form.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import {zodResolver} from "@hookform/resolvers/zod" -import {useForm, UseFormReturn} from "react-hook-form" -import {z} from "zod" - -import {Checkbox} from "@/components/ui/checkbox" -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form" -import {useEffect} from "react"; - -type Item = { - id: string; - label: string; -} - -type CheckboxFormProps = { - label?: string; - description?: string; - items: Item[]; - defaultItems?: Item[]; - validateOnMount?: boolean; - validationMode?: "onBlur" | "onChange" | "onSubmit" | "onTouched" | "all"; - schema?: z.ZodObject<{ items: z.ZodArray }>; -} - -const DefaultSchema = z.object({ - items: z.array(z.string()).refine((value) => value.some((item) => item), { - message: "Select at least one item.", - }), -}) - -export function CheckboxForm( - { - label, - description, - items, - defaultItems, - validateOnMount = false, - validationMode = "onSubmit", - schema, - }: Readonly) { - const activeSchema = schema ?? DefaultSchema; - - const form = useForm>({ - resolver: zodResolver(activeSchema), - defaultValues: { - items: defaultItems?.map(item => item.id) ?? [] - }, - mode: validationMode, - }) - - useEffect(() => { - if (validateOnMount) { - void form.trigger("items") - } - }, [validateOnMount, form]); - - return ( -
- - ( - - {(label || description) && ( -
- {label && {label}} - {description && - {description} - } -
- )} -
- {items.map((item) => ( - - ))} -
- -
- )} - /> - - - ) -} - -type ItemFieldProps = { - item: Item; - form: UseFormReturn<{ items: string[] }, any, { items: string[] }>; -} - -function ItemField({item, form}: Readonly) { - return ( - { - return ( - - - - { - return checked - ? field.onChange([...field.value, item.id]) - : field.onChange( - field.value.filter( - (value) => value !== item.id - ) - ) - }} - /> - - {item.label} - - - ) - }} - /> - ); -} diff --git a/src/components/ui/entity-action-columns.tsx b/src/components/ui/entity-action-columns.tsx index 65073395..50e15974 100644 --- a/src/components/ui/entity-action-columns.tsx +++ b/src/components/ui/entity-action-columns.tsx @@ -1,15 +1,34 @@ -import type {ColumnDef, Table} from "@tanstack/react-table"; +import type {ColumnDef} from "@tanstack/react-table"; import {Checkbox} from "@/components/ui/checkbox.tsx"; import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; -import {Button} from "@/components/ui/button.tsx"; -import {LoaderCircle, LoaderCircleIcon, Trash, TrashIcon, ViewIcon} from "lucide-react"; +import {Button, buttonVariants} from "@/components/ui/button.tsx"; +import {EyeIcon, LoaderCircleIcon, ScanSearchIcon, TrashIcon} from "lucide-react"; import {useLazyQuery, useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; import {useNavigate, useParams} from "react-router"; import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; -import {Exact, GetRqJobListQuery, Scalars} from "@/__generated__/graphql.ts"; +import { + Exact, + GetRqJobListQuery, + Scalars, + ScanApksByFirmwareObjectIdsMutation, + ScanApksByObjectIdsMutation +} from "@/__generated__/graphql.ts"; import {TypedDocumentNode} from "@graphql-typed-document-node/core"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger +} from "@/components/ui/dialog.tsx"; +import * as React from "react"; +import type {VariantProps} from "class-variance-authority"; +import {cn} from "@/lib/utils.ts"; +import {Scanner, ScannersTable} from "@/components/ui/scanners-table.tsx"; +import {useState} from "react"; type WithId = { id: string }; type WithTypenameMutation = { __typename?: "Mutation" }; @@ -40,88 +59,53 @@ function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery return (ongoingDeletionJobs?.length ?? 0) > 0; } -function DeleteSelectedButton( +function ActionButton( { - tooltip, - table, - deleteMutation, - }: Readonly<{ - tooltip: string; - table: Table; - deleteMutation: TypedDocumentNode | Scalars["String"]["input"] - }>>; - }>, -) { - const selectedObjectIds = table.getSelectedRowModel().rows.map((row) => convertIdToObjectId(row.original.id)); - const [deleteEntities] = useMutation(deleteMutation, { - variables: {objectIds: selectedObjectIds}, - }); - - const [getRqJobList, {data: rqJobListData}] = useLazyQuery(GET_RQ_JOB_LIST, { - fetchPolicy: "cache-and-network", - pollInterval: 5000, - }); - - if (isDeletionOngoing(selectedObjectIds, rqJobListData)) { - return ( - - ); - } - - const disabled = selectedObjectIds.length === 0; - + className, + variant, + asChild = false, + ...props + }: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { return ( - - - - - -

{tooltip}

-
-
- ) + + ); } -function DeleteRowButton( +function DeleteEntityButton( { + ids, tooltip, - id, deleteMutation, }: Readonly<{ + ids: string[]; tooltip: string; - id: string; deleteMutation: TypedDocumentNode | Scalars["String"]["input"] }>>; }>, ) { - const objectId = convertIdToObjectId(id); - const [deleteEntity] = useMutation( - deleteMutation, { - variables: { - objectIds: objectId, - } - } - ); + const objectIds = ids.map(id => convertIdToObjectId(id)); + const [deleteEntities] = useMutation(deleteMutation, { + variables: {objectIds: objectIds}, + }); const [getRqJobList, {data: rqJobListData}] = useLazyQuery(GET_RQ_JOB_LIST, { fetchPolicy: "cache-and-network", pollInterval: 5000, }); - if (isDeletionOngoing([objectId], rqJobListData)) { + if (isDeletionOngoing(objectIds, rqJobListData)) { return (
- +
); } @@ -129,18 +113,22 @@ function DeleteRowButton( return ( - + { + void deleteEntities(); + void getRqJobList(); + }} + > + +

{tooltip}

- ); + ) } function buildSelectEntityColumn(): ColumnDef { @@ -191,7 +179,7 @@ function buildViewEntityColumn( return ( - + +

{tooltip}

@@ -224,26 +212,128 @@ function buildDeleteEntityColumn tooltip={tooltipSelected} table={table} - deleteMutation={deleteMutation}/>, - cell: ({row}) => , + header: ({table}) => + + ids={table.getSelectedRowModel().flatRows.map(row => row.original.id)} + tooltip={tooltipSelected} + deleteMutation={deleteMutation} + />, + cell: ({row}) => + + } + ); +} + +function ScanAppButton( + { + ids, + tooltip, + mutation, + }: Readonly<{ + ids: string[]; + tooltip: string; + mutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + }>>; + }> +) { + const [selectedScanners, setSelectedScanners] = useState([]); + const [scanApk] = useMutation(mutation); + const navigate = useNavigate(); + + return ( + + + + + + + + + +

{tooltip}

+
+
+
+ + + Select Scanner(s) + + + + + + +
+ ); +} + +function buildScanAppColumn( + tooltipSingle: string, + tooltipSelected: string, + mutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + }>>, +): ColumnDef { + return ( + { + id: "scan", + header: ({table}) => + row.original.id)} + tooltip={tooltipSelected} + mutation={mutation} + />, + cell: ({row}) => + , } ); } -function buildFirmwareActionColumns(): ColumnDef[] { +function buildFirmwareActionColumns( + mutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + }>>, +): ColumnDef[] { return [ buildSelectEntityColumn(), buildViewEntityColumn("View firmware", "/firmwares"), + buildScanAppColumn("Scan all apps of this firmware", "Scan all apps of selected firmwares", mutation), buildDeleteEntityColumn("Delete firmware", "Delete selected firmwares", DELETE_FIRMWARE_BY_OBJECT_ID), ]; } -function buildAppActionColumns(): ColumnDef[] { +function buildAppActionColumns( + mutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + }>>, +): ColumnDef [] { return [ buildSelectEntityColumn(), buildViewEntityColumn("View app", "/apps"), + buildScanAppColumn("Scan app", "Scan selected apps", mutation), ]; } diff --git a/src/components/ui/importer/dropzone.tsx b/src/components/ui/importer/dropzone.tsx index 7becd64b..cc50278e 100644 --- a/src/components/ui/importer/dropzone.tsx +++ b/src/components/ui/importer/dropzone.tsx @@ -5,7 +5,6 @@ import {cn} from "@/lib/utils.ts"; import {useAuth} from "@/lib/auth.tsx"; import {Progress} from "@/components/ui/progress.tsx"; import { - CircleAlertIcon, CircleCheckBigIcon, CloudAlertIcon, LoaderCircleIcon, @@ -14,15 +13,14 @@ import { } from "lucide-react"; import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table.tsx"; -import {ApolloQueryResult, useMutation, useQuery} from "@apollo/client"; +import {useMutation} from "@apollo/client"; import { CREATE_FIRMWARE_EXTRACTOR_JOB, } from "@/components/graphql/firmware.graphql.ts"; import {Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle,} from "@/components/ui/dialog.tsx"; import {Button} from "@/components/ui/button.tsx"; -import {Exact, GetRqJobListQuery} from "@/__generated__/graphql.ts"; -import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; import {CREATE_APP_IMPORT_JOB} from "@/components/graphql/app.graphql.ts"; +import {RqJobsTable} from "@/components/ui/rq-jobs-table.tsx"; type DropzoneProps = { className?: string; @@ -54,14 +52,11 @@ const makeUploadId = (file: File) => `${file.name}:${file.size.toString()}:${fil const getUploadType = (file: File): UploadType => file.type === MIME_TYPE_APK ? "apk" : "firmware"; -function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload, refetchRqJobList}: Readonly<{ +function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload}: Readonly<{ storageIndex: number; fileUploads: FileUpload[]; setFileUploads: Dispatch>; removeUpload: (id: string) => void; - refetchRqJobList: (variables?: (Partial>)) => Promise>; }>) { const cancelUpload = (upload: FileUpload) => { if (upload.xhr) { @@ -175,8 +170,7 @@ function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload, void createAppImportJob({variables: {storageIndex}}); } - setFileUploads(prev => prev.map(upload => ({...upload, importStarted: true}))) - void refetchRqJobList(); + setFileUploads(prev => prev.map(upload => ({...upload, importStarted: true}))); }}> Import @@ -186,31 +180,6 @@ function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload, ); } -function JobStatus({status, isFinished, isFailed}: Readonly<{ - status: string; - isFinished?: boolean | null; - isFailed?: boolean | null; -}>) { - if (isFinished) { - return ( - - ); - } - - if (isFailed) { - return ( - - ); - } - - return ( - <> - - {status} - - ); -} - export function Dropzone( { className = "", @@ -220,18 +189,6 @@ export function Dropzone( ) { const {getToken} = useAuth(); const [fileUploads, setFileUploads] = useState([]); - const {data: rqJobListData, refetch: refetchRqJobList} = useQuery(GET_RQ_JOB_LIST, { - fetchPolicy: "cache-and-network", - pollInterval: 10000, - }); - - const importJobs = rqJobListData?.rq_job_list - ?.filter(job => - job?.funcName === FIRMWARE_IMPORT_JOB_FUNC_NAME || - job?.funcName === APP_IMPORT_JOB_FUNC_NAME - ) - .sort((a, b) => new Date(b?.startedAt).getTime() - new Date(a?.startedAt).getTime()); - const updateUpload = useCallback((id: string, patch: Partial) => { setFileUploads(prev => prev.map(upload => (upload.id === id ? {...upload, ...patch} : upload))); @@ -325,57 +282,8 @@ export function Dropzone( fileUploads={fileUploads} setFileUploads={setFileUploads} removeUpload={removeUpload} - refetchRqJobList={refetchRqJobList} /> - {importJobs && importJobs.length > 0 && ( - - - - Job ID - Started At - Type - Status - - - - {importJobs.map((job) => { - if (job) { - return ( - - - {job.id} - - - {job.startedAt} - - - {job.funcName === FIRMWARE_IMPORT_JOB_FUNC_NAME && ( - Firmware - )} - {job.funcName === APP_IMPORT_JOB_FUNC_NAME && ( - APK - )} - - -
- {job.status ? ( - - ) : ( - <> - - Unknown status - - )} -
-
-
- ); - } - })} -
-
- )} +
); } \ No newline at end of file diff --git a/src/components/ui/resizable.tsx b/src/components/ui/resizable.tsx deleted file mode 100644 index fe0ebbde..00000000 --- a/src/components/ui/resizable.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import * as React from "react" -import { GripVerticalIcon } from "lucide-react" -import * as ResizablePrimitive from "react-resizable-panels" - -import { cn } from "@/lib/utils" - -function ResizablePanelGroup({ - className, - ...props -}: React.ComponentProps) { - return ( - - ) -} - -function ResizablePanel({ - ...props -}: React.ComponentProps) { - return -} - -function ResizableHandle({ - withHandle, - className, - ...props -}: React.ComponentProps & { - withHandle?: boolean -}) { - return ( - div]:rotate-90", - className - )} - {...props} - > - {withHandle && ( -
- -
- )} -
- ) -} - -export { ResizablePanelGroup, ResizablePanel, ResizableHandle } diff --git a/src/components/ui/rq-jobs-table.tsx b/src/components/ui/rq-jobs-table.tsx new file mode 100644 index 00000000..3dc2ce8e --- /dev/null +++ b/src/components/ui/rq-jobs-table.tsx @@ -0,0 +1,97 @@ +import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table.tsx"; +import {CircleAlertIcon, CircleCheckBigIcon, LoaderCircleIcon} from "lucide-react"; +import {useQuery} from "@apollo/client"; +import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; +import {cn} from "@/lib/utils.ts"; + +function JobStatus({status, isFinished, isFailed}: Readonly<{ + status: string; + isFinished?: boolean | null; + isFailed?: boolean | null; +}>) { + if (isFinished) { + return ( + + ); + } + + if (isFailed) { + return ( + + ); + } + + return ( + <> + + {status} + + ); +} + +export function RqJobsTable( + { + className, + funcNames, + }: Readonly<{ + className?: string; + funcNames: string[]; + }> +) { + const {data: rqJobListData} = useQuery(GET_RQ_JOB_LIST, { + fetchPolicy: "cache-and-network", + pollInterval: 10000, + }); + + const importJobs = rqJobListData?.rq_job_list + ?.filter(job => funcNames.some(funcName => funcName === job?.funcName)) + .sort((a, b) => new Date(b?.startedAt).getTime() - new Date(a?.startedAt).getTime()); + + return ( + + + + Job ID + Started At + Status + + + + {importJobs?.map((job) => { + if (job) { + return ( + + + {job.id} + + + {job.startedAt} + + +
+ {job.status ? ( + + ) : ( + <> + + Unknown status + + )} +
+
+
+ ); + } + })} + {!importJobs || importJobs.length <= 0 && ( + + + No recent jobs found. + + + )} +
+
+ ); +} \ No newline at end of file diff --git a/src/components/ui/scanners-table.tsx b/src/components/ui/scanners-table.tsx new file mode 100644 index 00000000..dd09a4c9 --- /dev/null +++ b/src/components/ui/scanners-table.tsx @@ -0,0 +1,43 @@ +import {ColumnDef} from "@tanstack/react-table"; +import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; +import {buildSelectEntityColumn} from "@/components/ui/entity-action-columns.tsx"; +import React from "react"; +import {useQuery} from "@apollo/client"; +import {GET_SCANNER_MODULE_NAMES} from "@/components/graphql/app.graphql.ts"; + +export type Scanner = { + id: string; +} + +const columns: ColumnDef[] = [ + buildSelectEntityColumn(), + { + accessorKey: "id", + header: "Module", + }, +]; + +type ScannersTableProps = { + setSelectedScanners: React.Dispatch> +} + +export function ScannersTable( + { + setSelectedScanners, + }: Readonly +) { + const {data} = useQuery(GET_SCANNER_MODULE_NAMES); + const scanners: Scanner[] = ( + data?.scanner_module_name_list?.filter((moduleName): moduleName is string => moduleName != null) ?? [] + ).map((moduleName: string) => ({id: moduleName})); + + return ( + { + setSelectedScanners(selectedRows); + }} + /> + ); +} diff --git a/src/components/ui/sidebar/app-sidebar.tsx b/src/components/ui/sidebar/app-sidebar.tsx index 215b166b..2468c301 100644 --- a/src/components/ui/sidebar/app-sidebar.tsx +++ b/src/components/ui/sidebar/app-sidebar.tsx @@ -1,11 +1,12 @@ import * as React from "react" import { - BookOpen, - Bug, - Cpu, - Import, - ScanEye, - Smartphone, Square, + BookOpenIcon, + BugIcon, + CpuIcon, + ImportIcon, + ScanSearchIcon, + SmartphoneIcon, + SquareIcon, } from "lucide-react" import {NavAnalyses} from "@/components/ui/sidebar/nav-analyses.tsx" @@ -28,41 +29,41 @@ const data = { { title: "Importer", url: "/importer", - icon: Import, + icon: ImportIcon, }, { title: "Scanner", url: "/scanner", - icon: ScanEye, + icon: ScanSearchIcon, }, { title: "Emulator", url: "/emulator", - icon: Smartphone, + icon: SmartphoneIcon, }, ], analyses: [ { name: "Firmwares", url: "/firmwares", - icon: Cpu, + icon: CpuIcon, }, { name: "Apps", url: "/apps", - icon: Square, + icon: SquareIcon, }, { name: "Reports", url: "/reports", - icon: BookOpen, + icon: BookOpenIcon, }, ], options: [ { title: "Report Bug", url: "https://github.com/FirmwareDroid/FirmwareDroid/issues/new", - icon: Bug, + icon: BugIcon, }, ], } @@ -86,7 +87,7 @@ export function AppSidebar({...props}: React.ComponentProps) {
- + FMD
@@ -101,7 +102,7 @@ export function AppSidebar({...props}: React.ComponentProps) { - + diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index 69f3e4a2..072395fc 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -16,7 +16,7 @@ import { TableRow, } from "@/components/ui/table.tsx" import {Button} from "@/components/ui/button.tsx"; -import {useState} from "react"; +import {useEffect, useRef, useState} from "react"; import { DropdownMenu, DropdownMenuCheckboxItem, @@ -35,6 +35,7 @@ interface DataTableProps { className?: string; columns: ColumnDef[]; data: TData[]; + onRowSelectionChange?: (selectedRows: TData[]) => void; } function DataTable( @@ -42,6 +43,7 @@ function DataTable( className, columns, data, + onRowSelectionChange, }: Readonly> ) { const [sorting, setSorting] = useState([]); @@ -54,6 +56,7 @@ function DataTable( columns, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), + enableRowSelection: true, onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), onColumnVisibilityChange: setColumnVisibility, @@ -65,6 +68,17 @@ function DataTable( }, }); + const onRowSelectionChangeRef = useRef(onRowSelectionChange); + useEffect(() => { + onRowSelectionChangeRef.current = onRowSelectionChange; + }, [onRowSelectionChange]); + + useEffect(() => { + if (!onRowSelectionChangeRef.current) return; + const selectedRows = table.getSelectedRowModel().flatRows.map(row => row.original); + onRowSelectionChangeRef.current(selectedRows); + }, [rowSelection]); // Ignore ESLint here, we need the effect whenever row selection changes + return (
@@ -162,11 +176,16 @@ function ScrollableDataTable( { columns, data, + onRowSelectionChange, }: Readonly> ) { return ( - + ); @@ -176,15 +195,16 @@ function StateHandlingScrollableDataTable( { columns, data, + onRowSelectionChange, idsLoading, dataLoading, idsError, dataError, }: Readonly> & { idsLoading?: boolean, - dataLoading: boolean, + dataLoading?: boolean, idsError?: ApolloError, - dataError: ApolloError | undefined, + dataError?: ApolloError, } ) { return ( @@ -210,7 +230,11 @@ function StateHandlingScrollableDataTable( )} {!idsLoading && !dataLoading && !idsError && !dataError && ( - + )} ); diff --git a/src/pages/apps-page.tsx b/src/pages/apps-page.tsx index 5670eeca..eae5ddf7 100644 --- a/src/pages/apps-page.tsx +++ b/src/pages/apps-page.tsx @@ -5,12 +5,12 @@ import {useFragment} from "@/__generated__"; import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {BasePage} from "@/pages/base-page.tsx"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {APP_ALL, GET_APPS_BY_FIRMWARE_OBJECT_IDS} from "@/components/graphql/app.graphql.ts"; +import {APP_ALL, GET_APPS_BY_FIRMWARE_OBJECT_IDS, SCAN_APKS_BY_OBJECT_IDS} from "@/components/graphql/app.graphql.ts"; import {buildAppActionColumns} from "@/components/ui/entity-action-columns.tsx"; import {useParams} from "react-router"; const columns: ColumnDef[] = [ - ...buildAppActionColumns(), + ...buildAppActionColumns(SCAN_APKS_BY_OBJECT_IDS), { accessorKey: "id", header: "ID", diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index 5d9d8567..d03c485c 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -5,14 +5,14 @@ import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useQuery} from "@apollo/client"; import { FIRMWARE_ALL, - GET_FIRMWARES_BY_OBJECT_IDS, + GET_FIRMWARES_BY_OBJECT_IDS, SCAN_APKS_BY_FIRMWARE_OBJECT_IDS, } from "@/components/graphql/firmware.graphql.ts"; import {buildFirmwareActionColumns} from "@/components/ui/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {useFragment} from "@/__generated__"; const columns: ColumnDef[] = [ - ...buildFirmwareActionColumns(), + ...buildFirmwareActionColumns(SCAN_APKS_BY_FIRMWARE_OBJECT_IDS), { accessorKey: "id", header: "ID", diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 17798fd0..b6621943 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -4,7 +4,7 @@ import {Dropzone} from "@/components/ui/importer/dropzone.tsx"; import {Separator} from "@/components/ui/separator.tsx"; import {useQuery} from "@apollo/client"; import { - FIRMWARE_ROW_IMPORTER_PAGE, GET_FIRMWARES_IMPORTER_PAGE, + FIRMWARE_ROW_IMPORTER_PAGE, GET_FIRMWARES_IMPORTER_PAGE, SCAN_APKS_BY_FIRMWARE_OBJECT_IDS, } from "@/components/graphql/firmware.graphql.ts"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; import {useFragment} from "@/__generated__"; @@ -43,7 +43,7 @@ export function ImporterPage() { } const columns: ColumnDef[] = [ - ...buildFirmwareActionColumns(), + ...buildFirmwareActionColumns(SCAN_APKS_BY_FIRMWARE_OBJECT_IDS), { accessorKey: "id", header: "ID", diff --git a/src/pages/scanner-page.tsx b/src/pages/scanner-page.tsx index 185a8aee..72a031d2 100644 --- a/src/pages/scanner-page.tsx +++ b/src/pages/scanner-page.tsx @@ -1,170 +1,27 @@ import {BasePage} from "@/pages/base-page.tsx"; -import {ResizableHandle, ResizablePanel, ResizablePanelGroup} from "@/components/ui/resizable.tsx"; -import {TypographyH4} from "@/components/ui/typography/headings.tsx"; -import {CheckboxForm} from "@/components/ui/checkbox-form.tsx"; -import {ColumnDef} from "@tanstack/react-table"; -import {Checkbox} from "@/components/ui/checkbox.tsx"; -import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {useQuery} from "@apollo/client"; -import { - FIRMWARE_ROW_SCANNER_PAGE, - GET_FIRMWARES_SCANNER_PAGE, -} from "@/components/graphql/firmware.graphql.ts"; -import { - AppRowScannerPageFragment, - FirmwareRowScannerPageFragment, -} from "@/__generated__/graphql.ts"; -import {useFragment} from "@/__generated__"; -import { - APP_ROW_SCANNER_PAGE, - GET_APPS_SCANNER_PAGE -} from "@/components/graphql/app.graphql.ts"; -import {buildSelectEntityColumn} from "@/components/ui/entity-action-columns.tsx"; -import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {RqJobsTable} from "@/components/ui/rq-jobs-table.tsx"; +import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon} from "lucide-react"; +import {useNavigate} from "react-router"; export function ScannerPage() { - return ( - - - - - - - - - - - - - - - - ); -} - -function FirmwaresPanel() { - const columns: ColumnDef[] = [ - buildSelectEntityColumn(), - { - accessorKey: "id", - header: "ID", - }, - { - accessorKey: "originalFilename", - header: "Original Filename", - }, - ]; - - const { - loading: firmwaresLoading, - error: firmwaresError, - data: firmwaresData, - } = useQuery(GET_FIRMWARES_SCANNER_PAGE); - - const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map(edge => useFragment(FIRMWARE_ROW_SCANNER_PAGE, edge?.node)) - .filter(isNonNullish) + const navigate = useNavigate(); return ( -
- Firmwares - -
- ); -} - -function AppsPanel() { - const columns: ColumnDef[] = [ - { - id: "select", - header: ({table}) => ( - { - table.toggleAllPageRowsSelected(!!value); - }} - aria-label="Select all" - /> - ), - cell: ({row}) => ( - { - row.toggleSelected(!!value); - }} - aria-label="Select row" - /> - ), - }, - { - accessorKey: "id", - header: "ID", - } - ]; - - const { - loading: appsLoading, - error: appsError, - data: appsData, - } = useQuery(GET_APPS_SCANNER_PAGE); - - const apps = (appsData?.android_firmware_connection?.edges ?? []) - .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) - // eslint-disable-next-line react-hooks/rules-of-hooks - .map(edge => useFragment(APP_ROW_SCANNER_PAGE, edge?.node)) - .filter(isNonNullish) - - return ( -
- Apps - -
+ + + + + If you wish to start new scans, navigate to the + void navigate("/firmwares")} className="text-blue-600 hover:underline cursor-pointer">Firmwares + or + void navigate("/apps")} className="text-blue-600 hover:underline cursor-pointer">Apps + page. + + +
+ +
+
); } - -function ScannersPanel() { - const scanners = [ - "AndroGuard", - "APKiD", - "APKLeaks", - "APKscan", - "Exodus-Core", - "FlowDroid", - "MobSFScan", - "Trueseeing", - "Quark-Engine", - "Qark", - "Androwarn", - "SUPER Android Analyzer", - ]; - - return ( -
- Scanners - ({ - id: scanner, - label: scanner, - }))} - validateOnMount={true} - validationMode="onChange" - /> -
- ); -} \ No newline at end of file From 9de7154d1995a78ae11045c1488eb31cd455edbf Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Fri, 3 Oct 2025 15:56:19 +0200 Subject: [PATCH 21/31] Add firmware reference button to app page --- src/__generated__/gql.ts | 6 ++--- src/__generated__/graphql.ts | 8 +++--- src/components/graphql/app.graphql.ts | 4 +++ src/components/ui/entity-table.tsx | 39 ++++++++++++++------------- src/pages/app-page.tsx | 28 +++++++++++++++++-- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 6aaa497c..4b8e79f0 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -16,7 +16,7 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, - "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": typeof types.AppAllFragmentDoc, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n": typeof types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": typeof types.GetScannerModuleNamesDocument, @@ -37,7 +37,7 @@ type Documents = { const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, - "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n": types.AppAllFragmentDoc, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n": types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": types.GetScannerModuleNamesDocument, @@ -81,7 +81,7 @@ export function gql(source: "\n mutation CreateAppImportJob($storageIndex: In /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n"): (typeof documents)["\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n }\n"]; +export function gql(source: "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n"): (typeof documents)["\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index c21bf748..e9e0ea3b 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2133,7 +2133,7 @@ export type CreateAppImportJobMutationVariables = Exact<{ export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; -export type AppAllFragment = { __typename?: 'AndroidAppType', absoluteStorePath?: string | null, androidManifestDict?: any | null, fileSizeBytes: number, filename: string, id: string, indexedDate?: any | null, md5: string, originalFilename?: string | null, packagename?: string | null, partitionName?: string | null, pk?: string | null, relativeFirmwarePath: string, relativeStorePath?: string | null, sha1: string, sha256: string } & { ' $fragmentName'?: 'AppAllFragment' }; +export type AppAllFragment = { __typename?: 'AndroidAppType', absoluteStorePath?: string | null, androidManifestDict?: any | null, fileSizeBytes: number, filename: string, id: string, indexedDate?: any | null, md5: string, originalFilename?: string | null, packagename?: string | null, partitionName?: string | null, pk?: string | null, relativeFirmwarePath: string, relativeStorePath?: string | null, sha1: string, sha256: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } | null } & { ' $fragmentName'?: 'AppAllFragment' }; export type GetAppsByFirmwareObjectIdsQueryVariables = Exact<{ objectIds?: InputMaybe | Scalars['String']['input']>; @@ -2240,13 +2240,13 @@ export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; -export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; +export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; -export const GetAppsByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}}]}}]} as unknown as DocumentNode; +export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; +export const GetAppsByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; export const GetScannerModuleNamesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetScannerModuleNames"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scanner_module_name_list"}}]}}]} as unknown as DocumentNode; export const ScanApksByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index d4df723d..cbe7df81 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -36,6 +36,10 @@ export const APP_ALL = gql(` relativeStorePath sha1 sha256 + firmwareIdReference { + id + originalFilename + } } `); diff --git a/src/components/ui/entity-table.tsx b/src/components/ui/entity-table.tsx index e56647d2..7b5379e6 100644 --- a/src/components/ui/entity-table.tsx +++ b/src/components/ui/entity-table.tsx @@ -12,26 +12,29 @@ export function EntityTable( return ( - {Object.entries(entity).map(([key, value]) => ( - - {key} - - {(() => { - let displayValue = value; + {Object.entries(entity) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .filter(([_, value]) => !value || typeof value !== "object") // show object if it's null, otherwise we don't display objects + .map(([key, value]) => ( + + {key} + + {(() => { + let displayValue = value; - try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const parsed = JSON.parse(value); - displayValue = JSON.stringify(parsed, null, 2); - } catch { - // ignore, we leave it as string if parsing fails - } + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const parsed = JSON.parse(value); + displayValue = JSON.stringify(parsed, null, 2); + } catch { + // ignore, we leave it as string if parsing fails + } - return displayValue; - })()} - - - ))} + return displayValue; + })()} + + + ))}
); diff --git a/src/pages/app-page.tsx b/src/pages/app-page.tsx index b105a6b7..af5a0c4c 100644 --- a/src/pages/app-page.tsx +++ b/src/pages/app-page.tsx @@ -1,17 +1,19 @@ -import {useParams} from "react-router"; +import {useNavigate, useParams} from "react-router"; import {BasePage} from "@/pages/base-page.tsx"; import {useQuery} from "@apollo/client"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {APP_ALL, GET_APP_BY_ID} from "@/components/graphql/app.graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon} from "lucide-react"; +import {AlertCircleIcon, CpuIcon} from "lucide-react"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {AppAllFragment} from "@/__generated__/graphql.ts"; import {EntityTable} from "@/components/ui/entity-table.tsx"; +import {Button} from "@/components/ui/button.tsx"; export function AppPage() { const {appId} = useParams<{ appId: string }>(); + const navigate = useNavigate(); const { loading: appsLoading, @@ -51,6 +53,17 @@ export function AppPage() { return ( +
+ +
); @@ -66,4 +79,15 @@ export function AppPage() { ); } + + if (apps.length > 1) { + return ( + + + + Found multiple apps with ID '{appId}'. + + + ); + } } \ No newline at end of file From 858bed2796309f5b4e373d09efa3bda9b2713f30 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Wed, 8 Oct 2025 14:55:34 +0200 Subject: [PATCH 22/31] Add file page * Add file page * Link app from file and vice versa --- src/__generated__/gql.ts | 30 ++++-- src/__generated__/graphql.ts | 37 +++++-- src/app.tsx | 11 +- src/components/graphql/app.graphql.ts | 6 +- src/components/graphql/file.graphql.ts | 61 ++++++++++++ src/components/ui/entity-action-columns.tsx | 40 +++++--- src/pages/app-page.tsx | 8 +- src/pages/apps-page.tsx | 19 ++-- src/pages/file-page.tsx | 93 +++++++++++++++++ src/pages/files-page.tsx | 105 ++++++++++++++++++++ src/pages/firmware-page.tsx | 7 +- src/pages/firmwares-page.tsx | 10 +- src/pages/not-found-page.tsx | 5 + 13 files changed, 384 insertions(+), 48 deletions(-) create mode 100644 src/components/graphql/file.graphql.ts create mode 100644 src/pages/file-page.tsx create mode 100644 src/pages/files-page.tsx create mode 100644 src/pages/not-found-page.tsx diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 4b8e79f0..3c24fc06 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -16,15 +16,18 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, - "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n": typeof types.AppAllFragmentDoc, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n": typeof types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByFirmwareObjectIdsDocument, - "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByIdDocument, + "\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": typeof types.GetScannerModuleNamesDocument, "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": typeof types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, + "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": typeof types.FileAllFragmentDoc, + "\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetFilesByFirmwareObjectIdsDocument, + "\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetFileByIdDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": typeof types.FirmwareAllFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, @@ -37,15 +40,18 @@ type Documents = { const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, - "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n": types.AppAllFragmentDoc, + "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n": types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByFirmwareObjectIdsDocument, - "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByIdDocument, + "\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": types.GetScannerModuleNamesDocument, "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, + "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": types.FileAllFragmentDoc, + "\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetFilesByFirmwareObjectIdsDocument, + "\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetFileByIdDocument, "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": types.FirmwareAllFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, @@ -81,7 +87,7 @@ export function gql(source: "\n mutation CreateAppImportJob($storageIndex: In /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n"): (typeof documents)["\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n originalFilename\n }\n }\n"]; +export function gql(source: "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n"): (typeof documents)["\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -89,7 +95,7 @@ export function gql(source: "\n query GetAppsByFirmwareObjectIds($objectIds: /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppsById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"]; +export function gql(source: "\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -114,6 +120,18 @@ export function gql(source: "\n query GetCurrentUserId {\n me {\n * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql(source: "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"): (typeof documents)["\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"): (typeof documents)["\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index e9e0ea3b..01f628eb 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2133,7 +2133,7 @@ export type CreateAppImportJobMutationVariables = Exact<{ export type CreateAppImportJobMutation = { __typename?: 'Mutation', createAppImportJob?: { __typename?: 'CreateAppImportJob', jobId?: string | null } | null }; -export type AppAllFragment = { __typename?: 'AndroidAppType', absoluteStorePath?: string | null, androidManifestDict?: any | null, fileSizeBytes: number, filename: string, id: string, indexedDate?: any | null, md5: string, originalFilename?: string | null, packagename?: string | null, partitionName?: string | null, pk?: string | null, relativeFirmwarePath: string, relativeStorePath?: string | null, sha1: string, sha256: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string, originalFilename: string } | null } & { ' $fragmentName'?: 'AppAllFragment' }; +export type AppAllFragment = { __typename?: 'AndroidAppType', absoluteStorePath?: string | null, androidManifestDict?: any | null, fileSizeBytes: number, filename: string, id: string, indexedDate?: any | null, md5: string, originalFilename?: string | null, packagename?: string | null, partitionName?: string | null, pk?: string | null, relativeFirmwarePath: string, relativeStorePath?: string | null, sha1: string, sha256: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null, firmwareFileReference?: { __typename?: 'FirmwareFileType', id: string } | null } & { ' $fragmentName'?: 'AppAllFragment' }; export type GetAppsByFirmwareObjectIdsQueryVariables = Exact<{ objectIds?: InputMaybe | Scalars['String']['input']>; @@ -2145,12 +2145,12 @@ export type GetAppsByFirmwareObjectIdsQuery = { __typename?: 'Query', android_fi & { ' $fragmentRefs'?: { 'AppAllFragment': AppAllFragment } } ) | null } | null> } | null } | null } | null> } | null }; -export type GetAppsByIdQueryVariables = Exact<{ +export type GetAppByIdQueryVariables = Exact<{ id: Scalars['ID']['input']; }>; -export type GetAppsByIdQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( +export type GetAppByIdQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', androidAppIdList?: { __typename?: 'AndroidAppTypeConnection', edges: Array<{ __typename?: 'AndroidAppTypeEdge', node?: ( { __typename?: 'AndroidAppType' } & { ' $fragmentRefs'?: { 'AppAllFragment': AppAllFragment } } ) | null } | null> } | null } | null } | null> } | null }; @@ -2191,6 +2191,28 @@ export type GetCurrentUserEmailAndUsernameQueryVariables = Exact<{ [key: string] export type GetCurrentUserEmailAndUsernameQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, username: string } | null }; +export type FileAllFragment = { __typename?: 'FirmwareFileType', id: string, name: string, absoluteStorePath: string, indexedDate?: any | null, isDirectory: boolean, isOnDisk?: boolean | null, isSymlink?: boolean | null, md5?: string | null, metaDict?: any | null, parentDir: string, partitionName?: string | null, relativePath: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null, androidAppReference?: { __typename?: 'AndroidAppType', id: string } | null } & { ' $fragmentName'?: 'FileAllFragment' }; + +export type GetFilesByFirmwareObjectIdsQueryVariables = Exact<{ + objectIds?: InputMaybe | Scalars['String']['input']>; +}>; + + +export type GetFilesByFirmwareObjectIdsQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', firmwareFileIdList?: { __typename?: 'FirmwareFileTypeConnection', edges: Array<{ __typename?: 'FirmwareFileTypeEdge', node?: ( + { __typename?: 'FirmwareFileType' } + & { ' $fragmentRefs'?: { 'FileAllFragment': FileAllFragment } } + ) | null } | null> } | null } | null } | null> } | null }; + +export type GetFileByIdQueryVariables = Exact<{ + id: Scalars['ID']['input']; +}>; + + +export type GetFileByIdQuery = { __typename?: 'Query', android_firmware_connection?: { __typename?: 'AndroidFirmwareConnection', edges: Array<{ __typename?: 'AndroidFirmwareEdge', node?: { __typename?: 'AndroidFirmwareType', firmwareFileIdList?: { __typename?: 'FirmwareFileTypeConnection', edges: Array<{ __typename?: 'FirmwareFileTypeEdge', node?: ( + { __typename?: 'FirmwareFileType' } + & { ' $fragmentRefs'?: { 'FileAllFragment': FileAllFragment } } + ) | null } | null> } | null } | null } | null> } | null }; + export type CreateFirmwareExtractorJobMutationVariables = Exact<{ storageIndex: Scalars['Int']['input']; }>; @@ -2240,19 +2262,22 @@ export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; -export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; +export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const FileAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; -export const GetAppsByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}}]}}]}}]} as unknown as DocumentNode; +export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const GetAppByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetScannerModuleNamesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetScannerModuleNames"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scanner_module_name_list"}}]}}]} as unknown as DocumentNode; export const ScanApksByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; +export const GetFilesByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFilesByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const GetFileByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFileById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareAll"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresImporterPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresImporterPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowImporterPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; diff --git a/src/app.tsx b/src/app.tsx index b8d2ca2e..7a919e8c 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,4 +1,4 @@ -import {Navigate, Route, Routes} from "react-router"; +import {Route, Routes} from "react-router"; import LoginPage from "@/pages/login-page.tsx"; import PublicOnlyRoute from "@/routes/public-only-route.tsx"; import ProtectedLayout from "@/routes/protected-layout.tsx"; @@ -10,6 +10,9 @@ import {FirmwaresPage} from "@/pages/firmwares-page.tsx"; import {FirmwarePage} from "@/pages/firmware-page.tsx"; import {AppsPage} from "@/pages/apps-page.tsx"; import {AppPage} from "@/pages/app-page.tsx"; +import {FilePage} from "@/pages/file-page.tsx"; +import {FilesPage} from "@/pages/files-page.tsx"; +import {NotFoundPage} from "@/pages/not-found-page.tsx"; function App() { return ( @@ -27,10 +30,10 @@ function App() { }/> }/> }/> + }/> + }/> }/> - }/> - }/> - {/*}/>*/} {/*TOOD: Add 404 page?*/} + }/> ); diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index cbe7df81..f27ed5b6 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -38,7 +38,9 @@ export const APP_ALL = gql(` sha256 firmwareIdReference { id - originalFilename + } + firmwareFileReference { + id } } `); @@ -62,7 +64,7 @@ export const GET_APPS_BY_FIRMWARE_OBJECT_IDS = gql(` `); export const GET_APP_BY_ID = gql(` - query GetAppsById($id: ID!) { + query GetAppById($id: ID!) { android_firmware_connection { edges { node { diff --git a/src/components/graphql/file.graphql.ts b/src/components/graphql/file.graphql.ts new file mode 100644 index 00000000..ac11937a --- /dev/null +++ b/src/components/graphql/file.graphql.ts @@ -0,0 +1,61 @@ +import {gql} from "@/__generated__"; + +export const FILE_ALL = gql(` + fragment FileAll on FirmwareFileType { + id + name + absoluteStorePath +# fileSizeBytes + indexedDate + isDirectory + isOnDisk + isSymlink + md5 + metaDict + parentDir + partitionName + relativePath + firmwareIdReference { + id + } + androidAppReference { + id + } + } +`); + +export const GET_FILES_BY_FIRMWARE_OBJECT_IDS = gql(` + query GetFilesByFirmwareObjectIds($objectIds: [String!]) { + android_firmware_connection(objectIdList: $objectIds) { + edges { + node { + firmwareFileIdList { + edges { + node { + ...FileAll + } + } + } + } + } + } + } +`); + +export const GET_FILE_BY_ID = gql(` + query GetFileById($id: ID!) { + android_firmware_connection { + edges { + node { + firmwareFileIdList(id: $id) { + edges { + node { + ...FileAll + } + } + } + } + } + } + } +`); diff --git a/src/components/ui/entity-action-columns.tsx b/src/components/ui/entity-action-columns.tsx index 50e15974..9d1d32b0 100644 --- a/src/components/ui/entity-action-columns.tsx +++ b/src/components/ui/entity-action-columns.tsx @@ -6,7 +6,7 @@ import {EyeIcon, LoaderCircleIcon, ScanSearchIcon, TrashIcon} from "lucide-react import {useLazyQuery, useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; -import {useNavigate, useParams} from "react-router"; +import {useNavigate} from "react-router"; import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; import { Exact, @@ -31,6 +31,13 @@ import {Scanner, ScannersTable} from "@/components/ui/scanners-table.tsx"; import {useState} from "react"; type WithId = { id: string }; +type WithIdAndFirmwareIdReference = { + id: string; + firmwareIdReference?: { + __typename?: "AndroidFirmwareType" + id: string + } | null; +}; type WithTypenameMutation = { __typename?: "Mutation" }; const DELETION_JOB_FUNC_NAME = "api.v2.types.GenericDeletion.delete_queryset_background"; @@ -162,7 +169,7 @@ function buildSelectEntityColumn(): ColumnDef { ); } -function buildViewEntityColumn( +function buildViewEntityColumn( tooltip: string, basePath: string, ): ColumnDef { @@ -172,9 +179,8 @@ function buildViewEntityColumn( cell: ({row}) => { // eslint-disable-next-line react-hooks/rules-of-hooks const navigate = useNavigate(); - // eslint-disable-next-line react-hooks/rules-of-hooks - const {firmwareId} = useParams<{ firmwareId?: string }>(); - const rowOriginalId = row.original.id; + const entityId = row.original.id; + const firmwareId = row.original.firmwareIdReference?.id; return ( @@ -182,10 +188,10 @@ function buildViewEntityColumn( { - if (basePath === "/apps" && firmwareId) { - void navigate(`/firmwares/${firmwareId}${basePath}/${rowOriginalId}`); + if (firmwareId) { + void navigate(`/firmwares/${firmwareId}${basePath}/${entityId}`); } else { - void navigate(`${basePath}/${rowOriginalId}`); + void navigate(`${basePath}/${entityId}`); } }} > @@ -311,7 +317,7 @@ function buildScanAppColumn( } function buildFirmwareActionColumns( - mutation: TypedDocumentNode | Scalars["String"]["input"] scannerName: Scalars["String"]["input"] }>>, @@ -319,13 +325,13 @@ function buildFirmwareActionColumns( return [ buildSelectEntityColumn(), buildViewEntityColumn("View firmware", "/firmwares"), - buildScanAppColumn("Scan all apps of this firmware", "Scan all apps of selected firmwares", mutation), + buildScanAppColumn("Scan all apps of this firmware", "Scan all apps of selected firmwares", scanAppMutation), buildDeleteEntityColumn("Delete firmware", "Delete selected firmwares", DELETE_FIRMWARE_BY_OBJECT_ID), ]; } -function buildAppActionColumns( - mutation: TypedDocumentNode( + scanAppMutation: TypedDocumentNode | Scalars["String"]["input"] scannerName: Scalars["String"]["input"] }>>, @@ -333,7 +339,14 @@ function buildAppActionColumns( return [ buildSelectEntityColumn(), buildViewEntityColumn("View app", "/apps"), - buildScanAppColumn("Scan app", "Scan selected apps", mutation), + buildScanAppColumn("Scan app", "Scan selected apps", scanAppMutation), + ]; +} + +function buildFileActionColumns(): ColumnDef [] { + return [ + buildSelectEntityColumn(), + buildViewEntityColumn("View file", "/files"), ]; } @@ -343,4 +356,5 @@ export { buildDeleteEntityColumn, buildFirmwareActionColumns, buildAppActionColumns, + buildFileActionColumns, } diff --git a/src/pages/app-page.tsx b/src/pages/app-page.tsx index af5a0c4c..985f9aae 100644 --- a/src/pages/app-page.tsx +++ b/src/pages/app-page.tsx @@ -5,7 +5,7 @@ import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {APP_ALL, GET_APP_BY_ID} from "@/components/graphql/app.graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon, CpuIcon} from "lucide-react"; +import {AlertCircleIcon, FileIcon} from "lucide-react"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {AppAllFragment} from "@/__generated__/graphql.ts"; import {EntityTable} from "@/components/ui/entity-table.tsx"; @@ -55,13 +55,13 @@ export function AppPage() {
diff --git a/src/pages/apps-page.tsx b/src/pages/apps-page.tsx index eae5ddf7..7ce40a6f 100644 --- a/src/pages/apps-page.tsx +++ b/src/pages/apps-page.tsx @@ -25,11 +25,11 @@ const columns: ColumnDef[] = [ }, { accessorKey: "fileSizeBytes", - header: "File Size Bytes", + header: "File Size (Bytes)", }, { accessorKey: "filename", - header: "File name", + header: "Filename", }, { accessorKey: "indexedDate", @@ -45,7 +45,7 @@ const columns: ColumnDef[] = [ }, { accessorKey: "packagename", - header: "Package name", + header: "Package Name", }, { accessorKey: "partitionName", @@ -71,14 +71,18 @@ const columns: ColumnDef[] = [ accessorKey: "sha256", header: "SHA-256", }, + { + accessorKey: "firmwareIdReference.id", + header: "Firmware ID", + }, ]; export function AppsPage() { const {firmwareId} = useParams<{ firmwareId?: string }>(); - let objectId: string | undefined; + let firmwareObjectId: string | undefined; if (firmwareId) { - objectId = convertIdToObjectId(firmwareId); + firmwareObjectId = convertIdToObjectId(firmwareId); } const { @@ -86,14 +90,15 @@ export function AppsPage() { error: appsError, data: appsData, } = useQuery(GET_APPS_BY_FIRMWARE_OBJECT_IDS, { - variables: {objectIds: objectId} + variables: {objectIds: firmwareObjectId}, + fetchPolicy: "cache-first", }); const apps = (appsData?.android_firmware_connection?.edges ?? []) .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) // eslint-disable-next-line react-hooks/rules-of-hooks .map(edge => useFragment(APP_ALL, edge?.node)) - .filter(isNonNullish) + .filter(isNonNullish); return ( diff --git a/src/pages/file-page.tsx b/src/pages/file-page.tsx new file mode 100644 index 00000000..762a6205 --- /dev/null +++ b/src/pages/file-page.tsx @@ -0,0 +1,93 @@ +import {BasePage} from "@/pages/base-page.tsx"; +import {useNavigate, useParams} from "react-router"; +import {useQuery} from "@apollo/client"; +import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; +import {AlertCircleIcon, FileIcon} from "lucide-react"; +import {Skeleton} from "@/components/ui/skeleton.tsx"; +import {useFragment} from "@/__generated__"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {FileAllFragment} from "@/__generated__/graphql.ts"; +import {EntityTable} from "@/components/ui/entity-table.tsx"; +import {FILE_ALL, GET_FILE_BY_ID} from "@/components/graphql/file.graphql.ts"; +import {Button} from "@/components/ui/button.tsx"; + +export function FilePage() { + const {fileId} = useParams<{ fileId: string }>(); + const navigate = useNavigate(); + + const { + loading: filesLoading, + data: filesData, + } = useQuery(GET_FILE_BY_ID, { + variables: {id: fileId as string}, + skip: !fileId, + }); + + if (!fileId) { + return ( + + + + Missing File ID. + + + ); + } + + if (filesLoading) { + return ( + + + + ); + } + + const files = (filesData?.android_firmware_connection?.edges ?? []) + .flatMap(firmwareEdge => (firmwareEdge?.node?.firmwareFileIdList?.edges ?? [])) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FILE_ALL, edge?.node)) + .filter(isNonNullish) + + if (files.length === 1) { + const file: FileAllFragment = files[0]; + + return ( + +
+ +
+ +
+ ); + } + + if (files.length < 1) { + return ( + + + + Could not find an file with ID '{fileId}'. + + + ); + } + + if (files.length > 1) { + return ( + + + + Found multiple files with ID '{fileId}'. + + + ); + } +} \ No newline at end of file diff --git a/src/pages/files-page.tsx b/src/pages/files-page.tsx new file mode 100644 index 00000000..7b56994f --- /dev/null +++ b/src/pages/files-page.tsx @@ -0,0 +1,105 @@ +import {BasePage} from "@/pages/base-page.tsx"; +import {ColumnDef} from "@tanstack/react-table"; +import {FileAllFragment} from "@/__generated__/graphql.ts"; +import {useParams} from "react-router"; +import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; +import {useQuery} from "@apollo/client"; +import {useFragment} from "@/__generated__"; +import {FILE_ALL, GET_FILES_BY_FIRMWARE_OBJECT_IDS} from "@/components/graphql/file.graphql.ts"; +import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; +import {buildFileActionColumns} from "@/components/ui/entity-action-columns.tsx"; + +const columns: ColumnDef[] = [ + ...buildFileActionColumns(), + { + accessorKey: "id", + header: "ID", + }, + { + accessorKey: "name", + header: "Name", + }, + { + accessorKey: "absoluteStorePath", + header: "Absolute Store Path", + }, + // { + // accessorKey: "fileSizeBytes", + // header: "File Size (Bytes)", + // }, + { + accessorKey: "indexedDate", + header: "Indexed Date", + }, + { + accessorKey: "isDirectory", + header: "Is directory?", + }, + { + accessorKey: "isOnDisk", + header: "Is on disk?", + }, + { + accessorKey: "isSymlink", + header: "Is symlink?", + }, + { + accessorKey: "md5", + header: "MD5", + }, + { + accessorKey: "metaDict", + header: "Meta Dict", + }, + { + accessorKey: "parentDir", + header: "Parent Directory", + }, + { + accessorKey: "partitionName", + header: "Partition Name", + }, + { + accessorKey: "relativePath", + header: "Relative Path", + }, + { + accessorKey: "firmwareIdReference.id", + header: "Firmware ID", + }, +]; + +export function FilesPage() { + const {firmwareId} = useParams<{ firmwareId?: string }>(); + + let firmwareObjectId: string | undefined; + if (firmwareId) { + firmwareObjectId = convertIdToObjectId(firmwareId); + } + + const { + loading: filesLoading, + error: filesError, + data: filesData, + } = useQuery(GET_FILES_BY_FIRMWARE_OBJECT_IDS, { + variables: {objectIds: firmwareObjectId}, + fetchPolicy: "cache-first", + }); + + const files = (filesData?.android_firmware_connection?.edges ?? []) + .flatMap(firmwareEdge => (firmwareEdge?.node?.firmwareFileIdList?.edges ?? [])) + // eslint-disable-next-line react-hooks/rules-of-hooks + .map(edge => useFragment(FILE_ALL, edge?.node)) + .filter(isNonNullish); + + return ( + + + + ); +} \ No newline at end of file diff --git a/src/pages/firmware-page.tsx b/src/pages/firmware-page.tsx index 026dd136..1fc53eb2 100644 --- a/src/pages/firmware-page.tsx +++ b/src/pages/firmware-page.tsx @@ -5,7 +5,7 @@ import {FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/fi import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon, FileIcon, SquareIcon} from "lucide-react"; +import {AlertCircleIcon, FilesIcon, SquareIcon} from "lucide-react"; import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {EntityTable} from "@/components/ui/entity-table.tsx"; @@ -63,8 +63,11 @@ export function FirmwarePage() {
diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index d03c485c..3516a958 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -27,15 +27,15 @@ const columns: ColumnDef[] = [ }, { accessorKey: "filename", - header: "File name", + header: "Filename", }, { accessorKey: "hasFileIndex", - header: "Has File Index", + header: "Has file index?", }, { accessorKey: "hasFuzzyHashIndex", - header: "Has Fuzzy Hash Index", + header: "Has fuzzy hash index?", }, { accessorKey: "indexedDate", @@ -84,7 +84,9 @@ export function FirmwaresPage() { loading: firmwaresLoading, error: firmwaresError, data: firmwaresData, - } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS); + } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { + fetchPolicy: "cache-first", + }); const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) // eslint-disable-next-line react-hooks/rules-of-hooks diff --git a/src/pages/not-found-page.tsx b/src/pages/not-found-page.tsx new file mode 100644 index 00000000..9c89a202 --- /dev/null +++ b/src/pages/not-found-page.tsx @@ -0,0 +1,5 @@ +export function NotFoundPage() { + return ( + Could not find page. + ); +} \ No newline at end of file From c4d74c6d79ef2219010541b165bde6193bcdf8a8 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Wed, 8 Oct 2025 19:42:12 +0200 Subject: [PATCH 23/31] Create action-buttons.tsx --- src/components/ui/scanners-table.tsx | 2 +- .../table/action-columns/action-buttons.tsx | 106 ++++++++++++++++++ .../action-columns}/entity-action-columns.tsx | 95 +--------------- src/pages/apps-page.tsx | 2 +- src/pages/files-page.tsx | 2 +- src/pages/firmwares-page.tsx | 2 +- src/pages/importer-page.tsx | 2 +- 7 files changed, 115 insertions(+), 96 deletions(-) create mode 100644 src/components/ui/table/action-columns/action-buttons.tsx rename src/components/ui/{ => table/action-columns}/entity-action-columns.tsx (75%) diff --git a/src/components/ui/scanners-table.tsx b/src/components/ui/scanners-table.tsx index dd09a4c9..e88d443a 100644 --- a/src/components/ui/scanners-table.tsx +++ b/src/components/ui/scanners-table.tsx @@ -1,6 +1,6 @@ import {ColumnDef} from "@tanstack/react-table"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {buildSelectEntityColumn} from "@/components/ui/entity-action-columns.tsx"; +import {buildSelectEntityColumn} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; import React from "react"; import {useQuery} from "@apollo/client"; import {GET_SCANNER_MODULE_NAMES} from "@/components/graphql/app.graphql.ts"; diff --git a/src/components/ui/table/action-columns/action-buttons.tsx b/src/components/ui/table/action-columns/action-buttons.tsx new file mode 100644 index 00000000..964bb054 --- /dev/null +++ b/src/components/ui/table/action-columns/action-buttons.tsx @@ -0,0 +1,106 @@ +import {TypedDocumentNode} from "@graphql-typed-document-node/core"; +import { + Exact, + Scalars, + ScanApksByFirmwareObjectIdsMutation, + ScanApksByObjectIdsMutation +} from "@/__generated__/graphql.ts"; +import {useState} from "react"; +import {Scanner, ScannersTable} from "@/components/ui/scanners-table.tsx"; +import {useMutation} from "@apollo/client"; +import {useNavigate} from "react-router"; +import { + Dialog, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger +} from "@/components/ui/dialog.tsx"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {ScanSearchIcon} from "lucide-react"; +import {Button, buttonVariants} from "@/components/ui/button.tsx"; +import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; +import * as React from "react"; +import type {VariantProps} from "class-variance-authority"; +import {cn} from "@/lib/utils.ts"; + +function ActionButton( + { + className, + variant, + asChild = false, + ...props + }: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { + return ( + + ); +} + +function ScanAppActionButton( + { + ids, + tooltip, + mutation, + }: Readonly<{ + ids: string[]; + tooltip: string; + mutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + }>>; + }> +) { + const [selectedScanners, setSelectedScanners] = useState([]); + const [scanApk] = useMutation(mutation); + const navigate = useNavigate(); + + return ( + + + + + + + + + +

{tooltip}

+
+
+
+ + + Select Scanner(s) + + + + + + +
+ ); +} + +export { + ActionButton, + ScanAppActionButton, +} diff --git a/src/components/ui/entity-action-columns.tsx b/src/components/ui/table/action-columns/entity-action-columns.tsx similarity index 75% rename from src/components/ui/entity-action-columns.tsx rename to src/components/ui/table/action-columns/entity-action-columns.tsx index 9d1d32b0..7e00fa0c 100644 --- a/src/components/ui/entity-action-columns.tsx +++ b/src/components/ui/table/action-columns/entity-action-columns.tsx @@ -1,8 +1,7 @@ import type {ColumnDef} from "@tanstack/react-table"; import {Checkbox} from "@/components/ui/checkbox.tsx"; import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; -import {Button, buttonVariants} from "@/components/ui/button.tsx"; -import {EyeIcon, LoaderCircleIcon, ScanSearchIcon, TrashIcon} from "lucide-react"; +import {EyeIcon, LoaderCircleIcon, TrashIcon} from "lucide-react"; import {useLazyQuery, useMutation} from "@apollo/client"; import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; @@ -16,19 +15,7 @@ import { ScanApksByObjectIdsMutation } from "@/__generated__/graphql.ts"; import {TypedDocumentNode} from "@graphql-typed-document-node/core"; -import { - Dialog, - DialogContent, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger -} from "@/components/ui/dialog.tsx"; -import * as React from "react"; -import type {VariantProps} from "class-variance-authority"; -import {cn} from "@/lib/utils.ts"; -import {Scanner, ScannersTable} from "@/components/ui/scanners-table.tsx"; -import {useState} from "react"; +import {ActionButton, ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; type WithId = { id: string }; type WithIdAndFirmwareIdReference = { @@ -66,25 +53,6 @@ function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery return (ongoingDeletionJobs?.length ?? 0) > 0; } -function ActionButton( - { - className, - variant, - asChild = false, - ...props - }: React.ComponentProps<"button"> & - VariantProps & { - asChild?: boolean - }) { - return ( - - ); -} function DeleteEntityButton( { @@ -234,61 +202,6 @@ function buildDeleteEntityColumn | Scalars["String"]["input"] - scannerName: Scalars["String"]["input"] - }>>; - }> -) { - const [selectedScanners, setSelectedScanners] = useState([]); - const [scanApk] = useMutation(mutation); - const navigate = useNavigate(); - - return ( - - - - - - - - - -

{tooltip}

-
-
-
- - - Select Scanner(s) - - - - - - -
- ); -} - function buildScanAppColumn( tooltipSingle: string, tooltipSelected: string, @@ -301,13 +214,13 @@ function buildScanAppColumn( { id: "scan", header: ({table}) => - row.original.id)} tooltip={tooltipSelected} mutation={mutation} />, cell: ({row}) => - [] = [ diff --git a/src/pages/files-page.tsx b/src/pages/files-page.tsx index 7b56994f..ce59c729 100644 --- a/src/pages/files-page.tsx +++ b/src/pages/files-page.tsx @@ -7,7 +7,7 @@ import {useQuery} from "@apollo/client"; import {useFragment} from "@/__generated__"; import {FILE_ALL, GET_FILES_BY_FIRMWARE_OBJECT_IDS} from "@/components/graphql/file.graphql.ts"; import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table.tsx"; -import {buildFileActionColumns} from "@/components/ui/entity-action-columns.tsx"; +import {buildFileActionColumns} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; const columns: ColumnDef[] = [ ...buildFileActionColumns(), diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index 3516a958..18be2e77 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -7,7 +7,7 @@ import { FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS, SCAN_APKS_BY_FIRMWARE_OBJECT_IDS, } from "@/components/graphql/firmware.graphql.ts"; -import {buildFirmwareActionColumns} from "@/components/ui/entity-action-columns.tsx"; +import {buildFirmwareActionColumns} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {useFragment} from "@/__generated__"; diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index b6621943..b7af0344 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -10,7 +10,7 @@ import {StateHandlingScrollableDataTable} from "@/components/ui/table/data-table import {useFragment} from "@/__generated__"; import type {ColumnDef} from "@tanstack/react-table"; -import {buildFirmwareActionColumns} from "@/components/ui/entity-action-columns.tsx"; +import {buildFirmwareActionColumns} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {FirmwareRowImporterPageFragment} from "@/__generated__/graphql.ts"; From 16fba6e5e6936f3443e619802f5529a5006c9ba9 Mon Sep 17 00:00:00 2001 From: "Flum Silvan (floomm)" Date: Wed, 8 Oct 2025 20:12:54 +0200 Subject: [PATCH 24/31] Add scan app action buttons to app and firmware pages --- src/pages/app-page.tsx | 8 +++++++- src/pages/firmware-page.tsx | 12 +++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/pages/app-page.tsx b/src/pages/app-page.tsx index 985f9aae..d8aceb40 100644 --- a/src/pages/app-page.tsx +++ b/src/pages/app-page.tsx @@ -2,7 +2,7 @@ import {useNavigate, useParams} from "react-router"; import {BasePage} from "@/pages/base-page.tsx"; import {useQuery} from "@apollo/client"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; -import {APP_ALL, GET_APP_BY_ID} from "@/components/graphql/app.graphql.ts"; +import {APP_ALL, GET_APP_BY_ID, SCAN_APKS_BY_OBJECT_IDS} from "@/components/graphql/app.graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; import {AlertCircleIcon, FileIcon} from "lucide-react"; @@ -10,6 +10,7 @@ import {Skeleton} from "@/components/ui/skeleton.tsx"; import {AppAllFragment} from "@/__generated__/graphql.ts"; import {EntityTable} from "@/components/ui/entity-table.tsx"; import {Button} from "@/components/ui/button.tsx"; +import {ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; export function AppPage() { const {appId} = useParams<{ appId: string }>(); @@ -63,6 +64,11 @@ export function AppPage() { > File ({app.filename}) +
diff --git a/src/pages/firmware-page.tsx b/src/pages/firmware-page.tsx index 1fc53eb2..f434ee99 100644 --- a/src/pages/firmware-page.tsx +++ b/src/pages/firmware-page.tsx @@ -1,7 +1,11 @@ import {BasePage} from "@/pages/base-page.tsx"; import {useNavigate, useParams} from "react-router"; import {useQuery} from "@apollo/client"; -import {FIRMWARE_ALL, GET_FIRMWARES_BY_OBJECT_IDS} from "@/components/graphql/firmware.graphql.ts"; +import { + FIRMWARE_ALL, + GET_FIRMWARES_BY_OBJECT_IDS, + SCAN_APKS_BY_FIRMWARE_OBJECT_IDS +} from "@/components/graphql/firmware.graphql.ts"; import {FirmwareAllFragment} from "@/__generated__/graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; @@ -10,6 +14,7 @@ import {convertIdToObjectId, isNonNullish} from "@/lib/graphql/graphql-utils.ts" import {Skeleton} from "@/components/ui/skeleton.tsx"; import {EntityTable} from "@/components/ui/entity-table.tsx"; import {Button} from "@/components/ui/button.tsx"; +import {ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; export function FirmwarePage() { const {firmwareId} = useParams<{ firmwareId: string }>(); @@ -69,6 +74,11 @@ export function FirmwarePage() { > Files + From 36a44ebffc0771e5b2a08c60f21fa5b2cb648651 Mon Sep 17 00:00:00 2001 From: Silvan Flum Date: Thu, 16 Oct 2025 14:12:15 +0200 Subject: [PATCH 25/31] Add some reports & reactivate emulator page * Add reports page * Use component DataTableViewOptions * Hide some columns by default * Link reports page from app page * Introduce URL constants * Move "DeleteEntityButton" to action-buttons.tsx * Split buildViewEntityColumn * Add view reports action button * Refactor action columns file structure * Add view report action button * Rename report info fragment * Display objects in EntityTable * Add ApkidReportPage * Fix breadcrumb * Improve NotFoundPage * Add AndroGuardReportPage * Simplify report pages * Add ExodusReportPage * Remove max-w-max from data table * Reactivate EmulatorPage * Fix emulator in light mode * Fix emulator CSS in light and dark mode * Simplify GraphQL report queries * Add ApkleaksReportPage * Add fileSizeBytes to file page * Fix default sidebar behaviour * Improve pagination behaviour * Create RqJobQueuesDropdownMenu --- package.json | 3 + src/__generated__/gql.ts | 84 +++-- src/__generated__/graphql.ts | 82 ++++- src/app.tsx | 37 ++- src/assets/emulator/theming/global.js | 300 +++++++++--------- src/components/graphql/app.graphql.ts | 8 +- src/components/graphql/file.graphql.ts | 2 +- src/components/graphql/firmware.graphql.ts | 8 +- src/components/graphql/report.graphql.ts | 152 +++++++++ src/components/graphql/rq-job.graphql.ts | 7 + .../rq-jobs/rq-job-queues-dropdown-menu.tsx | 63 ++++ src/components/ui/entity-table.tsx | 24 +- src/components/ui/importer/dropzone.tsx | 14 +- src/components/ui/rq-jobs-table.tsx | 6 +- src/components/ui/scanners-table.tsx | 3 + src/components/ui/sidebar.tsx | 20 +- src/components/ui/sidebar/app-sidebar.tsx | 26 +- src/components/ui/sidebar/site-header.tsx | 3 +- .../table/action-columns/action-buttons.tsx | 122 ++++++- .../action-columns/app-action-columns.tsx | 127 ++++++++ .../action-columns/entity-action-columns.tsx | 203 +----------- .../action-columns/file-action-columns.tsx | 51 +++ .../firmware-action-columns.tsx | 59 ++++ .../action-columns/report-action-columns.tsx | 56 ++++ .../ui/table/data-table-column-visbility.tsx | 77 +++-- .../ui/table/data-table-pagination.tsx | 2 +- src/components/ui/table/data-table.tsx | 79 ++--- src/components/ui/theming/theme-provider.tsx | 2 +- src/hooks/emulator/theming/useDarkMode.ts | 34 -- src/main.tsx | 2 +- src/pages/EmulatorPage.jsx | 183 ++++++----- src/pages/EmulatorPageWrapper.tsx | 53 ++++ src/pages/app-page.tsx | 16 +- src/pages/apps-page.tsx | 27 +- src/pages/file-page.tsx | 3 +- src/pages/files-page.tsx | 31 +- src/pages/firmware-page.tsx | 5 +- src/pages/firmwares-page.tsx | 28 +- src/pages/importer-page.tsx | 64 ++-- src/pages/not-found-page.tsx | 15 +- src/pages/reports/andro-guard-report-page.tsx | 39 +++ src/pages/reports/apkid-report-page.tsx | 55 ++++ src/pages/reports/apkleaks-report.tsx | 36 +++ src/pages/reports/exodus-report-page.tsx | 39 +++ src/pages/reports/report-page.tsx | 80 +++++ src/pages/reports/reports-page.tsx | 77 +++++ .../{scanner-page.tsx => scan-jobs-page.tsx} | 7 +- src/routes/protected-layout.tsx | 8 +- yarn.lock | 166 +++++++++- 49 files changed, 1894 insertions(+), 694 deletions(-) create mode 100644 src/components/graphql/report.graphql.ts create mode 100644 src/components/rq-jobs/rq-job-queues-dropdown-menu.tsx create mode 100644 src/components/ui/table/action-columns/app-action-columns.tsx create mode 100644 src/components/ui/table/action-columns/file-action-columns.tsx create mode 100644 src/components/ui/table/action-columns/firmware-action-columns.tsx create mode 100644 src/components/ui/table/action-columns/report-action-columns.tsx delete mode 100644 src/hooks/emulator/theming/useDarkMode.ts create mode 100644 src/pages/EmulatorPageWrapper.tsx create mode 100644 src/pages/reports/andro-guard-report-page.tsx create mode 100644 src/pages/reports/apkid-report-page.tsx create mode 100644 src/pages/reports/apkleaks-report.tsx create mode 100644 src/pages/reports/exodus-report-page.tsx create mode 100644 src/pages/reports/report-page.tsx create mode 100644 src/pages/reports/reports-page.tsx rename src/pages/{scanner-page.tsx => scan-jobs-page.tsx} (71%) diff --git a/package.json b/package.json index 997394b5..ac54e7ae 100644 --- a/package.json +++ b/package.json @@ -34,13 +34,16 @@ "@tailwindcss/vite": "^4.1.12", "@tanstack/react-table": "^8.21.3", "android-emulator-webrtc": "^1.0.18", + "bootstrap": "^5.3.8", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "events": "^3.3.0", "graphql": "^16.11.0", + "jwt-decode": "^4.0.0", "lucide-react": "^0.540.0", "next-themes": "^0.4.6", "react": "^19.1.1", + "react-bootstrap": "^2.10.10", "react-dom": "^19.1.1", "react-dropzone": "^14.3.8", "react-hook-form": "^7.62.0", diff --git a/src/__generated__/gql.ts b/src/__generated__/gql.ts index 3c24fc06..b80558bb 100644 --- a/src/__generated__/gql.ts +++ b/src/__generated__/gql.ts @@ -15,51 +15,67 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ */ type Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": typeof types.GetApiHealthDocument, - "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, + "\n mutation CreateAppImportJob($queueName: String!, $storageIndex: Int!) {\n createAppImportJob(\n queueName: $queueName,\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateAppImportJobDocument, "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n": typeof types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetAppByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": typeof types.GetScannerModuleNamesDocument, - "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByObjectIdsDocument, + "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": typeof types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": typeof types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": typeof types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": typeof types.GetCurrentUserEmailAndUsernameDocument, - "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": typeof types.FileAllFragmentDoc, + "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": typeof types.FileAllFragmentDoc, "\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetFilesByFirmwareObjectIdsDocument, "\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": typeof types.GetFileByIdDocument, - "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, + "\n mutation CreateFirmwareExtractorJob($queueName: String!, $storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: $queueName\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": typeof types.CreateFirmwareExtractorJobDocument, "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": typeof types.FirmwareAllFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": typeof types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": typeof types.FirmwareRowImporterPageFragmentDoc, "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": typeof types.GetFirmwaresImporterPageDocument, - "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByFirmwareObjectIdsDocument, + "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n": typeof types.ScanApksByFirmwareObjectIdsDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": typeof types.DeleteFirmwareByObjectIdDocument, - "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, + "\n fragment BasicReportInfo on ApkScannerReportType {\n id\n reportDate\n scannerName\n scannerVersion\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n }\n }\n": typeof types.BasicReportInfoFragmentDoc, + "\n query GetReport($reportObjectId: String, $appObjectId: String, $scannerName: String) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId, android_app_id_reference: $appObjectId, scanner_name: $scannerName}) {\n ...BasicReportInfo\n }\n }\n": typeof types.GetReportDocument, + "\n query GetScannerReport(\n $reportObjectId: String\n $wantAndroguard: Boolean! = false\n $wantApkid: Boolean! = false\n $wantApkleaks: Boolean! = false\n $wantExodus: Boolean! = false\n ) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId}) {\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n \n androguardReport: androguardReportReference @include(if: $wantAndroguard) {\n ...AndroguardReport\n }\n apkidReport: apkidReportReference @include(if: $wantApkid) {\n ...ApkidReport\n }\n apkleaksReport: apkleaksReportReference @include(if: $wantApkleaks) {\n ...ApkleaksReport\n }\n exodusReport: exodusReportReference @include(if: $wantExodus) {\n ...ExodusReport\n }\n }\n }\n }\n": typeof types.GetScannerReportDocument, + "\n fragment AndroguardReport on AndroGuardReportType {\n id\n activities\n androidVersionCode\n androidVersionName\n appName\n dexNames\n effectiveTargetVersion\n fileNameList\n intentFiltersDict\n isAndroidtv\n isLeanback\n isMultidex\n isSignedV1\n isSignedV2\n isSignedV3\n isValidApk\n isWearable\n mainActivity\n mainActivityList\n manifestFeatures\n manifestLibraries\n manifestXml\n maxSdkVersion\n minSdkVersion\n packagename\n permissionDetails\n permissions\n permissionsDeclared\n permissionsDeclaredDetails\n permissionsImplied\n permissionsRequestedThirdParty\n providers\n receivers\n services\n signatureNames\n targetSdkVersion\n reportDate\n scannerName\n scannerVersion\n }\n": typeof types.AndroguardReportFragmentDoc, + "\n fragment ApkidReport on ApkidReportType {\n id\n files\n rulesSha256\n reportFileJson {\n data\n }\n reportDate\n scannerName\n scannerVersion\n }\n": typeof types.ApkidReportFragmentDoc, + "\n fragment ApkleaksReport on ApkleaksReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n": typeof types.ApkleaksReportFragmentDoc, + "\n fragment ExodusReport on ExodusReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n": typeof types.ExodusReportFragmentDoc, + "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n queueName\n startedAt\n status\n }\n }\n": typeof types.GetRqJobListDocument, + "\n query GetRqJobQueueNames {\n rq_queue_name_list\n }\n": typeof types.GetRqJobQueueNamesDocument, }; const documents: Documents = { "\n query GetApiHealth {\n isApiUp\n }\n": types.GetApiHealthDocument, - "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, + "\n mutation CreateAppImportJob($queueName: String!, $storageIndex: Int!) {\n createAppImportJob(\n queueName: $queueName,\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateAppImportJobDocument, "\n fragment AppAll on AndroidAppType {\n absoluteStorePath\n androidManifestDict\n fileSizeBytes\n filename\n id\n indexedDate\n md5\n originalFilename\n packagename\n partitionName\n pk\n relativeFirmwarePath\n relativeStorePath\n sha1\n sha256\n firmwareIdReference {\n id\n }\n firmwareFileReference {\n id\n }\n }\n": types.AppAllFragmentDoc, "\n query GetAppsByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n androidAppIdList {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppsByFirmwareObjectIdsDocument, "\n query GetAppById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n androidAppIdList(id: $id) {\n edges {\n node {\n ...AppAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetAppByIdDocument, "\n query GetScannerModuleNames {\n scanner_module_name_list\n }\n": types.GetScannerModuleNamesDocument, - "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": types.ScanApksByObjectIdsDocument, + "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n": types.ScanApksByObjectIdsDocument, "\n query GetAuthToken($password: String!, $username: String!) {\n tokenAuth(password: $password, username: $username) {\n token\n }\n }\n": types.GetAuthTokenDocument, "\n mutation DeleteTokenCookie {\n deleteTokenCookie {\n deleted\n }\n }\n": types.DeleteTokenCookieDocument, "\n query GetCurrentUserId {\n me {\n id\n }\n }\n": types.GetCurrentUserIdDocument, "\n query GetCurrentUserEmailAndUsername {\n me {\n email\n username\n }\n }\n": types.GetCurrentUserEmailAndUsernameDocument, - "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": types.FileAllFragmentDoc, + "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n": types.FileAllFragmentDoc, "\n query GetFilesByFirmwareObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n firmwareFileIdList {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetFilesByFirmwareObjectIdsDocument, "\n query GetFileById($id: ID!) {\n android_firmware_connection {\n edges {\n node {\n firmwareFileIdList(id: $id) {\n edges {\n node {\n ...FileAll\n }\n }\n }\n }\n }\n }\n }\n": types.GetFileByIdDocument, - "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, + "\n mutation CreateFirmwareExtractorJob($queueName: String!, $storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: $queueName\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n": types.CreateFirmwareExtractorJobDocument, "\n fragment FirmwareAll on AndroidFirmwareType {\n absoluteStorePath\n aecsBuildFilePath\n fileSizeBytes\n filename\n hasFileIndex\n hasFuzzyHashIndex\n id\n indexedDate\n md5\n originalFilename\n osVendor\n partitionInfoDict\n pk\n relativeStorePath\n sha1\n sha256\n tag\n versionDetected\n }\n": types.FirmwareAllFragmentDoc, "\n query GetFirmwaresByObjectIds($objectIds: [String!]) {\n android_firmware_connection(objectIdList: $objectIds) {\n edges {\n node {\n ...FirmwareAll\n }\n }\n }\n }\n": types.GetFirmwaresByObjectIdsDocument, "\n fragment FirmwareRowImporterPage on AndroidFirmwareType {\n id\n indexedDate\n originalFilename\n osVendor\n versionDetected\n }\n": types.FirmwareRowImporterPageFragmentDoc, "\n query GetFirmwaresImporterPage {\n android_firmware_connection {\n edges {\n node {\n ...FirmwareRowImporterPage\n }\n }\n }\n }\n": types.GetFirmwaresImporterPageDocument, - "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n": types.ScanApksByFirmwareObjectIdsDocument, + "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n": types.ScanApksByFirmwareObjectIdsDocument, "\n mutation DeleteFirmwareByObjectId($objectIds: [String!]!) {\n deleteAndroidFirmware(firmwareIdList: $objectIds) {\n jobId\n }\n }\n": types.DeleteFirmwareByObjectIdDocument, - "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, + "\n fragment BasicReportInfo on ApkScannerReportType {\n id\n reportDate\n scannerName\n scannerVersion\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n }\n }\n": types.BasicReportInfoFragmentDoc, + "\n query GetReport($reportObjectId: String, $appObjectId: String, $scannerName: String) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId, android_app_id_reference: $appObjectId, scanner_name: $scannerName}) {\n ...BasicReportInfo\n }\n }\n": types.GetReportDocument, + "\n query GetScannerReport(\n $reportObjectId: String\n $wantAndroguard: Boolean! = false\n $wantApkid: Boolean! = false\n $wantApkleaks: Boolean! = false\n $wantExodus: Boolean! = false\n ) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId}) {\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n \n androguardReport: androguardReportReference @include(if: $wantAndroguard) {\n ...AndroguardReport\n }\n apkidReport: apkidReportReference @include(if: $wantApkid) {\n ...ApkidReport\n }\n apkleaksReport: apkleaksReportReference @include(if: $wantApkleaks) {\n ...ApkleaksReport\n }\n exodusReport: exodusReportReference @include(if: $wantExodus) {\n ...ExodusReport\n }\n }\n }\n }\n": types.GetScannerReportDocument, + "\n fragment AndroguardReport on AndroGuardReportType {\n id\n activities\n androidVersionCode\n androidVersionName\n appName\n dexNames\n effectiveTargetVersion\n fileNameList\n intentFiltersDict\n isAndroidtv\n isLeanback\n isMultidex\n isSignedV1\n isSignedV2\n isSignedV3\n isValidApk\n isWearable\n mainActivity\n mainActivityList\n manifestFeatures\n manifestLibraries\n manifestXml\n maxSdkVersion\n minSdkVersion\n packagename\n permissionDetails\n permissions\n permissionsDeclared\n permissionsDeclaredDetails\n permissionsImplied\n permissionsRequestedThirdParty\n providers\n receivers\n services\n signatureNames\n targetSdkVersion\n reportDate\n scannerName\n scannerVersion\n }\n": types.AndroguardReportFragmentDoc, + "\n fragment ApkidReport on ApkidReportType {\n id\n files\n rulesSha256\n reportFileJson {\n data\n }\n reportDate\n scannerName\n scannerVersion\n }\n": types.ApkidReportFragmentDoc, + "\n fragment ApkleaksReport on ApkleaksReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n": types.ApkleaksReportFragmentDoc, + "\n fragment ExodusReport on ExodusReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n": types.ExodusReportFragmentDoc, + "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n queueName\n startedAt\n status\n }\n }\n": types.GetRqJobListDocument, + "\n query GetRqJobQueueNames {\n rq_queue_name_list\n }\n": types.GetRqJobQueueNamesDocument, }; /** @@ -83,7 +99,7 @@ export function gql(source: "\n query GetApiHealth {\n isApiUp\n }\ /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateAppImportJob($storageIndex: Int!) {\n createAppImportJob(\n queueName: \"high-python\",\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; +export function gql(source: "\n mutation CreateAppImportJob($queueName: String!, $storageIndex: Int!) {\n createAppImportJob(\n queueName: $queueName,\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateAppImportJob($queueName: String!, $storageIndex: Int!) {\n createAppImportJob(\n queueName: $queueName,\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -103,7 +119,7 @@ export function gql(source: "\n query GetScannerModuleNames {\n scanne /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"]; +export function gql(source: "\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n objectIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -123,7 +139,7 @@ export function gql(source: "\n query GetCurrentUserEmailAndUsername {\n /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"): (typeof documents)["\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n# fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"]; +export function gql(source: "\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"): (typeof documents)["\n fragment FileAll on FirmwareFileType {\n id\n name\n absoluteStorePath\n fileSizeBytes\n indexedDate\n isDirectory\n isOnDisk\n isSymlink\n md5\n metaDict\n parentDir\n partitionName\n relativePath\n firmwareIdReference {\n id\n }\n androidAppReference {\n id\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -135,7 +151,7 @@ export function gql(source: "\n query GetFileById($id: ID!) {\n androi /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateFirmwareExtractorJob($storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: \"high-python\"\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; +export function gql(source: "\n mutation CreateFirmwareExtractorJob($queueName: String!, $storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: $queueName\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"): (typeof documents)["\n mutation CreateFirmwareExtractorJob($queueName: String!, $storageIndex: Int!) {\n createFirmwareExtractorJob(\n createFuzzyHashes: false\n queueName: $queueName\n storageIndex: $storageIndex\n ) {\n jobId\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -155,7 +171,7 @@ export function gql(source: "\n query GetFirmwaresImporterPage {\n and /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: \"default-python\",\n ) {\n jobIdList\n }\n }\n"]; +export function gql(source: "\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n"): (typeof documents)["\n mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) {\n createApkScanJob(\n firmwareIdList: $objectIds,\n moduleName: $scannerName,\n queueName: $queueName,\n ) {\n jobIdList\n }\n }\n"]; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -163,7 +179,39 @@ export function gql(source: "\n mutation DeleteFirmwareByObjectId($objectIds: /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"): (typeof documents)["\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n startedAt\n status\n }\n }\n"]; +export function gql(source: "\n fragment BasicReportInfo on ApkScannerReportType {\n id\n reportDate\n scannerName\n scannerVersion\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n }\n }\n"): (typeof documents)["\n fragment BasicReportInfo on ApkScannerReportType {\n id\n reportDate\n scannerName\n scannerVersion\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetReport($reportObjectId: String, $appObjectId: String, $scannerName: String) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId, android_app_id_reference: $appObjectId, scanner_name: $scannerName}) {\n ...BasicReportInfo\n }\n }\n"): (typeof documents)["\n query GetReport($reportObjectId: String, $appObjectId: String, $scannerName: String) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId, android_app_id_reference: $appObjectId, scanner_name: $scannerName}) {\n ...BasicReportInfo\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetScannerReport(\n $reportObjectId: String\n $wantAndroguard: Boolean! = false\n $wantApkid: Boolean! = false\n $wantApkleaks: Boolean! = false\n $wantExodus: Boolean! = false\n ) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId}) {\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n \n androguardReport: androguardReportReference @include(if: $wantAndroguard) {\n ...AndroguardReport\n }\n apkidReport: apkidReportReference @include(if: $wantApkid) {\n ...ApkidReport\n }\n apkleaksReport: apkleaksReportReference @include(if: $wantApkleaks) {\n ...ApkleaksReport\n }\n exodusReport: exodusReportReference @include(if: $wantExodus) {\n ...ExodusReport\n }\n }\n }\n }\n"): (typeof documents)["\n query GetScannerReport(\n $reportObjectId: String\n $wantAndroguard: Boolean! = false\n $wantApkid: Boolean! = false\n $wantApkleaks: Boolean! = false\n $wantExodus: Boolean! = false\n ) {\n apk_scanner_report_list(fieldFilter: {id: $reportObjectId}) {\n androidAppIdReference {\n id\n filename\n firmwareIdReference {\n id\n }\n \n androguardReport: androguardReportReference @include(if: $wantAndroguard) {\n ...AndroguardReport\n }\n apkidReport: apkidReportReference @include(if: $wantApkid) {\n ...ApkidReport\n }\n apkleaksReport: apkleaksReportReference @include(if: $wantApkleaks) {\n ...ApkleaksReport\n }\n exodusReport: exodusReportReference @include(if: $wantExodus) {\n ...ExodusReport\n }\n }\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment AndroguardReport on AndroGuardReportType {\n id\n activities\n androidVersionCode\n androidVersionName\n appName\n dexNames\n effectiveTargetVersion\n fileNameList\n intentFiltersDict\n isAndroidtv\n isLeanback\n isMultidex\n isSignedV1\n isSignedV2\n isSignedV3\n isValidApk\n isWearable\n mainActivity\n mainActivityList\n manifestFeatures\n manifestLibraries\n manifestXml\n maxSdkVersion\n minSdkVersion\n packagename\n permissionDetails\n permissions\n permissionsDeclared\n permissionsDeclaredDetails\n permissionsImplied\n permissionsRequestedThirdParty\n providers\n receivers\n services\n signatureNames\n targetSdkVersion\n reportDate\n scannerName\n scannerVersion\n }\n"): (typeof documents)["\n fragment AndroguardReport on AndroGuardReportType {\n id\n activities\n androidVersionCode\n androidVersionName\n appName\n dexNames\n effectiveTargetVersion\n fileNameList\n intentFiltersDict\n isAndroidtv\n isLeanback\n isMultidex\n isSignedV1\n isSignedV2\n isSignedV3\n isValidApk\n isWearable\n mainActivity\n mainActivityList\n manifestFeatures\n manifestLibraries\n manifestXml\n maxSdkVersion\n minSdkVersion\n packagename\n permissionDetails\n permissions\n permissionsDeclared\n permissionsDeclaredDetails\n permissionsImplied\n permissionsRequestedThirdParty\n providers\n receivers\n services\n signatureNames\n targetSdkVersion\n reportDate\n scannerName\n scannerVersion\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment ApkidReport on ApkidReportType {\n id\n files\n rulesSha256\n reportFileJson {\n data\n }\n reportDate\n scannerName\n scannerVersion\n }\n"): (typeof documents)["\n fragment ApkidReport on ApkidReportType {\n id\n files\n rulesSha256\n reportFileJson {\n data\n }\n reportDate\n scannerName\n scannerVersion\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment ApkleaksReport on ApkleaksReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n"): (typeof documents)["\n fragment ApkleaksReport on ApkleaksReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n fragment ExodusReport on ExodusReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n"): (typeof documents)["\n fragment ExodusReport on ExodusReportType {\n id\n results\n reportDate\n scannerName\n scannerVersion\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n queueName\n startedAt\n status\n }\n }\n"): (typeof documents)["\n query GetRqJobList {\n rq_job_list {\n description\n funcName\n id\n isFailed\n isFinished\n queueName\n startedAt\n status\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql(source: "\n query GetRqJobQueueNames {\n rq_queue_name_list\n }\n"): (typeof documents)["\n query GetRqJobQueueNames {\n rq_queue_name_list\n }\n"]; export function gql(source: string) { return (documents as any)[source] ?? {}; diff --git a/src/__generated__/graphql.ts b/src/__generated__/graphql.ts index 01f628eb..f59f63a5 100644 --- a/src/__generated__/graphql.ts +++ b/src/__generated__/graphql.ts @@ -2127,6 +2127,7 @@ export type GetApiHealthQueryVariables = Exact<{ [key: string]: never; }>; export type GetApiHealthQuery = { __typename?: 'Query', isApiUp?: boolean | null }; export type CreateAppImportJobMutationVariables = Exact<{ + queueName: Scalars['String']['input']; storageIndex: Scalars['Int']['input']; }>; @@ -2163,6 +2164,7 @@ export type GetScannerModuleNamesQuery = { __typename?: 'Query', scanner_module_ export type ScanApksByObjectIdsMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; scannerName: Scalars['String']['input']; + queueName: Scalars['String']['input']; }>; @@ -2191,7 +2193,7 @@ export type GetCurrentUserEmailAndUsernameQueryVariables = Exact<{ [key: string] export type GetCurrentUserEmailAndUsernameQuery = { __typename?: 'Query', me?: { __typename?: 'UserType', email: string, username: string } | null }; -export type FileAllFragment = { __typename?: 'FirmwareFileType', id: string, name: string, absoluteStorePath: string, indexedDate?: any | null, isDirectory: boolean, isOnDisk?: boolean | null, isSymlink?: boolean | null, md5?: string | null, metaDict?: any | null, parentDir: string, partitionName?: string | null, relativePath: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null, androidAppReference?: { __typename?: 'AndroidAppType', id: string } | null } & { ' $fragmentName'?: 'FileAllFragment' }; +export type FileAllFragment = { __typename?: 'FirmwareFileType', id: string, name: string, absoluteStorePath: string, fileSizeBytes?: number | null, indexedDate?: any | null, isDirectory: boolean, isOnDisk?: boolean | null, isSymlink?: boolean | null, md5?: string | null, metaDict?: any | null, parentDir: string, partitionName?: string | null, relativePath: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null, androidAppReference?: { __typename?: 'AndroidAppType', id: string } | null } & { ' $fragmentName'?: 'FileAllFragment' }; export type GetFilesByFirmwareObjectIdsQueryVariables = Exact<{ objectIds?: InputMaybe | Scalars['String']['input']>; @@ -2214,6 +2216,7 @@ export type GetFileByIdQuery = { __typename?: 'Query', android_firmware_connecti ) | null } | null> } | null } | null } | null> } | null }; export type CreateFirmwareExtractorJobMutationVariables = Exact<{ + queueName: Scalars['String']['input']; storageIndex: Scalars['Int']['input']; }>; @@ -2245,6 +2248,7 @@ export type GetFirmwaresImporterPageQuery = { __typename?: 'Query', android_firm export type ScanApksByFirmwareObjectIdsMutationVariables = Exact<{ objectIds: Array | Scalars['String']['input']; scannerName: Scalars['String']['input']; + queueName: Scalars['String']['input']; }>; @@ -2257,30 +2261,88 @@ export type DeleteFirmwareByObjectIdMutationVariables = Exact<{ export type DeleteFirmwareByObjectIdMutation = { __typename?: 'Mutation', deleteAndroidFirmware?: { __typename?: 'DeleteAndroidFirmwareMutation', jobId?: string | null } | null }; +export type BasicReportInfoFragment = { __typename?: 'ApkScannerReportType', id?: string | null, reportDate: any, scannerName: string, scannerVersion: string, androidAppIdReference: { __typename?: 'AndroidAppType', id: string, filename: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null } } & { ' $fragmentName'?: 'BasicReportInfoFragment' }; + +export type GetReportQueryVariables = Exact<{ + reportObjectId?: InputMaybe; + appObjectId?: InputMaybe; + scannerName?: InputMaybe; +}>; + + +export type GetReportQuery = { __typename?: 'Query', apk_scanner_report_list?: Array<( + { __typename?: 'ApkScannerReportType' } + & { ' $fragmentRefs'?: { 'BasicReportInfoFragment': BasicReportInfoFragment } } + ) | null> | null }; + +export type GetScannerReportQueryVariables = Exact<{ + reportObjectId?: InputMaybe; + wantAndroguard?: Scalars['Boolean']['input']; + wantApkid?: Scalars['Boolean']['input']; + wantApkleaks?: Scalars['Boolean']['input']; + wantExodus?: Scalars['Boolean']['input']; +}>; + + +export type GetScannerReportQuery = { __typename?: 'Query', apk_scanner_report_list?: Array<{ __typename?: 'ApkScannerReportType', androidAppIdReference: { __typename?: 'AndroidAppType', id: string, filename: string, firmwareIdReference?: { __typename?: 'AndroidFirmwareType', id: string } | null, androguardReport?: ( + { __typename?: 'AndroGuardReportType' } + & { ' $fragmentRefs'?: { 'AndroguardReportFragment': AndroguardReportFragment } } + ) | null, apkidReport?: ( + { __typename?: 'ApkidReportType' } + & { ' $fragmentRefs'?: { 'ApkidReportFragment': ApkidReportFragment } } + ) | null, apkleaksReport?: ( + { __typename?: 'ApkleaksReportType' } + & { ' $fragmentRefs'?: { 'ApkleaksReportFragment': ApkleaksReportFragment } } + ) | null, exodusReport?: ( + { __typename?: 'ExodusReportType' } + & { ' $fragmentRefs'?: { 'ExodusReportFragment': ExodusReportFragment } } + ) | null } } | null> | null }; + +export type AndroguardReportFragment = { __typename?: 'AndroGuardReportType', id: string, activities?: Array | null, androidVersionCode?: string | null, androidVersionName?: string | null, appName?: string | null, dexNames?: Array | null, effectiveTargetVersion?: string | null, fileNameList?: Array | null, intentFiltersDict?: any | null, isAndroidtv?: boolean | null, isLeanback?: boolean | null, isMultidex?: boolean | null, isSignedV1?: boolean | null, isSignedV2?: boolean | null, isSignedV3?: boolean | null, isValidApk?: boolean | null, isWearable?: boolean | null, mainActivity?: string | null, mainActivityList?: Array | null, manifestFeatures?: Array | null, manifestLibraries?: Array | null, manifestXml?: string | null, maxSdkVersion?: string | null, minSdkVersion?: string | null, packagename: string, permissionDetails?: any | null, permissions?: Array | null, permissionsDeclared?: Array | null, permissionsDeclaredDetails?: any | null, permissionsImplied?: Array | null, permissionsRequestedThirdParty?: Array | null, providers?: Array | null, receivers?: Array | null, services?: Array | null, signatureNames?: Array | null, targetSdkVersion?: string | null, reportDate: any, scannerName: string, scannerVersion: string } & { ' $fragmentName'?: 'AndroguardReportFragment' }; + +export type ApkidReportFragment = { __typename?: 'ApkidReportType', id?: string | null, files?: Array | null, rulesSha256?: string | null, reportDate: any, scannerName: string, scannerVersion: string, reportFileJson: { __typename?: 'FileFieldType', data?: string | null } } & { ' $fragmentName'?: 'ApkidReportFragment' }; + +export type ApkleaksReportFragment = { __typename?: 'ApkleaksReportType', id?: string | null, results: any, reportDate: any, scannerName: string, scannerVersion: string } & { ' $fragmentName'?: 'ApkleaksReportFragment' }; + +export type ExodusReportFragment = { __typename?: 'ExodusReportType', id?: string | null, results: any, reportDate: any, scannerName: string, scannerVersion: string } & { ' $fragmentName'?: 'ExodusReportFragment' }; + export type GetRqJobListQueryVariables = Exact<{ [key: string]: never; }>; -export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, startedAt?: any | null, status?: string | null } | null> | null }; +export type GetRqJobListQuery = { __typename?: 'Query', rq_job_list?: Array<{ __typename?: 'RqJobType', description?: string | null, funcName?: string | null, id?: string | null, isFailed?: boolean | null, isFinished?: boolean | null, queueName?: string | null, startedAt?: any | null, status?: string | null } | null> | null }; + +export type GetRqJobQueueNamesQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetRqJobQueueNamesQuery = { __typename?: 'Query', rq_queue_name_list?: Array | null }; export const AppAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const FileAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const FileAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const FirmwareAllFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const FirmwareRowImporterPageFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; +export const BasicReportInfoFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicReportInfo"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkScannerReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}},{"kind":"Field","name":{"kind":"Name","value":"androidAppIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const AndroguardReportFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AndroguardReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroGuardReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"activities"}},{"kind":"Field","name":{"kind":"Name","value":"androidVersionCode"}},{"kind":"Field","name":{"kind":"Name","value":"androidVersionName"}},{"kind":"Field","name":{"kind":"Name","value":"appName"}},{"kind":"Field","name":{"kind":"Name","value":"dexNames"}},{"kind":"Field","name":{"kind":"Name","value":"effectiveTargetVersion"}},{"kind":"Field","name":{"kind":"Name","value":"fileNameList"}},{"kind":"Field","name":{"kind":"Name","value":"intentFiltersDict"}},{"kind":"Field","name":{"kind":"Name","value":"isAndroidtv"}},{"kind":"Field","name":{"kind":"Name","value":"isLeanback"}},{"kind":"Field","name":{"kind":"Name","value":"isMultidex"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV1"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV2"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV3"}},{"kind":"Field","name":{"kind":"Name","value":"isValidApk"}},{"kind":"Field","name":{"kind":"Name","value":"isWearable"}},{"kind":"Field","name":{"kind":"Name","value":"mainActivity"}},{"kind":"Field","name":{"kind":"Name","value":"mainActivityList"}},{"kind":"Field","name":{"kind":"Name","value":"manifestFeatures"}},{"kind":"Field","name":{"kind":"Name","value":"manifestLibraries"}},{"kind":"Field","name":{"kind":"Name","value":"manifestXml"}},{"kind":"Field","name":{"kind":"Name","value":"maxSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"minSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"permissionDetails"}},{"kind":"Field","name":{"kind":"Name","value":"permissions"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsDeclared"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsDeclaredDetails"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsImplied"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsRequestedThirdParty"}},{"kind":"Field","name":{"kind":"Name","value":"providers"}},{"kind":"Field","name":{"kind":"Name","value":"receivers"}},{"kind":"Field","name":{"kind":"Name","value":"services"}},{"kind":"Field","name":{"kind":"Name","value":"signatureNames"}},{"kind":"Field","name":{"kind":"Name","value":"targetSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}}]} as unknown as DocumentNode; +export const ApkidReportFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApkidReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkidReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"files"}},{"kind":"Field","name":{"kind":"Name","value":"rulesSha256"}},{"kind":"Field","name":{"kind":"Name","value":"reportFileJson"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"}}]}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}}]} as unknown as DocumentNode; +export const ApkleaksReportFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApkleaksReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkleaksReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"results"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}}]} as unknown as DocumentNode; +export const ExodusReportFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ExodusReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ExodusReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"results"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}}]} as unknown as DocumentNode; export const GetApiHealthDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetApiHealth"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"isApiUp"}}]}}]} as unknown as DocumentNode; -export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; +export const CreateAppImportJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateAppImportJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createAppImportJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetAppsByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppsByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetAppByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAppById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AppAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AppAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidAppType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"androidManifestDict"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeFirmwarePath"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"firmwareFileReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetScannerModuleNamesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetScannerModuleNames"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"scanner_module_name_list"}}]}}]} as unknown as DocumentNode; -export const ScanApksByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; +export const ScanApksByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const GetAuthTokenDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetAuthToken"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"password"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"username"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"tokenAuth"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"password"},"value":{"kind":"Variable","name":{"kind":"Name","value":"password"}}},{"kind":"Argument","name":{"kind":"Name","value":"username"},"value":{"kind":"Variable","name":{"kind":"Name","value":"username"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]}}]} as unknown as DocumentNode; export const DeleteTokenCookieDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteTokenCookie"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleted"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserId"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; export const GetCurrentUserEmailAndUsernameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCurrentUserEmailAndUsername"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}}]}}]} as unknown as DocumentNode; -export const GetFilesByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFilesByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const GetFileByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFileById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; -export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"high-python","block":false}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; +export const GetFilesByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFilesByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const GetFileByIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFileById"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"ID"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"firmwareFileIdList"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FileAll"}}]}}]}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FileAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"FirmwareFileType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"isDirectory"}},{"kind":"Field","name":{"kind":"Name","value":"isOnDisk"}},{"kind":"Field","name":{"kind":"Name","value":"isSymlink"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"metaDict"}},{"kind":"Field","name":{"kind":"Name","value":"parentDir"}},{"kind":"Field","name":{"kind":"Name","value":"partitionName"}},{"kind":"Field","name":{"kind":"Name","value":"relativePath"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","name":{"kind":"Name","value":"androidAppReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode; +export const CreateFirmwareExtractorJobDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateFirmwareExtractorJob"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createFirmwareExtractorJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"createFuzzyHashes"},"value":{"kind":"BooleanValue","value":false}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}}},{"kind":"Argument","name":{"kind":"Name","value":"storageIndex"},"value":{"kind":"Variable","name":{"kind":"Name","value":"storageIndex"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; export const GetFirmwaresByObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresByObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"objectIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareAll"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareAll"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"absoluteStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"aecsBuildFilePath"}},{"kind":"Field","name":{"kind":"Name","value":"fileSizeBytes"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"hasFileIndex"}},{"kind":"Field","name":{"kind":"Name","value":"hasFuzzyHashIndex"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"md5"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"partitionInfoDict"}},{"kind":"Field","name":{"kind":"Name","value":"pk"}},{"kind":"Field","name":{"kind":"Name","value":"relativeStorePath"}},{"kind":"Field","name":{"kind":"Name","value":"sha1"}},{"kind":"Field","name":{"kind":"Name","value":"sha256"}},{"kind":"Field","name":{"kind":"Name","value":"tag"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; export const GetFirmwaresImporterPageDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetFirmwaresImporterPage"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"android_firmware_connection"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"FirmwareRowImporterPage"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"FirmwareRowImporterPage"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroidFirmwareType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"indexedDate"}},{"kind":"Field","name":{"kind":"Name","value":"originalFilename"}},{"kind":"Field","name":{"kind":"Name","value":"osVendor"}},{"kind":"Field","name":{"kind":"Name","value":"versionDetected"}}]}}]} as unknown as DocumentNode; -export const ScanApksByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"StringValue","value":"default-python","block":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; +export const ScanApksByFirmwareObjectIdsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"ScanApksByFirmwareObjectIds"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createApkScanJob"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}},{"kind":"Argument","name":{"kind":"Name","value":"moduleName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}},{"kind":"Argument","name":{"kind":"Name","value":"queueName"},"value":{"kind":"Variable","name":{"kind":"Name","value":"queueName"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobIdList"}}]}}]}}]} as unknown as DocumentNode; export const DeleteFirmwareByObjectIdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteFirmwareByObjectId"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}},"type":{"kind":"NonNullType","type":{"kind":"ListType","type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"deleteAndroidFirmware"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"firmwareIdList"},"value":{"kind":"Variable","name":{"kind":"Name","value":"objectIds"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"jobId"}}]}}]}}]} as unknown as DocumentNode; -export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file +export const GetReportDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetReport"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"reportObjectId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"appObjectId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"apk_scanner_report_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"fieldFilter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"reportObjectId"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"android_app_id_reference"},"value":{"kind":"Variable","name":{"kind":"Name","value":"appObjectId"}}},{"kind":"ObjectField","name":{"kind":"Name","value":"scanner_name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"scannerName"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicReportInfo"}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicReportInfo"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkScannerReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}},{"kind":"Field","name":{"kind":"Name","value":"androidAppIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]}}]} as unknown as DocumentNode; +export const GetScannerReportDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetScannerReport"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"reportObjectId"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"wantAndroguard"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"defaultValue":{"kind":"BooleanValue","value":false}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"wantApkid"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"defaultValue":{"kind":"BooleanValue","value":false}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"wantApkleaks"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"defaultValue":{"kind":"BooleanValue","value":false}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"wantExodus"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}},"defaultValue":{"kind":"BooleanValue","value":false}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"apk_scanner_report_list"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"fieldFilter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"reportObjectId"}}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"androidAppIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"filename"}},{"kind":"Field","name":{"kind":"Name","value":"firmwareIdReference"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"androguardReport"},"name":{"kind":"Name","value":"androguardReportReference"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"include"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"if"},"value":{"kind":"Variable","name":{"kind":"Name","value":"wantAndroguard"}}}]}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"AndroguardReport"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"apkidReport"},"name":{"kind":"Name","value":"apkidReportReference"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"include"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"if"},"value":{"kind":"Variable","name":{"kind":"Name","value":"wantApkid"}}}]}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApkidReport"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"apkleaksReport"},"name":{"kind":"Name","value":"apkleaksReportReference"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"include"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"if"},"value":{"kind":"Variable","name":{"kind":"Name","value":"wantApkleaks"}}}]}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ApkleaksReport"}}]}},{"kind":"Field","alias":{"kind":"Name","value":"exodusReport"},"name":{"kind":"Name","value":"exodusReportReference"},"directives":[{"kind":"Directive","name":{"kind":"Name","value":"include"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"if"},"value":{"kind":"Variable","name":{"kind":"Name","value":"wantExodus"}}}]}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"ExodusReport"}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"AndroguardReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"AndroGuardReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"activities"}},{"kind":"Field","name":{"kind":"Name","value":"androidVersionCode"}},{"kind":"Field","name":{"kind":"Name","value":"androidVersionName"}},{"kind":"Field","name":{"kind":"Name","value":"appName"}},{"kind":"Field","name":{"kind":"Name","value":"dexNames"}},{"kind":"Field","name":{"kind":"Name","value":"effectiveTargetVersion"}},{"kind":"Field","name":{"kind":"Name","value":"fileNameList"}},{"kind":"Field","name":{"kind":"Name","value":"intentFiltersDict"}},{"kind":"Field","name":{"kind":"Name","value":"isAndroidtv"}},{"kind":"Field","name":{"kind":"Name","value":"isLeanback"}},{"kind":"Field","name":{"kind":"Name","value":"isMultidex"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV1"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV2"}},{"kind":"Field","name":{"kind":"Name","value":"isSignedV3"}},{"kind":"Field","name":{"kind":"Name","value":"isValidApk"}},{"kind":"Field","name":{"kind":"Name","value":"isWearable"}},{"kind":"Field","name":{"kind":"Name","value":"mainActivity"}},{"kind":"Field","name":{"kind":"Name","value":"mainActivityList"}},{"kind":"Field","name":{"kind":"Name","value":"manifestFeatures"}},{"kind":"Field","name":{"kind":"Name","value":"manifestLibraries"}},{"kind":"Field","name":{"kind":"Name","value":"manifestXml"}},{"kind":"Field","name":{"kind":"Name","value":"maxSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"minSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"packagename"}},{"kind":"Field","name":{"kind":"Name","value":"permissionDetails"}},{"kind":"Field","name":{"kind":"Name","value":"permissions"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsDeclared"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsDeclaredDetails"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsImplied"}},{"kind":"Field","name":{"kind":"Name","value":"permissionsRequestedThirdParty"}},{"kind":"Field","name":{"kind":"Name","value":"providers"}},{"kind":"Field","name":{"kind":"Name","value":"receivers"}},{"kind":"Field","name":{"kind":"Name","value":"services"}},{"kind":"Field","name":{"kind":"Name","value":"signatureNames"}},{"kind":"Field","name":{"kind":"Name","value":"targetSdkVersion"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApkidReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkidReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"files"}},{"kind":"Field","name":{"kind":"Name","value":"rulesSha256"}},{"kind":"Field","name":{"kind":"Name","value":"reportFileJson"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"data"}}]}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ApkleaksReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ApkleaksReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"results"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"ExodusReport"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"ExodusReportType"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"results"}},{"kind":"Field","name":{"kind":"Name","value":"reportDate"}},{"kind":"Field","name":{"kind":"Name","value":"scannerName"}},{"kind":"Field","name":{"kind":"Name","value":"scannerVersion"}}]}}]} as unknown as DocumentNode; +export const GetRqJobListDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobList"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_job_list"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"funcName"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"isFailed"}},{"kind":"Field","name":{"kind":"Name","value":"isFinished"}},{"kind":"Field","name":{"kind":"Name","value":"queueName"}},{"kind":"Field","name":{"kind":"Name","value":"startedAt"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode; +export const GetRqJobQueueNamesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetRqJobQueueNames"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"rq_queue_name_list"}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/src/app.tsx b/src/app.tsx index 7a919e8c..ee73c93b 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -3,9 +3,9 @@ import LoginPage from "@/pages/login-page.tsx"; import PublicOnlyRoute from "@/routes/public-only-route.tsx"; import ProtectedLayout from "@/routes/protected-layout.tsx"; import HomePage from "@/pages/home-page.tsx"; -import EmulatorPage from "@/pages/EmulatorPage"; +import {EmulatorPageWrapper} from "@/pages/EmulatorPageWrapper.tsx"; import {ImporterPage} from "@/pages/importer-page.tsx"; -import {ScannerPage} from "@/pages/scanner-page.tsx"; +import {ScanJobsPage} from "@/pages/scan-jobs-page.tsx"; import {FirmwaresPage} from "@/pages/firmwares-page.tsx"; import {FirmwarePage} from "@/pages/firmware-page.tsx"; import {AppsPage} from "@/pages/apps-page.tsx"; @@ -13,6 +13,16 @@ import {AppPage} from "@/pages/app-page.tsx"; import {FilePage} from "@/pages/file-page.tsx"; import {FilesPage} from "@/pages/files-page.tsx"; import {NotFoundPage} from "@/pages/not-found-page.tsx"; +import {ReportsPage} from "@/pages/reports/reports-page.tsx"; +import {ReportPage} from "@/pages/reports/report-page.tsx"; +import { + APPS_URL, + EMULATOR_URL, FILES_URL, + FIRMWARES_URL, + IMPORTER_URL, + REPORTS_URL, + SCAN_JOBS_URL +} from "@/components/ui/sidebar/app-sidebar.tsx"; function App() { return ( @@ -23,16 +33,19 @@ function App() { }> }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> }/> diff --git a/src/assets/emulator/theming/global.js b/src/assets/emulator/theming/global.js index 5131d5be..89efc99f 100644 --- a/src/assets/emulator/theming/global.js +++ b/src/assets/emulator/theming/global.js @@ -1,147 +1,161 @@ import { createGlobalStyle } from 'styled-components'; export const GlobalStyles = createGlobalStyle` - *, - *::after, - *::before { - box-sizing: border-box; - } - - body { - min-height: 100vh; - height: 100%; - width: 100%; - background: ${({theme}) => theme.body}; - color: ${({theme}) => theme.text}; - font-family: BlinkMacSystemFont, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; - transition: all 0.25s linear; - overflow: auto; - margin-bottom: 2%; - padding: 0; - } - - footer { - padding: 2%; - display: flex; - height: 100%; - justify-content: center; - align-items: center; - } - - small { - display: block; - } - - button { - display: block; - } - - a { - color: ${({theme}) => theme.text}; - } - - .light-tabs { - background-color: white; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19); - } - - .dark-tabs { - height: 100%; - background-color: black; - border-color: rgb(0,255,0); - box-shadow: 0 2px 4px 0 rgba(0, 255, 0, 0.2), 0 3px 10px 0 rgba(0, 255, 0, 0.19); - } - - .dark-tabs.nav > a.active{ - color: white; - background: green; - } - - .dark-tabs.nav > a:hover{ - color: white; - background: green; - } - - .light-tab { - padding: 30px; - background-color: white; - border: 1px solid black; - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19); - } - - .dark-tab { - height: 100%; - padding-bottom: 30px; - background-color: #1C2331; - border: 1px solid green; - box-shadow: 0 4px 8px 0 rgba(0, 255, 0, 0.2), 0 6px 20px 0 rgba(0, 255, 0, 0.19); - } - - .light-card { - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); - } - - .dark-card { - //box-shadow: 0 4px 8px 0 rgba(0, 255, 0, 0.2), 0 3px 10px 0 rgba(0, 255, 0, 0.19); - background-color: #1C2331; - margin-top: 5%; - } - - - .pagination > li > a - { - background-color: white; - color: #5A4181; - } - - .pagination > li > a:focus, - .pagination > li > a:hover, - .pagination > li > span:focus, - .pagination > li > span:hover - { - color: #5a5a5a; - background-color: #eee; - border-color: #ddd; - } - - .pagination > .active > a - { - color: white; - background-color: #5A4181 !Important; - border: solid 1px #5A4181 !Important; - } - - .pagination > .active > a:hover - { - background-color: #5A4181 !Important; - border: solid 1px #5A4181; - } - - .dropdown > ul{ - background-color: #5a5a5a !Important; - } - - .navigation{ - padding-left: 2%; - } - - .full-height{ - height: 100%; - } - - .center-content { - display: flex; - justify-content: center; - align-items: center; - height: 100%; - } - - .border-box { - border: 1px solid #ccc; - padding: 0; - } - - .noUserSelect { - user-select: none; - } + *, + *::after, + *::before { + box-sizing: border-box; + } + + :host, #emulator-root, body { + min-height: 100%; + height: 100%; + width: 100%; + background: ${({theme}) => theme.body}; + color: ${({theme}) => theme.text}; + font-family: BlinkMacSystemFont, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + transition: all 0.25s linear; + overflow: auto; + margin-bottom: 2%; + padding: 0; + } + + body { + min-height: 100vh; + height: 100%; + width: 100%; + background: ${({theme}) => theme.body}; + color: ${({theme}) => theme.text}; + font-family: BlinkMacSystemFont, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; + transition: all 0.25s linear; + overflow: auto; + margin-bottom: 2%; + padding: 0; + } + + footer { + padding: 2%; + display: flex; + height: 100%; + justify-content: center; + align-items: center; + } + + small { + display: block; + } + + button { + display: block; + } + + a { + color: ${({theme}) => theme.text}; + } + + .light-tabs { + background-color: white; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19); + } + + .dark-tabs { + height: 100%; + background-color: black; + border-color: rgb(0, 255, 0); + box-shadow: 0 2px 4px 0 rgba(0, 255, 0, 0.2), 0 3px 10px 0 rgba(0, 255, 0, 0.19); + } + + .dark-tabs.nav > a.active { + color: white; + background: green; + } + + .dark-tabs.nav > a:hover { + color: white; + background: green; + } + + .light-tab { + padding: 30px; + background-color: white; + border: 1px solid black; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19); + } + + .dark-tab { + height: 100%; + padding-bottom: 30px; + background-color: #1C2331; + border: 1px solid green; + box-shadow: 0 4px 8px 0 rgba(0, 255, 0, 0.2), 0 6px 20px 0 rgba(0, 255, 0, 0.19); + } + + .light-card { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + } + + .dark-card { + //box-shadow: 0 4px 8px 0 rgba(0, 255, 0, 0.2), 0 3px 10px 0 rgba(0, 255, 0, 0.19); + background-color: #1C2331; + margin-top: 5%; + } + + + .pagination > li > a { + background-color: white; + color: #5A4181; + } + + .pagination > li > a:focus, + .pagination > li > a:hover, + .pagination > li > span:focus, + .pagination > li > span:hover { + color: #5a5a5a; + background-color: #eee; + border-color: #ddd; + } + + .pagination > .active > a { + color: white; + background-color: #5A4181 !Important; + border: solid 1px #5A4181 !Important; + } + + .pagination > .active > a:hover { + background-color: #5A4181 !Important; + border: solid 1px #5A4181; + } + + .dropdown > ul { + background-color: #5a5a5a !Important; + } + + .navigation { + padding-left: 2%; + } + + .full-height { + height: 100%; + } + + .center-content { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + } + + .border-box { + border: 1px solid #ccc; + padding: 0; + } + + .noUserSelect { + user-select: none; + } + + .btn-outline-light { + --bs-btn-color: ${({theme}) => theme.text}; + --bs-btn-border-color: #CCCCCC; + } `; \ No newline at end of file diff --git a/src/components/graphql/app.graphql.ts b/src/components/graphql/app.graphql.ts index f27ed5b6..e438ed37 100644 --- a/src/components/graphql/app.graphql.ts +++ b/src/components/graphql/app.graphql.ts @@ -5,9 +5,9 @@ import {gql} from "@/__generated__"; // ---------------------------------------------------------------------------------------------------- export const CREATE_APP_IMPORT_JOB = gql(` - mutation CreateAppImportJob($storageIndex: Int!) { + mutation CreateAppImportJob($queueName: String!, $storageIndex: Int!) { createAppImportJob( - queueName: "high-python", + queueName: $queueName, storageIndex: $storageIndex ) { jobId @@ -92,11 +92,11 @@ export const GET_SCANNER_MODULE_NAMES = gql(` `); export const SCAN_APKS_BY_OBJECT_IDS = gql(` - mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!) { + mutation ScanApksByObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) { createApkScanJob( objectIdList: $objectIds, moduleName: $scannerName, - queueName: "default-python", + queueName: $queueName, ) { jobIdList } diff --git a/src/components/graphql/file.graphql.ts b/src/components/graphql/file.graphql.ts index ac11937a..6e128a56 100644 --- a/src/components/graphql/file.graphql.ts +++ b/src/components/graphql/file.graphql.ts @@ -5,7 +5,7 @@ export const FILE_ALL = gql(` id name absoluteStorePath -# fileSizeBytes + fileSizeBytes indexedDate isDirectory isOnDisk diff --git a/src/components/graphql/firmware.graphql.ts b/src/components/graphql/firmware.graphql.ts index 26899720..e1dc0322 100644 --- a/src/components/graphql/firmware.graphql.ts +++ b/src/components/graphql/firmware.graphql.ts @@ -5,10 +5,10 @@ import {gql} from "@/__generated__"; // ---------------------------------------------------------------------------------------------------- export const CREATE_FIRMWARE_EXTRACTOR_JOB = gql(` - mutation CreateFirmwareExtractorJob($storageIndex: Int!) { + mutation CreateFirmwareExtractorJob($queueName: String!, $storageIndex: Int!) { createFirmwareExtractorJob( createFuzzyHashes: false - queueName: "high-python" + queueName: $queueName storageIndex: $storageIndex ) { jobId @@ -86,11 +86,11 @@ export const GET_FIRMWARES_IMPORTER_PAGE = gql(` // ---------------------------------------------------------------------------------------------------- export const SCAN_APKS_BY_FIRMWARE_OBJECT_IDS = gql(` - mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!) { + mutation ScanApksByFirmwareObjectIds($objectIds: [String!]!, $scannerName: String!, $queueName: String!) { createApkScanJob( firmwareIdList: $objectIds, moduleName: $scannerName, - queueName: "default-python", + queueName: $queueName, ) { jobIdList } diff --git a/src/components/graphql/report.graphql.ts b/src/components/graphql/report.graphql.ts new file mode 100644 index 00000000..d8196243 --- /dev/null +++ b/src/components/graphql/report.graphql.ts @@ -0,0 +1,152 @@ +import {gql} from "@/__generated__"; + +export const BASIC_REPORT_INFO = gql(` + fragment BasicReportInfo on ApkScannerReportType { + id + reportDate + scannerName + scannerVersion + androidAppIdReference { + id + filename + firmwareIdReference { + id + } + } + } +`); + +export const GET_REPORT = gql(` + query GetReport($reportObjectId: String, $appObjectId: String, $scannerName: String) { + apk_scanner_report_list(fieldFilter: {id: $reportObjectId, android_app_id_reference: $appObjectId, scanner_name: $scannerName}) { + ...BasicReportInfo + } + } +`); + +export const GET_SCANNER_REPORT = gql(` + query GetScannerReport( + $reportObjectId: String + $wantAndroguard: Boolean! = false + $wantApkid: Boolean! = false + $wantApkleaks: Boolean! = false + $wantExodus: Boolean! = false + ) { + apk_scanner_report_list(fieldFilter: {id: $reportObjectId}) { + androidAppIdReference { + id + filename + firmwareIdReference { + id + } + + androguardReport: androguardReportReference @include(if: $wantAndroguard) { + ...AndroguardReport + } + apkidReport: apkidReportReference @include(if: $wantApkid) { + ...ApkidReport + } + apkleaksReport: apkleaksReportReference @include(if: $wantApkleaks) { + ...ApkleaksReport + } + exodusReport: exodusReportReference @include(if: $wantExodus) { + ...ExodusReport + } + } + } + } +`); + +// ---------------------------------------------------------------------------------------------------- +// AndroGuard REPORT +// ---------------------------------------------------------------------------------------------------- + +export const ANDROGUARD_REPORT = gql(` + fragment AndroguardReport on AndroGuardReportType { + id + activities + androidVersionCode + androidVersionName + appName + dexNames + effectiveTargetVersion + fileNameList + intentFiltersDict + isAndroidtv + isLeanback + isMultidex + isSignedV1 + isSignedV2 + isSignedV3 + isValidApk + isWearable + mainActivity + mainActivityList + manifestFeatures + manifestLibraries + manifestXml + maxSdkVersion + minSdkVersion + packagename + permissionDetails + permissions + permissionsDeclared + permissionsDeclaredDetails + permissionsImplied + permissionsRequestedThirdParty + providers + receivers + services + signatureNames + targetSdkVersion + reportDate + scannerName + scannerVersion + } +`); + +// ---------------------------------------------------------------------------------------------------- +// APKiD REPORT +// ---------------------------------------------------------------------------------------------------- + +export const APKID_REPORT = gql(` + fragment ApkidReport on ApkidReportType { + id + files + rulesSha256 + reportFileJson { + data + } + reportDate + scannerName + scannerVersion + } +`); + +// ---------------------------------------------------------------------------------------------------- +// APKLeaks REPORT +// ---------------------------------------------------------------------------------------------------- + +export const APKLEAKS_REPORT = gql(` + fragment ApkleaksReport on ApkleaksReportType { + id + results + reportDate + scannerName + scannerVersion + } +`); + +// ---------------------------------------------------------------------------------------------------- +// Exodus REPORT +// ---------------------------------------------------------------------------------------------------- + +export const EXODUS_REPORT = gql(` + fragment ExodusReport on ExodusReportType { + id + results + reportDate + scannerName + scannerVersion + } +`); diff --git a/src/components/graphql/rq-job.graphql.ts b/src/components/graphql/rq-job.graphql.ts index 8cb315cc..a713007d 100644 --- a/src/components/graphql/rq-job.graphql.ts +++ b/src/components/graphql/rq-job.graphql.ts @@ -8,8 +8,15 @@ export const GET_RQ_JOB_LIST = gql(` id isFailed isFinished + queueName startedAt status } } `); + +export const GET_RQ_QUEUE_NAMES = gql(` + query GetRqJobQueueNames { + rq_queue_name_list + } +`); diff --git a/src/components/rq-jobs/rq-job-queues-dropdown-menu.tsx b/src/components/rq-jobs/rq-job-queues-dropdown-menu.tsx new file mode 100644 index 00000000..c5d6b1f2 --- /dev/null +++ b/src/components/rq-jobs/rq-job-queues-dropdown-menu.tsx @@ -0,0 +1,63 @@ +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, + DropdownMenuTrigger +} from "@/components/ui/dropdown-menu.tsx"; +import {useState} from "react"; +import {Button} from "@/components/ui/button.tsx"; +import {ChevronDownIcon} from "lucide-react"; +import {useQuery} from "@apollo/client"; +import {GET_RQ_QUEUE_NAMES} from "@/components/graphql/rq-job.graphql.ts"; +import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; + +export function RqJobQueuesDropdownMenu( + { + onSelect, + }: { + onSelect?: (queue: string) => void; + }) { + const {data} = useQuery(GET_RQ_QUEUE_NAMES); + const queues = (data?.rq_queue_name_list ?? []) + .filter(isNonNullish); + const [rqJobQueue, setRqJobQueue] = useState(""); + const [open, setOpen] = useState(false); + + if (queues.length > 0 && rqJobQueue === "") { + // setting the last item as the initial value (should be "default-python") + const initial = queues[queues.length - 1]; + setRqJobQueue(initial); + onSelect?.(initial); + } + + if (queues.length <= 0) { + return null; + } + + const handleSelect = (value: string) => { + setRqJobQueue(value); + onSelect?.(value); + }; + + return ( + + + + + + RQ Job Queues + + + {queues.map((queue) => ( + {queue} + ))} + + + + ); +} \ No newline at end of file diff --git a/src/components/ui/entity-table.tsx b/src/components/ui/entity-table.tsx index 7b5379e6..71030456 100644 --- a/src/components/ui/entity-table.tsx +++ b/src/components/ui/entity-table.tsx @@ -14,23 +14,35 @@ export function EntityTable( {Object.entries(entity) // eslint-disable-next-line @typescript-eslint/no-unused-vars - .filter(([_, value]) => !value || typeof value !== "object") // show object if it's null, otherwise we don't display objects + .filter(([key, _]) => key !== "__typename") .map(([key, value]) => ( {key} {(() => { - let displayValue = value; + if (!value) { + return String(value); + } + + if (typeof value === "object") { + try { + return JSON.stringify(value, null, 2); + } catch { + return "[Object]"; + } + } + + if (typeof value !== "string") { + return String(value); + } try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const parsed = JSON.parse(value); - displayValue = JSON.stringify(parsed, null, 2); + return JSON.stringify(parsed, null, 2); } catch { - // ignore, we leave it as string if parsing fails + return value; } - - return displayValue; })()} diff --git a/src/components/ui/importer/dropzone.tsx b/src/components/ui/importer/dropzone.tsx index cc50278e..96dd9654 100644 --- a/src/components/ui/importer/dropzone.tsx +++ b/src/components/ui/importer/dropzone.tsx @@ -21,6 +21,7 @@ import {Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTi import {Button} from "@/components/ui/button.tsx"; import {CREATE_APP_IMPORT_JOB} from "@/components/graphql/app.graphql.ts"; import {RqJobsTable} from "@/components/ui/rq-jobs-table.tsx"; +import {RqJobQueuesDropdownMenu} from "@/components/rq-jobs/rq-job-queues-dropdown-menu.tsx"; type DropzoneProps = { className?: string; @@ -73,6 +74,8 @@ function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload}: const [createFirmwareExtractorJob] = useMutation(CREATE_FIRMWARE_EXTRACTOR_JOB); const [createAppImportJob] = useMutation(CREATE_APP_IMPORT_JOB); + const [selectedQueue, setSelectedQueue] = useState(""); + return ( 0 && !fileUploads.every(u => u.importStarted)} modal={true}> @@ -156,6 +159,9 @@ function UploadDialog({storageIndex, fileUploads, setFileUploads, removeUpload}: Cancel + { + setSelectedQueue(queue); + }}/> + <> + + + ); } -export { + export +{ ActionButton, - ScanAppActionButton, + ScanAppActionButton, + DeleteEntityButton, } diff --git a/src/components/ui/table/action-columns/app-action-columns.tsx b/src/components/ui/table/action-columns/app-action-columns.tsx new file mode 100644 index 00000000..3f8db7a3 --- /dev/null +++ b/src/components/ui/table/action-columns/app-action-columns.tsx @@ -0,0 +1,127 @@ +import {TypedDocumentNode} from "@graphql-typed-document-node/core"; +import { + Exact, + Scalars, + ScanApksByFirmwareObjectIdsMutation, + ScanApksByObjectIdsMutation +} from "@/__generated__/graphql.ts"; +import type {ColumnDef} from "@tanstack/react-table"; +import { + buildSelectEntityColumn, WithId, WithIdAndFirmwareIdReference +} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; +import {useNavigate} from "react-router"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {ActionButton, ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import {APPS_URL, FIRMWARES_URL, REPORTS_URL} from "@/components/ui/sidebar/app-sidebar.tsx"; +import {BookOpenIcon, EyeIcon} from "lucide-react"; + +function buildViewAppColumn(): ColumnDef { + return ( + { + id: "view", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const navigate = useNavigate(); + const appId = row.original.id; + const firmwareId = row.original.firmwareIdReference?.id; + + return ( + <> + {firmwareId && ( + + + void navigate(`${FIRMWARES_URL}/${firmwareId}${APPS_URL}/${appId}`)} + > + + + + +

View app

+
+
+ )} + + ); + }, + } + ); +} + +function buildViewReportsColumn(): ColumnDef { + return ( + { + id: "view-reports", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const navigate = useNavigate(); + const appId = row.original.id; + const firmwareId = row.original.firmwareIdReference?.id; + + return ( + <> + {firmwareId && ( + + + void navigate(`${FIRMWARES_URL}/${firmwareId}${APPS_URL}/${appId}${REPORTS_URL}`)} + > + + + + +

View reports

+
+
+ )} + + ); + } + } + ); +} + +export function buildScanAppColumn( + tooltipSingle: string, + tooltipSelected: string, + scanMutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + queueName: Scalars["String"]["input"] + }>>, +): ColumnDef { + return ( + { + id: "scan", + header: ({table}) => + row.original.id)} + tooltip={tooltipSelected} + mutation={scanMutation} + />, + cell: ({row}) => + , + } + ); +} + +export function buildAppActionColumns( + scanAppMutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + queueName: Scalars["String"]["input"] + }>>, +): ColumnDef [] { + return [ + buildSelectEntityColumn(), + buildViewAppColumn(), + buildViewReportsColumn(), + buildScanAppColumn("Scan app", "Scan selected apps", scanAppMutation), + ]; +} diff --git a/src/components/ui/table/action-columns/entity-action-columns.tsx b/src/components/ui/table/action-columns/entity-action-columns.tsx index 7e00fa0c..a11278cf 100644 --- a/src/components/ui/table/action-columns/entity-action-columns.tsx +++ b/src/components/ui/table/action-columns/entity-action-columns.tsx @@ -1,110 +1,23 @@ import type {ColumnDef} from "@tanstack/react-table"; import {Checkbox} from "@/components/ui/checkbox.tsx"; -import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; -import {EyeIcon, LoaderCircleIcon, TrashIcon} from "lucide-react"; -import {useLazyQuery, useMutation} from "@apollo/client"; -import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; -import {convertIdToObjectId} from "@/lib/graphql/graphql-utils.ts"; -import {useNavigate} from "react-router"; -import {GET_RQ_JOB_LIST} from "@/components/graphql/rq-job.graphql.ts"; import { Exact, - GetRqJobListQuery, Scalars, - ScanApksByFirmwareObjectIdsMutation, - ScanApksByObjectIdsMutation } from "@/__generated__/graphql.ts"; import {TypedDocumentNode} from "@graphql-typed-document-node/core"; -import {ActionButton, ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import { + DeleteEntityButton, +} from "@/components/ui/table/action-columns/action-buttons.tsx"; -type WithId = { id: string }; -type WithIdAndFirmwareIdReference = { +export type WithId = { id: string }; +export type WithIdAndFirmwareIdReference = { id: string; firmwareIdReference?: { __typename?: "AndroidFirmwareType" id: string } | null; }; -type WithTypenameMutation = { __typename?: "Mutation" }; - -const DELETION_JOB_FUNC_NAME = "api.v2.types.GenericDeletion.delete_queryset_background"; - -function isDeletionOngoing(objectIds: string[], rqJobListData: GetRqJobListQuery | undefined) { - const ongoingDeletionJobs = rqJobListData?.rq_job_list - ?.filter(job => - job?.funcName === DELETION_JOB_FUNC_NAME && - !job.isFinished && - !job.isFailed - ).filter(job => { - if (!job?.description) return false; - - /* - The job description contains the affected elements in the following format: - "api.v2.types.GenericDeletion.delete_queryset_background(['68d2c1f78773bc31564c1dab', '68d2c2008773bc31564c1dac'], )", - */ - const start = job.description.indexOf("['"); - const end = job.description.indexOf("']"); - const deletedObjectIdsSubstring = job.description.substring(start, end + 2); - // We parse the substring to a string array. But first, we need to replace both ' with ". - const deletedObjectIds = JSON.parse(deletedObjectIdsSubstring.replace(/'/g, '"')) as string[]; - return objectIds.some((id) => deletedObjectIds.includes(id)); - }); - - return (ongoingDeletionJobs?.length ?? 0) > 0; -} - - -function DeleteEntityButton( - { - ids, - tooltip, - deleteMutation, - }: Readonly<{ - ids: string[]; - tooltip: string; - deleteMutation: TypedDocumentNode | Scalars["String"]["input"] - }>>; - }>, -) { - const objectIds = ids.map(id => convertIdToObjectId(id)); - const [deleteEntities] = useMutation(deleteMutation, { - variables: {objectIds: objectIds}, - }); - - const [getRqJobList, {data: rqJobListData}] = useLazyQuery(GET_RQ_JOB_LIST, { - fetchPolicy: "cache-and-network", - pollInterval: 5000, - }); - - if (isDeletionOngoing(objectIds, rqJobListData)) { - return ( -
- -
- ); - } - - return ( - - - { - void deleteEntities(); - void getRqJobList(); - }} - > - - - - -

{tooltip}

-
-
- ) -} +export type WithTypenameMutation = { __typename?: "Mutation" }; function buildSelectEntityColumn(): ColumnDef { return ( @@ -137,45 +50,6 @@ function buildSelectEntityColumn(): ColumnDef { ); } -function buildViewEntityColumn( - tooltip: string, - basePath: string, -): ColumnDef { - return ( - { - id: "view", - cell: ({row}) => { - // eslint-disable-next-line react-hooks/rules-of-hooks - const navigate = useNavigate(); - const entityId = row.original.id; - const firmwareId = row.original.firmwareIdReference?.id; - - return ( - - - { - if (firmwareId) { - void navigate(`/firmwares/${firmwareId}${basePath}/${entityId}`); - } else { - void navigate(`${basePath}/${entityId}`); - } - }} - > - - - - -

{tooltip}

-
-
- ); - }, - } - ); -} - function buildDeleteEntityColumn( tooltipSingle: string, tooltipSelected: string, @@ -202,72 +76,7 @@ function buildDeleteEntityColumn( - tooltipSingle: string, - tooltipSelected: string, - mutation: TypedDocumentNode | Scalars["String"]["input"] - scannerName: Scalars["String"]["input"] - }>>, -): ColumnDef { - return ( - { - id: "scan", - header: ({table}) => - row.original.id)} - tooltip={tooltipSelected} - mutation={mutation} - />, - cell: ({row}) => - , - } - ); -} - -function buildFirmwareActionColumns( - scanAppMutation: TypedDocumentNode | Scalars["String"]["input"] - scannerName: Scalars["String"]["input"] - }>>, -): ColumnDef[] { - return [ - buildSelectEntityColumn(), - buildViewEntityColumn("View firmware", "/firmwares"), - buildScanAppColumn("Scan all apps of this firmware", "Scan all apps of selected firmwares", scanAppMutation), - buildDeleteEntityColumn("Delete firmware", "Delete selected firmwares", DELETE_FIRMWARE_BY_OBJECT_ID), - ]; -} - -function buildAppActionColumns( - scanAppMutation: TypedDocumentNode | Scalars["String"]["input"] - scannerName: Scalars["String"]["input"] - }>>, -): ColumnDef [] { - return [ - buildSelectEntityColumn(), - buildViewEntityColumn("View app", "/apps"), - buildScanAppColumn("Scan app", "Scan selected apps", scanAppMutation), - ]; -} - -function buildFileActionColumns(): ColumnDef [] { - return [ - buildSelectEntityColumn(), - buildViewEntityColumn("View file", "/files"), - ]; -} - export { buildSelectEntityColumn, - buildViewEntityColumn, buildDeleteEntityColumn, - buildFirmwareActionColumns, - buildAppActionColumns, - buildFileActionColumns, } diff --git a/src/components/ui/table/action-columns/file-action-columns.tsx b/src/components/ui/table/action-columns/file-action-columns.tsx new file mode 100644 index 00000000..6150ddb6 --- /dev/null +++ b/src/components/ui/table/action-columns/file-action-columns.tsx @@ -0,0 +1,51 @@ +import type {ColumnDef} from "@tanstack/react-table"; +import { + buildSelectEntityColumn, + WithIdAndFirmwareIdReference +} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; +import {useNavigate} from "react-router"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {ActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import {FILES_URL, FIRMWARES_URL} from "@/components/ui/sidebar/app-sidebar.tsx"; +import {EyeIcon} from "lucide-react"; + +function buildViewFileColumn(): ColumnDef { + return ( + { + id: "view", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const navigate = useNavigate(); + const fileId = row.original.id; + const firmwareId = row.original.firmwareIdReference?.id; + + return ( + <> + {firmwareId && ( + + + void navigate(`${FIRMWARES_URL}/${firmwareId}${FILES_URL}/${fileId}`)} + > + + + + +

View file

+
+
+ )} + + ); + }, + } + ); +} + +export function buildFileActionColumns(): ColumnDef [] { + return [ + buildSelectEntityColumn(), + buildViewFileColumn(), + ]; +} diff --git a/src/components/ui/table/action-columns/firmware-action-columns.tsx b/src/components/ui/table/action-columns/firmware-action-columns.tsx new file mode 100644 index 00000000..57d7ba72 --- /dev/null +++ b/src/components/ui/table/action-columns/firmware-action-columns.tsx @@ -0,0 +1,59 @@ +import {TypedDocumentNode} from "@graphql-typed-document-node/core"; +import {Exact, Scalars, ScanApksByFirmwareObjectIdsMutation} from "@/__generated__/graphql.ts"; +import type {ColumnDef} from "@tanstack/react-table"; +import {DELETE_FIRMWARE_BY_OBJECT_ID} from "@/components/graphql/firmware.graphql.ts"; +import { + buildDeleteEntityColumn, + buildSelectEntityColumn, + WithId +} from "@/components/ui/table/action-columns/entity-action-columns.tsx"; +import {useNavigate} from "react-router"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {ActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import {FIRMWARES_URL} from "@/components/ui/sidebar/app-sidebar.tsx"; +import {EyeIcon} from "lucide-react"; +import {buildScanAppColumn} from "@/components/ui/table/action-columns/app-action-columns.tsx"; + +function buildViewFirmwareColumn(): ColumnDef { + return ( + { + id: "view", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const navigate = useNavigate(); + const firmwareId = row.original.id; + + return ( + + + void navigate(`${FIRMWARES_URL}/${firmwareId}`)} + > + + + + +

View firmware

+
+
+ ); + }, + } + ); +} + +export function buildFirmwareActionColumns( + scanAppMutation: TypedDocumentNode | Scalars["String"]["input"] + scannerName: Scalars["String"]["input"] + queueName: Scalars["String"]["input"] + }>>, +): ColumnDef[] { + return [ + buildSelectEntityColumn(), + buildViewFirmwareColumn(), + buildScanAppColumn("Scan all apps of this firmware", "Scan all apps of selected firmwares", scanAppMutation), + buildDeleteEntityColumn("Delete firmware", "Delete selected firmwares", DELETE_FIRMWARE_BY_OBJECT_ID), + ]; +} diff --git a/src/components/ui/table/action-columns/report-action-columns.tsx b/src/components/ui/table/action-columns/report-action-columns.tsx new file mode 100644 index 00000000..f86aa48c --- /dev/null +++ b/src/components/ui/table/action-columns/report-action-columns.tsx @@ -0,0 +1,56 @@ +import type {ColumnDef} from "@tanstack/react-table"; +import {useNavigate} from "react-router"; +import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip.tsx"; +import {ActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import {APPS_URL, FIRMWARES_URL, REPORTS_URL} from "@/components/ui/sidebar/app-sidebar.tsx"; +import {EyeIcon} from "lucide-react"; + +type WithIdAndAppIdAndFirmwareId = { + id?: string | null; + scannerName: string; + androidAppIdReference: { + __typename?: "AndroidAppType" + id: string + filename: string + firmwareIdReference?: { + __typename?: "AndroidFirmwareType" + id: string + } | null + }; +}; + +export function buildViewReportColumn(): ColumnDef { + return ( + { + id: "view", + cell: ({row}) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const navigate = useNavigate(); + const reportId = row.original.id; + const appId = row.original.androidAppIdReference.id; + const firmwareId = row.original.androidAppIdReference.firmwareIdReference?.id; + const scannerName = row.original.scannerName; + + return ( + <> + {firmwareId && reportId && ( + + + void navigate(`${FIRMWARES_URL}/${firmwareId}${APPS_URL}/${appId}${REPORTS_URL}/${scannerName}-${reportId}`)} + > + + + + +

View report

+
+
+ )} + + ); + }, + } + ); +} \ No newline at end of file diff --git a/src/components/ui/table/data-table-column-visbility.tsx b/src/components/ui/table/data-table-column-visbility.tsx index 06bc016d..be0ab4e9 100644 --- a/src/components/ui/table/data-table-column-visbility.tsx +++ b/src/components/ui/table/data-table-column-visbility.tsx @@ -15,42 +15,49 @@ export function DataTableViewOptions( { table, }: Readonly<{ table: Table }>) { + const hideableColumns = table.getAllColumns() + .filter(c => typeof c.accessorFn !== "undefined" && c.getCanHide()); + return ( - - - - - - Toggle columns - - {table - .getAllColumns() - .filter( - (column) => - typeof column.accessorFn !== "undefined" && column.getCanHide() - ) - .map((column) => { - return ( - { - column.toggleVisibility(value); - }} + <> + { + hideableColumns.length > 0 && ( + + + + + + Toggle columns + + {hideableColumns + .map((column) => { + return ( + { + column.toggleVisibility(value); + }} + > + {typeof column.columnDef.header === "string" + ? (column.columnDef.header) + : (column.id) + } + + ) + })} + + + ) + } + ) } diff --git a/src/components/ui/table/data-table-pagination.tsx b/src/components/ui/table/data-table-pagination.tsx index 7fa6590a..8d62f4c3 100644 --- a/src/components/ui/table/data-table-pagination.tsx +++ b/src/components/ui/table/data-table-pagination.tsx @@ -31,7 +31,7 @@ export function DataTablePagination( - {[1, 5, 10, 25, 50].map((pageSize) => ( + {[10, 25, 50, 100].map((pageSize) => ( {pageSize} diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index 072395fc..28dc07fd 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -15,27 +15,29 @@ import { TableHeader, TableRow, } from "@/components/ui/table.tsx" -import {Button} from "@/components/ui/button.tsx"; import {useEffect, useRef, useState} from "react"; -import { - DropdownMenu, - DropdownMenuCheckboxItem, - DropdownMenuContent, - DropdownMenuTrigger -} from "@/components/ui/dropdown-menu.tsx"; import {DataTablePagination} from "@/components/ui/table/data-table-pagination.tsx"; import {cn} from "@/lib/utils.ts"; -import {AlertCircleIcon, ChevronRightIcon} from "lucide-react"; +import {AlertCircleIcon} from "lucide-react"; import {ScrollArea, ScrollBar} from "@/components/ui/scroll-area.tsx"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; import {ApolloError} from "@apollo/client"; +import {DataTableViewOptions} from "@/components/ui/table/data-table-column-visbility.tsx"; + +declare module "@tanstack/table-core" { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface ColumnMeta { + hidden?: boolean; + } +} interface DataTableProps { className?: string; columns: ColumnDef[]; data: TData[]; onRowSelectionChange?: (selectedRows: TData[]) => void; + dataTablePagination?: boolean; } function DataTable( @@ -44,17 +46,27 @@ function DataTable( columns, data, onRowSelectionChange, + dataTablePagination = true, }: Readonly> ) { const [sorting, setSorting] = useState([]); - const [columnVisibility, setColumnVisibility] = useState({}); + const [columnVisibility, setColumnVisibility] = useState(() => + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + Object.fromEntries( + columns.map(c => [c.id, !(c.meta?.hidden ?? false)]) + ) + ); const [rowSelection, setRowSelection] = useState({}); - const [isColumnMenuOpen, setIsColumnMenuOpen] = useState(false); + const [pagination, setPagination] = useState({ + pageIndex: 0, + pageSize: dataTablePagination ? 25 : Number.MAX_SAFE_INTEGER, + }); const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel(), + onPaginationChange: setPagination, getPaginationRowModel: getPaginationRowModel(), enableRowSelection: true, onSortingChange: setSorting, @@ -65,6 +77,7 @@ function DataTable( sorting, columnVisibility, rowSelection, + pagination, }, }); @@ -77,45 +90,13 @@ function DataTable( if (!onRowSelectionChangeRef.current) return; const selectedRows = table.getSelectedRowModel().flatRows.map(row => row.original); onRowSelectionChangeRef.current(selectedRows); - }, [rowSelection]); // Ignore ESLint here, we need the effect whenever row selection changes + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [rowSelection]); return (
- - - - - - {table - .getAllColumns() - .filter( - (column) => column.getCanHide() - ) - .map((column) => { - return ( - { - column.toggleVisibility(value); - }} - > - {typeof column.columnDef.header === "string" - ? (column.columnDef.header) - : (column.id) - } - - ) - })} - - +
@@ -166,7 +147,7 @@ function DataTable( {table.getFilteredSelectedRowModel().rows.length} of{" "} {table.getFilteredRowModel().rows.length} row(s) selected. - + {dataTablePagination && } ); @@ -177,14 +158,16 @@ function ScrollableDataTable( columns, data, onRowSelectionChange, + dataTablePagination, }: Readonly> ) { return ( - + @@ -196,6 +179,7 @@ function StateHandlingScrollableDataTable( columns, data, onRowSelectionChange, + dataTablePagination, idsLoading, dataLoading, idsError, @@ -234,6 +218,7 @@ function StateHandlingScrollableDataTable( columns={columns} data={data} onRowSelectionChange={onRowSelectionChange} + dataTablePagination={dataTablePagination} /> )} diff --git a/src/components/ui/theming/theme-provider.tsx b/src/components/ui/theming/theme-provider.tsx index 0c941b4d..3c58f54e 100644 --- a/src/components/ui/theming/theme-provider.tsx +++ b/src/components/ui/theming/theme-provider.tsx @@ -23,7 +23,7 @@ const ThemeProviderContext = createContext(initialState) export function ThemeProvider({ children, defaultTheme = "system", - storageKey = "vite-ui-theme", + storageKey = "theme", ...props }: ThemeProviderProps) { const [theme, setTheme] = useState( diff --git a/src/hooks/emulator/theming/useDarkMode.ts b/src/hooks/emulator/theming/useDarkMode.ts deleted file mode 100644 index bb0deadb..00000000 --- a/src/hooks/emulator/theming/useDarkMode.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { useEffect, useState } from 'react'; - -export const useDarkMode = (): [theme: 'light' | 'dark', toggleTheme: () => void, componentMounted: boolean] => { - const [theme, setTheme] = useState<'light' | 'dark'>('dark'); - const [componentMounted, setComponentMounted] = useState(false); - - const setMode = (mode: 'light' | 'dark') => { - window.localStorage.setItem('theme', mode) - setTheme(mode) - }; - - const toggleTheme = () => { - if (theme === 'light') { - setMode('dark') - } else { - setMode('light') - } - }; - - useEffect(() => { - const localTheme = window.localStorage.getItem('theme'); - - if (localTheme === 'light' || localTheme === 'dark') { - setTheme(localTheme); - } else { - const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches ?? false; - setMode(prefersDark ? 'dark' : 'light'); - } - - setComponentMounted(true); - }, []); - - return [theme, toggleTheme, componentMounted] -}; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index 8b7b1bb8..26aa0cbb 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -12,7 +12,7 @@ createRoot(document.getElementById('root')!).render( - + diff --git a/src/pages/EmulatorPage.jsx b/src/pages/EmulatorPage.jsx index 4274e352..b02ca63a 100644 --- a/src/pages/EmulatorPage.jsx +++ b/src/pages/EmulatorPage.jsx @@ -1,11 +1,12 @@ -import React, {useState} from 'react'; -import {GlobalStyles} from "../assets/emulator/theming/global.js"; -import {ThemeProvider} from "styled-components"; -import {useDarkMode} from "../hooks/emulator/theming/useDarkMode.js"; -import {darkTheme, lightTheme} from "../assets/emulator/theming/theme.js"; -import {Button} from "@/components/ui/button.js"; +import React, {useEffect, useState} from 'react'; +import {Button, ButtonGroup, Col, Container, Form, InputGroup, Row, Spinner, ToggleButton} from "react-bootstrap"; +import {MapPin} from "lucide-react"; function EmulatorPage() { + useEffect(() => { + import("bootstrap/dist/css/bootstrap.min.css"); + }, []); + const emulatorUrisFromStorage = JSON.parse(sessionStorage.getItem('emulatorUris')) || []; const radiosEmulatorView = [{name: 'WebRTC', value: 'webrtc'}, {name: 'PNG', value: 'png'},] const [emulatorViewCounter, setEmulatorViewCounter] = useState(2); @@ -83,96 +84,91 @@ function EmulatorPage() { }); }; - const [theme] = useDarkMode(); - const themeMode = theme === 'light' ? lightTheme : darkTheme; - return ( - - - -
Emulator (experimental)
- -
- {selectedEmulatorViewIndex === null ? (<> - - - ) : ( setSelectedEmulatorViewIndex(null)}>Multiple Emulator Views - )} - - - - {selectedEmulatorViewIndex !== null ? (+ +
Emulator (experimental)
+ +
+ {selectedEmulatorViewIndex === null ? (<> + + + ) : ( setSelectedEmulatorViewIndex(null)}>Multiple Emulator Views + )} + + + + {selectedEmulatorViewIndex !== null ? (+ updateEmulatorView(selectedEmulatorViewIndex, 'emulatorConnectionState', value)} + hasEmulatorAudio={emulatorViews[selectedEmulatorViewIndex].hasEmulatorAudio} + setHasEmulatorAudio={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorAudio', value)} + longitudeValue={emulatorViews[selectedEmulatorViewIndex].longitudeValue} + setLongitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'longitudeValue', value)} + latitudeValue={emulatorViews[selectedEmulatorViewIndex].latitudeValue} + setLatitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'latitudeValue', value)} + hasEmulatorError={emulatorViews[selectedEmulatorViewIndex].hasEmulatorError} + setHasEmulatorError={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorError', value)} + emulatorErrorMessage={emulatorViews[selectedEmulatorViewIndex].emulatorErrorMessage} + setEmulatorErrorMessage={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorErrorMessage', value)} + gpsLocation={emulatorViews[selectedEmulatorViewIndex].gpsLocation} + setGpsLocation={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'gpsLocation', value)} + volumeState={emulatorViews[selectedEmulatorViewIndex].volumeState} + setVolumeState={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'volumeState', value)} + radioEmulatorViewValue={emulatorViews[selectedEmulatorViewIndex].radioEmulatorViewValue} + setRadioEmulatorViewValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'radioEmulatorViewValue', value)} + emulatorUri={emulatorViews[selectedEmulatorViewIndex].emulatorUri} + setEmulatorUri={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorUri', value)} + radiosEmulatorView={emulatorViews[selectedEmulatorViewIndex].radiosEmulatorView} + onSelect={() => setSelectedEmulatorViewIndex(selectedEmulatorViewIndex)} + selectedEmulatorViewIndex={selectedEmulatorViewIndex} + /> + ) : (emulatorViews.map((emulatorView, index) => ( + updateEmulatorView(selectedEmulatorViewIndex, 'emulatorConnectionState', value)} - hasEmulatorAudio={emulatorViews[selectedEmulatorViewIndex].hasEmulatorAudio} - setHasEmulatorAudio={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorAudio', value)} - longitudeValue={emulatorViews[selectedEmulatorViewIndex].longitudeValue} - setLongitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'longitudeValue', value)} - latitudeValue={emulatorViews[selectedEmulatorViewIndex].latitudeValue} - setLatitudeValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'latitudeValue', value)} - hasEmulatorError={emulatorViews[selectedEmulatorViewIndex].hasEmulatorError} - setHasEmulatorError={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'hasEmulatorError', value)} - emulatorErrorMessage={emulatorViews[selectedEmulatorViewIndex].emulatorErrorMessage} - setEmulatorErrorMessage={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorErrorMessage', value)} - gpsLocation={emulatorViews[selectedEmulatorViewIndex].gpsLocation} - setGpsLocation={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'gpsLocation', value)} - volumeState={emulatorViews[selectedEmulatorViewIndex].volumeState} - setVolumeState={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'volumeState', value)} - radioEmulatorViewValue={emulatorViews[selectedEmulatorViewIndex].radioEmulatorViewValue} - setRadioEmulatorViewValue={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'radioEmulatorViewValue', value)} - emulatorUri={emulatorViews[selectedEmulatorViewIndex].emulatorUri} - setEmulatorUri={(value) => updateEmulatorView(selectedEmulatorViewIndex, 'emulatorUri', value)} - radiosEmulatorView={emulatorViews[selectedEmulatorViewIndex].radiosEmulatorView} - onSelect={() => setSelectedEmulatorViewIndex(selectedEmulatorViewIndex)} - selectedEmulatorViewIndex={selectedEmulatorViewIndex} + index={index} + emulatorConnectionState={emulatorView.emulatorConnectionState} + setEmulatorConnectionState={(value) => updateEmulatorView(index, 'emulatorConnectionState', value)} + hasEmulatorAudio={emulatorView.hasEmulatorAudio} + setHasEmulatorAudio={(value) => updateEmulatorView(index, 'hasEmulatorAudio', value)} + longitudeValue={emulatorView.longitudeValue} + setLongitudeValue={(value) => updateEmulatorView(index, 'longitudeValue', value)} + latitudeValue={emulatorView.latitudeValue} + setLatitudeValue={(value) => updateEmulatorView(index, 'latitudeValue', value)} + hasEmulatorError={emulatorView.hasEmulatorError} + setHasEmulatorError={(value) => updateEmulatorView(index, 'hasEmulatorError', value)} + emulatorErrorMessage={emulatorView.emulatorErrorMessage} + setEmulatorErrorMessage={(value) => updateEmulatorView(index, 'emulatorErrorMessage', value)} + gpsLocation={emulatorView.gpsLocation} + setGpsLocation={(value) => updateEmulatorView(index, 'gpsLocation', value)} + volumeState={emulatorView.volumeState} + setVolumeState={(value) => updateEmulatorView(index, 'volumeState', value)} + radioEmulatorViewValue={emulatorView.radioEmulatorViewValue} + setRadioEmulatorViewValue={(value) => updateEmulatorView(index, 'radioEmulatorViewValue', value)} + emulatorUri={emulatorView.emulatorUri} + setEmulatorUri={(value) => updateEmulatorView(index, 'emulatorUri', value)} + radiosEmulatorView={emulatorView.radiosEmulatorView} + onSelect={() => setSelectedEmulatorViewIndex(index)} + selectedEmulatorViewIndex={null} /> - ) : (emulatorViews.map((emulatorView, index) => ( - - updateEmulatorView(index, 'emulatorConnectionState', value)} - hasEmulatorAudio={emulatorView.hasEmulatorAudio} - setHasEmulatorAudio={(value) => updateEmulatorView(index, 'hasEmulatorAudio', value)} - longitudeValue={emulatorView.longitudeValue} - setLongitudeValue={(value) => updateEmulatorView(index, 'longitudeValue', value)} - latitudeValue={emulatorView.latitudeValue} - setLatitudeValue={(value) => updateEmulatorView(index, 'latitudeValue', value)} - hasEmulatorError={emulatorView.hasEmulatorError} - setHasEmulatorError={(value) => updateEmulatorView(index, 'hasEmulatorError', value)} - emulatorErrorMessage={emulatorView.emulatorErrorMessage} - setEmulatorErrorMessage={(value) => updateEmulatorView(index, 'emulatorErrorMessage', value)} - gpsLocation={emulatorView.gpsLocation} - setGpsLocation={(value) => updateEmulatorView(index, 'gpsLocation', value)} - volumeState={emulatorView.volumeState} - setVolumeState={(value) => updateEmulatorView(index, 'volumeState', value)} - radioEmulatorViewValue={emulatorView.radioEmulatorViewValue} - setRadioEmulatorViewValue={(value) => updateEmulatorView(index, 'radioEmulatorViewValue', value)} - emulatorUri={emulatorView.emulatorUri} - setEmulatorUri={(value) => updateEmulatorView(index, 'emulatorUri', value)} - radiosEmulatorView={emulatorView.radiosEmulatorView} - onSelect={() => setSelectedEmulatorViewIndex(index)} - selectedEmulatorViewIndex={null} - /> - )))} - - - + )))} + + ); } -function EmulatorView({ index, +function EmulatorView({ + index, emulatorConnectionState, setEmulatorConnectionState, hasEmulatorAudio, @@ -195,7 +191,8 @@ function EmulatorView({ index, setEmulatorUri, radiosEmulatorView, selectedEmulatorViewIndex, - onSelect}) { + onSelect + }) { const [showEmulator, setShowEmulator] = useState(false); const [isLoading, setIsLoading] = useState(false); const isSelected = index === selectedEmulatorViewIndex; @@ -228,7 +225,7 @@ function EmulatorView({ index, const onEmulatorStateChange = (state) => { console.info("Emulator state changed", state) - setEmulatorConnectionState({ emuState: state }); + setEmulatorConnectionState({emuState: state}); if (state === "disconnected") { setIsLoading(false); } @@ -245,7 +242,7 @@ function EmulatorView({ index, if (showEmulator) { setShowEmulator(false); setIsLoading(false); - }else { + } else { setShowEmulator(true); setIsLoading(true); } diff --git a/src/pages/EmulatorPageWrapper.tsx b/src/pages/EmulatorPageWrapper.tsx new file mode 100644 index 00000000..782d888a --- /dev/null +++ b/src/pages/EmulatorPageWrapper.tsx @@ -0,0 +1,53 @@ +import ReactDOM from "react-dom/client"; +import {useEffect, useRef} from "react"; +import {StyleSheetManager, ThemeProvider} from "styled-components"; +import {GlobalStyles} from "@/assets/emulator/theming/global"; +import EmulatorPage from "@/pages/EmulatorPage"; +import {useTheme} from "@/components/ui/theming/theme-provider.tsx"; +import {darkTheme, lightTheme} from "@/assets/emulator/theming/theme"; + +export function EmulatorPageWrapper() { + const containerRef = useRef(null); + const shadowRootRef = useRef(null); + const rootRef = useRef | null>(null); + + // Use theme but resolve "system" to "light" or "dark" + const {theme} = useTheme(); + const preferredColorScheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? "dark" : "light"; + const resolvedMode = + theme === "light" || theme === "dark" + ? theme + : preferredColorScheme; + const themeMode = resolvedMode === "light" ? lightTheme : darkTheme; + + useEffect(() => { + if (!shadowRootRef.current && containerRef.current) { + const shadow = containerRef.current.attachShadow({mode: "open"}); + shadowRootRef.current = shadow; + + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = "https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css"; + shadow.appendChild(link); + + const mountPoint = document.createElement("div"); + mountPoint.id = "emulator-root"; + shadow.appendChild(mountPoint); + + rootRef.current = ReactDOM.createRoot(mountPoint); + } + + if (rootRef.current && shadowRootRef.current) { + rootRef.current.render( + + + + + + + ); + } + }, [themeMode]); + + return
; +} \ No newline at end of file diff --git a/src/pages/app-page.tsx b/src/pages/app-page.tsx index d8aceb40..e044974c 100644 --- a/src/pages/app-page.tsx +++ b/src/pages/app-page.tsx @@ -5,12 +5,13 @@ import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {APP_ALL, GET_APP_BY_ID, SCAN_APKS_BY_OBJECT_IDS} from "@/components/graphql/app.graphql.ts"; import {useFragment} from "@/__generated__"; import {Alert, AlertTitle} from "@/components/ui/alert.tsx"; -import {AlertCircleIcon, FileIcon} from "lucide-react"; +import {AlertCircleIcon, BookOpenIcon, FileIcon} from "lucide-react"; import {Skeleton} from "@/components/ui/skeleton.tsx"; import {AppAllFragment} from "@/__generated__/graphql.ts"; import {EntityTable} from "@/components/ui/entity-table.tsx"; import {Button} from "@/components/ui/button.tsx"; import {ScanAppActionButton} from "@/components/ui/table/action-columns/action-buttons.tsx"; +import {APPS_URL, FILES_URL, FIRMWARES_URL, REPORTS_URL} from "@/components/ui/sidebar/app-sidebar.tsx"; export function AppPage() { const {appId} = useParams<{ appId: string }>(); @@ -47,7 +48,7 @@ export function AppPage() { .flatMap(firmwareEdge => (firmwareEdge?.node?.androidAppIdList?.edges ?? [])) // eslint-disable-next-line react-hooks/rules-of-hooks .map(edge => useFragment(APP_ALL, edge?.node)) - .filter(isNonNullish) + .filter(isNonNullish); if (apps.length === 1) { const app: AppAllFragment = apps[0]; @@ -55,11 +56,20 @@ export function AppPage() { return (
+ + +
+
+ + ); +} \ No newline at end of file diff --git a/src/components/ui/table/data-table.tsx b/src/components/ui/table/data-table.tsx index 28dc07fd..bd8dc018 100644 --- a/src/components/ui/table/data-table.tsx +++ b/src/components/ui/table/data-table.tsx @@ -24,6 +24,7 @@ import {Skeleton} from "@/components/ui/skeleton.tsx"; import {Alert, AlertDescription, AlertTitle} from "@/components/ui/alert.tsx"; import {ApolloError} from "@apollo/client"; import {DataTableViewOptions} from "@/components/ui/table/data-table-column-visbility.tsx"; +import {CursorPagination, CursorPaginationProps} from "@/components/ui/table/cursor-pagination.tsx"; declare module "@tanstack/table-core" { // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -38,6 +39,7 @@ interface DataTableProps { data: TData[]; onRowSelectionChange?: (selectedRows: TData[]) => void; dataTablePagination?: boolean; + cursorPagination?: CursorPaginationProps; } function DataTable( @@ -47,6 +49,7 @@ function DataTable( data, onRowSelectionChange, dataTablePagination = true, + cursorPagination, }: Readonly> ) { const [sorting, setSorting] = useState([]); @@ -66,13 +69,13 @@ function DataTable( data, columns, getCoreRowModel: getCoreRowModel(), - onPaginationChange: setPagination, getPaginationRowModel: getPaginationRowModel(), enableRowSelection: true, - onSortingChange: setSorting, getSortedRowModel: getSortedRowModel(), onColumnVisibilityChange: setColumnVisibility, + onPaginationChange: setPagination, onRowSelectionChange: setRowSelection, + onSortingChange: setSorting, state: { sorting, columnVisibility, @@ -147,7 +150,8 @@ function DataTable( {table.getFilteredSelectedRowModel().rows.length} of{" "} {table.getFilteredRowModel().rows.length} row(s) selected. - {dataTablePagination && } + {dataTablePagination && !cursorPagination && } + {dataTablePagination && cursorPagination && } ); @@ -159,6 +163,7 @@ function ScrollableDataTable( data, onRowSelectionChange, dataTablePagination, + cursorPagination, }: Readonly> ) { return ( @@ -168,6 +173,7 @@ function ScrollableDataTable( data={data} onRowSelectionChange={onRowSelectionChange} dataTablePagination={dataTablePagination} + cursorPagination={cursorPagination} /> @@ -180,6 +186,7 @@ function StateHandlingScrollableDataTable( data, onRowSelectionChange, dataTablePagination, + cursorPagination, idsLoading, dataLoading, idsError, @@ -219,6 +226,7 @@ function StateHandlingScrollableDataTable( data={data} onRowSelectionChange={onRowSelectionChange} dataTablePagination={dataTablePagination} + cursorPagination={cursorPagination} /> )} diff --git a/src/pages/firmwares-page.tsx b/src/pages/firmwares-page.tsx index 7133dae4..f4fd9ca8 100644 --- a/src/pages/firmwares-page.tsx +++ b/src/pages/firmwares-page.tsx @@ -10,6 +10,8 @@ import { import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {useFragment} from "@/__generated__"; import {buildFirmwareActionColumns} from "@/components/data-table-action-columns/firmware-action-columns.tsx"; +import {useEffect, useState} from "react"; +import {CursorPaginationProps} from "@/components/ui/table/cursor-pagination.tsx"; const columns: ColumnDef[] = [ ...buildFirmwareActionColumns(SCAN_APKS_BY_FIRMWARE_OBJECT_IDS), @@ -106,26 +108,68 @@ const columns: ColumnDef[] = [ ]; export function FirmwaresPage() { + const [pageSize, setPageSize] = useState(25); + const [afterStack, setAfterStack] = useState<(string | null)[]>([null]); + const after = afterStack.at(-1); + const { - loading: firmwaresLoading, - error: firmwaresError, - data: firmwaresData, + loading, + error, + data, + refetch, } = useQuery(GET_FIRMWARES_BY_OBJECT_IDS, { + variables: { + first: pageSize, + after, + }, fetchPolicy: "cache-first", + notifyOnNetworkStatusChange: true, }); - const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + const pageInfo = data?.android_firmware_connection?.pageInfo; + const edges = data?.android_firmware_connection?.edges ?? []; + + const firmwares = edges // eslint-disable-next-line react-hooks/rules-of-hooks .map(edge => useFragment(FIRMWARE_ALL, edge?.node)) - .filter(isNonNullish) + .filter(isNonNullish); + + const goNext = () => { + if (!pageInfo?.hasNextPage) return; + setAfterStack(prev => [...prev, pageInfo.endCursor ?? null]); + }; + + const goPrevious = () => { + if (afterStack.length <= 1) return; + setAfterStack(prev => prev.slice(0, -1)); + }; + + useEffect(() => { + void refetch({first: pageSize, after}); + }, [pageSize, after, refetch]); + + const onPageSizeChange = (n: number) => { + setAfterStack([null]); + setPageSize(n); + } + + const cursorPagination: CursorPaginationProps = { + pageSize: pageSize, + onPageSizeChange: onPageSizeChange, + hasPrevious: afterStack.length > 1, + hasNext: Boolean(pageInfo?.hasNextPage), + onPrevious: goPrevious, + onNext: goNext, + } return ( ); diff --git a/src/pages/importer-page.tsx b/src/pages/importer-page.tsx index 74655762..25517f94 100644 --- a/src/pages/importer-page.tsx +++ b/src/pages/importer-page.tsx @@ -13,6 +13,8 @@ import type {ColumnDef} from "@tanstack/react-table"; import {isNonNullish} from "@/lib/graphql/graphql-utils.ts"; import {FirmwareRowImporterPageFragment} from "@/__generated__/graphql.ts"; import {buildFirmwareActionColumns} from "@/components/data-table-action-columns/firmware-action-columns.tsx"; +import {useEffect, useState} from "react"; +import {CursorPaginationProps} from "@/components/ui/table/cursor-pagination.tsx"; const columns: ColumnDef[] = [ ...buildFirmwareActionColumns(SCAN_APKS_BY_FIRMWARE_OBJECT_IDS), @@ -52,16 +54,59 @@ const columns: ColumnDef[] = [ ]; export function ImporterPage() { + const [pageSize, setPageSize] = useState(25); + const [afterStack, setAfterStack] = useState<(string | null)[]>([null]); + const after = afterStack.at(-1); + const { - data: firmwaresData, - loading: firmwaresLoading, - error: firmwaresError, - } = useQuery(GET_FIRMWARES_IMPORTER_PAGE); + data, + loading, + error, + refetch, + } = useQuery(GET_FIRMWARES_IMPORTER_PAGE, { + variables: { + first: pageSize, + after, + }, + fetchPolicy: "cache-first", + notifyOnNetworkStatusChange: true, + }); + + const pageInfo = data?.android_firmware_connection?.pageInfo; + const edges = data?.android_firmware_connection?.edges ?? []; - const firmwares = (firmwaresData?.android_firmware_connection?.edges ?? []) + const firmwares = edges // eslint-disable-next-line react-hooks/rules-of-hooks .map(edge => useFragment(FIRMWARE_ROW_IMPORTER_PAGE, edge?.node)) - .filter(isNonNullish) + .filter(isNonNullish); + + const goNext = () => { + if (!pageInfo?.hasNextPage) return; + setAfterStack(prev => [...prev, pageInfo.endCursor ?? null]); + }; + + const goPrevious = () => { + if (afterStack.length <= 1) return; + setAfterStack(prev => prev.slice(0, -1)); + }; + + useEffect(() => { + void refetch({first: pageSize, after}); + }, [pageSize, after, refetch]); + + const onPageSizeChange = (n: number) => { + setAfterStack([null]); + setPageSize(n); + } + + const cursorPagination: CursorPaginationProps = { + pageSize: pageSize, + onPageSizeChange: onPageSizeChange, + hasPrevious: afterStack.length > 1, + hasNext: Boolean(pageInfo?.hasNextPage), + onPrevious: goPrevious, + onNext: goNext, + } return ( @@ -72,8 +117,9 @@ export function ImporterPage() { );