diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 5ae929aadda..679f537a948 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -37,7 +37,7 @@ jobs: uses: tj-actions/eslint-changed-files@v18 with: config_path: "src/main/webapp/.eslintrc.js" - extra_args: "--max-warnings=0" + extra_args: "--max-warnings=0 --parser-options project:src/main/webapp/tsconfig.json" file_extensions: | src/main/webapp/resources/js/**/*.ts src/main/webapp/resources/js/**/*.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index dace2fbf4cf..47ed9b5efa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * [UI]: Fixed bug where the `User` column was named `User Group` on the admin User Groups page. [See PR 1450](https://github.com/phac-nml/irida/pull/1450) * [Developer]: Replaced Apache OLTU with Nimbusds for performing OAuth2 authentication flow during syncing and Galaxy exporting. See [PR 1432](https://github.com/phac-nml/irida/pull/1432) * [Developer/UI]: Performance enhancements to the metadata uploader. See [PR 1445](https://github.com/phac-nml/irida/pull/1445). +* [UI/Developer]: Updated Eslint config to use `airbnb`. [See PR 1454](https://github.com/phac-nml/irida/pull/1454) ## [22.09.7] - 2022/01/24 * [UI]: Fixed bugs on NCBI Export page preventing the NCBI `submission.xml` file from being properly written. See [PR 1451](https://github.com/phac-nml/irida/pull/1451) diff --git a/build.gradle.kts b/build.gradle.kts index e1b573f3bab..a6670aa35c5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -301,6 +301,11 @@ tasks.register("cleanWebapp") { pnpmCommand.set(listOf("clean")) } +tasks.register("lintWebapp") { + dependsOn(":pnpmInstall") + pnpmCommand.set(listOf("lint")) +} + tasks.register("buildWebapp") { inputs.files(fileTree("${project.projectDir}/src/main/webapp/resources")) inputs.file("${project.projectDir}/src/main/webapp/package.json") diff --git a/src/main/webapp/.eslintrc.js b/src/main/webapp/.eslintrc.js index bd380cf9cc2..cfe3bb083cf 100644 --- a/src/main/webapp/.eslintrc.js +++ b/src/main/webapp/.eslintrc.js @@ -10,14 +10,13 @@ module.exports = { __webpack_public_path__: true, }, extends: [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - "plugin:@typescript-eslint/eslint-recommended", + "airbnb", + "airbnb-typescript", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", ], parserOptions: { + project: "./tsconfig.json", ecmaFeatures: { jsx: true, }, @@ -31,22 +30,6 @@ module.exports = { }, }, rules: { - "react/prop-types": 0, - "prefer-destructuring": [ - "error", - { - array: true, - object: true, - }, - { - enforceForRenamedProperties: false, - }, - ], - "prettier/prettier": [ - "error", - { - endOfLine: "auto", - }, - ], + "@typescript-eslint/consistent-type-imports": "warn", }, }; diff --git a/src/main/webapp/package.json b/src/main/webapp/package.json index b767cd50193..90f82e0a2af 100644 --- a/src/main/webapp/package.json +++ b/src/main/webapp/package.json @@ -8,7 +8,7 @@ "clean": "run-z --then rm -rf dist/ pages/templates/i18n/", "test": "run-z --then jest resources/js/**/*.test.js", "test_watch": "run-z --then jest --watch resources/js/**/*.test.js", - "lint": "run-z --then eslint --ext resources/js/**/*.{js,jsx,ts,tsx}" + "lint": "run-z --then eslint --ext .js,.jsx,.ts,.tsx resources/js/" }, "browserslist": [ "last 2 Chrome versions", @@ -90,20 +90,23 @@ "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/styled-components": "^5.1.25", - "@typescript-eslint/eslint-plugin": "^5.27.0", - "@typescript-eslint/parser": "^5.27.0", + "@typescript-eslint/eslint-plugin": "^5.49.0", + "@typescript-eslint/parser": "^5.49.0", "autoprefixer": "^10.4.4", "babel-loader": "^8.2.4", "babel-plugin-import": "^1.13.5", "browserslist": "^4.20.2", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^3.4.1", - "eslint": "^8.13.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.4.0", + "eslint": "^8.32.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.32.1", + "eslint-plugin-react-hooks": "^4.6.0", "expose-loader": "^3.1.0", "jest": "^27.5.1", "less": "^4.1.2", diff --git a/src/main/webapp/pnpm-lock.yaml b/src/main/webapp/pnpm-lock.yaml index 9866f5b46ae..cf40936bece 100644 --- a/src/main/webapp/pnpm-lock.yaml +++ b/src/main/webapp/pnpm-lock.yaml @@ -43,8 +43,8 @@ specifiers: '@types/react-virtualized-auto-sizer': ^1.0.1 '@types/react-window': ^1.8.5 '@types/styled-components': ^5.1.25 - '@typescript-eslint/eslint-plugin': ^5.27.0 - '@typescript-eslint/parser': ^5.27.0 + '@typescript-eslint/eslint-plugin': ^5.49.0 + '@typescript-eslint/parser': ^5.49.0 ag-grid-community: ^27.1.0 ag-grid-react: ^27.1.0 antd: 4.19.5 @@ -58,12 +58,15 @@ specifiers: css-minimizer-webpack-plugin: ^3.4.1 dayjs: ^1.11.1 deck.gl: ^8.7.12 - eslint: ^8.13.0 - eslint-config-prettier: ^8.5.0 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-prettier: ^4.0.0 - eslint-plugin-react: ^7.29.4 - eslint-plugin-react-hooks: ^4.4.0 + eslint: ^8.32.0 + eslint-config-airbnb: ^19.0.4 + eslint-config-airbnb-typescript: ^17.0.0 + eslint-config-prettier: ^8.6.0 + eslint-plugin-import: ^2.27.5 + eslint-plugin-jsx-a11y: ^6.7.1 + eslint-plugin-prettier: ^4.2.1 + eslint-plugin-react: ^7.32.1 + eslint-plugin-react-hooks: ^4.6.0 expose-loader: ^3.1.0 flexlayout-react: ^0.7.4 gl-matrix: ^3.4.3 @@ -188,20 +191,23 @@ devDependencies: '@types/react-virtualized-auto-sizer': 1.0.1 '@types/react-window': 1.8.5 '@types/styled-components': 5.1.25 - '@typescript-eslint/eslint-plugin': 5.27.0_ljfpvv7dypng7yyhsvie2ogdeu - '@typescript-eslint/parser': 5.27.0_6hvhxfirl4y3p6nuemvvvbadcu + '@typescript-eslint/eslint-plugin': 5.49.0_yp7zhi6aulozdh56jexh6njdgm + '@typescript-eslint/parser': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 autoprefixer: 10.4.4_postcss@8.4.12 babel-loader: 8.2.4_h3kngfo6sqnotbut4nntjyiezm babel-plugin-import: 1.13.5 browserslist: 4.20.2 css-loader: 6.7.1_webpack@5.72.0 css-minimizer-webpack-plugin: 3.4.1_webpack@5.72.0 - eslint: 8.13.0 - eslint-config-prettier: 8.5.0_eslint@8.13.0 - eslint-plugin-jsx-a11y: 6.5.1_eslint@8.13.0 - eslint-plugin-prettier: 4.0.0_vyq77qlfwyijisbn35utc2xrra - eslint-plugin-react: 7.29.4_eslint@8.13.0 - eslint-plugin-react-hooks: 4.4.0_eslint@8.13.0 + eslint: 8.32.0 + eslint-config-airbnb: 19.0.4_td5yecidacttadzxcsbd5t7tli + eslint-config-airbnb-typescript: 17.0.0_zvmt5xh6vil4vpagx2utjxrocy + eslint-config-prettier: 8.6.0_eslint@8.32.0 + eslint-plugin-import: 2.27.5_6savw6y3b7jng6f64kgkyoij64 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0 + eslint-plugin-prettier: 4.2.1_bwiznj6mum4nx2xtr6b6ecukoq + eslint-plugin-react: 7.32.1_eslint@8.32.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0 expose-loader: 3.1.0_webpack@5.72.0 jest: 27.5.1 less: 4.1.2 @@ -284,7 +290,7 @@ packages: peerDependencies: react: '>=16.0.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 json2mq: 0.2.0 lodash: 4.17.21 @@ -1695,19 +1701,18 @@ packages: - supports-color dev: true - /@babel/runtime-corejs3/7.13.10: - resolution: {integrity: sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==} - dependencies: - core-js-pure: 3.9.1 - regenerator-runtime: 0.13.10 - dev: true - /@babel/runtime/7.20.1: resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.10 + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + /@babel/template/7.18.10: resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} engines: {node: '>=6.9.0'} @@ -2051,14 +2056,14 @@ packages: resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} dev: false - /@eslint/eslintrc/1.2.1: - resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==} + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.3.1 - globals: 13.12.1 + espree: 9.4.1 + globals: 13.19.0 ignore: 5.2.0 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -2068,8 +2073,8 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.9.3: - resolution: {integrity: sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==} + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -2079,6 +2084,11 @@ packages: - supports-color dev: true + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true @@ -2358,7 +2368,7 @@ packages: /@loaders.gl/draco/3.2.4: resolution: {integrity: sha512-cagaHY5I1TSBPOUyQS0ZWgLtMqd+Dnx9wUzduAxLXEVBNHIS2kuG/FXJa/vZFHI79++ZG48BnbmDo05ZVUd4GA==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@loaders.gl/loader-utils': 3.2.4 '@loaders.gl/schema': 3.2.4 '@loaders.gl/worker-utils': 3.2.4 @@ -2393,7 +2403,7 @@ packages: /@loaders.gl/loader-utils/3.2.4: resolution: {integrity: sha512-FwWgQztK5l0Gn7UaIq1LzSKo4751XY1SlQGxibczxRbkwfpbgyCn9yAyJy59HxcqZboYzXi+mrVr7yxLTYAIQg==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@loaders.gl/worker-utils': 3.2.4 '@probe.gl/stats': 3.5.0 dev: false @@ -2426,7 +2436,7 @@ packages: /@loaders.gl/terrain/3.2.4: resolution: {integrity: sha512-+41KWTn/wm62U+7Nx73tHn1PU8XHUIFK700Diq+VJaien+lbdhIRcqwgQV4NXRjxI/7p1yKn9+YNMGtN08diyA==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@loaders.gl/loader-utils': 3.2.4 '@loaders.gl/schema': 3.2.4 '@mapbox/martini': 0.2.0 @@ -2461,7 +2471,7 @@ packages: /@loaders.gl/worker-utils/3.2.4: resolution: {integrity: sha512-gGy8+LiyoxfahCgldYDCgXAUXsC3eBkVGqLrqU759+1y/sw3S+vJzZ2Vwpt8lB7+0LEaJ7gLNnGD+x2LekvO+A==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 dev: false /@luma.gl/constants/8.5.14: @@ -2471,7 +2481,7 @@ packages: /@luma.gl/core/8.5.14: resolution: {integrity: sha512-YgXxWzBNnoIuo6BTsJdK9tfFBWSzmhqeCGsbGMOVimSRXNMDBXATDL5c/J8pkVSbphjhk5aSOmhUC7C5WzKKYQ==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@luma.gl/constants': 8.5.14 '@luma.gl/engine': 8.5.14 '@luma.gl/gltools': 8.5.14 @@ -2562,7 +2572,7 @@ packages: /@math.gl/core/3.6.0: resolution: {integrity: sha512-ZDgNC8iuP2qnG84kjiNKszugKvNHdp5iiiTQUwRPNxOY3qQ7Tw0WfoppCdUfrUdGaa7HEOXbnbJoy9Qnf/M1uQ==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@math.gl/types': 3.6.0 gl-matrix: 3.4.3 dev: false @@ -2570,7 +2580,7 @@ packages: /@math.gl/culling/3.6.0: resolution: {integrity: sha512-IBDQV3k0D54q3vHdAyJkdiTsZJIaWiPczHF1hfykeM5Lj3jtPmpyyhZMsea8yQeeJeacZ7//ZuMMUeqrEuhdxA==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@math.gl/core': 3.6.0 gl-matrix: 3.4.3 dev: false @@ -2578,7 +2588,7 @@ packages: /@math.gl/geospatial/3.6.0: resolution: {integrity: sha512-YSTBOuRksW9lO0BrfFbdfwBbu5SXalfTVni28LLIYsD3u+DYhYnQ/27PYpyfsyTJ364un4zmCo6DLCyjFUpOzA==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@math.gl/core': 3.6.0 gl-matrix: 3.4.3 dev: false @@ -2596,7 +2606,7 @@ packages: /@math.gl/web-mercator/3.6.0: resolution: {integrity: sha512-C9X1NUd6pA3G2g8CFDhi2a1UzsjFNljHl6a1cZ0qQkGMCpjRctHYpjQA1fJ/A+r7vgAxXvMf3EcY5odDOHeS6A==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 gl-matrix: 3.4.3 dev: false @@ -2632,20 +2642,20 @@ packages: /@probe.gl/env/3.5.0: resolution: {integrity: sha512-YdlpZZshhyYxvWDBmZ5RIW2pTR14Pw4p9czMlt/v7F6HbFzWfAdmH7q6xVwFRYxUpQLwhWensWyv4aFysiWl4g==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 dev: false /@probe.gl/log/3.5.0: resolution: {integrity: sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@probe.gl/env': 3.5.0 dev: false /@probe.gl/stats/3.5.0: resolution: {integrity: sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 dev: false /@proc7ts/context-values/7.0.1: @@ -2704,7 +2714,7 @@ packages: /@redux-saga/core/1.1.3: resolution: {integrity: sha512-8tInBftak8TPzE6X13ABmEtRJGjtK17w7VUs7qV17S8hCO5S3+aUTWZ/DBsBJPdE8Z5jOPwYALyvofgq1Ws+kg==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@redux-saga/deferred': 1.1.2 '@redux-saga/delay-p': 1.1.2 '@redux-saga/is': 1.1.2 @@ -2932,6 +2942,10 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + /@types/lodash.uniqby/4.7.7: resolution: {integrity: sha512-sv2g6vkCIvEUsK5/Vq17haoZaisfj2EWW8mP7QWlnKi6dByoNmeuHDDXHR7sabuDqwO4gvU7ModIL22MmnOocg==} dependencies: @@ -3014,6 +3028,10 @@ packages: /@types/scheduler/0.16.1: resolution: {integrity: sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==} + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: true + /@types/stack-utils/2.0.0: resolution: {integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==} dev: true @@ -3044,8 +3062,8 @@ packages: '@types/yargs-parser': 20.2.0 dev: true - /@typescript-eslint/eslint-plugin/5.27.0_ljfpvv7dypng7yyhsvie2ogdeu: - resolution: {integrity: sha512-DDrIA7GXtmHXr1VCcx9HivA39eprYBIFxbQEHI6NyraRDxCGpxAFiYQAT/1Y0vh1C+o2vfBiy4IuPoXxtTZCAQ==} + /@typescript-eslint/eslint-plugin/5.49.0_yp7zhi6aulozdh56jexh6njdgm: + resolution: {integrity: sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -3055,14 +3073,14 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.27.0_6hvhxfirl4y3p6nuemvvvbadcu - '@typescript-eslint/scope-manager': 5.27.0 - '@typescript-eslint/type-utils': 5.27.0_6hvhxfirl4y3p6nuemvvvbadcu - '@typescript-eslint/utils': 5.27.0_6hvhxfirl4y3p6nuemvvvbadcu + '@typescript-eslint/parser': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/type-utils': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 + '@typescript-eslint/utils': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 debug: 4.3.4 - eslint: 8.13.0 - functional-red-black-tree: 1.0.1 + eslint: 8.32.0 ignore: 5.2.0 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.7 tsutils: 3.21.0_typescript@4.7.2 @@ -3071,8 +3089,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.27.0_6hvhxfirl4y3p6nuemvvvbadcu: - resolution: {integrity: sha512-8oGjQF46c52l7fMiPPvX4It3u3V3JipssqDfHQ2hcR0AeR8Zge+OYyKUCm5b70X72N1qXt0qgHenwN6Gc2SXZA==} + /@typescript-eslint/parser/5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4: + resolution: {integrity: sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3081,26 +3099,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.27.0 - '@typescript-eslint/types': 5.27.0 - '@typescript-eslint/typescript-estree': 5.27.0_typescript@4.7.2 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.7.2 debug: 4.3.4 - eslint: 8.13.0 + eslint: 8.32.0 typescript: 4.7.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.27.0: - resolution: {integrity: sha512-VnykheBQ/sHd1Vt0LJ1JLrMH1GzHO+SzX6VTXuStISIsvRiurue/eRkTqSrG0CexHQgKG8shyJfR4o5VYioB9g==} + /@typescript-eslint/scope-manager/5.49.0: + resolution: {integrity: sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.27.0 - '@typescript-eslint/visitor-keys': 5.27.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 dev: true - /@typescript-eslint/type-utils/5.27.0_6hvhxfirl4y3p6nuemvvvbadcu: - resolution: {integrity: sha512-vpTvRRchaf628Hb/Xzfek+85o//zEUotr1SmexKvTfs7czXfYjXVT/a5yDbpzLBX1rhbqxjDdr1Gyo0x1Fc64g==} + /@typescript-eslint/type-utils/5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4: + resolution: {integrity: sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -3109,22 +3127,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.27.0_6hvhxfirl4y3p6nuemvvvbadcu + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.7.2 + '@typescript-eslint/utils': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 debug: 4.3.4 - eslint: 8.13.0 + eslint: 8.32.0 tsutils: 3.21.0_typescript@4.7.2 typescript: 4.7.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.27.0: - resolution: {integrity: sha512-lY6C7oGm9a/GWhmUDOs3xAVRz4ty/XKlQ2fOLr8GAIryGn0+UBOoJDWyHer3UgrHkenorwvBnphhP+zPmzmw0A==} + /@typescript-eslint/types/5.49.0: + resolution: {integrity: sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.27.0_typescript@4.7.2: - resolution: {integrity: sha512-QywPMFvgZ+MHSLRofLI7BDL+UczFFHyj0vF5ibeChDAJgdTV8k4xgEwF0geFhVlPc1p8r70eYewzpo6ps+9LJQ==} + /@typescript-eslint/typescript-estree/5.49.0_typescript@4.7.2: + resolution: {integrity: sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -3132,8 +3151,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.27.0 - '@typescript-eslint/visitor-keys': 5.27.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/visitor-keys': 5.49.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3144,29 +3163,31 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.27.0_6hvhxfirl4y3p6nuemvvvbadcu: - resolution: {integrity: sha512-nZvCrkIJppym7cIbP3pOwIkAefXOmfGPnCM0LQfzNaKxJHI6VjI8NC662uoiPlaf5f6ymkTy9C3NQXev2mdXmA==} + /@typescript-eslint/utils/5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4: + resolution: {integrity: sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.27.0 - '@typescript-eslint/types': 5.27.0 - '@typescript-eslint/typescript-estree': 5.27.0_typescript@4.7.2 - eslint: 8.13.0 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.49.0 + '@typescript-eslint/types': 5.49.0 + '@typescript-eslint/typescript-estree': 5.49.0_typescript@4.7.2 + eslint: 8.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.13.0 + eslint-utils: 3.0.0_eslint@8.32.0 + semver: 7.3.7 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.27.0: - resolution: {integrity: sha512-46cYrteA2MrIAjv9ai44OQDUoCZyHeGIc4lsjCUX2WT6r4C+kidz1bNiR4017wHOPUythYeH+Sc7/cFP97KEAA==} + /@typescript-eslint/visitor-keys/5.49.0: + resolution: {integrity: sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.27.0 + '@typescript-eslint/types': 5.49.0 eslint-visitor-keys: 3.3.0 dev: true @@ -3334,12 +3355,12 @@ packages: acorn: 8.7.1 dev: true - /acorn-jsx/5.3.1_acorn@8.7.1: - resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} + /acorn-jsx/5.3.2_acorn@8.8.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.7.1 + acorn: 8.8.2 dev: true /acorn-walk/7.2.0: @@ -3359,6 +3380,12 @@ packages: hasBin: true dev: true + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /adler-32/1.3.1: resolution: {integrity: sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==} engines: {node: '>=0.8'} @@ -3567,12 +3594,10 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /aria-query/4.2.2: - resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} - engines: {node: '>=6.0'} + /aria-query/5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: - '@babel/runtime': 7.20.1 - '@babel/runtime-corejs3': 7.13.10 + deep-equal: 2.2.0 dev: true /array-back/3.1.0: @@ -3585,14 +3610,14 @@ packages: engines: {node: '>=8'} dev: false - /array-includes/3.1.4: - resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - get-intrinsic: 1.1.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 is-string: 1.0.7 dev: true @@ -3605,13 +3630,34 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.flatmap/1.2.5: - resolution: {integrity: sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==} + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.tosorted/1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.0 dev: true /ast-types-flow/0.0.7: @@ -3642,8 +3688,13 @@ packages: postcss-value-parser: 4.2.0 dev: true - /axe-core/4.4.1: - resolution: {integrity: sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==} + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core/4.6.3: + resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} dev: true @@ -3655,8 +3706,10 @@ packages: - debug dev: false - /axobject-query/2.2.0: - resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + /axobject-query/3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + dependencies: + deep-equal: 2.2.0 dev: true /babel-jest/27.5.1_@babel+core@7.19.6: @@ -3877,7 +3930,7 @@ packages: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.1 + get-intrinsic: 1.2.0 /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -4108,6 +4161,10 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /confusing-browser-globals/1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + /convert-source-map/1.7.0: resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} dependencies: @@ -4132,12 +4189,6 @@ packages: browserslist: 4.21.4 dev: true - /core-js-pure/3.9.1: - resolution: {integrity: sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A==} - deprecated: core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - requiresBuild: true - dev: true - /cosmiconfig/7.0.0: resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} engines: {node: '>=10'} @@ -4486,7 +4537,6 @@ packages: dependencies: ms: 2.1.3 dev: true - optional: true /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -4553,6 +4603,28 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-equal/2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} + dependencies: + call-bind: 1.0.2 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.9 + dev: true + /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4567,10 +4639,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /define-properties/1.1.3: - resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: + has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true @@ -4749,41 +4822,83 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.19.1: - resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: + available-typed-arrays: 1.0.5 call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function-bind: 1.1.1 - get-intrinsic: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 has: 1.0.3 - has-symbols: 1.0.2 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.1 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.4 + is-array-buffer: 3.0.1 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.1 + is-shared-array-buffer: 1.0.2 is-string: 1.0.7 + is-typed-array: 1.1.10 is-weakref: 1.0.2 - object-inspect: 1.12.0 + object-inspect: 1.12.3 object-keys: 1.1.1 - object.assign: 4.1.2 - string.prototype.trimend: 1.0.4 - string.prototype.trimstart: 1.0.4 - unbox-primitive: 1.0.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 dev: true /es-module-lexer/0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} dev: true + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - is-callable: 1.2.4 + is-callable: 1.2.7 is-date-object: 1.0.2 is-symbol: 1.0.3 dev: true @@ -4820,39 +4935,165 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.5.0_eslint@8.13.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-config-airbnb-base/15.0.0_ps7hf4l2dvbuxvtusmrfhmzsba: + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 8.32.0 + eslint-plugin-import: 2.27.5_6savw6y3b7jng6f64kgkyoij64 + object.assign: 4.1.4 + object.entries: 1.1.6 + semver: 6.3.0 + dev: true + + /eslint-config-airbnb-typescript/17.0.0_zvmt5xh6vil4vpagx2utjxrocy: + resolution: {integrity: sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.13.0 + '@typescript-eslint/parser': ^5.0.0 + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + dependencies: + '@typescript-eslint/eslint-plugin': 5.49.0_yp7zhi6aulozdh56jexh6njdgm + '@typescript-eslint/parser': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 + eslint: 8.32.0 + eslint-config-airbnb-base: 15.0.0_ps7hf4l2dvbuxvtusmrfhmzsba + eslint-plugin-import: 2.27.5_6savw6y3b7jng6f64kgkyoij64 + dev: true + + /eslint-config-airbnb/19.0.4_td5yecidacttadzxcsbd5t7tli: + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + dependencies: + eslint: 8.32.0 + eslint-config-airbnb-base: 15.0.0_ps7hf4l2dvbuxvtusmrfhmzsba + eslint-plugin-import: 2.27.5_6savw6y3b7jng6f64kgkyoij64 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.32.0 + eslint-plugin-react: 7.32.1_eslint@8.32.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.32.0 + object.assign: 4.1.2 + object.entries: 1.1.5 + dev: true + + /eslint-config-prettier/8.6.0_eslint@8.32.0: + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.13.0 + eslint: 8.32.0 + dev: true + + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + dependencies: + debug: 3.2.7 + is-core-module: 2.11.0 + resolve: 1.22.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.7.4_cnxxylyx37asr43xy64ejg3pwe: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 + debug: 3.2.7 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import/2.27.5_6savw6y3b7jng6f64kgkyoij64: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.49.0_xxxxlh5gp6rpyhwj2gzuzeb7o4 + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_cnxxylyx37asr43xy64ejg3pwe + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.0 + semver: 6.3.0 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color dev: true - /eslint-plugin-jsx-a11y/6.5.1_eslint@8.13.0: - resolution: {integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==} + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.32.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.1 - aria-query: 4.2.2 - array-includes: 3.1.4 + '@babel/runtime': 7.20.13 + aria-query: 5.1.3 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 ast-types-flow: 0.0.7 - axe-core: 4.4.1 - axobject-query: 2.2.0 + axe-core: 4.6.3 + axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.13.0 + eslint: 8.32.0 has: 1.0.3 - jsx-ast-utils: 3.2.1 + jsx-ast-utils: 3.3.3 language-tags: 1.0.5 minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.0 dev: true - /eslint-plugin-prettier/4.0.0_vyq77qlfwyijisbn35utc2xrra: - resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} - engines: {node: '>=6.0.0'} + /eslint-plugin-prettier/4.2.1_bwiznj6mum4nx2xtr6b6ecukoq: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} peerDependencies: eslint: '>=7.28.0' eslint-config-prettier: '*' @@ -4861,42 +5102,43 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.13.0 - eslint-config-prettier: 8.5.0_eslint@8.13.0 + eslint: 8.32.0 + eslint-config-prettier: 8.6.0_eslint@8.32.0 prettier: 2.7.1 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks/4.4.0_eslint@8.13.0: - resolution: {integrity: sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==} + /eslint-plugin-react-hooks/4.6.0_eslint@8.32.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.13.0 + eslint: 8.32.0 dev: true - /eslint-plugin-react/7.29.4_eslint@8.13.0: - resolution: {integrity: sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==} + /eslint-plugin-react/7.32.1_eslint@8.32.0: + resolution: {integrity: sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.4 - array.prototype.flatmap: 1.2.5 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.13.0 + eslint: 8.32.0 estraverse: 5.3.0 jsx-ast-utils: 3.2.1 minimatch: 3.1.2 - object.entries: 1.1.5 - object.fromentries: 2.0.5 - object.hasown: 1.1.0 - object.values: 1.1.5 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 prop-types: 15.8.1 resolve: 1.22.0 semver: 6.3.0 - string.prototype.matchall: 4.0.6 + string.prototype.matchall: 4.0.8 dev: true /eslint-scope/5.1.1: @@ -4915,13 +5157,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.13.0: + /eslint-utils/3.0.0_eslint@8.32.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.13.0 + eslint: 8.32.0 eslint-visitor-keys: 2.0.0 dev: true @@ -4935,13 +5177,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.13.0: - resolution: {integrity: sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==} + /eslint/8.32.0: + resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.2.1 - '@humanwhocodes/config-array': 0.9.3 + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -4949,20 +5193,23 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.13.0 + eslint-utils: 3.0.0_eslint@8.32.0 eslint-visitor-keys: 3.3.0 - espree: 9.3.1 + espree: 9.4.1 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 + find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.12.1 + globals: 13.19.0 + grapheme-splitter: 1.0.4 ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -4974,17 +5221,16 @@ packages: strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true - /espree/9.3.1: - resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.7.1 - acorn-jsx: 5.3.1_acorn@8.7.1 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -5161,6 +5407,14 @@ packages: path-exists: 4.0.0 dev: true + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -5209,6 +5463,12 @@ packages: optional: true dev: false + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /form-data/3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} @@ -5242,8 +5502,18 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true /gensync/1.0.0-beta.2: @@ -5256,12 +5526,12 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -5278,7 +5548,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.1 + get-intrinsic: 1.2.0 dev: true /gl-matrix/3.4.3: @@ -5318,13 +5588,20 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals/13.12.1: - resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} + /globals/13.19.0: + resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.1.4 + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -5343,8 +5620,15 @@ packages: delegate: 3.2.0 dev: false + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + requiresBuild: true dev: true optional: true @@ -5352,6 +5636,10 @@ packages: resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} dev: true + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + /h3-js/3.7.2: resolution: {integrity: sha512-LPjlHSwB9zQZrMqKloCZmmmt3yZzIK7nqPcXqwU93zT3TtYG6jP4tZBzAPouxut7lLjdFbMQ75wRBiKfpsnY7w==} engines: {node: '>=4', npm: '>=3', yarn: '>=1.3.0'} @@ -5362,8 +5650,8 @@ packages: engines: {node: '>=0.8.0'} dev: false - /has-bigints/1.0.1: - resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true /has-flag/3.0.0: @@ -5375,15 +5663,26 @@ packages: engines: {node: '>=8'} dev: true - /has-symbols/1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} /has-tostringtag/1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /has/1.0.3: @@ -5526,11 +5825,11 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.4: + resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.1 + get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -5544,6 +5843,22 @@ packages: engines: {node: '>= 0.10'} dev: true + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -5564,13 +5879,13 @@ packages: engines: {node: '>=4'} dev: false - /is-callable/1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.8.1: - resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true @@ -5580,6 +5895,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-extglob/2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -5607,8 +5929,12 @@ packages: is-extglob: 2.1.1 dev: true - /is-negative-zero/2.0.1: - resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} + /is-map/2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true @@ -5622,6 +5948,11 @@ packages: engines: {node: '>=0.12.0'} dev: true + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-plain-obj/4.0.0: resolution: {integrity: sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==} engines: {node: '>=12'} @@ -5646,8 +5977,14 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.1: - resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} + /is-set/2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 dev: true /is-stream/2.0.0: @@ -5666,7 +6003,18 @@ packages: resolution: {integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 + dev: true + + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 dev: true /is-typedarray/1.0.0: @@ -5678,16 +6026,31 @@ packages: engines: {node: '>=12'} dev: true + /is-weakmap/2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true + /is-weakset/2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: true + /is-what/3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} dev: true + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -6209,6 +6572,10 @@ packages: - utf-8-validate dev: true + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} + dev: true + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6237,7 +6604,7 @@ packages: optional: true dependencies: abab: 2.0.5 - acorn: 8.7.1 + acorn: 8.8.2 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -6315,6 +6682,13 @@ packages: string-convert: 0.2.1 dev: false + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.7 + dev: true + /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} engines: {node: '>=6'} @@ -6325,8 +6699,16 @@ packages: resolution: {integrity: sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.4 - object.assign: 4.1.2 + array-includes: 3.1.6 + object.assign: 4.1.4 + dev: true + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.6 + object.assign: 4.1.4 dev: true /kind-of/6.0.3: @@ -6446,6 +6828,13 @@ packages: p-locate: 4.1.0 dev: true + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + /lockfile/1.0.4: resolution: {integrity: sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==} dependencies: @@ -6837,6 +7226,10 @@ packages: brace-expansion: 1.1.11 dev: true + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: true + /mjolnir.js/2.7.0: resolution: {integrity: sha512-XlK5OZ7d09eAIdYr+5VKOArYtkWB/f306s34yVij4pBk5wnaKxSrD7fVfP8/BL27nKVylNweqP1pxqh8h+hWKw==} engines: {node: '>= 4', npm: '>= 3'} @@ -6872,13 +7265,16 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - optional: true /nanoid/3.3.2: resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -6956,8 +7352,16 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-inspect/1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + dev: true /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -6969,8 +7373,18 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - has-symbols: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -6979,33 +7393,42 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 + dev: true + + /object.entries/1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true - /object.fromentries/2.0.5: - resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + /object.fromentries/2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true - /object.hasown/1.1.0: - resolution: {integrity: sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==} + /object.hasown/1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - define-properties: 1.1.3 - es-abstract: 1.19.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true - /object.values/1.1.5: - resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true /once/1.4.0: @@ -7052,6 +7475,13 @@ packages: p-try: 2.2.0 dev: true + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -7059,6 +7489,13 @@ packages: p-limit: 2.3.0 dev: true + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7889,7 +8326,7 @@ packages: /probe.gl/3.5.0: resolution: {integrity: sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 '@probe.gl/env': 3.5.0 '@probe.gl/log': 3.5.0 '@probe.gl/stats': 3.5.0 @@ -7975,7 +8412,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 dom-align: 1.12.0 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -7990,7 +8427,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 array-tree-filter: 2.1.0 classnames: 2.3.1 rc-select: 14.0.3_sfoxds7t5ydpegc3knd667wn6m @@ -8006,7 +8443,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 @@ -8018,7 +8455,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8033,7 +8470,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8047,7 +8484,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8060,7 +8497,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-trigger: 5.2.10_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8074,7 +8511,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 async-validator: 4.0.7 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8087,7 +8524,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-dialog: 8.6.0_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8101,7 +8538,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8114,7 +8551,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8127,7 +8564,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-menu: 9.3.2_sfoxds7t5ydpegc3knd667wn6m rc-textarea: 0.3.4_sfoxds7t5ydpegc3knd667wn6m @@ -8143,7 +8580,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-overflow: 1.2.2_sfoxds7t5ydpegc3knd667wn6m @@ -8160,7 +8597,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8174,7 +8611,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8188,7 +8625,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-resize-observer: 1.2.0_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8202,7 +8639,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 react: 17.0.2 react-dom: 17.0.2_react@17.0.2 @@ -8215,7 +8652,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 date-fns: 2.28.0 dayjs: 1.11.1 @@ -8233,7 +8670,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8247,7 +8684,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8260,7 +8697,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8275,7 +8712,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-overflow: 1.2.2_sfoxds7t5ydpegc3knd667wn6m @@ -8293,7 +8730,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-tooltip: 5.1.1_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8309,7 +8746,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8322,7 +8759,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8336,7 +8773,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-resize-observer: 1.2.0_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8352,7 +8789,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-dropdown: 3.3.2_sfoxds7t5ydpegc3knd667wn6m rc-menu: 9.3.2_sfoxds7t5ydpegc3knd667wn6m @@ -8368,7 +8805,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-resize-observer: 1.2.0_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8382,7 +8819,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 rc-trigger: 5.2.10_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 react-dom: 17.0.2_react@17.0.2 @@ -8394,7 +8831,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-select: 14.0.3_sfoxds7t5ydpegc3knd667wn6m rc-tree: 5.4.4_sfoxds7t5ydpegc3knd667wn6m @@ -8410,7 +8847,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m @@ -8426,7 +8863,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-align: 4.0.9_sfoxds7t5ydpegc3knd667wn6m rc-motion: 2.4.5_sfoxds7t5ydpegc3knd667wn6m @@ -8441,7 +8878,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 classnames: 2.3.1 rc-util: 5.20.1_sfoxds7t5ydpegc3knd667wn6m react: 17.0.2 @@ -8480,7 +8917,7 @@ packages: peerDependencies: react: ^15.3.0 || ^16.0.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 react: 17.0.2 dev: false @@ -8544,7 +8981,7 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 focus-lock: 0.9.2 prop-types: 15.8.1 react: 17.0.2 @@ -8764,18 +9201,22 @@ packages: /regenerator-runtime/0.13.10: resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: - '@babel/runtime': 7.20.1 + '@babel/runtime': 7.20.13 dev: true - /regexp.prototype.flags/1.3.1: - resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==} + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 + functions-have-names: 1.2.3 dev: true /regexpp/3.2.0: @@ -8880,7 +9321,7 @@ packages: resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} hasBin: true dependencies: - is-core-module: 2.8.1 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -8950,6 +9391,14 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -9074,8 +9523,8 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.1 - object-inspect: 1.12.0 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 /signal-exit/3.0.3: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} @@ -9159,6 +9608,13 @@ packages: escape-string-regexp: 2.0.0 dev: true + /stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.4 + dev: true + /string-convert/0.2.1: resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} dev: false @@ -9189,31 +9645,33 @@ packages: strip-ansi: 7.0.1 dev: true - /string.prototype.matchall/4.0.6: - resolution: {integrity: sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==} + /string.prototype.matchall/4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.1 - get-intrinsic: 1.1.1 - has-symbols: 1.0.2 - internal-slot: 1.0.3 - regexp.prototype.flags: 1.3.1 + define-properties: 1.1.4 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + internal-slot: 1.0.4 + regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true - /string.prototype.trimend/1.0.4: - resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.4: - resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 + es-abstract: 1.21.1 dev: true /strip-ansi/6.0.1: @@ -9230,6 +9688,11 @@ packages: ansi-regex: 6.0.1 dev: true + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -9392,7 +9855,7 @@ packages: acorn: optional: true dependencies: - acorn: 8.7.1 + acorn: 8.8.2 commander: 2.20.3 source-map: 0.7.3 source-map-support: 0.5.21 @@ -9475,6 +9938,15 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.7 + strip-bom: 3.0.0 + dev: true + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -9525,6 +9997,14 @@ packages: engines: {node: '>=10'} dev: true + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -9563,12 +10043,12 @@ packages: engines: {node: '>=8'} dev: false - /unbox-primitive/1.0.1: - resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - function-bind: 1.1.1 - has-bigints: 1.0.1 - has-symbols: 1.0.2 + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true @@ -9733,10 +10213,6 @@ packages: sade: 1.8.1 dev: false - /v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true - /v8-to-istanbul/8.1.1: resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} engines: {node: '>=10.12.0'} @@ -9933,6 +10409,27 @@ packages: is-symbol: 1.0.3 dev: true + /which-collection/1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -10065,3 +10562,8 @@ packages: y18n: 5.0.8 yargs-parser: 21.0.1 dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/src/main/webapp/resources/js/apis/paged-table/paged-table.ts b/src/main/webapp/resources/js/apis/paged-table/paged-table.ts index a740d63a1a5..8b80ea85313 100644 --- a/src/main/webapp/resources/js/apis/paged-table/paged-table.ts +++ b/src/main/webapp/resources/js/apis/paged-table/paged-table.ts @@ -1,5 +1,4 @@ import axios from "axios"; -import { BaseModel } from "../../types/irida"; export interface PageTableFilters { [key: string]: string[]; @@ -14,23 +13,14 @@ export interface PageTableRequest { filters: PageTableFilters; } -export interface PageTableResponse { - dataSource: PageTableModel[]; - total: number; -} - -export interface PageTableModel extends BaseModel { - [key: string]: any; // allows any additional keys of any type value -} - /** * Default function to fetch paged table data. * @param url - datasource url for the paged table - * @param data - table request payload for the paged table + * @param body - table request payload for the paged table */ -export async function fetchPageTableUpdate( +export async function fetchPageTableUpdate( url: string, - data: PageTableRequest -): Promise { - return axios.post(url, data).then(({ data }) => data); + body: PageTableRequest +) { + return axios.post(url, body).then(({ data }) => data); } diff --git a/src/main/webapp/resources/js/apis/projects/samples.ts b/src/main/webapp/resources/js/apis/projects/samples.ts index 535c655abba..2e5f190ee65 100644 --- a/src/main/webapp/resources/js/apis/projects/samples.ts +++ b/src/main/webapp/resources/js/apis/projects/samples.ts @@ -1,15 +1,21 @@ import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react"; -import { - PairedEndSequenceFile, - SingleEndSequenceFile, -} from "../../types/irida"; -import { + +import axios from "axios"; +import type { AjaxErrorResponse, AjaxSuccessResponse, } from "../../types/ajax-response"; +import type { + PairedEndSequenceFile, + SelectedSample, + SingleEndSequenceFile, +} from "../../types/irida"; +import type { + PagedTableOptions, + PagedTableResponse, +} from "../../types/paged-table"; import { getProjectIdFromUrl, setBaseUrl } from "../../utilities/url-utilities"; import { get, post } from "../requests"; -import axios from "axios"; export interface SequencingFiles { singles: SingleEndSequenceFile[]; @@ -82,9 +88,31 @@ export type CreateUpdateSamples = (params: { const PROJECT_ID = getProjectIdFromUrl(); const URL = setBaseUrl(`/ajax/projects`); +type FetchPagedSamplesParams = { + projectId: number; + body: PagedTableOptions; +}; + +type MergeSamplesParams = { + projectId: number; + body: { + ids: number[]; + newName: string; + primary: number; + }; +}; + +type ShareSamplesParams = { + currentId: number; + locked: boolean; + remove: boolean; + restrictions: { restriction: string; identifier: number }[]; + sampleIds: number[]; + targetId: number; +}; + /** * Redux API for handling project samples queries. - * @type {Api<(args: (string | FetchArgs), api: BaseQueryApi, extraOptions: {}) => MaybePromise>, {getSampleIdsForProject: *}, string, never, typeof coreModuleName> | Api<(args: (string | FetchArgs), api: BaseQueryApi, extraOptions: {}) => MaybePromise>, {getSampleIdsForProject: *}, string, never, any>} */ export const samplesApi = createApi({ reducerPath: "samplesApi", @@ -92,35 +120,44 @@ export const samplesApi = createApi({ baseUrl: URL, }), endpoints: (builder) => ({ - listSamples: builder.query({ + listSamples: builder.query< + PagedTableResponse, + FetchPagedSamplesParams + >({ query: (body) => ({ url: `/${PROJECT_ID}/samples`, method: "POST", body, }), }), - merge: builder.mutation({ - query: ({ request }) => ({ - url: `/${PROJECT_ID}/samples/merge`, + merge: builder.mutation<{ message: string }, MergeSamplesParams>({ + query: ({ projectId, body }) => ({ + url: `/${projectId}/samples/merge`, method: "POST", - body: request, + body, }), }), - remove: builder.mutation({ + remove: builder.mutation<{ message: string }, number[]>({ query: (sampleIds) => ({ url: `/${PROJECT_ID}/samples/remove`, method: "DELETE", body: { sampleIds }, }), }), - shareSamplesWithProject: builder.mutation({ + shareSamplesWithProject: builder.mutation< + PagedTableResponse<{ message: string }>, + ShareSamplesParams + >({ query: (body) => ({ url: `/${PROJECT_ID}/samples/share`, method: `POST`, body, }), }), - validateSamples: builder.mutation({ + validateSamples: builder.mutation< + PagedTableResponse<{ ids: null | number[]; name: string }[]>, + { projectId: number; body: { samples: { name: string }[] } } + >({ query: ({ projectId, body }) => ({ url: `/${projectId}/samples/validate`, method: `POST`, @@ -170,17 +207,15 @@ export const createSamples: CreateUpdateSamples = async ({ `${URL}/${projectId}/samples/create`, body ); - return Promise.resolve(data); + return await Promise.resolve(data); } catch (error) { if (axios.isAxiosError(error)) { if (error.response) { return Promise.resolve(error.response.data); - } else { - return Promise.reject(error.message); } - } else { - return Promise.reject("An unexpected error occurred"); + return Promise.reject(error.message); } + return Promise.reject(new Error("An unexpected error occurred")); } }; @@ -193,17 +228,15 @@ export const updateSamples: CreateUpdateSamples = async ({ `${URL}/${projectId}/samples/update`, body ); - return Promise.resolve(data); + return await Promise.resolve(data); } catch (error) { if (axios.isAxiosError(error)) { if (error.response) { return Promise.resolve(error.response.data); - } else { - return Promise.reject(error.message); } - } else { - return Promise.reject("An unexpected error occurred"); + return Promise.reject(error.message); } + return Promise.reject(new Error("An unexpected error occurred")); } }; diff --git a/src/main/webapp/resources/js/components/DefaultErrorBoundary.tsx b/src/main/webapp/resources/js/components/DefaultErrorBoundary.tsx index f1a5e3b0a7b..68f0988cec3 100644 --- a/src/main/webapp/resources/js/components/DefaultErrorBoundary.tsx +++ b/src/main/webapp/resources/js/components/DefaultErrorBoundary.tsx @@ -7,7 +7,7 @@ import { useRouteError } from "react-router-dom"; * @constructor */ function DefaultErrorBoundary(): JSX.Element { - const error = useRouteError(); + const error = useRouteError() as string; return ( diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/LockedSamplesList.jsx b/src/main/webapp/resources/js/components/samples/LockedSamplesList.tsx similarity index 63% rename from src/main/webapp/resources/js/pages/projects/samples/components/LockedSamplesList.jsx rename to src/main/webapp/resources/js/components/samples/LockedSamplesList.tsx index 8820d31e98c..0c13ea86599 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/LockedSamplesList.jsx +++ b/src/main/webapp/resources/js/components/samples/LockedSamplesList.tsx @@ -1,17 +1,20 @@ -import React from "react"; import { LockTwoTone } from "@ant-design/icons"; import { Avatar, Button, List } from "antd"; -import { red6 } from "../../../../styles/colors"; -import { SampleDetailViewer } from "../../../../components/samples/SampleDetailViewer"; +import React from "react"; +import type { SelectedSample } from "../../pages/projects/types"; +import { red6 } from "../../styles/colors"; +import { SampleDetailViewer } from "./SampleDetailViewer"; /** * React Element to render a list of locked samples. Use this when they - * cannot be used in the requested action (e.g. remove). - * @param {array} locked - list of samples that are locked from modification - * @returns {JSX.Element} - * @constructor + * cannot be used in the requested action (for example remove). + * @param locked - list of samples that are locked from modification */ -export default function LockedSamplesList({ locked }) { +export default function LockedSamplesList({ + locked, +}: { + locked: SelectedSample[]; +}) { return ( - + } /> diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.jsx b/src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.tsx similarity index 75% rename from src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.jsx rename to src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.tsx index dad3891809c..b3c8e2539e7 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.jsx +++ b/src/main/webapp/resources/js/pages/projects/samples/components/MergeModal.tsx @@ -12,22 +12,33 @@ import { Typography, } from "antd"; import React from "react"; -import { useSelector } from "react-redux"; -import { serverValidateSampleName } from "../../../../utilities/validation-utilities"; import { useMergeMutation } from "../../../../apis/projects/samples"; -import LockedSamplesList from "./LockedSamplesList"; +import { serverValidateSampleName } from "../../../../utilities/validation-utilities"; +import type { SelectedSample } from "../../types"; +import { useTypedSelector } from "../store"; +import LockedSamplesList from "../../../../components/samples/LockedSamplesList"; + +type MergeModalProps = { + onCancel: () => void; + onComplete: () => void; + samples: { locked: SelectedSample[]; valid: SelectedSample[] }; + visible: boolean; +}; /** * React element to display a modal to merge multiple samples into a single one. - * @param {array} samples - list of samples to merge together - * @param {boolean} visible - whether the modal is currently visible on the page - * @param {function} onComplete - function to call when the merge is complete - * @param {function} onCancel - function to call when the merge is cancelled. - * @returns {JSX.Element} - * @constructor - */ -export default function MergeModal({ samples, visible, onComplete, onCancel }) { - const { projectId } = useSelector((state) => state.samples); + * @param samples - list of samples to merge together + * @param visible - whether the modal is currently visible on the page + * @param onComplete - function to call when the merge is complete + * @param onCancel - function to call when the merge is cancelled. +s */ +export default function MergeModal({ + samples, + visible, + onComplete, + onCancel, +}: MergeModalProps) { + const { projectId } = useTypedSelector((state) => state.samples); const [merge, { isLoading }] = useMergeMutation(); const [renameSample, setRenameSample] = React.useState(false); @@ -48,44 +59,43 @@ export default function MergeModal({ samples, visible, onComplete, onCancel }) { }, [form, renameSample]); // Server validate new name - const validateName = async (name) => { + const validateName = async (name: string) => { if (renameSample) { return serverValidateSampleName(name); - } else { - return Promise.resolve(); } + return Promise.resolve(); }; const onSubmit = async () => { - let values; - try { - values = await form.validateFields(); + const { newName, primary }: typeof initialValues = + await form.validateFields(); + + const ids = samples.valid + .map((sample) => sample.id) + .filter((id) => id !== primary); + + const { message } = await merge({ + projectId: Number(projectId), + body: { + newName, + primary, + ids, + }, + }).unwrap(); + + notification.success({ + message: i18n("MergeModal.success"), + description: message, + }); + onComplete(); } catch { /* If the form is in an invalid state it will hit here. This will prevent the invalid date from being submitted and display the errors (if not already displayed) to the user. */ - return; } - const ids = samples.valid - .map((sample) => sample.id) - .filter((id) => id !== values.primary); - - const { message } = await merge({ - projectId, - request: { - ...values, - ids, - }, - }).unwrap(); - - notification.success({ - message: i18n("MergeModal.success"), - description: message, - }); - onComplete(); }; return ( @@ -153,7 +163,7 @@ export default function MergeModal({ samples, visible, onComplete, onCancel }) { ({ + () => ({ validator(_, value) { return validateName(value); }, diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.jsx b/src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.tsx similarity index 80% rename from src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.jsx rename to src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.tsx index e2d7a585d4e..ece57cfb550 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.jsx +++ b/src/main/webapp/resources/js/pages/projects/samples/components/RemoveModal.tsx @@ -1,27 +1,32 @@ -import React from "react"; import { Alert, Col, Divider, List, Modal, Row, Typography } from "antd"; +import React from "react"; import { useRemoveMutation } from "../../../../apis/projects/samples"; -import LockedSamplesList from "./LockedSamplesList"; +import type { SelectedSample } from "../../types"; import AssociatedSamplesList from "./AssociatedSamplesList"; +type RemoveModalProps = { + samples: { associated: SelectedSample[]; valid: SelectedSample[] }; + visible: boolean; + onComplete: () => void; + onCancel: () => void; +}; + /** * React Element to display a modal with sample to be removed from the current * project. * - Will display samples that are locked - cannot be removed. * - Will display associated samples that cannot be removed from this project. - * @param {array} samples - list of samples to remove from the current project - * @param {boolean} visible - whether the modal is currently visible on the page - * @param {function} onComplete - action to perform after the remove is complete - * @param {function} onCancel - action to perform if the remove is cancelled. - * @returns {JSX.Element} - * @constructor + * @param samples - list of samples to remove from the current project + * @param visible - whether the modal is currently visible on the page + * @param onComplete - action to perform after the remove is complete + * @param onCancel - action to perform if the remove is cancelled. */ export default function RemoveModal({ samples, visible, onComplete, onCancel, -}) { +}: RemoveModalProps) { const [removeSamples, { isLoading, error }] = useRemoveMutation(); const onOk = async () => { diff --git a/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx b/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx index 904ad959c65..638c400de75 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx +++ b/src/main/webapp/resources/js/pages/projects/samples/components/SamplesMenu.jsx @@ -1,6 +1,11 @@ import React, { lazy, Suspense } from "react"; import { useDispatch, useSelector } from "react-redux"; import { Button, Dropdown, Menu, notification, Row, Space } from "antd"; +import { + CloseCircleOutlined, + FileTextOutlined, + MergeCellsOutlined, +} from "@ant-design/icons"; import { addToCart, clearFilterByFile, @@ -14,7 +19,7 @@ import { validateSamplesForLinker, validateSamplesForMergeOrShare, validateSamplesForRemove, -} from "../services/sample.utilities"; +} from "../services/sample-utilities"; import { IconCloseSquare, IconCloudDownload, @@ -27,11 +32,6 @@ import { IconShare, IconShoppingCart, } from "../../../../components/icons/Icons"; -import { - CloseCircleOutlined, - FileTextOutlined, - MergeCellsOutlined, -} from "@ant-design/icons"; import { useGetProjectDetailsQuery } from "../../../../apis/projects/project"; import { storeSamples } from "../../../../utilities/session-utilities"; @@ -89,6 +89,14 @@ export default function SamplesMenu() { */ const [sorted, setSorted] = React.useState({}); + const formatAndStoreSamples = (path, samples) => { + storeSamples({ + samples, + projectId, + path, + }); + }; + /** * When a merge is completed, hide the modal and ask * the table to reset @@ -126,19 +134,6 @@ export default function SamplesMenu() { dispatch(exportSamplesToFile(type)); }; - const formatAndStoreSamples = (path, samples) => { - storeSamples({ - samples: samples.map(({ id, sampleName: name, owner, projectId }) => ({ - id, - name, - owner, - projectId, - })), - projectId, - path, - }); - }; - /** * Format samples to share with other projects, * store minimal information in localStorage diff --git a/src/main/webapp/resources/js/pages/projects/samples/index.tsx b/src/main/webapp/resources/js/pages/projects/samples/index.tsx new file mode 100644 index 00000000000..6e38ee6aabb --- /dev/null +++ b/src/main/webapp/resources/js/pages/projects/samples/index.tsx @@ -0,0 +1,24 @@ +/** + * @file Base file for the project samples page. + */ +import React from "react"; +import { render } from "react-dom"; +import { Provider } from "react-redux"; +import ProjectSamples from "./components/ProjectSamples"; +import { setBaseUrl } from "../../../utilities/url-utilities"; +import store from "./store"; + +/* +WEBPACK PUBLIC PATH: +Webpack does not know what the servlet context path is. To fix this, webpack exposed +the variable `__webpack_public_path__` +See: https://webpack.js.org/guides/public-path/#on-the-fly + */ +__webpack_public_path__ = setBaseUrl(`/dist/`); + +render( + + + , + document.getElementById("root") +); diff --git a/src/main/webapp/resources/js/pages/projects/samples/services/sample-utilities.ts b/src/main/webapp/resources/js/pages/projects/samples/services/sample-utilities.ts new file mode 100644 index 00000000000..7fd4c88e92e --- /dev/null +++ b/src/main/webapp/resources/js/pages/projects/samples/services/sample-utilities.ts @@ -0,0 +1,74 @@ +import type { SelectedSample } from "../../types"; + +/** + * Determine valid and invalid samples for merging samples. + * Valid => samples that the user has ownership of + * locked => no ownership + */ +export function validateSamplesForMergeOrShare( + samples: Record +) { + const values = Object.values(samples); + const valid: SelectedSample[] = []; + const locked: SelectedSample[] = []; + + values?.forEach((sample) => { + if (sample.owner) { + valid.push(sample); + } else { + locked.push(sample); + } + }); + return { valid, locked }; +} + +/** + * Determine if samples are valid, locked, or associated + * valid => samples user has ownership + * locked => sample user does not have ownership + * associated => samples that do not belong to the current project. + * @param {array} samples + * @param {number | string} projectId + * @returns {{valid: *[], associated: *[]}} + */ +export function validateSamplesForRemove( + samples: Record, + projectId: number +) { + const values = Object.values(samples); + const valid: SelectedSample[] = []; + const associated: SelectedSample[] = []; + + values.forEach((sample) => { + if (sample.projectId !== projectId) { + associated.push(sample); + } else { + valid.push(sample); + } + }); + return { valid, associated }; +} + +/** + * Determine if samples are valid or associated for using the linker command + * Valid => Not associated + * Associated => Belongs to a different project + * @param samples + * @param projectId + */ +export function validateSamplesForLinker( + samples: Record, + projectId: number +) { + const values = Object.values(samples); + const valid: number[] = []; + const associated: SelectedSample[] = []; + values.forEach((sample) => { + if (sample.projectId === projectId) { + valid.push(sample.id); + } else { + associated.push(sample); + } + }); + return { valid, associated }; +} diff --git a/src/main/webapp/resources/js/pages/projects/samples/services/sample.utilities.js b/src/main/webapp/resources/js/pages/projects/samples/services/sample.utilities.js deleted file mode 100644 index 18aea9dbbea..00000000000 --- a/src/main/webapp/resources/js/pages/projects/samples/services/sample.utilities.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Determine valid and invalid samples for merging samples. - * Valid => samples that the user has ownership of - * Invalid => no ownership - */ -export function validateSamplesForMergeOrShare(samples) { - const values = Object.values(samples), - valid = [], - locked = []; - values?.forEach((sample) => { - if (sample.owner) { - valid.push(sample); - } else { - locked.push(sample); - } - }); - return { valid, locked }; -} - -/** - * Determine if samples are valid, locked, or associated - * valid => samples user has ownership - * locked => sample user does not have ownership - * associated => samples that do not belong to the current project. - * @param {array} samples - * @param {number | string} projectId - * @returns {{valid: *[], associated: *[]}} - */ -export function validateSamplesForRemove(samples, projectId) { - const values = Object.values(samples), - valid = [], - associated = []; - values?.forEach((sample) => { - if (!isSampleFromCurrentProject(sample.projectId, projectId)) { - associated.push(sample); - } else { - valid.push(sample); - } - }); - return { valid, associated }; -} - -/** - * Determine if samples are valid or associated for using the linker command - * Valid => Not associated - * Associated => Belongs to a different project - * @param {array} samples - * @param {number | string} projectId - * @returns {{valid: *[], associated: *[]}} - */ -export function validateSamplesForLinker(samples, projectId) { - const values = Object.values(samples), - valid = [], - associated = []; - values.forEach((sample) => { - if (isSampleFromCurrentProject(sample.projectId, projectId)) { - valid.push(sample.id); - } else { - associated.push(sample); - } - }); - return { valid, associated }; -} - -/** - * Checks id from a sample against the current project - * @param {number | string} sampleProjectId - * @param {number | string} projectId - * @returns {boolean} - */ -const isSampleFromCurrentProject = (sampleProjectId, projectId) => - Number(sampleProjectId) === Number(projectId); diff --git a/src/main/webapp/resources/js/pages/projects/samples/index.js b/src/main/webapp/resources/js/pages/projects/samples/store.ts similarity index 50% rename from src/main/webapp/resources/js/pages/projects/samples/index.js rename to src/main/webapp/resources/js/pages/projects/samples/store.ts index 28c9f6230e7..d8e558014c1 100644 --- a/src/main/webapp/resources/js/pages/projects/samples/index.js +++ b/src/main/webapp/resources/js/pages/projects/samples/store.ts @@ -1,30 +1,15 @@ -/** - * @file Base file for the project samples page. - */ -import React from "react"; -import { render } from "react-dom"; -import ProjectSamples from "./components/ProjectSamples"; import { configureStore } from "@reduxjs/toolkit"; -import { setupListeners } from "@reduxjs/toolkit/query"; -import { Provider } from "react-redux"; -import { samplesApi } from "../../../apis/projects/samples"; +import type { TypedUseSelectorHook } from "react-redux"; +import { useSelector } from "react-redux"; import { associatedProjectsApi } from "../../../apis/projects/associated-projects"; -import samplesReducer from "../redux/samplesSlice"; import { projectApi } from "../../../apis/projects/project"; -import { setBaseUrl } from "../../../utilities/url-utilities"; - -/* -WEBPACK PUBLIC PATH: -Webpack does not know what the servlet context path is. To fix this, webpack exposed -the variable `__webpack_public_path__` -See: https://webpack.js.org/guides/public-path/#on-the-fly - */ -__webpack_public_path__ = setBaseUrl(`/dist/`); +import { samplesApi } from "../../../apis/projects/samples"; +import samplesReducer from "../redux/samplesSlice"; /** * Redux store for project samples */ -export const store = configureStore({ +const store = configureStore({ reducer: { samples: samplesReducer, [projectApi.reducerPath]: projectApi.reducer, @@ -39,11 +24,10 @@ export const store = configureStore({ ), devTools: process.env.NODE_ENV !== "production", }); -setupListeners(store.dispatch); -render( - - - , - document.getElementById("root") -); +export type AppDispatch = typeof store.dispatch; +export type RootState = ReturnType; +export const useAppDispatch = () => store.dispatch; +export const useTypedSelector: TypedUseSelectorHook = useSelector; + +export default store; diff --git a/src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.jsx b/src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.tsx similarity index 77% rename from src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.jsx rename to src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.tsx index 3d869c38afa..54d1530dd67 100644 --- a/src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.jsx +++ b/src/main/webapp/resources/js/pages/projects/share/ShareSampleListItem.tsx @@ -1,23 +1,30 @@ -import { Avatar, Button, List, Tooltip } from "antd"; +import { Avatar, Button, List } from "antd"; import React from "react"; import { useDispatch } from "react-redux"; -import { IconLocked, IconUnlocked } from "../../../components/icons/Icons"; +import { UnlockTwoTone } from "@ant-design/icons"; import { SampleDetailViewer } from "../../../components/samples/SampleDetailViewer"; import { green6 } from "../../../styles/colors"; +import type { SelectedSample } from "../types"; import { removeSample } from "./shareSlice"; -import { UnlockTwoTone } from "@ant-design/icons"; + +type ShareSamplesListItemProps = { + sample: SelectedSample; + style: React.CSSProperties; + actionsRequired: boolean; +}; /** * Render a list item for the samples to be shared with another project. - * @param {array} sample - sample to display - * @param {object} style - style to apply to the list item + * @param sample - sample to display + * @param style - style to apply to the list item + * @param actionsRequired * @returns */ export default function ShareSamplesListItem({ sample, style, actionsRequired, -}) { +}: ShareSamplesListItemProps) { const dispatch = useDispatch(); return ( @@ -52,7 +59,7 @@ export default function ShareSamplesListItem({ projectId={sample.projectId} displayActions={false} > - + } /> diff --git a/src/main/webapp/resources/js/pages/projects/share/ShareSamples.jsx b/src/main/webapp/resources/js/pages/projects/share/ShareSamples.tsx similarity index 91% rename from src/main/webapp/resources/js/pages/projects/share/ShareSamples.jsx rename to src/main/webapp/resources/js/pages/projects/share/ShareSamples.tsx index de276ee89e7..a1fc377e569 100644 --- a/src/main/webapp/resources/js/pages/projects/share/ShareSamples.jsx +++ b/src/main/webapp/resources/js/pages/projects/share/ShareSamples.tsx @@ -1,25 +1,33 @@ import { Alert, Checkbox, Collapse, Space, Typography } from "antd"; import React from "react"; import { useDispatch, useSelector } from "react-redux"; +import { ExclamationCircleOutlined } from "@ant-design/icons"; +import type { SelectedSample } from "../types"; import ShareAssociated from "./ShareAssociated"; import { SharedSamplesList } from "./SharedSamplesList"; import { updatedLocked, updateMoveSamples } from "./shareSlice"; -import { ExclamationCircleOutlined } from "@ant-design/icons"; import { SPACE_XS } from "../../../styles/spacing"; -import LockedSamplesList from "../samples/components/LockedSamplesList"; +import LockedSamplesList from "../../../components/samples/LockedSamplesList"; const { Panel } = Collapse; + +type ShareSamplesProps = { + samples: SelectedSample[]; + targetProjectSampleIdsDuplicate: number[]; + targetProjectSampleNamesDuplicate: number[]; +}; + /** * React component to review the samples to be shared with another project. * * @returns {JSX.Element} * @constructor */ -export function ShareSamples({ +export default function ShareSamples({ samples = [], targetProjectSampleIdsDuplicate = [], targetProjectSampleNamesDuplicate = [], -}) { +}: ShareSamplesProps): JSX.Element { const dispatch = useDispatch(); const { @@ -115,6 +123,7 @@ export function ShareSamples({ )} {lockedSamples.length > 0 && ( + 0 {i18n("ShareSamples.locked")} diff --git a/src/main/webapp/resources/js/pages/projects/share/index.js b/src/main/webapp/resources/js/pages/projects/share/index.tsx similarity index 91% rename from src/main/webapp/resources/js/pages/projects/share/index.js rename to src/main/webapp/resources/js/pages/projects/share/index.tsx index a6795bcd6a5..118b5334522 100644 --- a/src/main/webapp/resources/js/pages/projects/share/index.js +++ b/src/main/webapp/resources/js/pages/projects/share/index.tsx @@ -21,7 +21,7 @@ import { setBaseUrl } from "../../../utilities/url-utilities"; import { ShareMetadata } from "./ShareMetadata"; import { ShareNoSamples } from "./ShareNoSamples"; import { ShareProject } from "./ShareProject"; -import { ShareSamples } from "./ShareSamples"; +import ShareSamples from "./ShareSamples"; import { ShareSuccess } from "./ShareSuccess"; import ShareLarge from "./ShareLarge"; import store from "./store"; @@ -37,10 +37,10 @@ function ShareApp() { const [prevDisabled, setPrevDisabled] = React.useState(true); const [nextDisabled, setNextDisabled] = React.useState(true); const [shareLarge, setShareLarge] = React.useState(false); - const [error, setError] = React.useState(undefined); + const [error, setError] = React.useState(undefined); const [finished, setFinished] = React.useState(false); - const [existingIds, setExistingIds] = React.useState([]); - const [existingNames, setExistingNames] = React.useState([]); + const [existingIds, setExistingIds] = React.useState([]); + const [existingNames, setExistingNames] = React.useState([]); const [validateSamples] = useValidateSamplesMutation(); /* @@ -114,16 +114,18 @@ function ShareApp() { })), }, }).then((response) => { - let filtered = response.data.samples.filter((sample) => sample.ids); + const filteredSamples = response.data.samples.filter( + (sample) => sample.ids + ); setExistingIds( - filtered + filteredSamples .map((sample) => { return sample.ids; }) .flat() ); setExistingNames( - filtered.map((sample) => { + filteredSamples.map((sample) => { return sample.name; }) ); @@ -138,7 +140,8 @@ function ShareApp() { targetProject === undefined && typeof error === "undefined" ); return; - } else if (step === 1) { + } + if (step === 1) { setPrevDisabled(false); setNextDisabled(filtered.length === 0 || samples.length === 0); return; @@ -160,8 +163,9 @@ function ShareApp() { /** * Return to previous page (project samples page) */ - const goToPrevious = () => - (window.location.href = setBaseUrl(`/projects/${currentProject}/samples`)); + const goToPrevious = () => { + window.location.href = setBaseUrl(`/projects/${currentProject}/samples`); + }; const nextStep = () => setStep(step + 1); const previousStep = () => setStep(step - 1); @@ -188,7 +192,7 @@ function ShareApp() { // Remove the share from session storage window.sessionStorage.removeItem("share"); } catch (e) { - setError(e); + setError(e as string); } } else { setShareLarge(true); @@ -223,8 +227,8 @@ function ShareApp() { current={step} style={{ height: 400 }} > - {steps.map((step) => ( - + {steps.map((s) => ( + ))} @@ -236,7 +240,8 @@ function ShareApp() { removed={remove} project={targetProject} /> - ) : shareLarge ? ( + ) : null} + {!finished && shareLarge ? ( & { + owner: boolean; + projectId: number; + }; +} + +export = ProjectTypes; +export as namespace ProjectTypes; diff --git a/src/main/webapp/resources/js/types/ant-design/index.d.ts b/src/main/webapp/resources/js/types/ant-design/index.d.ts index d31bc08e957..1050215d969 100644 --- a/src/main/webapp/resources/js/types/ant-design/index.d.ts +++ b/src/main/webapp/resources/js/types/ant-design/index.d.ts @@ -1,26 +1,32 @@ /** * Properties that are available on the Ant Design Grid Component */ -export interface GridProps { - column?: number; - gutter?: number; - xs?: number; - sm?: number; - md?: number; - lg?: number; - xl?: number; - xxl?: number; + +declare namespace ANTD { + interface GridProps { + column?: number; + gutter?: number; + xs?: number; + sm?: number; + md?: number; + lg?: number; + xl?: number; + xxl?: number; + } + + type TagColor = + | "magenta" + | "red" + | "volcano" + | "orange" + | "gold" + | "lime" + | "green" + | "cyan" + | "blue" + | "geekblue" + | "purple"; } -export type TagColor = - | "magenta" - | "red" - | "volcano" - | "orange" - | "gold" - | "lime" - | "green" - | "cyan" - | "blue" - | "geekblue" - | "purple"; +export = ANTD; +export as namespace ANTD; diff --git a/src/main/webapp/resources/js/types/irida/index.d.ts b/src/main/webapp/resources/js/types/irida/index.d.ts index 95b35d5e87a..5b81cbec8f3 100644 --- a/src/main/webapp/resources/js/types/irida/index.d.ts +++ b/src/main/webapp/resources/js/types/irida/index.d.ts @@ -1,8 +1,5 @@ -import { GenomeAssembly } from "../../apis/samples/samples"; -import { Restriction } from "../../utilities/restriction-utilities"; - -export = IRIDA; -export as namespace IRIDA; +import type { GenomeAssembly } from "../../apis/samples/samples"; +import type { Restriction } from "../../utilities/restriction-utilities"; declare namespace IRIDA { interface BaseModel { @@ -162,13 +159,6 @@ declare namespace IRIDA { file: SequencingObject; } - interface StoredSample { - id: number; - name: string; - owner: boolean; - projectId: number; - } - enum SystemRole { ROLE_ADMIN = "ROLE_ADMIN", ROLE_USER = "ROLE_USER", @@ -243,3 +233,6 @@ declare namespace IRIDA { restriction: Restriction; } } + +export = IRIDA; +export as namespace IRIDA; diff --git a/src/main/webapp/resources/js/types/paged-table.d.ts b/src/main/webapp/resources/js/types/paged-table.d.ts new file mode 100644 index 00000000000..1cc6fece27f --- /dev/null +++ b/src/main/webapp/resources/js/types/paged-table.d.ts @@ -0,0 +1,38 @@ +import type { + FilterValue, + TablePaginationConfig, +} from "antd/lib/table/interface"; + +export type PagedTableResponse = { + content: T[]; + total: number; +}; + +export type TableFilters = Record | undefined; + +export type PagedTableOptions = { + filters: TableFilters; + pagination: TablePaginationConfig; + order: TableSortOrder[] | undefined; + search: TableSearch[]; + reload?: number; +}; + +export type TableSortOrder = { + property: string; + direction: "asc" | "desc"; +}; + +export type TableOperation = + | "IN" + | "MATCH" + | "MATCH_IN" + | "GREATER_THAN_EQUAL" + | "LESS_THAN_EQUAL"; + +export type TableSearch = { + property: string; + value: string | string[]; + operation: TableOperation; + _file?: boolean; +}; diff --git a/src/main/webapp/resources/js/utilities/session-utilities.ts b/src/main/webapp/resources/js/utilities/session-utilities.ts index 05f32267dd8..1e4896ca896 100644 --- a/src/main/webapp/resources/js/utilities/session-utilities.ts +++ b/src/main/webapp/resources/js/utilities/session-utilities.ts @@ -1,8 +1,8 @@ -import { StoredSample } from "../types/irida"; +import type { SelectedSample } from "../pages/projects/types"; export interface SessionSample { projectId: number; - samples: StoredSample[]; + samples: SelectedSample[]; timestamp: Date; } @@ -17,7 +17,7 @@ export function storeSamples({ projectId, path, }: { - samples: StoredSample[]; + samples: SelectedSample[]; projectId: number; path: string; }): void { @@ -41,5 +41,5 @@ export async function getStoredSamples(path: string): Promise { if (stored) { return Promise.resolve(JSON.parse(stored)); } - return Promise.reject("No shared samples"); + return Promise.reject(new Error("No samples stored")); } diff --git a/src/main/webapp/tsconfig.json b/src/main/webapp/tsconfig.json index 9a7a861dbbb..e02bfd17d40 100644 --- a/src/main/webapp/tsconfig.json +++ b/src/main/webapp/tsconfig.json @@ -13,5 +13,12 @@ "jsx": "react", "esModuleInterop": true }, - "include": ["./resources/js/**/*.ts", "./resources/js/**/*.tsx"] + "include": [ + "./*.js", + "./*.json", + "./resources/js/**/*.ts", + "./resources/js/**/*.tsx", + "./resources/js/**/*.js", + "./resources/js/**/*.jsx" + ] }