From 51fdd59d3f9975d4ac0aa1f380ef9ed7110e2927 Mon Sep 17 00:00:00 2001 From: Jerome Fitzgerald Date: Fri, 5 Jul 2024 12:37:54 -0400 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=20(eslint)=20NICE-129=20continued?= =?UTF-8?q?=20flat=20config=20upgrade=20(#1511)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 📝 (eslint) NICE-129 README (#1511) --- config/eslint-config/README.md | 80 +++++--- config/eslint-config/package.json | 12 +- config/eslint-config/release.config.js | 3 +- config/eslint-config/src/base.js | 2 + config/eslint-config/src/typescript.js | 86 +++++---- package.json | 1 + pnpm-lock.yaml | 252 +++++++++++-------------- 7 files changed, 235 insertions(+), 201 deletions(-) diff --git a/config/eslint-config/README.md b/config/eslint-config/README.md index a55949002..c4311cb17 100644 --- a/config/eslint-config/README.md +++ b/config/eslint-config/README.md @@ -3,68 +3,98 @@ Custom `eslint-config` setup that can be extended and incorporates: - `@babel/eslint-parser` -- `@typescript-eslint/eslint-plugin` +- `@eslint/*` - `@typescript-eslint/parser` - `eslint` - `eslint-config-next` - `eslint-config-prettier` -- `eslint-plugin-import` +- `eslint-plugin-import-x` - `eslint-plugin-jest` - `eslint-plugin-jsx-a11y` - `eslint-plugin-react` - `eslint-plugin-react-hooks` - `prettier` +- `typescript-eslint` ## Breakdown -All currently `cjs` format: - - `./index` (base) - `./typescript` - - `./react` (+ typescript) - - `./jest` (+ react) - - `./next` (+ react) +- `./react` (+ typescript) + - `./jest` (+ react) + - `./next` (+ react) + - `./tailwind` (+ next) ```sh -yarn add @jeromefitz/eslint-config --dev +pnpm add @jeromefitz/eslint-config --save-dev ``` ### Base -```js -{ - "extends": "@jeromefitz/eslint-config" -} +```ts +import { configBase } from '@jeromefitz/eslint-config/base.js' + +// ... + +const config = [...configBase] ``` ### Jest ```js -{ - "extends": "@jeromefitz/eslint-config/jest" -} +import { configJest } from '@jeromefitz/eslint-config/jest.js' + +// ... + +const config = [...configJest] ``` ### Next ```js -{ - "extends": "@jeromefitz/eslint-config/next" -} +import { configNext } from '@jeromefitz/eslint-config/next.js' + +// ... + +const config = [...configNext] ``` ### React ```js -{ - "extends": "@jeromefitz/eslint-config/react" -} +import { configReact } from '@jeromefitz/eslint-config/react.js' + +// ... + +const config = [...configReact] ``` -### TypeScript +### Tailwind ```js -{ - "extends": "@jeromefitz/eslint-config/typescript" -} +import { configTailwind } from '@jeromefitz/eslint-config/tailwind.js' + +// ... + +const config = [...configTailwind] ``` + +### Typescript + +```js +import { configTypescript } from '@jeromefitz/eslint-config/typescript.js' + +// ... + +const config = [...configTypescript] +``` + +## Please Note + +The eslint ecosystem will slowly (but surely) move from `eslint@8` to `eslint@9`. + +`@jeromefitz/eslint-config@4` will be a holding pattern and may from time-to-time introduce potential **breaking** changes in linting. This is done so we do not have to bump a major _every_ single time we upgrade package(s) from `eslint@8` => `eslint@9`. + +In some regards this should be permanent `canary` until then, but will try to call out any breaking in PRs as we move forward. + +> **📝 Note:** See #1511 for more information. diff --git a/config/eslint-config/package.json b/config/eslint-config/package.json index 293af54f7..648fafd1d 100644 --- a/config/eslint-config/package.json +++ b/config/eslint-config/package.json @@ -30,14 +30,15 @@ "dependencies": { "@babel/core": "7.24.7", "@babel/eslint-parser": "7.24.7", + "@eslint/compat": "1.1.0", "@eslint/eslintrc": "3.1.0", + "@eslint/js": "9.6.0", "@next/eslint-plugin-next": "14.2.4", - "@typescript-eslint/eslint-plugin": "7.15.0", "@typescript-eslint/parser": "7.15.0", "eslint": "9.6.0", "eslint-config-next": "14.2.4", "eslint-config-turbo": "2.0.6", - "eslint-plugin-import": "2.29.1", + "eslint-plugin-import-x": "0.5.3", "eslint-plugin-jest": "28.6.0", "eslint-plugin-jest-dom": "5.4.0", "eslint-plugin-jsx-a11y": "6.9.0", @@ -48,12 +49,15 @@ "eslint-plugin-storybook": "0.8.0", "eslint-plugin-tailwindcss": "3.17.4", "eslint-plugin-testing-library": "6.2.2", - "eslint-plugin-turbo": "2.0.6" + "eslint-plugin-turbo": "2.0.6", + "typescript-eslint": "7.15.0" }, "devDependencies": { + "@types/eslint__js": "8.42.3", "@types/lodash": "4.17.6", "lodash": "4.17.21", - "tailwindcss": "3.4.4" + "tailwindcss": "3.4.4", + "typescript": "5.5.2" }, "publishConfig": { "registry": "https://registry.npmjs.org/" diff --git a/config/eslint-config/release.config.js b/config/eslint-config/release.config.js index beb267c82..2e3d1faef 100644 --- a/config/eslint-config/release.config.js +++ b/config/eslint-config/release.config.js @@ -18,8 +18,7 @@ const { name } = pkg const branches = [ ...configDefault.branches, - { name: 'refactor/turbo-2--migration', prerelease: 'canary' }, - { name: 'NICE-68', prerelease: 'canary' }, + { name: 'NICE-129', prerelease: 'canary' }, ] const configPassed = { diff --git a/config/eslint-config/src/base.js b/config/eslint-config/src/base.js index 592b4bb5a..da1a96df5 100644 --- a/config/eslint-config/src/base.js +++ b/config/eslint-config/src/base.js @@ -1,4 +1,5 @@ import parserBabel from '@babel/eslint-parser' +import eslint from '@eslint/js' import pluginPerfectionist from 'eslint-plugin-perfectionist' import { RULES } from './_lib.js' @@ -7,6 +8,7 @@ const PERFECTIONIST_CONFIG = 'recommended-natural' const perfectionistRules = pluginPerfectionist.configs[PERFECTIONIST_CONFIG].rules const configBase = [ + eslint.configs.recommended, { ignores: [ '.next/*', diff --git a/config/eslint-config/src/typescript.js b/config/eslint-config/src/typescript.js index ebd695e1d..4209f9fe6 100644 --- a/config/eslint-config/src/typescript.js +++ b/config/eslint-config/src/typescript.js @@ -1,28 +1,56 @@ -/** - * @todo(eslint) I think I should just getCompat and do multiple - */ -import path from 'path' -import { fileURLToPath } from 'url' - -import pluginTypescript from '@typescript-eslint/eslint-plugin' import parserTypescript from '@typescript-eslint/parser' -import pluginImport from 'eslint-plugin-import' +import pluginImportX from 'eslint-plugin-import-x' +import tseslint from 'typescript-eslint' -import { RULES, getCompat } from './_lib.js' +import { RULES } from './_lib.js' import configBase from './base.js' -const __filename = fileURLToPath(import.meta.url) -const __dirname = path.dirname(__filename) - -const compat = getCompat(__dirname) - -const typescriptRules = { - ...pluginTypescript.configs['eslint-recommended'].overrides[0].rules, - ...pluginTypescript.configs['recommended'].rules, - ...pluginTypescript.configs['recommended-requiring-type-checking'].rules, -} +/** + * @hack(typescript-eslint) w/o run into following error + * b/c parser is passed as meta instead of explicit (?): + * + * Error while loading rule '@typescript-eslint/await-thenable': + * You have used a rule which requires parserServices to be generated. + * You must therefore provide a value for the "parserOptions.project" + * property for @typescript-eslint/parser. + */ +let recommendedTypeChecked = [] +tseslint.configs.recommendedTypeChecked.map((obj) => { + if (obj.name === 'typescript-eslint/base') { + return { + ...obj, + languageOptions: { + ...obj.languageOptions, + parser: parserTypescript, + }, + } + } + return obj +}) +let stylisticTypeChecked = [] +tseslint.configs.stylisticTypeChecked.map((obj) => { + if (obj.name === 'typescript-eslint/base') { + return { + ...obj, + languageOptions: { + ...obj.languageOptions, + parser: parserTypescript, + }, + } + } + return obj +}) const configTypescript = [ + tseslint.configs.eslintRecommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + ...recommendedTypeChecked, + ...stylisticTypeChecked, + pluginImportX.configs.typescript, + /** + * @note(eslint) Custom Settings for @jeromefitz/eslint-config + */ { files: ['**/*.ts?(x)'], languageOptions: { @@ -39,33 +67,25 @@ const configTypescript = [ }, }, name: '@jeromefitz/eslint-config:typescript', - plugins: { '@typescript-eslint': pluginTypescript, import: pluginImport }, rules: { - ...typescriptRules, - ...compat.extends('plugin:import/typescript')[0]?.rules, '@typescript-eslint/explicit-module-boundary-types': RULES.OFF, + '@typescript-eslint/no-duplicate-type-constituents': RULES.ERROR, '@typescript-eslint/no-empty-function': RULES.OFF, '@typescript-eslint/no-explicit-any': RULES.OFF, + '@typescript-eslint/no-floating-promises': RULES.ERROR, '@typescript-eslint/no-non-null-assertion': RULES.OFF, - '@typescript-eslint/no-unsafe-argument': RULES.OFF, // @todo(lint) move to error + '@typescript-eslint/no-redundant-type-constituents': RULES.ERROR, + // @todo(lint) ⬇️ move to error + '@typescript-eslint/no-unsafe-argument': RULES.OFF, '@typescript-eslint/no-unsafe-assignment': RULES.OFF, '@typescript-eslint/no-unsafe-call': RULES.OFF, '@typescript-eslint/no-unsafe-member-access': RULES.OFF, '@typescript-eslint/no-unsafe-return': RULES.OFF, '@typescript-eslint/no-var-requires': RULES.WARN, + '@typescript-eslint/require-await': RULES.ERROR, '@typescript-eslint/restrict-template-expressions': RULES.OFF, }, }, - // overrides: [ - // { - // extends: [ - // 'plugin:@typescript-eslint/eslint-recommended', - // 'plugin:@typescript-eslint/recommended', - // 'plugin:@typescript-eslint/recommended-requiring-type-checking', - // 'plugin:import/typescript', - // ], - // plugins: ['@typescript-eslint', 'import'], - // }, ] export { configTypescript } diff --git a/package.json b/package.json index c9e0b281b..1076c068c 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "@semantic-release/commit-analyzer@13.0.0": "patches/@semantic-release__commit-analyzer@13.0.0.patch" }, "overrides": { + "@typescript-eslint/parser": "7.15.0", "micromatch": "4.0.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7280ac649..7b710ffa5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: + '@typescript-eslint/parser': 7.15.0 micromatch: 4.0.5 patchedDependencies: @@ -85,15 +86,18 @@ importers: '@babel/eslint-parser': specifier: 7.24.7 version: 7.24.7(@babel/core@7.24.7)(eslint@9.6.0) + '@eslint/compat': + specifier: 1.1.0 + version: 1.1.0 '@eslint/eslintrc': specifier: 3.1.0 version: 3.1.0 + '@eslint/js': + specifier: 9.6.0 + version: 9.6.0 '@next/eslint-plugin-next': specifier: 14.2.4 version: 14.2.4 - '@typescript-eslint/eslint-plugin': - specifier: 7.15.0 - version: 7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2) '@typescript-eslint/parser': specifier: 7.15.0 version: 7.15.0(eslint@9.6.0)(typescript@5.5.2) @@ -106,12 +110,12 @@ importers: eslint-config-turbo: specifier: 2.0.6 version: 2.0.6(eslint@9.6.0) - eslint-plugin-import: - specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0) + eslint-plugin-import-x: + specifier: 0.5.3 + version: 0.5.3(eslint@9.6.0)(typescript@5.5.2) eslint-plugin-jest: specifier: 28.6.0 - version: 28.6.0(@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2) + version: 28.6.0(eslint@9.6.0)(typescript@5.5.2) eslint-plugin-jest-dom: specifier: 5.4.0 version: 5.4.0(eslint@9.6.0) @@ -123,7 +127,7 @@ importers: version: 2.11.0(eslint@9.6.0)(typescript@5.5.2) eslint-plugin-playwright: specifier: 1.6.2 - version: 1.6.2(eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0) + version: 1.6.2(eslint-plugin-jest@28.6.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0) eslint-plugin-react: specifier: 7.34.3 version: 7.34.3(eslint@9.6.0) @@ -142,7 +146,13 @@ importers: eslint-plugin-turbo: specifier: 2.0.6 version: 2.0.6(eslint@9.6.0) + typescript-eslint: + specifier: 7.15.0 + version: 7.15.0(eslint@9.6.0)(typescript@5.5.2) devDependencies: + '@types/eslint__js': + specifier: 8.42.3 + version: 8.42.3 '@types/lodash': specifier: 4.17.6 version: 4.17.6 @@ -152,6 +162,9 @@ importers: tailwindcss: specifier: 3.4.4 version: 3.4.4 + typescript: + specifier: 5.5.2 + version: 5.5.2 config/lint-staged: dependencies: @@ -664,6 +677,10 @@ packages: resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/compat@1.1.0': + resolution: {integrity: sha512-s9Wi/p25+KbzxKlDm3VshQdImhWk+cbdblhwGNnyCU5lpSwtWa4v7VQCxSki0FAUrGA3s8nCWgYzAH41mwQVKQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.17.0': resolution: {integrity: sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -961,6 +978,12 @@ packages: '@storybook/csf@0.0.1': resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + '@types/eslint@8.56.10': + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + + '@types/eslint__js@8.42.3': + resolution: {integrity: sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -995,7 +1018,7 @@ packages: resolution: {integrity: sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 + '@typescript-eslint/parser': 7.15.0 eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: @@ -1012,16 +1035,6 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.2.0': - resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1038,10 +1051,6 @@ packages: resolution: {integrity: sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.2.0': - resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/type-utils@7.15.0': resolution: {integrity: sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1068,10 +1077,6 @@ packages: resolution: {integrity: sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.2.0': - resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1108,15 +1113,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.2.0': - resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1157,10 +1153,6 @@ packages: resolution: {integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.2.0': - resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} - engines: {node: ^16.0.0 || >=18.0.0} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1671,6 +1663,10 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -1850,6 +1846,12 @@ packages: eslint-import-resolver-webpack: optional: true + eslint-plugin-import-x@0.5.3: + resolution: {integrity: sha512-hJ/wkMcsLQXAZL3+txXIDpbW5cqwdm1rLTqV4VRY03aIbzE3zWE7rPZKW6Gzf7xyl1u3V1iYC6tOG77d9NF4GQ==} + engines: {node: '>=16'} + peerDependencies: + eslint: ^8.56.0 || ^9.0.0-0 + eslint-plugin-import@2.29.1: resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} @@ -2832,10 +2834,6 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} @@ -3669,6 +3667,9 @@ packages: split2@1.0.0: resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + stable-hash@0.0.4: + resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} + stdin-discarder@0.2.2: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} @@ -3903,6 +3904,9 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tsup@8.1.0: resolution: {integrity: sha512-UFdfCAXukax+U6KzeTNO2kAARHcWxmKsnvSPXUcfA1D+kU05XDccCrkffCQpFaWDsZfV0jMyTsxU39VfCp6EOg==} engines: {node: '>=18'} @@ -4005,6 +4009,16 @@ packages: resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} engines: {node: '>= 0.4'} + typescript-eslint@7.15.0: + resolution: {integrity: sha512-Ta40FhMXBCwHura4X4fncaCVkVcnJ9jnOq5+Lp4lN8F4DzHZtOwZdRvVBiNUGznUDHPwdGnrnwxmUOU2fFQqFA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.5.2: resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} engines: {node: '>=14.17'} @@ -4459,6 +4473,8 @@ snapshots: '@eslint-community/regexpp@4.10.1': {} + '@eslint/compat@1.1.0': {} + '@eslint/config-array@0.17.0': dependencies: '@eslint/object-schema': 2.1.4 @@ -4801,6 +4817,15 @@ snapshots: dependencies: lodash: 4.17.21 + '@types/eslint@8.56.10': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/eslint__js@8.42.3': + dependencies: + '@types/eslint': 8.56.10 + '@types/estree@1.0.5': {} '@types/is-ci@3.0.4': @@ -4859,19 +4884,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2)': - dependencies: - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.2) - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 - eslint: 9.6.0 - optionalDependencies: - typescript: 5.5.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -4892,11 +4904,6 @@ snapshots: '@typescript-eslint/types': 7.15.0 '@typescript-eslint/visitor-keys': 7.15.0 - '@typescript-eslint/scope-manager@7.2.0': - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/type-utils@7.15.0(eslint@9.6.0)(typescript@5.5.2)': dependencies: '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.5.2) @@ -4917,8 +4924,6 @@ snapshots: '@typescript-eslint/types@7.15.0': {} - '@typescript-eslint/types@7.2.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.2)': dependencies: '@typescript-eslint/types': 5.62.0 @@ -4978,21 +4983,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.2)': - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.2) - optionalDependencies: - typescript: 5.5.2 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@5.62.0(eslint@9.6.0)(typescript@5.5.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0) @@ -5061,11 +5051,6 @@ snapshots: '@typescript-eslint/types': 7.15.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.2.0': - dependencies: - '@typescript-eslint/types': 7.2.0 - eslint-visitor-keys: 3.4.3 - acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -5617,6 +5602,10 @@ snapshots: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -5810,11 +5799,11 @@ snapshots: dependencies: '@next/eslint-plugin-next': 14.2.4 '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.2) + '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.6.0) eslint-plugin-react: 7.34.3(eslint@9.6.0) eslint-plugin-react-hooks: 4.6.2(eslint@9.6.0) @@ -5837,13 +5826,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0): dependencies: debug: 4.3.5 enhanced-resolve: 5.17.0 eslint: 9.6.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.14.0 @@ -5854,66 +5843,46 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.6.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.2) - eslint: 9.6.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.2) + '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0): + eslint-plugin-import-x@0.5.3(eslint@9.6.0)(typescript@5.5.2): dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 + '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.2) + debug: 4.3.5 + doctrine: 3.0.0 eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint@9.6.0) - hasown: 2.0.2 - is-core-module: 2.13.1 + get-tsconfig: 4.7.5 is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) + minimatch: 9.0.4 + semver: 7.6.2 + stable-hash: 0.0.4 + tslib: 2.6.3 transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - supports-color + - typescript - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-typescript@3.6.1)(eslint@9.6.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 @@ -5923,7 +5892,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.6.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@9.6.0))(eslint@9.6.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5934,7 +5903,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.2.0(eslint@9.6.0)(typescript@5.5.2) + '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -5946,12 +5915,10 @@ snapshots: eslint: 9.6.0 requireindex: 1.2.0 - eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2): + eslint-plugin-jest@28.6.0(eslint@9.6.0)(typescript@5.5.2): dependencies: '@typescript-eslint/utils': 7.11.0(eslint@9.6.0)(typescript@5.5.2) eslint: 9.6.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2) transitivePeerDependencies: - supports-color - typescript @@ -5986,12 +5953,12 @@ snapshots: - supports-color - typescript - eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0): + eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.6.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0): dependencies: eslint: 9.6.0 globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2) + eslint-plugin-jest: 28.6.0(eslint@9.6.0)(typescript@5.5.2) eslint-plugin-react-hooks@4.6.2(eslint@9.6.0): dependencies: @@ -6943,10 +6910,6 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 @@ -7729,6 +7692,8 @@ snapshots: dependencies: through2: 2.0.5 + stable-hash@0.0.4: {} + stdin-discarder@0.2.2: {} stop-iteration-iterator@1.0.0: @@ -8034,6 +7999,8 @@ snapshots: tslib@1.14.1: {} + tslib@2.6.3: {} + tsup@8.1.0(typescript@5.5.2): dependencies: bundle-require: 4.0.2(esbuild@0.21.4) @@ -8145,6 +8112,17 @@ snapshots: typed-array-buffer: 1.0.2 typed-array-byte-offset: 1.0.2 + typescript-eslint@7.15.0(eslint@9.6.0)(typescript@5.5.2): + dependencies: + '@typescript-eslint/eslint-plugin': 7.15.0(@typescript-eslint/parser@7.15.0(eslint@9.6.0)(typescript@5.5.2))(eslint@9.6.0)(typescript@5.5.2) + '@typescript-eslint/parser': 7.15.0(eslint@9.6.0)(typescript@5.5.2) + '@typescript-eslint/utils': 7.15.0(eslint@9.6.0)(typescript@5.5.2) + eslint: 9.6.0 + optionalDependencies: + typescript: 5.5.2 + transitivePeerDependencies: + - supports-color + typescript@5.5.2: {} uglify-js@3.17.4: