From b3430623021c3eeb0296d2d4f93ad319f8e67c35 Mon Sep 17 00:00:00 2001 From: escapedcat Date: Wed, 25 Dec 2024 13:21:10 +0100 Subject: [PATCH] chore: switch from eslint/prettier to biome (#802) * ci: add github action fix: linting * chore: switch to biome for linting and fix errors and ignore some for now * revert: linting fixes to make tests run * chore(home): linting * chore(home): receive-modal linting * chore(home): qr-code linting * style: format * test: linting * style: format * test: sort imports * test: sort imports but make sure test does not break * style: linting via biome * style: use space for indents * fix(home): re-add missing space --- .github/workflows/main.yml | 2 + .prettierignore | 8 - .vscode/extensions.json | 3 +- biome.json | 30 + eslint.config.js | 22 - package-lock.json | 1516 ++++++----------- package.json | 8 +- playwright.config.ts | 18 +- postcss.config.cjs | 8 +- src/App.css | 2 + src/App.test.tsx | 7 +- src/App.tsx | 21 +- src/ErrorBoundary.tsx | 8 +- src/components/AmountInput.tsx | 5 +- src/components/AppStatusItem.tsx | 12 +- src/components/AvailableBalance.tsx | 7 +- src/components/Button.tsx | 4 +- src/components/ConfirmModal.tsx | 8 +- src/components/I18nDropdown.tsx | 2 +- src/components/RequireAuth.tsx | 8 +- src/components/RequireSetup.tsx | 6 +- .../__tests__/AppStatusItem.test.tsx | 4 +- .../__tests__/AvailableBalance.test.tsx | 4 +- src/context/app-context.tsx | 8 +- src/context/sse-context.tsx | 28 +- src/hooks/use-caps-lock.ts | 2 +- src/hooks/use-sse.tsx | 22 +- src/i18n/config.ts | 2 +- src/index.css | 8 +- src/index.tsx | 2 +- src/layouts/Header.tsx | 6 +- src/layouts/Layout.tsx | 4 +- src/layouts/ModalDialog.tsx | 7 +- src/layouts/PageLoadingScreen.tsx | 6 +- src/layouts/SetupContainer.tsx | 2 +- src/layouts/SideDrawer.tsx | 1 + src/layouts/SkeletonLoadingScreen.tsx | 4 +- src/models/app.model.ts | 4 +- src/models/setup.model.ts | 27 +- src/pages/Apps/AppCard.tsx | 45 +- src/pages/Apps/AppCardAlby.tsx | 5 +- src/pages/Apps/AppInfo.tsx | 7 +- src/pages/Apps/AppList.tsx | 7 +- src/pages/Apps/AppPage.tsx | 3 +- src/pages/Apps/ImageCarousel.tsx | 12 +- src/pages/Apps/__tests__/AppCard.test.tsx | 6 +- src/pages/Apps/customApps/Electrs.tsx | 10 +- src/pages/Apps/index.tsx | 6 +- src/pages/Home/BitcoinCard.tsx | 11 +- src/pages/Home/ConnectionCard.tsx | 9 +- src/pages/Home/HardwareCard.tsx | 2 +- src/pages/Home/LightningCard.tsx | 17 +- src/pages/Home/ListChannelModal/Channel.tsx | 4 +- .../Home/ListChannelModal/ChannelList.tsx | 6 +- .../ListChannelModal/ListChannelModal.tsx | 4 +- src/pages/Home/OpenChannelModal.tsx | 3 +- src/pages/Home/QRCodeModal.tsx | 1 + src/pages/Home/ReceiveModal/QRCode.tsx | 5 +- src/pages/Home/ReceiveModal/ReceiveModal.tsx | 10 +- .../__tests__/ReceiveModal.test.tsx | 6 +- src/pages/Home/SendModal/ConfirmSend.tsx | 9 +- src/pages/Home/SendModal/SendLN.tsx | 9 +- src/pages/Home/SendModal/SendModal.tsx | 16 +- src/pages/Home/SendModal/SendOnChain.tsx | 6 +- .../SendModal/__tests__/ConfirmSend.test.tsx | 11 +- .../SendModal/__tests__/SendModal.test.tsx | 7 +- src/pages/Home/SwitchTxType.tsx | 6 +- .../Home/TransactionCard/CategoryIcon.tsx | 12 +- .../TransactionCard/SingleTransaction.tsx | 15 +- .../Home/TransactionCard/TransactionCard.tsx | 15 +- .../TransactionDetailModal/LNDetails.tsx | 6 +- .../TransactionDetailModal/OnchainDetails.tsx | 6 +- .../TransactionDetailModal.tsx | 8 +- .../__tests__/TransactionCard.test.tsx | 2 +- src/pages/Home/WalletCard.tsx | 5 +- .../Home/__tests__/HardwareCard.test.tsx | 4 +- .../Home/__tests__/SwitchTxType.test.tsx | 2 +- src/pages/Home/__tests__/UnlockModal.test.tsx | 6 +- src/pages/Home/index.tsx | 51 +- src/pages/Login/index.tsx | 18 +- src/pages/Settings/ChangePwModal.tsx | 2 +- src/pages/Settings/DebugLogBox.tsx | 3 +- src/pages/Settings/I18nBox.tsx | 2 +- src/pages/Settings/RebootModal.tsx | 4 +- src/pages/Settings/ShutdownModal.tsx | 4 +- src/pages/Settings/VersionBox.tsx | 2 +- .../Settings/__tests__/ActionBox.test.tsx | 2 +- .../Settings/__tests__/DebugLogBox.test.tsx | 2 +- src/pages/Settings/index.tsx | 4 +- src/pages/Setup/CustomRadio.tsx | 2 +- src/pages/Setup/FinalDialog.tsx | 7 +- src/pages/Setup/FormatDialog.tsx | 2 +- src/pages/Setup/InputNodeName.tsx | 2 +- src/pages/Setup/InputPassword.tsx | 6 +- src/pages/Setup/LightningDialog.tsx | 13 +- src/pages/Setup/MigrationDialog.tsx | 7 +- src/pages/Setup/SetupContext.tsx | 7 +- src/pages/Setup/SetupMenu.tsx | 18 +- src/pages/Setup/SetupScreenRenderer.tsx | 7 +- src/pages/Setup/Stepper.tsx | 3 +- src/pages/Setup/SyncScreen.tsx | 4 +- src/pages/Setup/index.tsx | 2 +- src/pages/Setup/setup-functions.ts | 10 +- src/testServer.ts | 2 +- src/utils/__tests__/checkError.test.ts | 8 +- src/utils/__tests__/format.test.ts | 2 +- src/utils/__tests__/util.test.ts | 2 +- src/utils/availableApps.ts | 2 +- src/utils/checkError.ts | 2 +- src/utils/format.ts | 23 +- src/utils/index.ts | 5 +- src/utils/interceptor.ts | 2 +- src/utils/test-utils.tsx | 9 +- tests/fixtures/login-page.ts | 20 +- tests/home.spec.ts | 62 +- tests/login.spec.ts | 40 +- tests/setup.spec.ts | 66 +- tests/status.ts | 20 +- tests/utils.ts | 3 +- vite.config.ts | 38 +- 120 files changed, 1115 insertions(+), 1545 deletions(-) delete mode 100644 .prettierignore create mode 100644 biome.json delete mode 100644 eslint.config.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 834149fd..544c03e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,3 +30,5 @@ jobs: run: npm run test - name: Run Typecheck run: npm run tsc + - name: Run Linting and formatting + run: npm run lint diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index d860972d..00000000 --- a/.prettierignore +++ /dev/null @@ -1,8 +0,0 @@ -build -node_modules -.yarn -.github -.idea -.husky -.gitignore -.nvmrc \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 757b8854..01119a34 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,6 @@ "recommendations": [ "ecmel.vscode-html-css", "bradlc.vscode-tailwindcss", - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint" + "biomejs.biome" ] } diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..bf2bb6b9 --- /dev/null +++ b/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": ["backend-mock"] + }, + "formatter": { + "enabled": true, + "indentStyle": "space" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index c6dce941..00000000 --- a/eslint.config.js +++ /dev/null @@ -1,22 +0,0 @@ -import globals from "globals"; -import pluginJs from "@eslint/js"; -import tseslint from "typescript-eslint"; -import pluginReact from "eslint-plugin-react"; - - -export default [ - { languageOptions: { globals: globals.browser } }, - pluginJs.configs.recommended, - ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, - { - files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"], - rules: { - "react/react-in-jsx-scope": "off", - "react/jsx-uses-react": "off" - }, - ignores: [ - ".backend-mock/" - ] - }, -]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c2e105d3..6bbb2773 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "tailwind-merge": "^2.5.2" }, "devDependencies": { - "@eslint/js": "^9.12.0", + "@biomejs/biome": "1.9.4", "@playwright/test": "^1.47.2", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.5.0", @@ -40,8 +40,6 @@ "@vitest/coverage-v8": "^2.1.1", "autoprefixer": "^10.4.20", "concurrently": "^9.0.1", - "eslint": "^9.12.0", - "eslint-plugin-react": "^7.37.1", "globals": "^15.10.0", "husky": "^9.1.6", "jsdom": "^25.0.1", @@ -863,6 +861,170 @@ "dev": true, "license": "MIT" }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@bitcoin-design/bitcoin-icons-react": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/@bitcoin-design/bitcoin-icons-react/-/bitcoin-icons-react-0.1.10.tgz", @@ -1324,9 +1486,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1334,13 +1496,14 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.5", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -1349,21 +1512,26 @@ } }, "node_modules/@eslint/core": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", - "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", "dev": true, "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1388,6 +1556,7 @@ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -1396,21 +1565,23 @@ } }, "node_modules/@eslint/js": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz", - "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -1421,6 +1592,7 @@ "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { "levn": "^0.4.1" }, @@ -1512,35 +1684,53 @@ } }, "node_modules/@humanfs/core": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", - "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.5", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", - "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", + "peer": true, "dependencies": { - "@humanfs/core": "^0.19.0", + "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" }, "engines": { "node": ">=18.18.0" } }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -1550,11 +1740,12 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -5404,7 +5595,8 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/lodash": { "version": "4.17.6", @@ -5525,16 +5717,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", - "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", + "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/typescript-estree": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "debug": "^4.3.4" }, "engines": { @@ -5553,6 +5746,131 @@ } } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", + "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", + "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", + "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", + "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/types": "8.17.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz", @@ -5910,11 +6228,12 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5928,6 +6247,7 @@ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -5951,6 +6271,7 @@ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -6061,134 +6382,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node": ">=12" } }, "node_modules/asynckit": { @@ -6286,6 +6487,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6347,17 +6549,16 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -6366,6 +6567,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.0.tgz", + "integrity": "sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -6722,7 +6937,8 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/concurrently": { "version": "9.0.1", @@ -6850,60 +7066,6 @@ "node": ">=18" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -6977,7 +7139,8 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/deepmerge": { "version": "4.3.1", @@ -7061,19 +7224,6 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -7147,67 +7297,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -7252,88 +7341,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -7389,6 +7396,7 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -7397,32 +7405,33 @@ } }, "node_modules/eslint": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz", - "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.18.0", - "@eslint/core": "^0.6.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.12.0", - "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.16.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.1", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -7436,8 +7445,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -7457,63 +7465,13 @@ } } }, - "node_modules/eslint-plugin-react": { - "version": "7.37.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", - "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "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.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-scope": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", - "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7526,11 +7484,12 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", - "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -7543,18 +7502,20 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/espree": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", - "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.1.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7569,6 +7530,7 @@ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7582,6 +7544,7 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -7595,6 +7558,7 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=4.0" } @@ -7612,6 +7576,7 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7652,7 +7617,8 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-glob": { "version": "3.3.2", @@ -7687,14 +7653,16 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fastq": { "version": "1.17.1", @@ -7711,6 +7679,7 @@ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -7736,6 +7705,7 @@ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7762,6 +7732,7 @@ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -7775,7 +7746,8 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -7899,25 +7871,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -8013,24 +7966,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -8056,23 +7991,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -8081,13 +7999,13 @@ "license": "MIT" }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8356,6 +8274,7 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -8447,22 +8366,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -8533,22 +8436,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -8574,19 +8461,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -8600,22 +8474,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -8641,19 +8499,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-node-process": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", @@ -8784,22 +8629,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -8813,19 +8642,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-weakset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", @@ -8910,20 +8726,6 @@ "node": ">=8" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "license": "MIT", - "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" - } - }, "node_modules/jackspeak": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.1.tgz", @@ -9049,7 +8851,8 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -9063,14 +8866,16 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -9085,28 +8890,13 @@ "node": ">=6" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -9117,6 +8907,7 @@ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -9221,6 +9012,7 @@ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -9273,7 +9065,8 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash.omit": { "version": "4.5.0", @@ -9586,6 +9379,7 @@ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9791,9 +9585,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -9849,58 +9643,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", @@ -9923,6 +9665,7 @@ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -9948,6 +9691,7 @@ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9964,6 +9708,7 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -10031,6 +9776,7 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -10355,6 +10101,7 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -10482,25 +10229,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -10830,28 +10558,6 @@ "node": ">=8" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -10859,16 +10565,16 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11047,43 +10753,6 @@ "tslib": "^2.1.0" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -11448,96 +11117,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11595,6 +11174,7 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -11863,13 +11443,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -12068,6 +11641,7 @@ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -12088,83 +11662,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typescript": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", @@ -12203,20 +11700,33 @@ } } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", + "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "@typescript-eslint/scope-manager": "8.8.0", + "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/typescript-estree": "8.8.0", + "@typescript-eslint/visitor-keys": "8.8.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/undici-types": { @@ -12273,6 +11783,7 @@ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -12698,33 +12209,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dev": true, - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", @@ -12787,6 +12271,7 @@ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -13021,6 +12506,7 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 4e3b7b61..35871abe 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,14 @@ "test:watch": "vitest watch --exclude 'tests'", "coverage": "vitest run --coverage --exclude 'tests'", "prepare": "husky", - "lint": "eslint src/" + "lint": "biome check src" }, "config": { "port": "3000" }, "lint-staged": { "{src,backend-mock}/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [ - "prettier --write" + "biome check --write" ] }, "dependencies": { @@ -47,7 +47,7 @@ "tailwind-merge": "^2.5.2" }, "devDependencies": { - "@eslint/js": "^9.12.0", + "@biomejs/biome": "1.9.4", "@playwright/test": "^1.47.2", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.5.0", @@ -61,8 +61,6 @@ "@vitest/coverage-v8": "^2.1.1", "autoprefixer": "^10.4.20", "concurrently": "^9.0.1", - "eslint": "^9.12.0", - "eslint-plugin-react": "^7.37.1", "globals": "^15.10.0", "husky": "^9.1.6", "jsdom": "^25.0.1", diff --git a/playwright.config.ts b/playwright.config.ts index 134e8bd2..90d31091 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,4 +1,4 @@ -import { defineConfig, devices } from "@playwright/test"; +import { defineConfig, devices } from '@playwright/test'; /** * Read environment variables from file. @@ -11,7 +11,7 @@ import { defineConfig, devices } from "@playwright/test"; * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - testDir: "./tests", + testDir: './tests', /* Run tests in files in parallel */ fullyParallel: true, /* Fail the build on CI if you accidentally left test.only in the source code. */ @@ -21,21 +21,21 @@ export default defineConfig({ /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: "html", + reporter: 'html', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: "http://localhost:3000", + baseURL: 'http://localhost:3000', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on-first-retry", + trace: 'on-first-retry', }, /* Configure projects for major browsers */ projects: [ { - name: "chromium", - use: { ...devices["Desktop Chrome"] }, + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, }, // { @@ -72,8 +72,8 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ webServer: [ { - command: "npm run start", - url: "http://localhost:3000", + command: 'npm run start', + url: 'http://localhost:3000', timeout: 120 * 1000, reuseExistingServer: !process.env.CI, }, diff --git a/postcss.config.cjs b/postcss.config.cjs index 6887c826..098d1b94 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,8 +1,8 @@ module.exports = { plugins: { - "postcss-import": {}, - "tailwindcss/nesting": {}, - tailwindcss: {}, - autoprefixer: {}, + 'postcss-import': {}, + 'tailwindcss/nesting': {}, + 'tailwindcss': {}, + 'autoprefixer': {}, }, }; diff --git a/src/App.css b/src/App.css index d7187dd8..0a043fcd 100644 --- a/src/App.css +++ b/src/App.css @@ -1,8 +1,10 @@ .content-container { + /* biome-ignore lint/correctness/noUnknownFunction: */ min-height: calc(100vh - theme("spacing.16")); } .sidebar { + /* biome-ignore lint/correctness/noUnknownFunction: */ max-height: calc(100vh - theme("spacing.16")); } diff --git a/src/App.test.tsx b/src/App.test.tsx index 0eecb02c..77b1dadd 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -1,12 +1,13 @@ -import App from "./App"; -import { http, server, HttpResponse } from "./testServer"; +import App from "@/App"; import i18n from "@/i18n/test_config"; import { I18nextProvider } from "react-i18next"; -import { render, waitFor, screen } from "test-utils"; +import { render, screen, waitFor } from "test-utils"; +import { http, HttpResponse, server } from "./testServer"; const mockedUsedNavigate = vi.fn(); vi.mock("react-router-dom", async () => { + // biome-ignore lint/suspicious/noExplicitAny: const reactRouterDom: any = await vi.importActual("react-router-dom"); return { ...reactRouterDom, useNavigate: () => mockedUsedNavigate }; diff --git a/src/App.tsx b/src/App.tsx index 6724d5e5..2ffeecb4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,16 +3,23 @@ import RequireAuth from "./components/RequireAuth"; import RequireSetup from "./components/RequireSetup"; import { AppContext } from "./context/app-context"; import "./i18n/config"; +import AppPage from "@/pages/Apps/AppPage"; +import Login from "@/pages/Login"; +import { + type FC, + Suspense, + lazy, + useContext, + useEffect, + useState, +} from "react"; +import { Route, Routes, useLocation, useNavigate } from "react-router-dom"; import Layout from "./layouts/Layout"; import LoadingScreen from "./layouts/LoadingScreen"; import SkeletonLoadingScreen from "./layouts/SkeletonLoadingScreen"; import { SetupPhase } from "./models/setup.model"; -import { ACCESS_TOKEN, parseJwt, REFRESH_TIME } from "./utils"; +import { ACCESS_TOKEN, REFRESH_TIME, parseJwt } from "./utils"; import { instance } from "./utils/interceptor"; -import AppPage from "@/pages/Apps/AppPage"; -import Login from "@/pages/Login"; -import { FC, lazy, Suspense, useContext, useEffect, useState } from "react"; -import { Route, Routes, useLocation, useNavigate } from "react-router-dom"; import "react-toastify/dist/ReactToastify.css"; const LazySetup = lazy(() => import("./pages/Setup")); @@ -52,7 +59,7 @@ const App: FC = () => { check(); } - }, [isLoggedIn, firstCall, navigate, pathname]); + }, [firstCall, navigate, pathname]); useEffect(() => { if (!isLoggedIn) { @@ -87,7 +94,7 @@ const App: FC = () => { const payload = parseJwt(token); refresh(REFRESH_TIME(payload.expires)); } - }, [isLoggedIn, navigate]); + }, [isLoggedIn]); if (isLoading) { return ; diff --git a/src/ErrorBoundary.tsx b/src/ErrorBoundary.tsx index 2faf68b6..dcc371ae 100644 --- a/src/ErrorBoundary.tsx +++ b/src/ErrorBoundary.tsx @@ -1,5 +1,5 @@ -import { TFunction } from "i18next"; -import { Component, ErrorInfo, PropsWithChildren } from "react"; +import type { TFunction } from "i18next"; +import { Component, type ErrorInfo, type PropsWithChildren } from "react"; import { withTranslation } from "react-i18next"; interface Props { @@ -17,7 +17,7 @@ class ErrorBoundary extends Component, State> { hasError: false, }; - public static getDerivedStateFromError(_: Error): State { + public static getDerivedStateFromError(_error: Error): State { // Update state so the next render will show the fallback UI. return { hasError: true }; } @@ -35,7 +35,7 @@ class ErrorBoundary extends Component, State> {

{t("login.error")} 😓

- {this.state.error?.name}: {this.state.error?.message} + {this.state.error?.name}:{this.state.error?.message}

{t("error.report")}{" "} diff --git a/src/components/AmountInput.tsx b/src/components/AmountInput.tsx index 2a2a6550..a989c374 100644 --- a/src/components/AmountInput.tsx +++ b/src/components/AmountInput.tsx @@ -2,7 +2,7 @@ import { AppContext, Unit } from "@/context/app-context"; import { convertBtcToSat, convertSatToBtc, formatAmount } from "@/utils/format"; import { ArrowsRightLeftIcon } from "@heroicons/react/24/outline"; import { Input } from "@nextui-org/react"; -import { ChangeEvent, FC, useContext, useState } from "react"; +import { type ChangeEvent, type FC, useContext, useState } from "react"; import type { FieldError, UseFormRegisterReturn } from "react-hook-form"; import { useTranslation } from "react-i18next"; @@ -37,7 +37,8 @@ const AmountInput: FC = ({ if (formattedValue) { formattedValue = new Intl.NumberFormat("en-US", { minimumFractionDigits: 8, - }).format(convertSatToBtc(parseInt(formattedValue))!); + // biome-ignore lint/style/noNonNullAssertion: + }).format(convertSatToBtc(Number.parseInt(formattedValue))!); } } setAmountInput(formattedValue); diff --git a/src/components/AppStatusItem.tsx b/src/components/AppStatusItem.tsx index 15b507ca..af3c202a 100644 --- a/src/components/AppStatusItem.tsx +++ b/src/components/AppStatusItem.tsx @@ -1,5 +1,5 @@ import AppIcon from "@/components/AppIcon"; -import { AppStatus } from "@/models/app-status"; +import type { AppStatus } from "@/models/app-status"; import { getHrefFromApp } from "@/utils"; import { availableApps } from "@/utils/availableApps"; import type { FC } from "react"; @@ -12,13 +12,19 @@ type Props = { export const AppStatusItem: FC = ({ app }) => { const { id } = app; const navigate = useNavigate(); + // biome-ignore lint/style/noNonNullAssertion: const appName = availableApps[id]!.name; + // biome-ignore lint/style/noNonNullAssertion: const customComponent = availableApps[id]!.customComponent; if (customComponent) { return ( navigate(`/apps/${id}`)} + onKeyUp={(e) => { + if (e.key === "Enter") navigate(`/apps/${id}`); + }} className="flex w-full cursor-pointer items-center justify-center py-4 text-white opacity-80 hover:text-yellow-500 md:flex-col lg:flex-row" > {/* Icon */} @@ -32,8 +38,8 @@ export const AppStatusItem: FC = ({ app }) => { return ( {/* Icon */} diff --git a/src/components/AvailableBalance.tsx b/src/components/AvailableBalance.tsx index c351917c..70f55edd 100644 --- a/src/components/AvailableBalance.tsx +++ b/src/components/AvailableBalance.tsx @@ -1,6 +1,6 @@ import { AppContext, Unit } from "@/context/app-context"; import { convertSatToBtc, convertToString } from "@/utils/format"; -import { FC, useContext } from "react"; +import { type FC, useContext } from "react"; import { useTranslation } from "react-i18next"; type Props = { @@ -18,7 +18,10 @@ const AvailableBalance: FC = ({ balance }) => { return (

- {t("wallet.available_balance")}:  + + {t("wallet.available_balance")} + :  + {convertedBalance} {unit}

); diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 5365dae2..75fff838 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,5 +1,5 @@ -import { ButtonProps, Button as NextUIButton } from "@nextui-org/react"; -import { ReactNode } from "react"; +import { type ButtonProps, Button as NextUIButton } from "@nextui-org/react"; +import type { ReactNode } from "react"; interface CustomButtonProps extends ButtonProps { children: ReactNode; diff --git a/src/components/ConfirmModal.tsx b/src/components/ConfirmModal.tsx index e38f60c7..fadacbb1 100644 --- a/src/components/ConfirmModal.tsx +++ b/src/components/ConfirmModal.tsx @@ -1,13 +1,13 @@ import { Button } from "@/components/Button"; import { Modal, - ModalContent, - ModalHeader, ModalBody, + ModalContent, ModalFooter, + ModalHeader, } from "@nextui-org/react"; import type { UseDisclosureReturn } from "@nextui-org/use-disclosure"; -import { type ReactNode } from "react"; +import type { ReactNode } from "react"; import { useTranslation } from "react-i18next"; export type Props = { @@ -40,7 +40,7 @@ export const ConfirmModal: ConfirmModalComponent = ({ cancelText, isLoading = false, ...props -}) => { +}: Props) => { const { t } = useTranslation(); const { isOpen, onOpenChange, onClose } = disclosure; diff --git a/src/components/I18nDropdown.tsx b/src/components/I18nDropdown.tsx index ac62f82c..2228573a 100644 --- a/src/components/I18nDropdown.tsx +++ b/src/components/I18nDropdown.tsx @@ -1,7 +1,7 @@ import { resources } from "@/i18n/config"; import { saveSettings } from "@/utils"; import { Select, SelectItem } from "@nextui-org/react"; -import { ChangeEvent, FC } from "react"; +import type { ChangeEvent, FC } from "react"; import { useTranslation } from "react-i18next"; const I18nSelect: FC = () => { diff --git a/src/components/RequireAuth.tsx b/src/components/RequireAuth.tsx index 4d0ce894..c40deeeb 100644 --- a/src/components/RequireAuth.tsx +++ b/src/components/RequireAuth.tsx @@ -1,11 +1,11 @@ import { AppContext } from "@/context/app-context"; -import { FC, PropsWithChildren, useContext } from "react"; +import { type FC, type PropsWithChildren, useContext } from "react"; import { Navigate, useLocation } from "react-router-dom"; -//see https://reactrouter.com/docs/en/v6/examples/auth +// see https://reactrouter.com/docs/en/v6/examples/auth const RequireAuth: FC = ({ children }) => { - let { isLoggedIn } = useContext(AppContext); - let location = useLocation(); + const { isLoggedIn } = useContext(AppContext); + const location = useLocation(); if (!isLoggedIn) { return ; diff --git a/src/components/RequireSetup.tsx b/src/components/RequireSetup.tsx index 26863b78..935ffdbd 100644 --- a/src/components/RequireSetup.tsx +++ b/src/components/RequireSetup.tsx @@ -1,17 +1,17 @@ -import { FC, PropsWithChildren } from "react"; +import type { FC, PropsWithChildren } from "react"; import { Navigate } from "react-router-dom"; type Props = { needsSetup: boolean; }; -//see https://reactrouter.com/docs/en/v6/examples/auth +// see https://reactrouter.com/docs/en/v6/examples/auth const RequireSetup: FC> = ({ needsSetup, children, }) => { if (!needsSetup) { - return ; + return ; } return children; diff --git a/src/components/__tests__/AppStatusItem.test.tsx b/src/components/__tests__/AppStatusItem.test.tsx index d0049a75..812dd430 100644 --- a/src/components/__tests__/AppStatusItem.test.tsx +++ b/src/components/__tests__/AppStatusItem.test.tsx @@ -1,6 +1,6 @@ -import AppStatusItem from "../AppStatusItem"; -import { AppStatus } from "@/models/app-status"; +import type { AppStatus } from "@/models/app-status"; import { render, screen } from "test-utils"; +import AppStatusItem from "../AppStatusItem"; const testApp: AppStatus = { id: "specter", diff --git a/src/components/__tests__/AvailableBalance.test.tsx b/src/components/__tests__/AvailableBalance.test.tsx index 301e53e5..024c5b35 100644 --- a/src/components/__tests__/AvailableBalance.test.tsx +++ b/src/components/__tests__/AvailableBalance.test.tsx @@ -1,8 +1,8 @@ -import AvailableBalance from "../AvailableBalance"; -import { AppContext, AppContextType, Unit } from "@/context/app-context"; +import { AppContext, type AppContextType, Unit } from "@/context/app-context"; import i18n from "@/i18n/test_config"; import { I18nextProvider } from "react-i18next"; import { render, screen } from "test-utils"; +import AvailableBalance from "../AvailableBalance"; const contextValues: AppContextType = { isLoggedIn: false, diff --git a/src/context/app-context.tsx b/src/context/app-context.tsx index 5c40c17d..29905001 100644 --- a/src/context/app-context.tsx +++ b/src/context/app-context.tsx @@ -1,4 +1,3 @@ -import { SSEContext } from "./sse-context"; import { ACCESS_TOKEN, disableGutter, @@ -8,9 +7,9 @@ import { } from "@/utils"; import type { FC, PropsWithChildren } from "react"; import { + type Dispatch, + type SetStateAction, createContext, - Dispatch, - SetStateAction, useCallback, useContext, useEffect, @@ -19,6 +18,7 @@ import { import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { toast } from "react-toastify"; +import { SSEContext } from "./sse-context"; export interface AppContextType { isLoggedIn: boolean; @@ -109,7 +109,7 @@ const AppContextProvider: FC = ({ children }) => { } } catch { localStorage.removeItem(ACCESS_TOKEN); - console.info(`Token invalid - removed.`); + console.info("Token invalid - removed"); } } }, [i18n, navigate]); diff --git a/src/context/sse-context.tsx b/src/context/sse-context.tsx index 75a06762..a2137a29 100644 --- a/src/context/sse-context.tsx +++ b/src/context/sse-context.tsx @@ -1,14 +1,19 @@ -import { AppStatus } from "@/models/app-status"; -import { App } from "@/models/app.model"; -import { BtcInfo } from "@/models/btc-info"; -import { HardwareInfo } from "@/models/hardware-info"; -import { LnInfo } from "@/models/ln-info"; -import { SystemInfo } from "@/models/system-info"; -import { SystemStartupInfo } from "@/models/system-startup-info"; -import { Transaction } from "@/models/transaction.model"; -import { WalletBalance } from "@/models/wallet-balance"; +import type { AppStatus } from "@/models/app-status"; +import type { App } from "@/models/app.model"; +import type { BtcInfo } from "@/models/btc-info"; +import type { HardwareInfo } from "@/models/hardware-info"; +import type { LnInfo } from "@/models/ln-info"; +import type { SystemInfo } from "@/models/system-info"; +import type { SystemStartupInfo } from "@/models/system-startup-info"; +import type { Transaction } from "@/models/transaction.model"; +import type { WalletBalance } from "@/models/wallet-balance"; import type { FC, PropsWithChildren } from "react"; -import { Dispatch, SetStateAction, createContext, useState } from "react"; +import { + type Dispatch, + type SetStateAction, + createContext, + useState, +} from "react"; export interface SSEContextType { evtSource: EventSource | null; @@ -28,7 +33,9 @@ export interface SSEContextType { setAvailableApps: Dispatch>; transactions: Transaction[]; setTransactions: Dispatch>; + // biome-ignore lint/suspicious/noExplicitAny: installingApp: any | null; + // biome-ignore lint/suspicious/noExplicitAny: setInstallingApp: Dispatch>; hardwareInfo: HardwareInfo | null; setHardwareInfo: Dispatch>; @@ -127,6 +134,7 @@ const SSEContextProvider: FC = (props) => { const [appStatus, setAppStatus] = useState([]); const [availableApps, setAvailableApps] = useState([]); const [transactions, setTransactions] = useState([]); + // biome-ignore lint/suspicious/noExplicitAny: const [installingApp, setInstallingApp] = useState(null); const [hardwareInfo, setHardwareInfo] = useState(null); const [systemStartupInfo, setSystemStartupInfo] = diff --git a/src/hooks/use-caps-lock.ts b/src/hooks/use-caps-lock.ts index f3334765..c200b785 100644 --- a/src/hooks/use-caps-lock.ts +++ b/src/hooks/use-caps-lock.ts @@ -1,4 +1,4 @@ -import { KeyboardEvent, useState } from "react"; +import { type KeyboardEvent, useState } from "react"; const useCapsLock = () => { const [isCapsLockEnabled, setIsCapsLockEnabled] = useState(false); diff --git a/src/hooks/use-sse.tsx b/src/hooks/use-sse.tsx index 27b37eb8..231a9f2d 100644 --- a/src/hooks/use-sse.tsx +++ b/src/hooks/use-sse.tsx @@ -1,14 +1,14 @@ import { AppContext } from "@/context/app-context"; -import { SSE_URL, SSEContext } from "@/context/sse-context"; -import { AppStatus } from "@/models/app-status"; -import { App } from "@/models/app.model"; -import { BtcInfo } from "@/models/btc-info"; -import { HardwareInfo } from "@/models/hardware-info"; -import { InstallAppData } from "@/models/install-app"; -import { LnInfo } from "@/models/ln-info"; -import { SystemInfo } from "@/models/system-info"; -import { SystemStartupInfo } from "@/models/system-startup-info"; -import { WalletBalance } from "@/models/wallet-balance"; +import { SSEContext, SSE_URL } from "@/context/sse-context"; +import type { AppStatus } from "@/models/app-status"; +import type { App } from "@/models/app.model"; +import type { BtcInfo } from "@/models/btc-info"; +import type { HardwareInfo } from "@/models/hardware-info"; +import type { InstallAppData } from "@/models/install-app"; +import type { LnInfo } from "@/models/ln-info"; +import type { SystemInfo } from "@/models/system-info"; +import type { SystemStartupInfo } from "@/models/system-startup-info"; +import type { WalletBalance } from "@/models/wallet-balance"; import { setWindowAlias } from "@/utils"; import { availableApps } from "@/utils/availableApps"; import { useCallback, useContext, useEffect } from "react"; @@ -73,6 +73,7 @@ function useSSE() { const apps = JSON.parse(event.data); if (prev.length === 0) { return apps; + // biome-ignore lint/style/noUselessElse: } else { return prev.map( (old: App) => @@ -87,6 +88,7 @@ function useSSE() { const status: AppStatus[] = JSON.parse(event.data); if (prev.length === 0) { return status; + // biome-ignore lint/style/noUselessElse: } else { const currentIds = status.map((item) => item.id); diff --git a/src/i18n/config.ts b/src/i18n/config.ts index a55b3c7f..db77679d 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,3 +1,4 @@ +import i18n from "i18next"; import cs from "./langs/cs.json"; import de from "./langs/de.json"; import en from "./langs/en.json"; @@ -10,7 +11,6 @@ import nl from "./langs/nl.json"; import pt_BR from "./langs/pt_BR.json"; import sv from "./langs/sv.json"; import vi from "./langs/vi.json"; -import i18n from "i18next"; import "react-i18next"; import { initReactI18next } from "react-i18next"; diff --git a/src/index.css b/src/index.css index a3f8cb21..772e1fd3 100644 --- a/src/index.css +++ b/src/index.css @@ -12,8 +12,8 @@ } /** - * Custom Tailwind class CSS -**/ + * Custom Tailwind class CSS + **/ .label-underline { @apply my-2 block text-left text-sm font-bold text-white; @@ -48,8 +48,8 @@ } /** - * Remove up/down arrows from number intput -**/ + * Remove up/down arrows from number intput + **/ input[type="number"] { -moz-appearance: textfield; diff --git a/src/index.tsx b/src/index.tsx index e3e17eea..65f296ca 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -19,7 +19,7 @@ declare module "i18next" { } // see https://vitejs.dev/guide/build#load-error-handling -window.addEventListener("vite:preloadError", (event) => { +window.addEventListener("vite:preloadError", (_event) => { window.location.reload(); }); diff --git a/src/layouts/Header.tsx b/src/layouts/Header.tsx index d03bac08..a5d13fdf 100644 --- a/src/layouts/Header.tsx +++ b/src/layouts/Header.tsx @@ -3,17 +3,17 @@ import RaspiBlitzLogoDark from "@/assets/RaspiBlitz_Logo_Main_Negative.svg?react import { AppContext, Unit } from "@/context/app-context"; import { SSEContext } from "@/context/sse-context"; import { - SatoshiV1Icon, BitcoinCircleIcon, + SatoshiV1Icon, } from "@bitcoin-design/bitcoin-icons-react/filled"; import { BookOpenIcon } from "@heroicons/react/24/outline"; import { Bars3Icon } from "@heroicons/react/24/outline"; import { ArrowRightStartOnRectangleIcon } from "@heroicons/react/24/outline"; import { Dropdown, - DropdownTrigger, - DropdownMenu, DropdownItem, + DropdownMenu, + DropdownTrigger, } from "@nextui-org/react"; import { type Key, useContext } from "react"; import { useTranslation } from "react-i18next"; diff --git a/src/layouts/Layout.tsx b/src/layouts/Layout.tsx index d4ec9181..97eefbc6 100644 --- a/src/layouts/Layout.tsx +++ b/src/layouts/Layout.tsx @@ -1,8 +1,8 @@ +import useSSE from "@/hooks/use-sse"; +import type { FC, PropsWithChildren } from "react"; import BottomNav from "./BottomNav"; import Header from "./Header"; import SideDrawer from "./SideDrawer"; -import useSSE from "@/hooks/use-sse"; -import type { FC, PropsWithChildren } from "react"; const Layout: FC = ({ children }) => { // use SSE for all components after login diff --git a/src/layouts/ModalDialog.tsx b/src/layouts/ModalDialog.tsx index 18a37232..fa6705a3 100644 --- a/src/layouts/ModalDialog.tsx +++ b/src/layouts/ModalDialog.tsx @@ -1,6 +1,6 @@ -import ModalBackground from "./ModalBackground"; import { XMarkIcon } from "@heroicons/react/24/outline"; -import { FC, PropsWithChildren, useCallback, useEffect } from "react"; +import { type FC, type PropsWithChildren, useCallback, useEffect } from "react"; +import ModalBackground from "./ModalBackground"; export const disableScroll = { on: () => document.body.classList.add("overflow-y-hidden"), @@ -39,13 +39,14 @@ const ModalDialog: FC> = ({ window.removeEventListener("keydown", closeOnEsc); disableScroll.off(); }; - }, [closeable, close, closeModal, closeOnEsc]); + }, [closeOnEsc]); return (
+ /> ); } return ( + /> ); })}
@@ -60,19 +62,21 @@ const ImageCarousel: FC = ({ imgs, video }) => { ) : ( {"" )}
) : ( @@ -136,7 +138,9 @@ const Electrs = () => { symbol="" color="primary" variant="solid" - >{`${TORaddress}:${portSSL}:s`} + > + {`${TORaddress}:${portSSL}:s`} + ) : ( diff --git a/src/pages/Apps/index.tsx b/src/pages/Apps/index.tsx index dddaba84..8cfcc3a7 100644 --- a/src/pages/Apps/index.tsx +++ b/src/pages/Apps/index.tsx @@ -1,8 +1,6 @@ -import AppCardAlby from "./AppCardAlby"; -import AppList from "./AppList"; import { SSEContext } from "@/context/sse-context"; import PageLoadingScreen from "@/layouts/PageLoadingScreen"; -import { AppStatus } from "@/models/app-status"; +import type { AppStatus } from "@/models/app-status"; import { enableGutter } from "@/utils"; import { checkError } from "@/utils/checkError"; import { instance } from "@/utils/interceptor"; @@ -10,6 +8,8 @@ import type { FC } from "react"; import { useContext, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "react-toastify"; +import AppCardAlby from "./AppCardAlby"; +import AppList from "./AppList"; export const Apps: FC = () => { const { t } = useTranslation(["translation", "apps"]); diff --git a/src/pages/Home/BitcoinCard.tsx b/src/pages/Home/BitcoinCard.tsx index 4495573d..46d8d60c 100644 --- a/src/pages/Home/BitcoinCard.tsx +++ b/src/pages/Home/BitcoinCard.tsx @@ -1,7 +1,7 @@ import { SSEContext } from "@/context/sse-context"; import { checkPropsUndefined } from "@/utils"; import { Spinner } from "@nextui-org/react"; -import { FC, useContext } from "react"; +import { type FC, useContext } from "react"; import { useTranslation } from "react-i18next"; export const BitcoinCard: FC = () => { @@ -29,11 +29,14 @@ export const BitcoinCard: FC = () => { size_on_disk, } = btcInfo; + // biome-ignore lint/style/noNonNullAssertion: const syncPercentage = (verification_progress! * 100).toFixed(2); + // biome-ignore lint/style/noNonNullAssertion: const shownVersion = subversion!.replace(/\//g, "").split(":")[1]; // size_on_disk is in byte => convert to GB - 1024 ^ 2 = 1048576 + // biome-ignore lint/style/noNonNullAssertion: const diskSize = (size_on_disk! / 1024 / 1024 / 1024).toFixed(2); return ( @@ -56,9 +59,9 @@ export const BitcoinCard: FC = () => {
{t("home.connections")}

{`${connections_in} ${t("home.conn_in")}`} /{" "} - {`${connections_out} ${t( - "home.conn_out", - )}`} + + {`${connections_out} ${t("home.conn_out")}`} +

diff --git a/src/pages/Home/ConnectionCard.tsx b/src/pages/Home/ConnectionCard.tsx index 139011cc..e4e90162 100644 --- a/src/pages/Home/ConnectionCard.tsx +++ b/src/pages/Home/ConnectionCard.tsx @@ -1,4 +1,3 @@ -import QRCodeModal from "./QRCodeModal"; import { SSEContext } from "@/context/sse-context"; import useClipboard from "@/hooks/use-clipboard"; import { @@ -8,9 +7,10 @@ import { QrCodeIcon, } from "@heroicons/react/24/outline"; import { Spinner } from "@nextui-org/react"; -import { FC, useContext, useState } from "react"; +import { type FC, useContext, useState } from "react"; import { useTranslation } from "react-i18next"; import { Tooltip } from "react-tooltip"; +import QRCodeModal from "./QRCodeModal"; const HIDDEN_TEXT = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; @@ -55,7 +55,8 @@ export const ConnectionCard: FC = () => {
- {t("home.conn_details")}  + {t("home.conn_details")} +   {showAddress ? ( { /> )} - {
{showAddress ? t("home.hide") : t("home.show")}
} +
{showAddress ? t("home.hide") : t("home.show")}
diff --git a/src/pages/Home/HardwareCard.tsx b/src/pages/Home/HardwareCard.tsx index 815ab619..ee88b389 100644 --- a/src/pages/Home/HardwareCard.tsx +++ b/src/pages/Home/HardwareCard.tsx @@ -1,6 +1,6 @@ import { SSEContext } from "@/context/sse-context"; import { Spinner } from "@nextui-org/react"; -import { FC, useContext } from "react"; +import { type FC, useContext } from "react"; import { useTranslation } from "react-i18next"; const PI_NUM_CORES = 4; diff --git a/src/pages/Home/LightningCard.tsx b/src/pages/Home/LightningCard.tsx index 6925b5e4..42c581aa 100644 --- a/src/pages/Home/LightningCard.tsx +++ b/src/pages/Home/LightningCard.tsx @@ -3,7 +3,7 @@ import { SSEContext } from "@/context/sse-context"; import { checkPropsUndefined } from "@/utils"; import { convertMSatToBtc, convertToString } from "@/utils/format"; import { Spinner } from "@nextui-org/react"; -import { FC, useContext } from "react"; +import { type FC, useContext } from "react"; import { useTranslation } from "react-i18next"; export const LightningCard: FC = () => { @@ -47,21 +47,26 @@ export const LightningCard: FC = () => { const convertedLocalBalance = unit === Unit.BTC ? convertMSatToBtc(localBalance || 0) - : localBalance! / 1000; + : // biome-ignore lint/style/noNonNullAssertion: + localBalance! / 1000; const convertedRemoteBalance = unit === Unit.BTC ? convertMSatToBtc(remoteBalance || 0) - : remoteBalance! / 1000; + : // biome-ignore lint/style/noNonNullAssertion: + remoteBalance! / 1000; const convertedLocalPendingBalance = unit === Unit.BTC - ? convertMSatToBtc(pendingLocalBalance! || 0) - : pendingLocalBalance! / 1000; + ? // biome-ignore lint/style/noNonNullAssertion: + convertMSatToBtc(pendingLocalBalance! || 0) + : // biome-ignore lint/style/noNonNullAssertion: + pendingLocalBalance! / 1000; const convertedRemotePendingBalance = unit === Unit.BTC ? convertMSatToBtc(pendingRemoteBalance || 0) - : pendingRemoteBalance! / 1000; + : // biome-ignore lint/style/noNonNullAssertion: + pendingRemoteBalance! / 1000; const channelTotal = activeChannels + inactiveChannels + pendingChannels; diff --git a/src/pages/Home/ListChannelModal/Channel.tsx b/src/pages/Home/ListChannelModal/Channel.tsx index c111eb9a..6a3ab667 100644 --- a/src/pages/Home/ListChannelModal/Channel.tsx +++ b/src/pages/Home/ListChannelModal/Channel.tsx @@ -1,10 +1,10 @@ import { Alert } from "@/components/Alert"; import { AppContext, Unit } from "@/context/app-context"; -import { LightningChannel } from "@/models/lightning-channel"; +import type { LightningChannel } from "@/models/lightning-channel"; import { convertSatToBtc, convertToString } from "@/utils/format"; import { Checkbox } from "@nextui-org/checkbox"; import { Button } from "@nextui-org/react"; -import { FC, useContext, useState } from "react"; +import { type FC, useContext, useState } from "react"; import { useTranslation } from "react-i18next"; type Props = { diff --git a/src/pages/Home/ListChannelModal/ChannelList.tsx b/src/pages/Home/ListChannelModal/ChannelList.tsx index 9e7651cf..9b95099f 100644 --- a/src/pages/Home/ListChannelModal/ChannelList.tsx +++ b/src/pages/Home/ListChannelModal/ChannelList.tsx @@ -1,7 +1,7 @@ -import Channel from "./Channel"; -import { LightningChannel } from "@/models/lightning-channel"; +import type { LightningChannel } from "@/models/lightning-channel"; import { Accordion, AccordionItem } from "@nextui-org/react"; -import { FC } from "react"; +import type { FC } from "react"; +import Channel from "./Channel"; type Props = { isLoading: boolean; diff --git a/src/pages/Home/ListChannelModal/ListChannelModal.tsx b/src/pages/Home/ListChannelModal/ListChannelModal.tsx index ba121121..d7114962 100644 --- a/src/pages/Home/ListChannelModal/ListChannelModal.tsx +++ b/src/pages/Home/ListChannelModal/ListChannelModal.tsx @@ -1,16 +1,16 @@ -import ChannelList from "./ChannelList"; import { Alert } from "@/components/Alert"; import { ConfirmModal, type Props as ConfirmModalProps, } from "@/components/ConfirmModal"; -import { LightningChannel } from "@/models/lightning-channel"; +import type { LightningChannel } from "@/models/lightning-channel"; import { checkError } from "@/utils/checkError"; import { instance } from "@/utils/interceptor"; import { Spinner } from "@nextui-org/react"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "react-toastify"; +import ChannelList from "./ChannelList"; const theme = "dark"; export default function ListChannelModal({ diff --git a/src/pages/Home/OpenChannelModal.tsx b/src/pages/Home/OpenChannelModal.tsx index 0da30a50..77787a58 100644 --- a/src/pages/Home/OpenChannelModal.tsx +++ b/src/pages/Home/OpenChannelModal.tsx @@ -10,7 +10,7 @@ import { checkError } from "@/utils/checkError"; import { convertMSatToSat, stringToNumber } from "@/utils/format"; import { instance } from "@/utils/interceptor"; import { Input } from "@nextui-org/react"; -import { ChangeEvent, useState } from "react"; +import { type ChangeEvent, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { toast } from "react-toastify"; @@ -72,6 +72,7 @@ export default function OpenChannelModal({ balance, disclosure }: Props) {
{t("home.open_channel")} + {/* biome-ignore lint/style/noNonNullAssertion: */}
diff --git a/src/pages/Home/QRCodeModal.tsx b/src/pages/Home/QRCodeModal.tsx index f3bc0713..6d0e7c28 100644 --- a/src/pages/Home/QRCodeModal.tsx +++ b/src/pages/Home/QRCodeModal.tsx @@ -22,6 +22,7 @@ export default function QRCodeModal({ identityUri, closeModal }: Props) {

{t("home.connect_node")}

e.key === "Enter" && copyNodeId()} data-tooltip-id="copy-tooltip" className="w-full break-all text-gray-200" > diff --git a/src/pages/Home/ReceiveModal/QRCode.tsx b/src/pages/Home/ReceiveModal/QRCode.tsx index b9453545..815505eb 100644 --- a/src/pages/Home/ReceiveModal/QRCode.tsx +++ b/src/pages/Home/ReceiveModal/QRCode.tsx @@ -1,7 +1,7 @@ import { Button } from "@/components/Button"; import useClipboard from "@/hooks/use-clipboard"; import { QRCodeSVG } from "qrcode.react"; -import { FC } from "react"; +import type { FC } from "react"; import { useTranslation } from "react-i18next"; import { Tooltip } from "react-tooltip"; @@ -23,6 +23,9 @@ const ReceiveOnChain: FC = ({ address, onRefreshHandler }) => {

{ + if (e.key === "Enter") copyAddress(); + }} className="w-full break-all text-gray-200" data-tooltip-id="copy-tooltip" > diff --git a/src/pages/Home/ReceiveModal/ReceiveModal.tsx b/src/pages/Home/ReceiveModal/ReceiveModal.tsx index b4e5fc72..a105e00c 100644 --- a/src/pages/Home/ReceiveModal/ReceiveModal.tsx +++ b/src/pages/Home/ReceiveModal/ReceiveModal.tsx @@ -1,6 +1,3 @@ -import { TxType } from "../SwitchTxType"; -import QRCode from "./QRCode"; -import ReceiveLN, { type IFormInputs } from "./ReceiveLN"; import { Alert } from "@/components/Alert"; import { ConfirmModal, @@ -10,10 +7,13 @@ import { AppContext, Unit } from "@/context/app-context"; import { checkError } from "@/utils/checkError"; import { convertBtcToSat } from "@/utils/format"; import { instance } from "@/utils/interceptor"; -import { Tabs, Tab } from "@nextui-org/tabs"; +import { Tab, Tabs } from "@nextui-org/tabs"; import type { FC } from "react"; import { useContext, useState } from "react"; import { useTranslation } from "react-i18next"; +import { TxType } from "../SwitchTxType"; +import QRCode from "./QRCode"; +import ReceiveLN, { type IFormInputs } from "./ReceiveLN"; const ReceiveModal: FC> = ({ disclosure, @@ -79,7 +79,7 @@ const ReceiveModal: FC> = ({ setInvoiceType(key as TxType); setError(""); - // eslint-disable-next-line eqeqeq + // biome-ignore lint/suspicious/noDoubleEquals: if (key == TxType.ONCHAIN && !address) { generateOnChainAddressHandler(); } diff --git a/src/pages/Home/ReceiveModal/__tests__/ReceiveModal.test.tsx b/src/pages/Home/ReceiveModal/__tests__/ReceiveModal.test.tsx index 5763f34a..528460a0 100644 --- a/src/pages/Home/ReceiveModal/__tests__/ReceiveModal.test.tsx +++ b/src/pages/Home/ReceiveModal/__tests__/ReceiveModal.test.tsx @@ -1,7 +1,7 @@ -import ReceiveModal from "../ReceiveModal"; -import { http, server, HttpResponse } from "@/testServer"; +import { http, HttpResponse, server } from "@/testServer"; import userEvent from "@testing-library/user-event"; -import { render, screen, mockedDisclosure } from "test-utils"; +import { mockedDisclosure, render, screen } from "test-utils"; +import ReceiveModal from "../ReceiveModal"; beforeEach(() => { server.use( diff --git a/src/pages/Home/SendModal/ConfirmSend.tsx b/src/pages/Home/SendModal/ConfirmSend.tsx index 3a194d12..5d58d748 100644 --- a/src/pages/Home/SendModal/ConfirmSend.tsx +++ b/src/pages/Home/SendModal/ConfirmSend.tsx @@ -1,6 +1,3 @@ -import { TxType } from "../SwitchTxType"; -import { SendLnForm } from "./SendModal"; -import { SendOnChainForm } from "./SendOnChain"; import { Alert } from "@/components/Alert"; import AmountInput from "@/components/AmountInput"; import { Button } from "@/components/Button"; @@ -16,10 +13,13 @@ import { import { instance } from "@/utils/interceptor"; import { ChevronLeftIcon } from "@heroicons/react/24/outline"; import type { ChangeEvent } from "react"; -import { FC, useContext, useState } from "react"; +import { type FC, useContext, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { toast } from "react-toastify"; +import { TxType } from "../SwitchTxType"; +import type { SendLnForm } from "./SendModal"; +import type { SendOnChainForm } from "./SendOnChain"; interface IFormInputs { amountInput: string; @@ -163,6 +163,7 @@ const ConfirmSend: FC = ({ confirmData, back, balance, close }) => { {isLnTx && Number(confirmData.amount) !== 0 && ( {formatAmount( + // biome-ignore lint/style/noNonNullAssertion: convertMSatToSat(+confirmData.amount)?.toString()!, Unit.SAT, )}{" "} diff --git a/src/pages/Home/SendModal/SendLN.tsx b/src/pages/Home/SendModal/SendLN.tsx index f246de9a..03d51eeb 100644 --- a/src/pages/Home/SendModal/SendLN.tsx +++ b/src/pages/Home/SendModal/SendLN.tsx @@ -1,16 +1,16 @@ -import { TxType } from "../SwitchTxType"; -import { SendLnForm } from "./SendModal"; -import { SendOnChainForm } from "./SendOnChain"; import { Alert } from "@/components/Alert"; import AvailableBalance from "@/components/AvailableBalance"; import { Button } from "@/components/Button"; import { ConfirmModal } from "@/components/ConfirmModal"; import { convertMSatToSat } from "@/utils/format"; import { Input } from "@nextui-org/react"; -import { FC, useState } from "react"; +import { type FC, useState } from "react"; import type { SubmitHandler } from "react-hook-form"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; +import { TxType } from "../SwitchTxType"; +import type { SendLnForm } from "./SendModal"; +import type { SendOnChainForm } from "./SendOnChain"; export type Props = { lnBalance: number; @@ -58,6 +58,7 @@ const SendLn: FC = ({ return ( + {/* biome-ignore lint/style/noNonNullAssertion: */} { lnBalance: number; diff --git a/src/pages/Home/SendModal/SendOnChain.tsx b/src/pages/Home/SendModal/SendOnChain.tsx index bf6396eb..4bb38204 100644 --- a/src/pages/Home/SendModal/SendOnChain.tsx +++ b/src/pages/Home/SendModal/SendOnChain.tsx @@ -1,5 +1,3 @@ -import { TxType } from "../SwitchTxType"; -import { SendLnForm } from "./SendModal"; import AmountInput from "@/components/AmountInput"; import AvailableBalance from "@/components/AvailableBalance"; import { Button } from "@/components/Button"; @@ -7,10 +5,12 @@ import { ConfirmModal } from "@/components/ConfirmModal"; import { stringToNumber } from "@/utils/format"; import { Checkbox } from "@nextui-org/checkbox"; import { Input } from "@nextui-org/react"; -import { ChangeEvent, type FC, useState } from "react"; +import { type ChangeEvent, type FC, useState } from "react"; import type { SubmitHandler } from "react-hook-form"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; +import { TxType } from "../SwitchTxType"; +import type { SendLnForm } from "./SendModal"; export type Props = { balance: number; diff --git a/src/pages/Home/SendModal/__tests__/ConfirmSend.test.tsx b/src/pages/Home/SendModal/__tests__/ConfirmSend.test.tsx index 24cdda0e..d739b0c9 100644 --- a/src/pages/Home/SendModal/__tests__/ConfirmSend.test.tsx +++ b/src/pages/Home/SendModal/__tests__/ConfirmSend.test.tsx @@ -1,12 +1,12 @@ +import { ConfirmModal } from "@/components/ConfirmModal"; +import { http, HttpResponse, server } from "@/testServer"; +import userEvent from "@testing-library/user-event"; +import { mockedDisclosure, render, screen, waitFor } from "test-utils"; import { TxType } from "../../SwitchTxType"; import type { Props } from "../ConfirmSend"; import ConfirmSend from "../ConfirmSend"; -import { SendLnForm } from "../SendModal"; +import type { SendLnForm } from "../SendModal"; import type { SendOnChainForm } from "../SendOnChain"; -import { ConfirmModal } from "@/components/ConfirmModal"; -import { http, server, HttpResponse } from "@/testServer"; -import userEvent from "@testing-library/user-event"; -import { render, screen, waitFor, mockedDisclosure } from "test-utils"; const closeSpy = vi.fn(); @@ -107,6 +107,7 @@ describe("ConfirmSend", () => { const url = new URL(request.url); if (url.searchParams.get("amount_msat") === "10000") { return new HttpResponse(null, { status: 200 }); + // biome-ignore lint/style/noUselessElse: } else { return new HttpResponse(null, { status: 500 }); } diff --git a/src/pages/Home/SendModal/__tests__/SendModal.test.tsx b/src/pages/Home/SendModal/__tests__/SendModal.test.tsx index 616910aa..113fe120 100644 --- a/src/pages/Home/SendModal/__tests__/SendModal.test.tsx +++ b/src/pages/Home/SendModal/__tests__/SendModal.test.tsx @@ -1,8 +1,8 @@ -import SendModal, { type Props } from "../SendModal"; -import { HttpResponse, http, server } from "@/testServer"; +import { http, HttpResponse, server } from "@/testServer"; import userEvent from "@testing-library/user-event"; import type { UserEvent } from "@testing-library/user-event/dist/types/setup/setup"; -import { render, screen, mockedDisclosure } from "test-utils"; +import { mockedDisclosure, render, screen } from "test-utils"; +import SendModal, { type Props } from "../SendModal"; const basicProps: Props = { lnBalance: 0, @@ -75,6 +75,7 @@ describe("SendModal", () => { }, { status: 200 }, ); + // biome-ignore lint/style/noUselessElse: } else { return new HttpResponse(null, { status: 500 }); } diff --git a/src/pages/Home/SwitchTxType.tsx b/src/pages/Home/SwitchTxType.tsx index 32c30b6c..bfb91f4e 100644 --- a/src/pages/Home/SwitchTxType.tsx +++ b/src/pages/Home/SwitchTxType.tsx @@ -3,8 +3,8 @@ import type { FC } from "react"; import { useTranslation } from "react-i18next"; export enum TxType { - ONCHAIN, - LIGHTNING, + ONCHAIN = 0, + LIGHTNING = 1, } export type Props = { @@ -26,6 +26,7 @@ const SwitchTxType: FC = ({ invoiceType, onTxTypeChange, disabled }) => { return (