diff --git a/.eslintignore b/.archive/.eslintignore similarity index 100% rename from .eslintignore rename to .archive/.eslintignore diff --git a/.eslintrc.json b/.archive/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to .archive/.eslintrc.json diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..268786edb --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,205 @@ +import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import formatjs from "eslint-plugin-formatjs"; +import patternflyReact from "eslint-plugin-patternfly-react"; +import react from "eslint-plugin-react"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; +import sortKeysFix from "eslint-plugin-sort-keys-fix"; +import testingLibrary from "eslint-plugin-testing-library"; +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; +// import prettier from "eslint-plugin-prettier"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + ignores: [ + '**/node_modules', + '**/public', + '**/dist', + '**/.DS_Store', + '**/coverage', + '**/npm-debug.log', + '**/yarn-debug.log', + '**/yarn-error.log', + '**/.idea', + '**/.project', + '**/.classpath', + '**/.c9', + '**/*.launch', + '**/.settings', + '**/*.sublime-workspace', + '**/.history', + '**/.vscode', + '**/*.swp', + '**/*.test.ts', + '**/*.test.tsx', + ], +}, ...fixupConfigRules(compat.extends( + '@redhat-cloud-services/eslint-config-redhat-cloud-services', + 'eslint:recommended', // Extended by eslint-config-redhat-cloud-services + 'plugin:@typescript-eslint/recommended', + 'plugin:react/recommended', // Extended by eslint-config-redhat-cloud-services + 'plugin:react-hooks/recommended', +)), { + plugins: { + '@typescript-eslint': fixupPluginRules(typescriptEslint), + formatjs, + 'patternfly-react': patternflyReact, + // prettier, // Plugin defined by eslint-config-redhat-cloud-services + react: fixupPluginRules(react), + 'simple-import-sort': simpleImportSort, + 'sort-keys-fix': sortKeysFix, + 'testing-library': testingLibrary, + }, + + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + afterEach: 'readonly', + beforeEach: 'readonly', + describe: 'readonly', + expect: 'readonly', + global: 'writable', + insights: 'readonly', + it: 'readonly', + jest: 'readonly', + mount: 'readonly', + render: 'readonly', + require: 'readonly', + test: 'readonly', + shallow: 'readonly', + }, + + ecmaVersion: 7, + sourceType: 'module', + + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + + settings: { + react: { + version: 'detect', + }, + }, + + rules: { + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/array-type': 'error', + '@typescript-eslint/ban-types': 'error', + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/consistent-type-assertions': 'error', + '@typescript-eslint/consistent-type-definitions': 'error', + '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/indent': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-misused-new': 'error', + '@typescript-eslint/no-namespace': 'error', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/prefer-for-of': 'error', + '@typescript-eslint/prefer-function-type': 'error', + '@typescript-eslint/prefer-namespace-keyword': 'error', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/triple-slash-reference': 'error', + '@typescript-eslint/unified-signatures': 'error', + + 'arrow-parens': [2, 'as-needed', { + requireForBlockBody: false, + }], + + 'constructor-super': 'error', + curly: 'error', + 'dot-notation': 'error', + eqeqeq: ['error', 'smart'], + // 'formatjs/enforce-default-message': 'error', // Not working -- see https://github.com/formatjs/formatjs/issues/4388 + // 'formatjs/enforce-description': 'error', + // 'formatjs/enforce-id': 'error', + 'guard-for-in': 'error', + 'max-classes-per-file': ['error', 1], + 'max-len': 'off', + 'no-bitwise': 'error', + 'no-caller': 'error', + 'no-cond-assign': 'error', + 'no-console': 'error', + 'no-debugger': 'error', + 'no-empty': 'error', + 'no-eval': 'error', + 'no-new-wrappers': 'error', + 'no-prototype-builtins': 'off', + + 'no-restricted-imports': ['error', { + patterns: ['../*/**'], + }], + + 'no-shadow': 'error', + 'no-throw-literal': 'error', + 'no-trailing-spaces': 'off', + 'no-undef': 'off', + 'no-undef-init': 'error', + 'no-unsafe-finally': 'error', + + 'no-unused-expressions': ['error', { + allowTernary: true, + allowShortCircuit: true, + }], + + 'no-unused-labels': 'error', + 'no-var': 'error', + 'object-shorthand': 'error', + 'one-var': ['error', 'never'], + 'patternfly-react/no-anonymous-functions': 0, + 'prefer-const': 'error', + 'prettier/prettier': 'error', + radix: ['error', 'as-needed'], + 'react-hooks/exhaustive-deps': 0, + 'react/display-name': 0, + + 'react/no-unescaped-entities': ['error', { + forbid: ['>', '}'], + }], + + 'react/no-unknown-property': ['error', { + ignore: ['key'], + }], + + 'react/prop-types': 0, + 'simple-import-sort/imports': 'error', + 'spaced-comment': 'error', + 'rulesdir/disallow-pf-migrated-components': 'off', + 'rulesdir/forbid-pf-relative-imports': 'off', + 'testing-library/await-async-queries': 'error', + 'testing-library/no-await-sync-queries': 'error', + // 'testing-library/no-debugging-utils': 'warn', // Not working -- see https://eslint.org/docs/latest/use/troubleshooting/v9-rule-api-changes + 'testing-library/no-dom-import': 'off', + 'use-isnan': 'error', + }, +}, { + files: ['src/locales/messages.ts'], + + rules: { + 'sort-keys-fix/sort-keys-fix': 'error', + }, +}, ...compat.extends('plugin:testing-library/react').map(config => ({ + ...config, + files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], +}))]; diff --git a/package-lock.json b/package-lock.json index a207a8b63..9c466c37c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,13 +40,16 @@ "victory-core": "^37.0.2" }, "devDependencies": { + "@eslint/compat": "^1.1.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.4.0", "@formatjs/cli": "^6.2.12", "@formatjs/ecma402-abstract": "^2.0.0", "@formatjs/icu-messageformat-parser": "^2.7.8", "@redhat-cloud-services/eslint-config-redhat-cloud-services": "^2.0.4", - "@redhat-cloud-services/frontend-components-config": "^6.0.15", + "@redhat-cloud-services/frontend-components-config": "^6.0.16", "@redhat-cloud-services/tsc-transform-imports": "^1.0.11", - "@swc/core": "^1.5.28", + "@swc/core": "^1.5.29", "@swc/jest": "^0.2.36", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", @@ -61,10 +64,10 @@ "@typescript-eslint/parser": "^7.13.0", "aphrodite": "^2.4.0", "copy-webpack-plugin": "^12.0.2", - "eslint": "^8.57.0", + "eslint": "^9.4.0", "eslint-plugin-formatjs": "^4.13.3", "eslint-plugin-jest-dom": "^5.4.0", - "eslint-plugin-jsdoc": "^48.2.9", + "eslint-plugin-jsdoc": "^48.2.12", "eslint-plugin-markdown": "^5.0.0", "eslint-plugin-patternfly-react": "^5.3.0", "eslint-plugin-prettier": "^5.1.3", @@ -73,6 +76,7 @@ "eslint-plugin-sort-keys-fix": "^1.1.2", "eslint-plugin-testing-library": "^6.2.2", "git-revision-webpack-plugin": "^5.0.0", + "globals": "^15.4.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", @@ -610,6 +614,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", @@ -797,16 +810,61 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.0.tgz", + "integrity": "sha512-s9Wi/p25+KbzxKlDm3VshQdImhWk+cbdblhwGNnyCU5lpSwtWa4v7VQCxSki0FAUrGA3s8nCWgYzAH41mwQVKQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.15.1.tgz", + "integrity": "sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -814,7 +872,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -831,15 +889,12 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -857,25 +912,22 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.4.0.tgz", + "integrity": "sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@formatjs/cli": { @@ -1111,42 +1163,6 @@ "node": ">=8" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1160,11 +1176,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2523,9 +2546,9 @@ } }, "node_modules/@redhat-cloud-services/frontend-components-config": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-config/-/frontend-components-config-6.0.15.tgz", - "integrity": "sha512-j3BZAc8M+8R53fPqj9MYHI2lLgvwzLUNvPp4g0DXMViKXEWkP3/Vnguvt3tTlqIQ139KUL43MNEli+T4NSdZlA==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/@redhat-cloud-services/frontend-components-config/-/frontend-components-config-6.0.16.tgz", + "integrity": "sha512-yjKC6Duredwck/Jx4imbznIkZg+HC5PzMXhSveWvc1A7LBlB7aPh5Y3hXBh+umRng7/1HScEB1xGYe97+FomZQ==", "dev": true, "dependencies": { "@pmmmwh/react-refresh-webpack-plugin": "^0.5.8", @@ -3282,9 +3305,9 @@ } }, "node_modules/@swc/core": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.28.tgz", - "integrity": "sha512-muCdNIqOTURUgYeyyOLYE3ShL8SZO6dw6bhRm6dCvxWzCZOncPc5fB0kjcPXTML+9KJoHL7ks5xg+vsQK+v6ig==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.29.tgz", + "integrity": "sha512-nvTtHJI43DUSOAf3h9XsqYg8YXKc0/N4il9y4j0xAkO0ekgDNo+3+jbw6MInawjKJF9uulyr+f5bAutTsOKVlw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3299,16 +3322,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.5.28", - "@swc/core-darwin-x64": "1.5.28", - "@swc/core-linux-arm-gnueabihf": "1.5.28", - "@swc/core-linux-arm64-gnu": "1.5.28", - "@swc/core-linux-arm64-musl": "1.5.28", - "@swc/core-linux-x64-gnu": "1.5.28", - "@swc/core-linux-x64-musl": "1.5.28", - "@swc/core-win32-arm64-msvc": "1.5.28", - "@swc/core-win32-ia32-msvc": "1.5.28", - "@swc/core-win32-x64-msvc": "1.5.28" + "@swc/core-darwin-arm64": "1.5.29", + "@swc/core-darwin-x64": "1.5.29", + "@swc/core-linux-arm-gnueabihf": "1.5.29", + "@swc/core-linux-arm64-gnu": "1.5.29", + "@swc/core-linux-arm64-musl": "1.5.29", + "@swc/core-linux-x64-gnu": "1.5.29", + "@swc/core-linux-x64-musl": "1.5.29", + "@swc/core-win32-arm64-msvc": "1.5.29", + "@swc/core-win32-ia32-msvc": "1.5.29", + "@swc/core-win32-x64-msvc": "1.5.29" }, "peerDependencies": { "@swc/helpers": "*" @@ -3320,9 +3343,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.28.tgz", - "integrity": "sha512-sP6g63ybzIdOWNDbn51tyHN8EMt7Mb4RMeHQEsXB7wQfDvzhpWB+AbfK6Gs3Q8fwP/pmWIrWW9csKOc1K2Mmkg==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.29.tgz", + "integrity": "sha512-6F/sSxpHaq3nzg2ADv9FHLi4Fu2A8w8vP8Ich8gIl16D2htStlwnaPmCLjRswO+cFkzgVqy/l01gzNGWd4DFqA==", "cpu": [ "arm64" ], @@ -3336,9 +3359,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.28.tgz", - "integrity": "sha512-Bd/agp/g7QocQG5AuorOzSC78t8OzeN+pCN/QvJj1CvPhvppjJw6e1vAbOR8vO2vvGi2pvtf3polrYQStJtSiA==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.29.tgz", + "integrity": "sha512-rF/rXkvUOTdTIfoYbmszbSUGsCyvqACqy1VeP3nXONS+LxFl4bRmRcUTRrblL7IE5RTMCKUuPbqbQSE2hK7bqg==", "cpu": [ "x64" ], @@ -3352,9 +3375,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.28.tgz", - "integrity": "sha512-Wr3TwPGIveS9/OBWm0r9VAL8wkCR0zQn46J8K01uYCmVhUNK3Muxjs0vQBZaOrGu94mqbj9OXY+gB3W7aDvGdA==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.29.tgz", + "integrity": "sha512-2OAPL8iWBsmmwkjGXqvuUhbmmoLxS1xNXiMq87EsnCNMAKohGc7wJkdAOUL6J/YFpean/vwMWg64rJD4pycBeg==", "cpu": [ "arm" ], @@ -3368,9 +3391,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.28.tgz", - "integrity": "sha512-8G1ZwVTuLgTAVTMPD+M97eU6WeiRIlGHwKZ5fiJHPBcz1xqIC7jQcEh7XBkobkYoU5OILotls3gzjRt8CMNyDQ==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.29.tgz", + "integrity": "sha512-eH/Q9+8O5qhSxMestZnhuS1xqQMr6M7SolZYxiXJqxArXYILLCF+nq2R9SxuMl0CfjHSpb6+hHPk/HXy54eIRA==", "cpu": [ "arm64" ], @@ -3384,9 +3407,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.28.tgz", - "integrity": "sha512-0Ajdzb5Fzvz+XUbN5ESeHAz9aHHSYiQcm+vmsDi0TtPHmsalfnqEPZmnK0zPALPJPLQP2dDo4hELeDg3/c3xgA==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.29.tgz", + "integrity": "sha512-TERh2OICAJz+SdDIK9+0GyTUwF6r4xDlFmpoiHKHrrD/Hh3u+6Zue0d7jQ/he/i80GDn4tJQkHlZys+RZL5UZg==", "cpu": [ "arm64" ], @@ -3400,9 +3423,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.28.tgz", - "integrity": "sha512-ueQ9VejnQUM2Pt+vT0IAKoF4vYBWUP6n1KHGdILpoGe3LuafQrqu7RoyQ15C7/AYii7hAeNhTFdf6gLbg8cjFg==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.29.tgz", + "integrity": "sha512-WMDPqU7Ji9dJpA+Llek2p9t7pcy7Bob8ggPUvgsIlv3R/eesF9DIzSbrgl6j3EAEPB9LFdSafsgf6kT/qnvqFg==", "cpu": [ "x64" ], @@ -3416,9 +3439,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.28.tgz", - "integrity": "sha512-G5th8Mg0az8CbY4GQt9/m5hg2Y0kGIwvQBeVACuLQB6q2Y4txzdiTpjmFqUUhEvvl7Klyx1IHvNhfXs3zpt7PA==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.29.tgz", + "integrity": "sha512-DO14glwpdKY4POSN0201OnGg1+ziaSVr6/RFzuSLggshwXeeyVORiHv3baj7NENhJhWhUy3NZlDsXLnRFkmhHQ==", "cpu": [ "x64" ], @@ -3432,9 +3455,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.28.tgz", - "integrity": "sha512-JezwCGavZ7CkNXx4yInI4kpb71L0zxzxA9BFlmnsGKEEjVQcKc3hFpmIzfFVs+eotlBUwDNb0+Yo9m6Cb7lllA==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.29.tgz", + "integrity": "sha512-V3Y1+a1zG1zpYXUMqPIHEMEOd+rHoVnIpO/KTyFwAmKVu8v+/xPEVx/AGoYE67x4vDAAvPQrKI3Aokilqa5yVg==", "cpu": [ "arm64" ], @@ -3448,9 +3471,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.28.tgz", - "integrity": "sha512-q8tW5J4RkOkl7vYShnWS//VAb2Ngolfm9WOMaF2GRJUr2Y/Xeb/+cNjdsNOqea2BzW049D5vdP7XPmir3/zUZw==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.29.tgz", + "integrity": "sha512-OrM6yfXw4wXhnVFosOJzarw0Fdz5Y0okgHfn9oFbTPJhoqxV5Rdmd6kXxWu2RiVKs6kGSJFZXHDeUq2w5rTIMg==", "cpu": [ "ia32" ], @@ -3464,9 +3487,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.5.28", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.28.tgz", - "integrity": "sha512-jap6EiB3wG1YE1hyhNr9KLPpH4PGm+5tVMfN0l7fgKtV0ikgpcEN/YF94tru+z5m2HovqYW009+Evq9dcVGmpg==", + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.29.tgz", + "integrity": "sha512-eD/gnxqKyZQQR0hR7TMkIlJ+nCF9dzYmVVNbYZWuA1Xy94aBPUsEk3Uw3oG7q6R3ErrEUPP0FNf2ztEnv+I+dw==", "cpu": [ "x64" ], @@ -4653,12 +4676,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@unleash/proxy-client-react": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@unleash/proxy-client-react/-/proxy-client-react-4.2.4.tgz", @@ -8101,18 +8118,6 @@ "node": ">=6" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -8597,41 +8602,37 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.4.0.tgz", + "integrity": "sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/config-array": "^0.15.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.4.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -8645,7 +8646,7 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9316,9 +9317,9 @@ "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.2.9", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.9.tgz", - "integrity": "sha512-ErpKyr2mEUEkcdZ4nwW/cvDjClvAcvJMEXkGGll0wf8sro8h6qeQ3qlZyp1vM1dRk8Ap6rMdke8FnP94QBIaVQ==", + "version": "48.2.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.12.tgz", + "integrity": "sha512-sO9sKkJx5ovWoRk9hV0YiNzXQ4Z6j27CqE/po2E3wddZVuy9wvKPSTiIhpxMTrP/qURvKayJIDB2+o9kyCW1Fw==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "~0.43.1", @@ -10149,48 +10150,33 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10224,42 +10210,30 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -10676,15 +10650,15 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-selector": { @@ -10769,32 +10743,16 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { @@ -11390,12 +11348,15 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.4.0.tgz", + "integrity": "sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { diff --git a/package.json b/package.json index 5e0acd44d..24c846d85 100644 --- a/package.json +++ b/package.json @@ -80,13 +80,16 @@ "victory-core": "^37.0.2" }, "devDependencies": { + "@eslint/compat": "^1.1.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.4.0", "@formatjs/cli": "^6.2.12", "@formatjs/ecma402-abstract": "^2.0.0", "@formatjs/icu-messageformat-parser": "^2.7.8", "@redhat-cloud-services/eslint-config-redhat-cloud-services": "^2.0.4", - "@redhat-cloud-services/frontend-components-config": "^6.0.15", + "@redhat-cloud-services/frontend-components-config": "^6.0.16", "@redhat-cloud-services/tsc-transform-imports": "^1.0.11", - "@swc/core": "^1.5.28", + "@swc/core": "^1.5.29", "@swc/jest": "^0.2.36", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", @@ -101,10 +104,10 @@ "@typescript-eslint/parser": "^7.13.0", "aphrodite": "^2.4.0", "copy-webpack-plugin": "^12.0.2", - "eslint": "^8.57.0", + "eslint": "^9.4.0", "eslint-plugin-formatjs": "^4.13.3", "eslint-plugin-jest-dom": "^5.4.0", - "eslint-plugin-jsdoc": "^48.2.9", + "eslint-plugin-jsdoc": "^48.2.12", "eslint-plugin-markdown": "^5.0.0", "eslint-plugin-patternfly-react": "^5.3.0", "eslint-plugin-prettier": "^5.1.3", @@ -113,6 +116,7 @@ "eslint-plugin-sort-keys-fix": "^1.1.2", "eslint-plugin-testing-library": "^6.2.2", "git-revision-webpack-plugin": "^5.0.0", + "globals": "^15.4.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", @@ -129,6 +133,7 @@ "webpack-bundle-analyzer": "^4.10.2" }, "overrides": { + "eslint": "^9.4.0", "redux": "^5.0.1" }, "insights": { diff --git a/src/locales/messages.ts b/src/locales/messages.ts index cb9f0d991..f5b245a67 100644 --- a/src/locales/messages.ts +++ b/src/locales/messages.ts @@ -1,4 +1,3 @@ -/* eslint-disable max-len */ import { defineMessages } from 'react-intl'; export default defineMessages({ diff --git a/src/routes/components/resourceTypeahead/resourceFetch.tsx b/src/routes/components/resourceTypeahead/resourceFetch.tsx index d7d859bde..62ca952e1 100644 --- a/src/routes/components/resourceTypeahead/resourceFetch.tsx +++ b/src/routes/components/resourceTypeahead/resourceFetch.tsx @@ -84,7 +84,6 @@ const ResourceFetch: React.FC = ({ ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ resourcePathsType, resourceType, search }: ResourceFetchMapProps): ResourceFetchStateProps => { const dispatch: ThunkDispatch = useDispatch(); const [searchTimeout, setSearchTimeout] = useState(noop); diff --git a/src/routes/details/awsBreakdown/awsBreakdown.tsx b/src/routes/details/awsBreakdown/awsBreakdown.tsx index 847aa9e6e..1c6bbf6a1 100644 --- a/src/routes/details/awsBreakdown/awsBreakdown.tsx +++ b/src/routes/details/awsBreakdown/awsBreakdown.tsx @@ -46,7 +46,6 @@ const detailsURL = formatPath(routes.awsDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.aws; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/awsBreakdown/instances/instances.tsx b/src/routes/details/awsBreakdown/instances/instances.tsx index f81a14e2b..a4cb99cbe 100644 --- a/src/routes/details/awsBreakdown/instances/instances.tsx +++ b/src/routes/details/awsBreakdown/instances/instances.tsx @@ -322,7 +322,6 @@ const Instances: React.FC = ({ currency }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ currency, query }): InstancesStateProps => { const dispatch: ThunkDispatch = useDispatch(); const queryFromRoute = useQueryFromRoute(); diff --git a/src/routes/details/awsDetails/awsDetails.tsx b/src/routes/details/awsDetails/awsDetails.tsx index cf7669bd3..22201ecdb 100644 --- a/src/routes/details/awsDetails/awsDetails.tsx +++ b/src/routes/details/awsDetails/awsDetails.tsx @@ -424,7 +424,6 @@ class AwsDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const costType = getCostType(); diff --git a/src/routes/details/azureBreakdown/azureBreakdown.tsx b/src/routes/details/azureBreakdown/azureBreakdown.tsx index 5661ae0a5..cb7014dbe 100644 --- a/src/routes/details/azureBreakdown/azureBreakdown.tsx +++ b/src/routes/details/azureBreakdown/azureBreakdown.tsx @@ -37,7 +37,6 @@ const detailsURL = formatPath(routes.azureDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.azure; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/azureDetails/azureDetails.tsx b/src/routes/details/azureDetails/azureDetails.tsx index 63baa3c72..b7e634ad8 100644 --- a/src/routes/details/azureDetails/azureDetails.tsx +++ b/src/routes/details/azureDetails/azureDetails.tsx @@ -382,7 +382,6 @@ class AzureDetails extends React.Component } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const currency = getCurrency(); diff --git a/src/routes/details/components/pvcChart/modal/pvcContent.tsx b/src/routes/details/components/pvcChart/modal/pvcContent.tsx index 35ef101cb..ec1f85caa 100644 --- a/src/routes/details/components/pvcChart/modal/pvcContent.tsx +++ b/src/routes/details/components/pvcChart/modal/pvcContent.tsx @@ -177,7 +177,6 @@ const PvcContent: React.FC = () => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: PvcContentMapProps): PvcContentStateProps => { const dispatch: ThunkDispatch = useDispatch(); const queryFromRoute = useQueryFromRoute(); diff --git a/src/routes/details/gcpBreakdown/gcpBreakdown.tsx b/src/routes/details/gcpBreakdown/gcpBreakdown.tsx index a34be53b6..6255147d8 100644 --- a/src/routes/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/routes/details/gcpBreakdown/gcpBreakdown.tsx @@ -37,7 +37,6 @@ const detailsURL = formatPath(routes.gcpDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.gcp; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/gcpDetails/gcpDetails.tsx b/src/routes/details/gcpDetails/gcpDetails.tsx index 7d8ccca04..e95056ac2 100644 --- a/src/routes/details/gcpDetails/gcpDetails.tsx +++ b/src/routes/details/gcpDetails/gcpDetails.tsx @@ -371,7 +371,6 @@ class GcpDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const currency = getCurrency(); diff --git a/src/routes/details/ibmBreakdown/ibmBreakdown.tsx b/src/routes/details/ibmBreakdown/ibmBreakdown.tsx index c7bbe8b08..c2531ae2b 100644 --- a/src/routes/details/ibmBreakdown/ibmBreakdown.tsx +++ b/src/routes/details/ibmBreakdown/ibmBreakdown.tsx @@ -37,7 +37,6 @@ const detailsURL = formatPath(routes.ibmDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.ibm; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/ibmDetails/ibmDetails.tsx b/src/routes/details/ibmDetails/ibmDetails.tsx index e37f7cf5d..6fceaebe5 100644 --- a/src/routes/details/ibmDetails/ibmDetails.tsx +++ b/src/routes/details/ibmDetails/ibmDetails.tsx @@ -373,7 +373,6 @@ class IbmDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const currency = getCurrency(); diff --git a/src/routes/details/ociBreakdown/ociBreakdown.tsx b/src/routes/details/ociBreakdown/ociBreakdown.tsx index 2c8cf44a7..1e222391b 100644 --- a/src/routes/details/ociBreakdown/ociBreakdown.tsx +++ b/src/routes/details/ociBreakdown/ociBreakdown.tsx @@ -37,7 +37,6 @@ const detailsURL = formatPath(routes.ociDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.oci; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/ociDetails/ociDetails.tsx b/src/routes/details/ociDetails/ociDetails.tsx index e71481ee1..ed9abf9f4 100644 --- a/src/routes/details/ociDetails/ociDetails.tsx +++ b/src/routes/details/ociDetails/ociDetails.tsx @@ -382,7 +382,6 @@ class OciDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const currency = getCurrency(); diff --git a/src/routes/details/ocpBreakdown/costOverview.tsx b/src/routes/details/ocpBreakdown/costOverview.tsx index cbf97b330..047a596d3 100644 --- a/src/routes/details/ocpBreakdown/costOverview.tsx +++ b/src/routes/details/ocpBreakdown/costOverview.tsx @@ -9,7 +9,6 @@ interface OcpCostOverviewOwnProps { title?: string; } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { title }) => { return { isOcpProjectStorageToggleEnabled: FeatureToggleSelectors.selectIsOcpProjectStorageToggleEnabled(state), diff --git a/src/routes/details/ocpBreakdown/ocpBreakdown.tsx b/src/routes/details/ocpBreakdown/ocpBreakdown.tsx index ec6d564af..e869e4cc1 100644 --- a/src/routes/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/routes/details/ocpBreakdown/ocpBreakdown.tsx @@ -43,7 +43,6 @@ const detailsURL = formatPath(routes.ocpDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.ocp; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/ocpBreakdown/providerDetails/clusterInfo/clusterInfoContent.tsx b/src/routes/details/ocpBreakdown/providerDetails/clusterInfo/clusterInfoContent.tsx index eb2403d69..f9202100f 100644 --- a/src/routes/details/ocpBreakdown/providerDetails/clusterInfo/clusterInfoContent.tsx +++ b/src/routes/details/ocpBreakdown/providerDetails/clusterInfo/clusterInfoContent.tsx @@ -110,7 +110,6 @@ const ClusterInfoContent: React.FC = ({ clusterId }: Cl ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): ClusterInfoContentStateProps => { // PermissionsWrapper has already made an API request const providersQueryString = getProvidersQuery(providersQuery); diff --git a/src/routes/details/ocpBreakdown/providerDetails/dataDetails/components/overallStatus.tsx b/src/routes/details/ocpBreakdown/providerDetails/dataDetails/components/overallStatus.tsx index e96ef266d..83630de22 100644 --- a/src/routes/details/ocpBreakdown/providerDetails/dataDetails/components/overallStatus.tsx +++ b/src/routes/details/ocpBreakdown/providerDetails/dataDetails/components/overallStatus.tsx @@ -108,7 +108,6 @@ const OverallStatus: React.FC = ({ clusterId }: OverallStatu return null; }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): OverallStatusStateProps => { // PermissionsWrapper has already made an API request const providersQueryString = getProvidersQuery(providersQuery); diff --git a/src/routes/details/ocpBreakdown/providerDetails/dataDetails/dataDetailsContent.tsx b/src/routes/details/ocpBreakdown/providerDetails/dataDetails/dataDetailsContent.tsx index a0c285dad..7dba2a9b1 100644 --- a/src/routes/details/ocpBreakdown/providerDetails/dataDetails/dataDetailsContent.tsx +++ b/src/routes/details/ocpBreakdown/providerDetails/dataDetails/dataDetailsContent.tsx @@ -64,7 +64,6 @@ const DataDetailsContent: React.FC = ({ clusterId }: Da ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): DataDetailsContentStateProps => { // PermissionsWrapper has already made an API request const providersQueryString = getProvidersQuery(providersQuery); diff --git a/src/routes/details/ocpDetails/ocpDetails.tsx b/src/routes/details/ocpDetails/ocpDetails.tsx index 47b496c2d..b9c195bcf 100644 --- a/src/routes/details/ocpDetails/ocpDetails.tsx +++ b/src/routes/details/ocpDetails/ocpDetails.tsx @@ -465,7 +465,6 @@ class OcpDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const groupBy = queryFromRoute.group_by ? getGroupById(queryFromRoute) : getGroupById(baseQuery); diff --git a/src/routes/details/rhelBreakdown/costOverview.tsx b/src/routes/details/rhelBreakdown/costOverview.tsx index ec9cb9ad9..9a6db6fa1 100644 --- a/src/routes/details/rhelBreakdown/costOverview.tsx +++ b/src/routes/details/rhelBreakdown/costOverview.tsx @@ -8,7 +8,6 @@ interface RhelCostOverviewOwnProps { title?: string; } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { title }) => { return { selectWidgets: rhelCostOverviewSelectors.selectWidgets(state), diff --git a/src/routes/details/rhelBreakdown/rhelBreakdown.tsx b/src/routes/details/rhelBreakdown/rhelBreakdown.tsx index 451ff1ea6..c57ff7e12 100644 --- a/src/routes/details/rhelBreakdown/rhelBreakdown.tsx +++ b/src/routes/details/rhelBreakdown/rhelBreakdown.tsx @@ -37,7 +37,6 @@ const detailsURL = formatPath(routes.rhelDetails.path); const reportType = ReportType.cost; const reportPathsType = ReportPathsType.rhel; -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { intl, router }) => { const queryFromRoute = parseQuery(router.location.search); const queryState = getQueryState(router.location, 'details'); diff --git a/src/routes/details/rhelDetails/rhelDetails.tsx b/src/routes/details/rhelDetails/rhelDetails.tsx index 76a42e0a5..163a6f07a 100644 --- a/src/routes/details/rhelDetails/rhelDetails.tsx +++ b/src/routes/details/rhelDetails/rhelDetails.tsx @@ -430,7 +430,6 @@ class RhelDetails extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const currency = getCurrency(); diff --git a/src/routes/explorer/explorer.tsx b/src/routes/explorer/explorer.tsx index 587c90607..308b475b4 100644 --- a/src/routes/explorer/explorer.tsx +++ b/src/routes/explorer/explorer.tsx @@ -564,7 +564,6 @@ class Explorer extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); diff --git a/src/routes/explorer/explorerChart.tsx b/src/routes/explorer/explorerChart.tsx index 34093b3ed..74f9de020 100644 --- a/src/routes/explorer/explorerChart.tsx +++ b/src/routes/explorer/explorerChart.tsx @@ -268,7 +268,6 @@ class ExplorerChartBase extends React.Component( (state, { costType, currency, perspective, router }) => { const queryFromRoute = parseQuery(router.location.search); diff --git a/src/routes/explorer/explorerFilter.tsx b/src/routes/explorer/explorerFilter.tsx index 95ca4ccc7..eb59e774a 100644 --- a/src/routes/explorer/explorerFilter.tsx +++ b/src/routes/explorer/explorerFilter.tsx @@ -271,7 +271,6 @@ export class ExplorerFilterBase extends React.Component( (state, { perspective, router }) => { const queryFromRoute = parseQuery(router.location.search); diff --git a/src/routes/explorer/explorerHeader.tsx b/src/routes/explorer/explorerHeader.tsx index c5dbe4faa..7bef85b0c 100644 --- a/src/routes/explorer/explorerHeader.tsx +++ b/src/routes/explorer/explorerHeader.tsx @@ -345,7 +345,6 @@ class ExplorerHeaderBase extends React.Component( (state, { perspective, router }) => { const queryFromRoute = parseQuery(router.location.search); diff --git a/src/routes/explorer/explorerTable.tsx b/src/routes/explorer/explorerTable.tsx index b5af096b1..723056f76 100644 --- a/src/routes/explorer/explorerTable.tsx +++ b/src/routes/explorer/explorerTable.tsx @@ -557,7 +557,6 @@ class ExplorerTableBase extends React.Component((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const { end_date, start_date } = getDateRangeFromQuery(queryFromRoute); diff --git a/src/routes/overview/overview.tsx b/src/routes/overview/overview.tsx index 90ae625e1..8202ce078 100644 --- a/src/routes/overview/overview.tsx +++ b/src/routes/overview/overview.tsx @@ -806,7 +806,6 @@ class OverviewBase extends React.Component { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, { router }) => { const queryFromRoute = parseQuery(router.location.search); const tabKey = queryFromRoute.tabKey && !Number.isNaN(queryFromRoute.tabKey) ? Number(queryFromRoute.tabKey) : 0; diff --git a/src/routes/settings/calculations/calculations.tsx b/src/routes/settings/calculations/calculations.tsx index 34053b4ab..4d3e78ecd 100644 --- a/src/routes/settings/calculations/calculations.tsx +++ b/src/routes/settings/calculations/calculations.tsx @@ -112,7 +112,6 @@ const Calculations: React.FC = ({ canWrite }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): CalculationsStateProps => { const costTypeAccountSettingsUpdateStatus = useSelector((state: RootState) => accountSettingsSelectors.selectAccountSettingsUpdateStatus(state, AccountSettingsType.costType) diff --git a/src/routes/settings/costCategory/costCategory.tsx b/src/routes/settings/costCategory/costCategory.tsx index c90466927..03547941c 100644 --- a/src/routes/settings/costCategory/costCategory.tsx +++ b/src/routes/settings/costCategory/costCategory.tsx @@ -239,7 +239,6 @@ const CostCategory: React.FC = ({ canWrite }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: CostCategoryMapProps): CostCategoryStateProps => { const dispatch: ThunkDispatch = useDispatch(); diff --git a/src/routes/settings/costModels/costModel/addSourceWizard.tsx b/src/routes/settings/costModels/costModel/addSourceWizard.tsx index d6627befc..de3093183 100644 --- a/src/routes/settings/costModels/costModel/addSourceWizard.tsx +++ b/src/routes/settings/costModels/costModel/addSourceWizard.tsx @@ -176,7 +176,6 @@ class AddSourceWizardBase extends React.Component(state => { return { fetchingSourcesError: sourcesSelectors.error(state) ? parseApiError(sourcesSelectors.error(state)) : null, diff --git a/src/routes/settings/platformProjects/platformProjects.tsx b/src/routes/settings/platformProjects/platformProjects.tsx index 1222683d6..7eed9e24f 100644 --- a/src/routes/settings/platformProjects/platformProjects.tsx +++ b/src/routes/settings/platformProjects/platformProjects.tsx @@ -244,7 +244,6 @@ const PlatformProjects: React.FC = ({ canWrite }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: PlatformProjectsMapProps): PlatformProjectsStateProps => { const dispatch: ThunkDispatch = useDispatch(); diff --git a/src/routes/settings/settings.tsx b/src/routes/settings/settings.tsx index 8dd92effc..6e1a270b2 100644 --- a/src/routes/settings/settings.tsx +++ b/src/routes/settings/settings.tsx @@ -218,7 +218,6 @@ const Settings: React.FC = () => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): SettingsStateProps => { const userAccessQueryString = getUserAccessQuery(userAccessQuery); const userAccess = useSelector((state: RootState) => diff --git a/src/routes/settings/tagLabels/tagMapping/components/childTagMapping/childTagMapping.tsx b/src/routes/settings/tagLabels/tagMapping/components/childTagMapping/childTagMapping.tsx index a79c1363d..0c4c946ca 100644 --- a/src/routes/settings/tagLabels/tagMapping/components/childTagMapping/childTagMapping.tsx +++ b/src/routes/settings/tagLabels/tagMapping/components/childTagMapping/childTagMapping.tsx @@ -105,7 +105,6 @@ const ChildTagMapping: React.FC = ({ isOpen, item: parent, ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = (): ChildTagMappingStateProps => { const settingsUpdateStatus = useSelector((state: RootState) => settingsSelectors.selectSettingsUpdateStatus(state, SettingsType.tagsMappingsChildAdd) diff --git a/src/routes/settings/tagLabels/tagMapping/components/childTags/childTags.tsx b/src/routes/settings/tagLabels/tagMapping/components/childTags/childTags.tsx index 0d5b4e1cc..561133c51 100644 --- a/src/routes/settings/tagLabels/tagMapping/components/childTags/childTags.tsx +++ b/src/routes/settings/tagLabels/tagMapping/components/childTags/childTags.tsx @@ -191,7 +191,6 @@ const ChildTags: React.FC = ({ ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: ChildTagsMapProps): ChildTagsStateProps => { const dispatch: ThunkDispatch = useDispatch(); diff --git a/src/routes/settings/tagLabels/tagMapping/components/deleteTagMapping/deleteTagMapping.tsx b/src/routes/settings/tagLabels/tagMapping/components/deleteTagMapping/deleteTagMapping.tsx index 8afb9ee9e..32985f805 100644 --- a/src/routes/settings/tagLabels/tagMapping/components/deleteTagMapping/deleteTagMapping.tsx +++ b/src/routes/settings/tagLabels/tagMapping/components/deleteTagMapping/deleteTagMapping.tsx @@ -85,7 +85,6 @@ const DeleteTagMapping: React.FC = ({ isOpen, isChild, it ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ settingsType }: DeleteTagMappingMapProps): DeleteTagMappingStateProps => { const settingsUpdateStatus = useSelector((state: RootState) => settingsSelectors.selectSettingsUpdateStatus(state, settingsType) diff --git a/src/routes/settings/tagLabels/tagMapping/components/parentTags/parentTags.tsx b/src/routes/settings/tagLabels/tagMapping/components/parentTags/parentTags.tsx index 2d8d76ea4..3c3c5e6b3 100644 --- a/src/routes/settings/tagLabels/tagMapping/components/parentTags/parentTags.tsx +++ b/src/routes/settings/tagLabels/tagMapping/components/parentTags/parentTags.tsx @@ -191,7 +191,6 @@ const ParentTags: React.FC = ({ ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: ParentTagsMapProps): ParentTagsStateProps => { const dispatch: ThunkDispatch = useDispatch(); diff --git a/src/routes/settings/tagLabels/tagMapping/tagMapping.tsx b/src/routes/settings/tagLabels/tagMapping/tagMapping.tsx index 82885a74b..160b28076 100644 --- a/src/routes/settings/tagLabels/tagMapping/tagMapping.tsx +++ b/src/routes/settings/tagLabels/tagMapping/tagMapping.tsx @@ -198,7 +198,6 @@ const TagMapping: React.FC = ({ canWrite }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: MappingsMapProps): MappingsStateProps => { const dispatch: ThunkDispatch = useDispatch(); diff --git a/src/routes/settings/tagLabels/tags/tags.tsx b/src/routes/settings/tagLabels/tags/tags.tsx index 482d99ed2..805b19d55 100644 --- a/src/routes/settings/tagLabels/tags/tags.tsx +++ b/src/routes/settings/tagLabels/tags/tags.tsx @@ -245,7 +245,6 @@ const Tags: React.FC = ({ canWrite }) => { ); }; -// eslint-disable-next-line no-empty-pattern const useMapToProps = ({ query }: TagsMapProps): TagsStateProps => { const dispatch: ThunkDispatch = useDispatch();