diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index f98de18a..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "env": { - "browser": true, - "es2020": true - }, - "extends": [ - "airbnb", - "airbnb/hooks", - "plugin:@typescript-eslint/recommended", - "plugin:import/typescript", - "prettier" - ], - "overrides": [ - { - "files": ["**/*.js"], - "rules": { - "@typescript-eslint/no-var-requires": "off" - } - }, - { - "files": ["*.test.{ts,tsx}"], - "rules": { - "import/no-extraneous-dependencies": "off" - } - }, - { - "files": ["src/mocks/**/*.ts"], - "rules": { - "import/no-extraneous-dependencies": [ - "error", - { "devDependencies": true } - ] - } - } - ], - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "import", "react"], - "root": true, - "rules": { - "@typescript-eslint/explicit-module-boundary-types": [ - "error", - { "allowTypedFunctionExpressions": true } - ], - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "argsIgnorePattern": "^_", - "destructuredArrayIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ], - "camelcase": ["warn", { "ignoreDestructuring": true }], - "import/consistent-type-specifier-style": ["error", "prefer-inline"], - "import/extensions": [ - "error", - "ignorePackages", - { "ts": "never", "tsx": "never" } - ], - "import/no-unresolved": "off", - "import/order": "off", - "import/prefer-default-export": "off", - "no-console": ["warn", { "allow": ["count", "error", "info"] }], - "no-nested-ternary": "off", - "no-param-reassign": ["error", { "props": false }], - "no-restricted-syntax": [ - "error", - "ForInStatement", - "LabeledStatement", - "WithStatement" - ], - "no-shadow": "off", - "no-underscore-dangle": "off", - "no-use-before-define": "off", - "react/function-component-definition": [ - "error", - { - "namedComponents": "arrow-function", - "unnamedComponents": "arrow-function" - } - ], - "react/jsx-filename-extension": [ - "error", - { "extensions": [".jsx", ".tsx"] } - ], - "react/jsx-no-useless-fragment": ["warn", { "allowExpressions": true }], - "react/jsx-props-no-spreading": "off", - "react/prop-types": "off", - "react/react-in-jsx-scope": "off", - "react/require-default-props": "off" - }, - "settings": { - "import/resolver": { - "typescript": {} - } - } -} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..3aee4643 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,36 @@ +import Js from '@eslint/js'; +import PluginImport from 'eslint-plugin-import'; +import Ts from 'typescript-eslint'; + +// NOTE Some plugins have yet to properly migrate to being compatible with the +// flat configuration machinery. We probably want them back once they're +// compatible again. +// +// - eslint-plugin-jsx-a11y +// - eslint-plugin-react +// - eslint-plugin-react-hooks +// - next/core-web-vitals + +export default [ + ...[ + Js.configs.recommended, + ...Ts.configs.strict, + ...Ts.configs.stylistic, + { + plugins: { import: PluginImport }, + rules: { + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', ignoreRestSiblings: true }, + ], + 'import/consistent-type-specifier-style': ['error', 'prefer-inline'], + }, + }, + ].map((it) => ({ + files: ['{scryfall,src}/**/*.{ts,tsx}'], + languageOptions: { parser: Ts.parser }, + ...it, + })), +]; diff --git a/jest.setup.ts b/jest.setup.ts index 660ea513..7b0828bf 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -1,2 +1 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import '@testing-library/jest-dom'; diff --git a/package.json b/package.json index da6581b6..2bef9cec 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "dev:next": "next dev", "dev:scryfall": "SCRYFALL_DEBUG=1 pnpm run scryfall", "lint": "pnpm run '/^lint:[^:]+$/'", - "lint:code": "eslint .", + "lint:code": "eslint", "lint:format": "pnpm run '/^lint:format:.+/'", "lint:format:code": "prettier --check --log-level warn puzzles/ scryfall/ src/", "lint:format:wiki": "prettier --check --log-level warn markdown/", @@ -60,6 +60,7 @@ "unist-util-visit": "5.0.0" }, "devDependencies": { + "@eslint/js": "9.2.0", "@ianvs/prettier-plugin-sort-imports": "4.2.1", "@testing-library/jest-dom": "6.4.5", "@testing-library/react": "15.0.6", @@ -70,26 +71,19 @@ "@types/react-dom": "18.3.0", "@types/react-syntax-highlighter": "15.5.13", "@types/unist": "3.0.2", - "@typescript-eslint/eslint-plugin": "7.8.0", - "@typescript-eslint/parser": "7.8.0", "concurrently": "8.2.2", - "eslint": "8.57.0", - "eslint-config-airbnb": "19.0.4", - "eslint-config-prettier": "9.1.0", - "eslint-import-resolver-typescript": "3.6.1", + "eslint": "9.2.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-jsx-a11y": "6.8.0", - "eslint-plugin-react": "7.34.1", - "eslint-plugin-react-hooks": "4.6.2", "husky": "8.0.3", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "knip": "5.12.2", "lint-staged": "15.2.2", - "markdownlint-cli": "0.39.0", + "markdownlint-cli": "0.40.0", "mdast-util-directive": "3.0.0", "prettier": "3.2.5", "ts-node": "10.9.2", - "typescript": "5.4.5" + "typescript": "5.4.5", + "typescript-eslint": "7.8.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23560f0e..e0dabfdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,9 @@ importers: specifier: 5.0.0 version: 5.0.0 devDependencies: + '@eslint/js': + specifier: 9.2.0 + version: 9.2.0 '@ianvs/prettier-plugin-sort-imports': specifier: 4.2.1 version: 4.2.1(prettier@3.2.5) @@ -129,39 +132,15 @@ importers: '@types/unist': specifier: 3.0.2 version: 3.0.2 - '@typescript-eslint/eslint-plugin': - specifier: 7.8.0 - version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.8.0 - version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) concurrently: specifier: 8.2.2 version: 8.2.2 eslint: - specifier: 8.57.0 - version: 8.57.0 - eslint-config-airbnb: - specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.34.1(eslint@8.57.0))(eslint@8.57.0) - eslint-config-prettier: - specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) - eslint-import-resolver-typescript: - specifier: 3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + specifier: 9.2.0 + version: 9.2.0 eslint-plugin-import: specifier: 2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: - specifier: 6.8.0 - version: 6.8.0(eslint@8.57.0) - eslint-plugin-react: - specifier: 7.34.1 - version: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: - specifier: 4.6.2 - version: 4.6.2(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0) husky: specifier: 8.0.3 version: 8.0.3 @@ -178,8 +157,8 @@ importers: specifier: 15.2.2 version: 15.2.2 markdownlint-cli: - specifier: 0.39.0 - version: 0.39.0 + specifier: 0.40.0 + version: 0.40.0 mdast-util-directive: specifier: 3.0.0 version: 3.0.0 @@ -192,6 +171,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: 7.8.0 + version: 7.8.0(eslint@9.2.0)(typescript@5.4.5) packages: @@ -448,13 +430,13 @@ packages: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@3.0.2': + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/js@9.2.0': + resolution: {integrity: sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.6.1': resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} @@ -474,8 +456,8 @@ packages: '@fontsource/libre-baskerville@5.0.13': resolution: {integrity: sha512-4RmjVL+W0Y0HbPz2jVXykFXpeu+NnE2xplGNcLEGSMkjSWM5fHH6tu3Vmzskfjp9j47/EQVfuQ0uIDEFmUd6iA==} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} '@humanwhocodes/module-importer@1.0.1': @@ -485,6 +467,10 @@ packages: '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + '@humanwhocodes/retry@0.2.4': + resolution: {integrity: sha512-Ttl/jHpxfS3st5sxwICYfk4pOH0WrLI1SpW283GgQL7sCWU7EHIOhX4b4fkIxr3tkfzwg8+FNojtzsIEE7Ecgg==} + engines: {node: '>=18.18'} + '@ianvs/prettier-plugin-sort-imports@4.2.1': resolution: {integrity: sha512-NKN1LVFWUDGDGr3vt+6Ey3qPeN/163uR1pOPAlkWpgvAqgxQ6kSdUf1F0it8aHUtKRUzEGcK38Wxd07O61d7+Q==} peerDependencies: @@ -1239,10 +1225,6 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} @@ -1255,19 +1237,10 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - - array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} - arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - async-sema@3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} @@ -1278,13 +1251,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1493,6 +1459,10 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1508,9 +1478,6 @@ packages: engines: {node: ^14.13.0 || >=16.0.0} hasBin: true - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -1552,9 +1519,6 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -1666,10 +1630,6 @@ 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'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -1706,10 +1666,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} - engines: {node: '>=10.13.0'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1729,10 +1685,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} - es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -1773,39 +1725,9 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-airbnb-base@15.0.0: - 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 - - eslint-config-airbnb@19.0.4: - 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 - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-module-utils@2.8.1: resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} @@ -1837,40 +1759,26 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.34.1: - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.2.0: + resolution: {integrity: sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -1944,10 +1852,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1974,10 +1878,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -2054,9 +1954,6 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} - github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -2080,9 +1977,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -2260,10 +2157,6 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -2300,9 +2193,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2319,10 +2209,6 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2337,10 +2223,6 @@ packages: resolution: {integrity: sha512-EdOZCr0NsGE00Pot+x1ZFx9MJK3C6wy91geZpXwvwexDLJvA4nzYyZf7r+EIwSeVsOLDdBz7ATg9NqKTzuNYuQ==} engines: {node: '>= 4'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -2372,10 +2254,6 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} @@ -2400,17 +2278,9 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} - isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -2445,9 +2315,6 @@ packages: resolution: {integrity: sha512-hJnEP2Xk4+44DDwJqUQGdXal5VbyeWLaPyDl2AQc242Zr7iqz4DgpQOrEzglWVMGHMDCkguLHEKxd1+rOsmgSQ==} engines: {node: '>=4'} - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -2643,9 +2510,9 @@ packages: jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2666,13 +2533,6 @@ packages: '@types/node': '>=18' typescript: '>=5.0.4' - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2766,24 +2626,24 @@ packages: resolution: {integrity: sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==} engines: {node: '>=4'} - markdown-it@14.0.0: - resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} - markdownlint-cli@0.39.0: - resolution: {integrity: sha512-ZuFN7Xpsbn1Nbp0YYkeLOfXOMOfLQBik2lKRy8pVI/llmKQ2uW7x+8k5OMgF6o7XCsTDSYC/OOmeJ+3qplvnJQ==} + markdownlint-cli@0.40.0: + resolution: {integrity: sha512-JXhI3dRQcaqwiFYpPz6VJ7aKYheD53GmTz9y4D/d0F1MbZDGOp9pqKlbOfUX/pHP/iAoeiE4wYRmk8/kjLakxA==} engines: {node: '>=18'} hasBin: true - markdownlint-micromark@0.1.8: - resolution: {integrity: sha512-1ouYkMRo9/6gou9gObuMDnvZM8jC/ly3QCFQyoSPCS2XV1ZClU0xpKbL1Ar3bWWRT1RnBZkWUEiNKrI2CwiBQA==} - engines: {node: '>=16'} + markdownlint-micromark@0.1.9: + resolution: {integrity: sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==} + engines: {node: '>=18'} - markdownlint@0.33.0: - resolution: {integrity: sha512-4lbtT14A3m0LPX1WS/3d1m7Blg+ZwiLq36WvjQqFGsX3Gik99NV+VXp/PW3n+Q62xyPdbvGOCfjPqjW+/SKMig==} + markdownlint@0.34.0: + resolution: {integrity: sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==} engines: {node: '>=18'} mdast-util-directive@3.0.0: @@ -3050,10 +2910,6 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - object.fromentries@2.0.8: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} @@ -3062,10 +2918,6 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -3307,10 +3159,6 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} - refractor@3.6.0: resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} @@ -3364,9 +3212,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -3375,10 +3220,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3393,10 +3234,6 @@ packages: rfdc@1.3.1: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - run-con@1.3.2: resolution: {integrity: sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==} hasBin: true @@ -3562,10 +3399,6 @@ packages: string.fromcodepoint@0.2.1: resolution: {integrity: sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==} - string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} - string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -3661,10 +3494,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -3692,6 +3521,9 @@ packages: to-space-case@1.0.0: resolution: {integrity: sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==} + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -3744,10 +3576,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -3768,6 +3596,16 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typescript-eslint@7.8.0: + resolution: {integrity: sha512-sheFG+/D8N/L7gC3WT0Q8sB97Nm573Yfr+vZFzl/4nBdYcmviBPtwGSX9TJ7wpVg28ocerKVOt+k2eGmHzcgVA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -3870,14 +3708,6 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -4300,19 +4130,19 @@ snapshots: to-pascal-case: 1.0.0 unescape-js: 1.1.4 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.2.0)': dependencies: - eslint: 8.57.0 + eslint: 9.2.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.10.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.0.2': dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.0.1 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -4321,7 +4151,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.2.0': {} '@floating-ui/core@1.6.1': dependencies: @@ -4342,7 +4172,7 @@ snapshots: '@fontsource/libre-baskerville@5.0.13': {} - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 @@ -4354,6 +4184,8 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.2.4': {} + '@ianvs/prettier-plugin-sort-imports@4.2.1(prettier@3.2.5)': dependencies: '@babel/core': 7.24.5 @@ -4993,16 +4825,16 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@9.2.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.8.0 - '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.8.0(eslint@9.2.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.2.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.2.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -5013,14 +4845,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/scope-manager': 7.8.0 '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.2.0 optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: @@ -5031,12 +4863,12 @@ snapshots: '@typescript-eslint/types': 7.8.0 '@typescript-eslint/visitor-keys': 7.8.0 - '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/type-utils@7.8.0(eslint@9.2.0)(typescript@5.4.5)': dependencies: '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.2.0)(typescript@5.4.5) debug: 4.3.4 - eslint: 8.57.0 + eslint: 9.2.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 @@ -5060,15 +4892,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/utils@7.8.0(eslint@9.2.0)(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.2.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.8.0 '@typescript-eslint/types': 7.8.0 '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) - eslint: 8.57.0 + eslint: 9.2.0 semver: 7.6.0 transitivePeerDependencies: - supports-color @@ -5182,15 +5014,6 @@ snapshots: array-union@2.1.0: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 - array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.7 @@ -5214,21 +5037,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.toreversed@1.1.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.3: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -5240,8 +5048,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - ast-types-flow@0.0.8: {} - async-sema@3.1.1: {} asynckit@0.4.0: {} @@ -5250,12 +5056,6 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axe-core@4.7.0: {} - - axobject-query@3.2.1: - dependencies: - dequal: 2.0.3 - babel-jest@29.7.0(@babel/core@7.24.5): dependencies: '@babel/core': 7.24.5 @@ -5470,6 +5270,8 @@ snapshots: commander@11.1.0: {} + commander@12.0.0: {} + commander@4.1.1: {} compose-function@3.0.3: @@ -5490,8 +5292,6 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - confusing-browser-globals@1.0.11: {} - convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} @@ -5541,8 +5341,6 @@ snapshots: csstype@3.1.3: {} - damerau-levenshtein@1.0.8: {} - data-urls@3.0.2: dependencies: abab: 2.0.6 @@ -5638,10 +5436,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -5673,11 +5467,6 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.16.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - entities@4.5.0: {} error-ex@1.3.2: @@ -5739,23 +5528,6 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.0.19: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 - es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -5794,30 +5566,6 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0): - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - object.assign: 4.1.5 - object.entries: 1.1.8 - semver: 6.3.1 - - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react@7.34.1(eslint@8.57.0))(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - object.assign: 4.1.5 - object.entries: 1.1.8 - - eslint-config-prettier@9.1.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -5826,35 +5574,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.16.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.3 - is-core-module: 2.13.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@9.2.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) - eslint: 8.57.0 + '@typescript-eslint/parser': 7.8.0(eslint@9.2.0)(typescript@5.4.5) + eslint: 9.2.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -5862,9 +5592,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.2.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@9.2.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -5875,97 +5605,49 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@9.2.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): - dependencies: - '@babel/runtime': 7.24.5 - aria-query: 5.3.0 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - - eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-plugin-react@7.34.1(eslint@8.57.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.19 - eslint: 8.57.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.11 - - eslint-scope@7.2.2: + eslint-scope@8.0.1: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint-visitor-keys@4.0.0: {} + + eslint@9.2.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.2.0) '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.2.0 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.2.4 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 - 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.5.0 esutils: 2.0.3 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.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 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 @@ -5977,11 +5659,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.0.1: dependencies: acorn: 8.11.3 acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.0.0 esprima@4.0.1: {} @@ -6067,10 +5749,6 @@ snapshots: dependencies: bser: 2.1.1 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -6095,12 +5773,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.3.1 @@ -6169,10 +5841,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: - dependencies: - resolve-pkg-maps: 1.0.0 - github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -6202,9 +5870,7 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: dependencies: @@ -6398,10 +6064,6 @@ snapshots: is-arrayish@0.3.2: {} - is-async-function@2.0.0: - dependencies: - has-tostringtag: 1.0.2 - is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 @@ -6433,10 +6095,6 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: - dependencies: - call-bind: 1.0.7 - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -6447,10 +6105,6 @@ snapshots: is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -6461,8 +6115,6 @@ snapshots: is-iterable@1.1.1: {} - is-map@2.0.3: {} - is-negative-zero@2.0.3: {} is-number-object@1.0.7: @@ -6484,8 +6136,6 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-set@2.0.3: {} - is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 @@ -6506,17 +6156,10 @@ snapshots: dependencies: which-typed-array: 1.1.15 - is-weakmap@2.0.2: {} - is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - is-weakset@2.0.3: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - isarray@2.0.5: {} isexe@2.0.0: {} @@ -6564,14 +6207,6 @@ snapshots: iterable-lookahead@1.0.0: {} - iterator.prototype@1.1.2: - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 @@ -6966,12 +6601,7 @@ snapshots: jsonc-parser@3.2.1: {} - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + jsonpointer@5.0.1: {} keyv@4.5.4: dependencies: @@ -7004,12 +6634,6 @@ snapshots: zod: 3.23.6 zod-validation-error: 3.2.0(zod@3.23.6) - language-subtag-registry@0.3.22: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.22 - leven@3.1.0: {} levn@0.4.1: @@ -7112,7 +6736,7 @@ snapshots: map-obj@2.0.0: {} - markdown-it@14.0.0: + markdown-it@14.1.0: dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -7123,24 +6747,26 @@ snapshots: markdown-table@3.0.3: {} - markdownlint-cli@0.39.0: + markdownlint-cli@0.40.0: dependencies: - commander: 11.1.0 + commander: 12.0.0 get-stdin: 9.0.0 glob: 10.3.12 ignore: 5.3.1 js-yaml: 4.1.0 jsonc-parser: 3.2.1 - markdownlint: 0.33.0 + jsonpointer: 5.0.1 + markdownlint: 0.34.0 minimatch: 9.0.4 run-con: 1.3.2 + toml: 3.0.0 - markdownlint-micromark@0.1.8: {} + markdownlint-micromark@0.1.9: {} - markdownlint@0.33.0: + markdownlint@0.34.0: dependencies: - markdown-it: 14.0.0 - markdownlint-micromark: 0.1.8 + markdown-it: 14.1.0 + markdownlint-micromark: 0.1.9 mdast-util-directive@3.0.0: dependencies: @@ -7624,12 +7250,6 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 - object.entries@1.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - object.fromentries@2.0.8: dependencies: call-bind: 1.0.7 @@ -7643,12 +7263,6 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 - object.hasown@1.1.4: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -7895,16 +7509,6 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - reflect.getprototypeof@1.0.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.3 - refractor@3.6.0: dependencies: hastscript: 6.0.0 @@ -7997,8 +7601,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} resolve@1.22.8: @@ -8007,12 +7609,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@4.0.0: dependencies: onetime: 5.1.2 @@ -8024,10 +7620,6 @@ snapshots: rfdc@1.3.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-con@1.3.2: dependencies: deep-extend: 0.6.0 @@ -8216,21 +7808,6 @@ snapshots: string.fromcodepoint@0.2.1: {} - string.prototype.matchall@4.0.11: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - set-function-name: 2.0.2 - side-channel: 1.0.6 - string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 @@ -8313,8 +7890,6 @@ snapshots: symbol-tree@3.2.4: {} - tapable@2.2.1: {} - test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -8341,6 +7916,8 @@ snapshots: dependencies: to-no-case: 1.0.2 + toml@3.0.0: {} + tough-cookie@4.1.4: dependencies: psl: 1.9.0 @@ -8395,8 +7972,6 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} typed-array-buffer@1.0.2: @@ -8431,6 +8006,17 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typescript-eslint@7.8.0(eslint@9.2.0)(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@9.2.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@9.2.0)(typescript@5.4.5) + eslint: 9.2.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + typescript@5.4.5: {} uc.micro@2.1.0: {} @@ -8566,28 +8152,6 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.2 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.2 - which-typed-array: 1.1.15 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.3 - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 diff --git a/src/components/ArticleMeta/ArticleMeta.tsx b/src/components/ArticleMeta/ArticleMeta.tsx index 2f7ea225..dbeef193 100644 --- a/src/components/ArticleMeta/ArticleMeta.tsx +++ b/src/components/ArticleMeta/ArticleMeta.tsx @@ -6,10 +6,10 @@ import { type FunctionComponent } from 'react'; import { ArticleChip } from '@/components/ArticleChip/ArticleChip'; import { type ArticleMatter } from '@/tools/markdown/types'; -interface Props { +type Props = { date: string | null; matter: ArticleMatter; -} +}; export const ArticleMeta: FunctionComponent = ({ date, matter }) => { const { authors, kind, tags = [] } = matter; diff --git a/src/components/BackToTop/BackToTop.tsx b/src/components/BackToTop/BackToTop.tsx index a31d8b62..39869623 100644 --- a/src/components/BackToTop/BackToTop.tsx +++ b/src/components/BackToTop/BackToTop.tsx @@ -5,9 +5,9 @@ import { type Theme } from '@mui/material/styles'; import { type SxProps } from '@mui/system'; import { useEffect, useState, type FunctionComponent } from 'react'; -interface Props { +type Props = { sx?: SxProps; -} +}; export const BackToTop: FunctionComponent = ({ sx }) => { const [hasBeenDisplayed, setHasBeenDisplayed] = useState(false); diff --git a/src/components/Banner/Banner.tsx b/src/components/Banner/Banner.tsx index f009fa21..e5576d53 100644 --- a/src/components/Banner/Banner.tsx +++ b/src/components/Banner/Banner.tsx @@ -5,11 +5,11 @@ import { type FunctionComponent } from 'react'; import { type Banner as BannerModel } from '@/tools/markdown/types'; -interface Props { +type Props = { banner: BannerModel; footer?: string[]; title: string; -} +}; export const Banner: FunctionComponent = ({ banner, diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx index 9dfb6e5f..3a9c7cf6 100644 --- a/src/components/Card/Card.tsx +++ b/src/components/Card/Card.tsx @@ -7,9 +7,9 @@ import { useState, type FunctionComponent, type ReactNode } from 'react'; import { CardFace } from '@/components/Card/CardFace'; import { type ScryCard } from '@/tools/scryfall/types'; -export interface Props { +export type Props = { data: ScryCard[]; -} +}; export const Card: FunctionComponent = ({ data }) => { const [selectedFace, setSelectedFace] = useState(0); diff --git a/src/components/Card/CardFace.tsx b/src/components/Card/CardFace.tsx index cab0035e..b76a2e4a 100644 --- a/src/components/Card/CardFace.tsx +++ b/src/components/Card/CardFace.tsx @@ -5,11 +5,11 @@ import { type FunctionComponent, type ReactNode } from 'react'; import { type ScryCard } from '@/tools/scryfall/types'; -export interface Props { +export type Props = { active: boolean; data: ScryCard; sx?: SxProps; -} +}; export const CardFace: FunctionComponent = ({ active, data, sx }) => { const { artist, images, name, setName } = data; @@ -23,7 +23,6 @@ export const CardFace: FunctionComponent = ({ active, data, sx }) => { ]; const title: ReactNode = titleLines.map((line, index) => ( - // eslint-disable-next-line react/no-array-index-key
{line}
)); diff --git a/src/components/Decklist/Column.tsx b/src/components/Decklist/Column.tsx index a90801f8..5eb6d163 100644 --- a/src/components/Decklist/Column.tsx +++ b/src/components/Decklist/Column.tsx @@ -3,9 +3,9 @@ import { type FunctionComponent } from 'react'; import { type Card } from '@/tools/decklists/types'; -export interface Props { +export type Props = { cards: Card[]; -} +}; export const Column: FunctionComponent = ({ cards }) => { if (!cards.length) return null; diff --git a/src/components/Decklist/Decklist.tsx b/src/components/Decklist/Decklist.tsx index 6bd0583c..dd632508 100644 --- a/src/components/Decklist/Decklist.tsx +++ b/src/components/Decklist/Decklist.tsx @@ -16,7 +16,7 @@ import { Column } from '@/components/Decklist/Column'; import { Mana } from '@/components/Mana/Mana'; import { type Card } from '@/tools/decklists/types'; -interface Props { +type Props = { authors: string | null; colors: string[] | null; date?: string; @@ -25,7 +25,7 @@ interface Props { side: Card[]; sideCount: number; title: string; -} +}; export const Decklist: FunctionComponent = ({ authors, @@ -67,7 +67,6 @@ export const Decklist: FunctionComponent = ({ mr={1} > {colors.map((color, index) => ( - // eslint-disable-next-line react/no-array-index-key ))} @@ -120,7 +119,6 @@ export const Decklist: FunctionComponent = ({ {main.map((cards, index) => ( - // eslint-disable-next-line react/no-array-index-key diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx index e7ba7421..474e9a97 100644 --- a/src/components/Footer/Footer.tsx +++ b/src/components/Footer/Footer.tsx @@ -9,10 +9,10 @@ import { type FunctionComponent, type ReactNode } from 'react'; import { Link } from '@/components/Link/Link'; import { darkTheme } from '@/theme/theme'; -interface Props { +type Props = { isClear: boolean; sx?: SxProps; -} +}; export const Footer: FunctionComponent = ({ isClear, sx }) => { const footer: ReactNode = ( diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx index b141c811..63188384 100644 --- a/src/components/Header/Header.tsx +++ b/src/components/Header/Header.tsx @@ -6,11 +6,11 @@ import { type FunctionComponent } from 'react'; import { Progress } from '@/components/Progress/Progress'; -interface Props { +type Props = { isMobile: boolean; onSidebarOpen: () => void; withProgress?: boolean; -} +}; export const Header: FunctionComponent = ({ isMobile, diff --git a/src/components/Layout/Layout.tsx b/src/components/Layout/Layout.tsx index 86e3c635..b930311c 100644 --- a/src/components/Layout/Layout.tsx +++ b/src/components/Layout/Layout.tsx @@ -18,13 +18,13 @@ import { Sidebar } from '@/components/Sidebar/Sidebar'; import { Title } from '@/components/Title/Title'; import { type MenuEntry } from '@/tools/markdown/types'; -interface Props extends PropsWithChildren { +type Props = PropsWithChildren & { background?: string; menu: MenuEntry[]; title: string; withBackToTop?: boolean; withProgress?: boolean; -} +}; export const Layout: FunctionComponent = ({ background, diff --git a/src/components/Link/Link.tsx b/src/components/Link/Link.tsx index e23608d7..659dd4af 100644 --- a/src/components/Link/Link.tsx +++ b/src/components/Link/Link.tsx @@ -2,10 +2,10 @@ import { Link as MuiLink } from '@mui/material'; import NextLink from 'next/link'; import { FunctionComponent, PropsWithChildren } from 'react'; -interface Props extends PropsWithChildren { +type Props = PropsWithChildren & { external?: boolean; href: string; -} +}; export const Link: FunctionComponent = ({ children, diff --git a/src/components/Mana/Mana.tsx b/src/components/Mana/Mana.tsx index 24343e75..6507d406 100644 --- a/src/components/Mana/Mana.tsx +++ b/src/components/Mana/Mana.tsx @@ -3,9 +3,9 @@ import { type FunctionComponent } from 'react'; import 'mana-font/css/mana.min.css'; -interface Props { +type Props = { pattern: string; -} +}; export const Mana: FunctionComponent = ({ pattern }) => ( ; -} +}; export const Progress: FunctionComponent = ({ sx }) => { const scroll = useScroll(); diff --git a/src/components/Remark/Remark.tsx b/src/components/Remark/Remark.tsx index 22cdef23..72ed8380 100644 --- a/src/components/Remark/Remark.tsx +++ b/src/components/Remark/Remark.tsx @@ -7,7 +7,6 @@ import remarkGfm from 'remark-gfm'; import remarkToc from 'remark-toc'; import { type PluggableList } from 'unified'; -// eslint-disable-next-line import/no-cycle import { COMPONENTS, COMPONENTS_EXTRA } from '@/components/Remark/constants'; import { type Decklists } from '@/tools/decklists/types'; import { type Partial } from '@/tools/markdown/types'; @@ -18,13 +17,13 @@ import { remarkDecklist } from '@/tools/remark/remarkDecklist.client'; import { remarkMana } from '@/tools/remark/remarkMana.client'; import { remarkRow } from '@/tools/remark/remarkRow.client'; -interface Props { +type Props = { decklists: Decklists; markdown: Partial; /** Whether the component should scroll to the current anchor. */ withScroll?: boolean; withWrapper?: boolean; -} +}; export const Remark: FunctionComponent = ({ decklists, diff --git a/src/components/Remark/constants.tsx b/src/components/Remark/constants.tsx index 90ede98a..9f88f8de 100644 --- a/src/components/Remark/constants.tsx +++ b/src/components/Remark/constants.tsx @@ -1,6 +1,5 @@ import { type Components } from 'react-markdown'; -// eslint-disable-next-line import/no-cycle import { RemarkAccordion } from '@/components/Remark/renderers/RemarkAccordion'; import { RemarkCard } from '@/components/Remark/renderers/RemarkCard'; import { RemarkCode } from '@/components/Remark/renderers/RemarkCode'; diff --git a/src/components/Remark/renderers/RemarkAccordion.tsx b/src/components/Remark/renderers/RemarkAccordion.tsx index 6c601cce..bf7390c5 100644 --- a/src/components/Remark/renderers/RemarkAccordion.tsx +++ b/src/components/Remark/renderers/RemarkAccordion.tsx @@ -14,7 +14,6 @@ import { } from 'react'; import { type ExtraProps } from 'react-markdown'; -// eslint-disable-next-line import/no-cycle import { Remark } from '@/components/Remark/Remark'; import { type Decklists } from '@/tools/decklists/types'; import { type Partial } from '@/tools/markdown/types'; @@ -25,11 +24,12 @@ import { type Partial } from '@/tools/markdown/types'; // // Remark -> Remark/constants -> RemarkAccordion -> Remark -interface Props extends ExtraProps, PropsWithChildren { - decklists?: Decklists; - partial?: Partial; - path?: string; -} +type Props = ExtraProps & + PropsWithChildren & { + decklists?: Decklists; + partial?: Partial; + path?: string; + }; export const RemarkAccordion: FunctionComponent = ({ children, diff --git a/src/components/Remark/renderers/RemarkCard.tsx b/src/components/Remark/renderers/RemarkCard.tsx index 0265eb06..6f9c1f85 100644 --- a/src/components/Remark/renderers/RemarkCard.tsx +++ b/src/components/Remark/renderers/RemarkCard.tsx @@ -5,9 +5,9 @@ import { Link } from '@/components/Link/Link'; const SCRYFALL_SEARCH = 'https://scryfall.com/search'; -interface Props extends ExtraProps { +type Props = ExtraProps & { name?: string; -} +}; export const RemarkCard: FunctionComponent = ({ name, node }) => { if (!name) { diff --git a/src/components/Remark/renderers/RemarkDecklist.tsx b/src/components/Remark/renderers/RemarkDecklist.tsx index 557adea5..0151a14a 100644 --- a/src/components/Remark/renderers/RemarkDecklist.tsx +++ b/src/components/Remark/renderers/RemarkDecklist.tsx @@ -7,9 +7,9 @@ import { type Decklist as DecklistModel, } from '@/tools/decklists/types'; -interface Props extends ExtraProps { +type Props = ExtraProps & { decklist?: DecklistModel & DecklistExtra; -} +}; export const RemarkDecklist: FunctionComponent = ({ decklist, diff --git a/src/components/Remark/renderers/RemarkMana.tsx b/src/components/Remark/renderers/RemarkMana.tsx index e4dfe453..03f4f198 100644 --- a/src/components/Remark/renderers/RemarkMana.tsx +++ b/src/components/Remark/renderers/RemarkMana.tsx @@ -3,9 +3,9 @@ import { type ExtraProps } from 'react-markdown'; import { Mana } from '@/components/Mana/Mana'; -interface Props extends ExtraProps { +type Props = ExtraProps & { pattern?: string; -} +}; export const RemarkMana: FunctionComponent = ({ node, pattern }) => { if (!pattern) { diff --git a/src/components/Remark/renderers/RemarkRow.tsx b/src/components/Remark/renderers/RemarkRow.tsx index dab24f61..32d99113 100644 --- a/src/components/Remark/renderers/RemarkRow.tsx +++ b/src/components/Remark/renderers/RemarkRow.tsx @@ -35,10 +35,10 @@ const STYLES: Record< }), }; -interface Props extends ExtraProps { +type Props = ExtraProps & { row?: { cards?: { data: ScryCard[]; id: string }[] }; variant?: string; -} +}; export const RemarkRow: FunctionComponent = ({ node, row, variant }) => { if (!row?.cards) { diff --git a/src/components/Remark/renderers/RemarkSoundcloud.tsx b/src/components/Remark/renderers/RemarkSoundcloud.tsx index e23cdba3..c30e1eb6 100644 --- a/src/components/Remark/renderers/RemarkSoundcloud.tsx +++ b/src/components/Remark/renderers/RemarkSoundcloud.tsx @@ -2,9 +2,9 @@ import { Box } from '@mui/material'; import { type FunctionComponent } from 'react'; import { type ExtraProps } from 'react-markdown'; -interface Props extends ExtraProps { +type Props = ExtraProps & { url?: string; -} +}; export const RemarkSoundcloud: FunctionComponent = ({ node, url }) => { if (!url) { diff --git a/src/components/Remark/renderers/RemarkTweet.tsx b/src/components/Remark/renderers/RemarkTweet.tsx index de08dac0..fd98f44b 100644 --- a/src/components/Remark/renderers/RemarkTweet.tsx +++ b/src/components/Remark/renderers/RemarkTweet.tsx @@ -11,14 +11,15 @@ type CreateTweet = ( ) => Promise; declare global { + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Window { twttr?: { widgets?: { createTweet?: CreateTweet } }; } } -interface Props extends ExtraProps { +type Props = ExtraProps & { id?: string; -} +}; export const RemarkTweet: FunctionComponent = ({ id, node }) => { const [hasError, setHasError] = useState(false); diff --git a/src/components/Remark/renderers/RemarkYoutube.tsx b/src/components/Remark/renderers/RemarkYoutube.tsx index 15d69a80..96f38ce6 100644 --- a/src/components/Remark/renderers/RemarkYoutube.tsx +++ b/src/components/Remark/renderers/RemarkYoutube.tsx @@ -12,9 +12,9 @@ const IFRAME_PERMISSIONS = [ 'picture-in-picture', ].join(';'); -interface Props extends ExtraProps { +type Props = ExtraProps & { id?: string; -} +}; export const RemarkYoutube: FunctionComponent = ({ id, node }) => { if (!id) { diff --git a/src/components/Sidebar/Sidebar.tsx b/src/components/Sidebar/Sidebar.tsx index 128406bd..ebb47817 100644 --- a/src/components/Sidebar/Sidebar.tsx +++ b/src/components/Sidebar/Sidebar.tsx @@ -20,14 +20,14 @@ import { SidebarRosetta } from '@/components/Sidebar/SidebarRosetta'; import { darkTheme } from '@/theme/theme'; import { type MenuEntry } from '@/tools/markdown/types'; -interface Props { +type Props = { category: string | undefined; isClear: boolean; isMobile?: boolean; isOpen?: boolean; menu: MenuEntry[]; onClose: () => void; -} +}; export const Sidebar: FunctionComponent = ({ category, diff --git a/src/components/Sidebar/SidebarHeader.tsx b/src/components/Sidebar/SidebarHeader.tsx index 3efeb74e..c0912cda 100644 --- a/src/components/Sidebar/SidebarHeader.tsx +++ b/src/components/Sidebar/SidebarHeader.tsx @@ -9,10 +9,10 @@ import { siDiscord } from 'simple-icons'; import { ThemeContext } from '@/theme/ThemeContext'; -interface Props { +type Props = { onClose: () => void; sx?: SxProps; -} +}; export const SidebarHeader: FunctionComponent = ({ onClose, sx }) => { const { isDark, toggle } = useContext(ThemeContext); diff --git a/src/components/Sidebar/SidebarRosetta.tsx b/src/components/Sidebar/SidebarRosetta.tsx index 15703ed5..1fd3758d 100644 --- a/src/components/Sidebar/SidebarRosetta.tsx +++ b/src/components/Sidebar/SidebarRosetta.tsx @@ -12,10 +12,10 @@ import { useEffect, useState, type FunctionComponent } from 'react'; import { getRosetta, type Rosetta } from '@/tools/game/getRosetta'; -interface Props { +type Props = { category: string | undefined; sx?: SxProps; -} +}; export const SidebarRosetta: FunctionComponent = ({ category, sx }) => { const [rosetta, setRosetta] = useState([]); diff --git a/src/components/SpoilsCalculator/SpoilsCalculator.tsx b/src/components/SpoilsCalculator/SpoilsCalculator.tsx index 96f68668..728d9732 100644 --- a/src/components/SpoilsCalculator/SpoilsCalculator.tsx +++ b/src/components/SpoilsCalculator/SpoilsCalculator.tsx @@ -18,19 +18,19 @@ import { } from '@mui/material'; import { ChangeEvent, FunctionComponent, useEffect, useState } from 'react'; -interface Input { +type Input = { copies: number; deck: number; life: number; samples: number; -} +}; -interface Output { +type Output = { average: string; deathes: string; id: number; input: Input; -} +}; const INITIAL_INPUT: Input = { copies: 4, deck: 53, life: 20, samples: 10000 }; diff --git a/src/components/Title/Title.tsx b/src/components/Title/Title.tsx index 10f17878..885cbf27 100644 --- a/src/components/Title/Title.tsx +++ b/src/components/Title/Title.tsx @@ -1,9 +1,9 @@ import Head from 'next/head'; import { type FunctionComponent } from 'react'; -interface Props { +type Props = { title?: string; -} +}; export const Title: FunctionComponent = ({ title }) => ( diff --git a/src/pages/404.tsx b/src/pages/404.tsx index 00b05eba..07e0dd77 100644 --- a/src/pages/404.tsx +++ b/src/pages/404.tsx @@ -5,9 +5,9 @@ import { Layout } from '@/components/Layout/Layout'; import { getMenu } from '@/tools/markdown/getMenu'; import { type MenuEntry } from '@/tools/markdown/types'; -interface Props { +type Props = { menu: MenuEntry[]; -} +}; const NotFoundPage: NextPage = ({ menu }) => ( diff --git a/src/pages/[category]/[chapter].tsx b/src/pages/[category]/[chapter].tsx index 82f7e796..e76468e5 100644 --- a/src/pages/[category]/[chapter].tsx +++ b/src/pages/[category]/[chapter].tsx @@ -22,11 +22,11 @@ import { type MenuEntry, } from '@/tools/markdown/types'; -interface Props { +type Props = { chapter: Chapter; decklists: Decklists; menu: MenuEntry[]; -} +}; const ChapterPage: NextPage = ({ chapter, decklists, menu }) => ( @@ -48,10 +48,10 @@ export const getStaticPaths: GetStaticPaths = async () => { return { fallback: false, paths }; }; -interface Query extends ParsedUrlQuery { +type Query = ParsedUrlQuery & { category: string; chapter: string; -} +}; export const getStaticProps: GetStaticProps = async ({ params, diff --git a/src/pages/articles.tsx b/src/pages/articles.tsx index 93344714..dc210aa9 100644 --- a/src/pages/articles.tsx +++ b/src/pages/articles.tsx @@ -14,10 +14,10 @@ import { getArticleCards } from '@/tools/markdown/getArticleCards'; import { getMenu } from '@/tools/markdown/getMenu'; import { type ArticleCard, type MenuEntry } from '@/tools/markdown/types'; -interface Props { +type Props = { articles: ArticleCard[]; menu: MenuEntry[]; -} +}; const ArticlesPage: NextPage = ({ articles, menu }) => ( diff --git a/src/pages/articles/[year]/[month]/[day]/[article].tsx b/src/pages/articles/[year]/[month]/[day]/[article].tsx index f05b790e..758cb4c8 100644 --- a/src/pages/articles/[year]/[month]/[day]/[article].tsx +++ b/src/pages/articles/[year]/[month]/[day]/[article].tsx @@ -23,12 +23,12 @@ import { type Partial, } from '@/tools/markdown/types'; -interface Props { +type Props = { article: Article; decklists: Decklists; footer: Partial; menu: MenuEntry[]; -} +}; const ArticlePage: NextPage = ({ article, decklists, footer, menu }) => ( @@ -61,12 +61,12 @@ export const getStaticPaths: GetStaticPaths = async () => { return { fallback: false, paths }; }; -interface Query extends ParsedUrlQuery { +type Query = ParsedUrlQuery & { article: string; day: string; month: string; year: string; -} +}; export const getStaticProps: GetStaticProps = async ({ params, diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 48449267..6a1b01b4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -18,12 +18,12 @@ import { const ARTICLES_INITIAL_SIZE = 5; -interface Props { +type Props = { articles: ArticleCardModel[]; decklists: Decklists; menu: MenuEntry[]; welcome: Partial; -} +}; const HomePage: NextPage = ({ articles, decklists, menu, welcome }) => { const articlesRoot = useRef(null); diff --git a/src/pages/license.tsx b/src/pages/license.tsx index 2b9c239b..6995bf87 100644 --- a/src/pages/license.tsx +++ b/src/pages/license.tsx @@ -11,11 +11,11 @@ import { getPartial } from '@/tools/markdown/getMarkdown'; import { getMenu } from '@/tools/markdown/getMenu'; import { type MenuEntry, type Partial } from '@/tools/markdown/types'; -interface Props { +type Props = { decklists: Decklists; license: Partial; menu: MenuEntry[]; -} +}; const LicensePage: NextPage = ({ decklists, license, menu }) => ( diff --git a/src/pages/sandbox/index.tsx b/src/pages/sandbox/index.tsx index fe3ff3f9..c2d7e240 100644 --- a/src/pages/sandbox/index.tsx +++ b/src/pages/sandbox/index.tsx @@ -21,9 +21,9 @@ const DEFAULT_INPUT = `From void evolved Phyrexia. Great Yawgmoth, Father of Machines, saw its perfection. Thus the Grand Evolution began.`; -interface Props { +type Props = { menu: MenuEntry[]; -} +}; const SandboxPage: NextPage = ({ menu }) => { const [input, setInput] = useState(DEFAULT_INPUT); diff --git a/src/pages/sandbox/markdown.tsx b/src/pages/sandbox/markdown.tsx index ba187d33..f34d287e 100644 --- a/src/pages/sandbox/markdown.tsx +++ b/src/pages/sandbox/markdown.tsx @@ -9,11 +9,11 @@ import { getPartial } from '@/tools/markdown/getMarkdown'; import { getMenu } from '@/tools/markdown/getMenu'; import { Partial, type MenuEntry } from '@/tools/markdown/types'; -interface Props { +type Props = { decklists: Decklists; markdown: Partial; menu: MenuEntry[]; -} +}; const Page: NextPage = ({ decklists, markdown, menu }) => ( diff --git a/src/theme/ThemeContext.tsx b/src/theme/ThemeContext.tsx index c08f2a49..5281ac06 100644 --- a/src/theme/ThemeContext.tsx +++ b/src/theme/ThemeContext.tsx @@ -11,14 +11,13 @@ import { import { Theme, THEME_STORAGE_KEY } from '@/theme/constants'; import { darkTheme, lightTheme } from '@/theme/theme'; -interface ThemeState { +type ThemeState = { isDark: boolean | null; toggle: () => void; -} +}; const initial: ThemeState = { isDark: null, - // eslint-disable-next-line @typescript-eslint/no-empty-function toggle: () => {}, }; diff --git a/src/theme/theme.ts b/src/theme/theme.ts index ce77aa5d..be992de3 100644 --- a/src/theme/theme.ts +++ b/src/theme/theme.ts @@ -21,6 +21,8 @@ import { type Kind } from '@/tools/markdown/constants/Kind'; import '@fontsource/libre-baskerville'; +/* eslint-disable @typescript-eslint/consistent-type-definitions */ + declare module '@mui/material/styles' { interface Palette { dividerOpaque: string; @@ -55,6 +57,8 @@ declare module '@mui/system/createTheme/shape' { } } +/* eslint-enable @typescript-eslint/consistent-type-definitions */ + const customizeTheme = (options: ThemeOptions): Theme => { const theme = createTheme(options); const { breakpoints, palette, spacing, typography } = theme; diff --git a/src/tools/decklists/types.ts b/src/tools/decklists/types.ts index 1794afd3..aa8bdbdd 100644 --- a/src/tools/decklists/types.ts +++ b/src/tools/decklists/types.ts @@ -1,6 +1,6 @@ export type Card = [quantity: number, name: string]; -export interface Decklist { +export type Decklist = { authors: string | null; colors: string[] | null; main: Card[][]; @@ -8,11 +8,11 @@ export interface Decklist { side: Card[][]; sideCount: number; title: string | null; -} +}; -export interface DecklistExtra { +export type DecklistExtra = { date: null | string; titleAsFile: string; -} +}; export type Decklists = Record; diff --git a/src/tools/markdown/sanitize.ts b/src/tools/markdown/sanitize.ts index 5094e81d..fea07d5d 100644 --- a/src/tools/markdown/sanitize.ts +++ b/src/tools/markdown/sanitize.ts @@ -3,8 +3,7 @@ import { Tag } from '@/tools/markdown/constants/Tag'; // TODO How about Zod? -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type Sanitizer = (value: any) => T; +type Sanitizer = (value: unknown) => T; /** Verify that the article kind matter property is correctly formed. */ export const sanitizeArticleKind: Sanitizer = (value) => { @@ -60,7 +59,7 @@ export const sanitizeOrder: Sanitizer = (value) => { if (value === undefined || !Number.isInteger(value)) { throw new Error("Missing 'order' property"); } - return value; + return value as number; }; /** Verify that the title matter property is correctly formed. */ diff --git a/src/tools/markdown/types.ts b/src/tools/markdown/types.ts index 08512872..e8743ce5 100644 --- a/src/tools/markdown/types.ts +++ b/src/tools/markdown/types.ts @@ -3,78 +3,78 @@ import { type Kind } from '@/tools/markdown/constants/Kind'; import { type Tag } from '@/tools/markdown/constants/Tag'; import { type Scries } from '@/tools/scryfall/types'; -export interface Banner { +export type Banner = { art: string; artPreview: string; flavor: string | null; title: string; -} +}; // Cards /////////////////////////////////////////////////////////////////////// -interface Card { +type Card = { matter: M; route: string; slug: string; -} +}; -export interface ArticleCard extends Card { +export type ArticleCard = Card & { banner: Banner; date: string | null; day: string; month: string; year: string; -} +}; -export interface ChapterCard extends Card { +export type ChapterCard = Card & { category: Category; -} +}; // Documents /////////////////////////////////////////////////////////////////// -export interface Partial { +export type Partial = { partials: Partials; scries: Scries; text: string; -} +}; -export interface Article extends Partial { +export type Article = Partial & { banner: Banner; matter: ArticleMatter; minutes: number; -} +}; -export interface Chapter extends Partial { +export type Chapter = Partial & { banner: Banner; matter: ChapterMatter; -} +}; export type Partials = Record; // Matter ////////////////////////////////////////////////////////////////////// -export interface ArticleMatter { +export type ArticleMatter = { authors: string; banner: string; kind: Kind; tags: Tag[]; title: string; -} +}; -export interface ChapterMatter { +export type ChapterMatter = { banner: string; order: number | null; title: string; -} +}; // Menu //////////////////////////////////////////////////////////////////////// -export interface MenuDecoration { +export type MenuDecoration = { category: Category; subtitle: string; title: string; -} +}; -export interface MenuEntry extends MenuDecoration { +export type MenuEntry = MenuDecoration & { pages: ChapterCard[]; -} +}; diff --git a/src/tools/scryfall/types.ts b/src/tools/scryfall/types.ts index fdd0f618..e942d44d 100644 --- a/src/tools/scryfall/types.ts +++ b/src/tools/scryfall/types.ts @@ -1,19 +1,19 @@ /** Convenience typing to represent a successful data yield. */ export type ScryData = ScryDataItem | ScryDataList; -interface ScryDataItemImages { +type ScryDataItemImages = { art_crop: string; border_crop: string; large: string; normal: string; png: string; -} +}; /** * Type as best as possible the card response we get from Scryfall API. * See . */ -export interface ScryDataItem { +export type ScryDataItem = { artist: string; card_faces?: { image_uris: ScryDataItemImages; @@ -27,23 +27,23 @@ export interface ScryDataItem { set: string; set_name: string; [key: string]: unknown; -} +}; /** * Type representing Scryfall response when the yield is a list of cards. * See . */ -export interface ScryDataList { +export type ScryDataList = { data: ScryDataItem[]; has_more: boolean; object: 'list'; next_page: URL | null; total_cards: number | null; warnings: string[] | null; -} +}; /** Sanitized Scryfall data for a single card. */ -export interface ScryCard { +export type ScryCard = { artist: string; flavor: string | null; images: { @@ -55,7 +55,7 @@ export interface ScryCard { name: string; setCode: string; setName: string; -} +}; /** Dictionary of Scryfall request settlements. */ export type Scries = Record;