diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index c5e6e476..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,101 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - node: true, - }, - parser: "@typescript-eslint/parser", - parserOptions: { - project: "tsconfig.json", - sourceType: "module", - ecmaFeatures: { - jsx: true, - }, - }, - plugins: [ - "react", - "@typescript-eslint", - "jest-dom", - "jsx-a11y", - "prettier", - "react-hooks", - "testing-library", - ], - extends: [ - "eslint:recommended", - "next", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:jest-dom/recommended", - "plugin:jsx-a11y/strict", - "plugin:prettier/recommended", - "plugin:react/recommended", - "plugin:testing-library/react", - "prettier", - "prettier/@typescript-eslint", - "prettier/react", - ], - rules: { - // this rule was deprecated in favor of another - // not sure why it is still giving errors - "jsx-a11y/label-has-for": 0, - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - "@typescript-eslint/no-empty-interface": 0, - "@typescript-eslint/no-use-before-define": [ - "error", - { functions: false, variables: false }, - ], - // disabling this bc it is checked by typescript so it is - // redundant and doesn't function properly - "react/prop-types": 0, - "@typescript-eslint/no-unused-vars": [ - "error", - { - vars: "all", - args: "after-used", - // ignore underscore _vars or jsx imports or React imports - argsIgnorePattern: "^_.*", - varsIgnorePattern: "^jsx$|^React$|^_.*", - ignoreRestSiblings: true, - }, - ], - "no-underscore-dangle": 0, - // these are meant to allow jsx to mark react as used. Not working right now though - "react/jsx-uses-vars": "error", - "react/jsx-uses-react": "error", - // Allow " and ' in jsx - "react/no-unescaped-entities": ["error", { forbid: [">", "}"] }], - // disable this rule because it is unnecessarily strict for TS - "@typescript-eslint/explicit-function-return-type": 0, - "@typescript-eslint/explicit-module-boundary-types": 0, - // if we want this, we should turn disallow any in tsconfig not here - "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/no-var-requires": 0, - // Disable this rule because server API uses a lot of snake_case - camelcase: 0, - "@typescript-eslint/camelcase": 0, - "@typescript-eslint/prefer-namespace-keyword": "error", - eqeqeq: ["error", "smart"], - "id-blacklist": [ - "error", - "any", - "Number", - "number", - "String", - "string", - "Boolean", - "boolean", - "Undefined", - ], - "id-match": "error", - "no-eval": "error", - "no-redeclare": "error", - "no-var": "error", - }, - settings: { - react: { - version: "detect", - }, - }, -}; diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..857e0c85 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": [ + "eslint:recommended", + "next", + "next/core-web-vitals", + "next/typescript", + "plugin:jest-dom/recommended", + "plugin:jsx-a11y/strict", + "plugin:testing-library/dom", + "prettier", + "prettier/@typescript-eslint" + ], + "rules": { + // TODO: SFR-2318 enable in the future + "@typescript-eslint/no-explicit-any": "off", + "testing-library/no-node-access": "off" + } +} diff --git a/CHANGELOG.md b/CHANGELOG.md index c20c94d9..731eb54f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Enable playwright tests GH action - Remove unused scss and img files +- Remove duplicate eslint packages, update eslint config, and resolve linting errors ## [0.18.8] diff --git a/package-lock.json b/package-lock.json index bf850c5c..26972f10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,21 +36,17 @@ "@types/gtag.js": "^0.0.4", "@types/jest": "^29.5.4", "@types/react": "^18.0.31", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", "babel-core": "^6.26.3", "babel-jest": "^26.6.3", "babel-preset-env": "^1.7.0", "babel-preset-react": "^6.24.1", - "eslint": "^7.15.0", - "eslint-config-next": "^13.4.7", + "eslint": "^8.57.0", + "eslint-config-next": "^15.0.3", "eslint-config-prettier": "^7.0.0", "eslint-plugin-jest-dom": "5.4.0", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-testing-library": "^3.10.1", + "eslint-plugin-testing-library": "^6.4.0", "jest": "^29.6.4", "jest-environment-jsdom": "^29.6.4", "msw": "^2.2.3", @@ -2635,49 +2631,61 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -2693,13 +2701,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "engines": { - "node": ">= 4" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { @@ -2714,6 +2725,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@grpc/grpc-js": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz", @@ -2744,24 +2764,37 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", "dev": true }, @@ -4619,33 +4652,28 @@ "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.6.tgz", - "integrity": "sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.3.tgz", + "integrity": "sha512-3Ln/nHq2V+v8uIaxCR6YfYo7ceRgZNXfTd3yW1ukTaFbO+/I8jNakrjYWODvG9BuR2v5kgVtH/C8r0i11quOgw==", "dev": true, "dependencies": { - "glob": "7.1.7" + "fast-glob": "3.3.1" } }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.6.0" } }, "node_modules/@next/swc-darwin-arm64": { @@ -4818,6 +4846,15 @@ "node": ">= 8" } }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@nypl/design-system-react-components": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@nypl/design-system-react-components/-/design-system-react-components-3.1.1.tgz", @@ -7347,6 +7384,12 @@ } } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", @@ -8011,9 +8054,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/form-data": { "version": "0.0.33", @@ -8252,32 +8295,31 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -8285,75 +8327,27 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", + "node_modules/@typescript-eslint/parser": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -8361,152 +8355,110 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "node_modules/@typescript-eslint/types": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -8522,54 +8474,38 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.14.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -8581,6 +8517,12 @@ "resolved": "https://registry.npmjs.org/@tyriar/fibonacci-heap/-/fibonacci-heap-2.0.9.tgz", "integrity": "sha512-bYuSNomfn4hu2tPiDN+JZtnzCpSpbJ/PNeulmocDy3xN2X5OkJL65zo6rPZp65cPPhLF9vfT/dgE+RtFRCSxOA==" }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", @@ -8762,10 +8704,9 @@ "dev": true }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -8783,18 +8724,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -8816,18 +8745,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-walk/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -8863,15 +8780,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -9215,15 +9123,6 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -9276,12 +9175,12 @@ } }, "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" } }, "node_modules/babel-code-frame": { @@ -11239,9 +11138,9 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -11687,15 +11586,15 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -11805,19 +11704,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -12116,80 +12002,80 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "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", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.6.tgz", - "integrity": "sha512-o8pQsUHTo9aHqJ2YiZDym5gQAMRf7O2HndHo/JZeY7TDD+W4hk6Ma8Vw54RHiBeb7OWWO5dPirQB+Is/aVQ7Kg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.3.tgz", + "integrity": "sha512-IGP2DdQQrgjcr4mwFPve4DrCqo7CVVez1WoYY47XwKSrYO4hC0Dlb+iJA60i0YfICOzgNADIb8r28BpQ5Zs0wg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.5.6", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "@next/eslint-plugin-next": "15.0.3", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { @@ -12231,17 +12117,18 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", "is-glob": "^4.0.3" }, "engines": { @@ -12252,13 +12139,22 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -12282,34 +12178,36 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -12321,18 +12219,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-jest-dom": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.4.0.tgz", @@ -12358,42 +12244,50 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", - "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "dependencies": { - "aria-query": "~5.1.3", + "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "^4.9.1", - "axobject-query": "~3.1.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/eslint-plugin-prettier": { @@ -12450,27 +12344,15 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { @@ -12491,63 +12373,151 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", - "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.4.0.tgz", + "integrity": "sha512-yeWF+YgCgvNyPNI9UKnG0FjeE2sk93N/3lsKqcmR8dSfeXJwFT5irnWo7NjLf152HkRzfoFjh3LsBUrhvFz4eA==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "^3.10.1" + "@typescript-eslint/utils": "^5.62.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0", + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", "npm": ">=6" }, "peerDependencies": { - "eslint": "^5 || ^6 || ^7" + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-testing-library/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">=4" + "node": ">=4.0" } }, "node_modules/eslint-visitor-keys": { @@ -12562,15 +12532,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12586,6 +12547,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -12620,13 +12587,60 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/globals": { @@ -12644,25 +12658,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/supports-color": { @@ -12690,26 +12725,20 @@ } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -13105,12 +13134,6 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true - }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -13451,12 +13474,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -13576,9 +13593,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", - "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -14166,17 +14183,6 @@ "module-details-from-path": "^1.0.3" } }, - "node_modules/import-in-the-middle/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/import-in-the-middle/node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", @@ -14377,6 +14383,27 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", + "dev": true, + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -14408,9 +14435,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, @@ -18278,18 +18305,6 @@ } } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/jsdom/node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -18555,12 +18570,6 @@ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, "node_modules/log4js": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", @@ -19147,12 +19156,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -20820,18 +20823,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", @@ -20920,15 +20911,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-in-the-middle": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", @@ -21705,56 +21687,6 @@ "node": ">=0.10.0" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -22128,13 +22060,17 @@ "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==" }, "node_modules/string.prototype.includes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", - "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/string.prototype.matchall": { @@ -22415,44 +22351,6 @@ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -22629,18 +22527,6 @@ "node": ">= 10.13.0" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -22928,6 +22814,18 @@ "node": ">= 14.0.0" } }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -22971,18 +22869,6 @@ } } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -23450,12 +23336,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -23663,18 +23543,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack/node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", diff --git a/package.json b/package.json index 3aee8fcc..e0dc1b95 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,7 @@ "start:newrelic": "NODE_OPTIONS='-r @newrelic/next' next start", "test": "jest", "test:watch": "jest --watch", - "lint": "eslint --ignore-path .gitignore '*/**/*.{ts,tsx}'", - "lint:fix": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix --ignore-path .gitignore", + "lint": "next lint --fix", "cucumber": "NODE_OPTIONS='--experimental-loader ts-node/esm' cucumber-js", "playwright": "playwright test" }, @@ -43,21 +42,17 @@ "@types/gtag.js": "^0.0.4", "@types/jest": "^29.5.4", "@types/react": "^18.0.31", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", "babel-core": "^6.26.3", "babel-jest": "^26.6.3", "babel-preset-env": "^1.7.0", "babel-preset-react": "^6.24.1", - "eslint": "^7.15.0", - "eslint-config-next": "^13.4.7", + "eslint": "^8.57.0", + "eslint-config-next": "^15.0.3", "eslint-config-prettier": "^7.0.0", "eslint-plugin-jest-dom": "5.4.0", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-testing-library": "^3.10.1", + "eslint-plugin-testing-library": "^6.4.0", "jest": "^29.6.4", "jest-environment-jsdom": "^29.6.4", "msw": "^2.2.3", diff --git a/src/__tests__/Search.test.tsx b/src/__tests__/Search.test.tsx index 8bd0c899..acdba701 100644 --- a/src/__tests__/Search.test.tsx +++ b/src/__tests__/Search.test.tsx @@ -17,8 +17,8 @@ import { FilterFormatTests } from "./componentHelpers/FilterFormats"; import { findFiltersForField } from "../util/SearchQueryUtils"; import filterFields from "../constants/filters"; import mockRouter from "next-router-mock"; +import { searchResults } from "./fixtures/SearchResultFixture"; -const searchResults: ApiSearchResult = require("./fixtures/results-list.json"); const searchQuery: SearchQuery = { queries: [{ field: SearchField.Keyword, query: "Animal Crossing" }], }; @@ -174,7 +174,7 @@ describe("Renders Search Results Page", () => { name: "Available Online", }); await userEvent.click(modalCheckbox); - expect(modalCheckbox).not.toBeChecked; + expect(modalCheckbox).not.toBeChecked(); expect(mockRouter).toMatchObject({ pathname: "/search", query: { @@ -495,7 +495,7 @@ describe("Renders Search Results Page", () => { }); test("Does not show download link", () => { // The found `download` link is from the first result - expect(screen.getAllByText("Download PDF")[1]).not.toBeDefined(); + expect(screen.queryAllByText("Download PDF")[1]).not.toBeDefined(); }); test("Shows 'read online' as link", () => { expect( diff --git a/src/__tests__/componentHelpers/FilterYears.tsx b/src/__tests__/componentHelpers/FilterYears.tsx index e5d2862a..3e0b4f83 100644 --- a/src/__tests__/componentHelpers/FilterYears.tsx +++ b/src/__tests__/componentHelpers/FilterYears.tsx @@ -1,4 +1,3 @@ -import React from "react"; import { screen, within } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { Filter } from "~/src/types/SearchQuery"; diff --git a/src/__tests__/fixtures/SearchQueryFixture.ts b/src/__tests__/fixtures/SearchQueryFixture.ts new file mode 100644 index 00000000..da5c3278 --- /dev/null +++ b/src/__tests__/fixtures/SearchQueryFixture.ts @@ -0,0 +1,16 @@ +import { ApiSearchQuery } from "~/src/types/SearchQuery"; + +export const searchQuery: ApiSearchQuery = { + query: 'keyword:"Civil War" OR Lincoln,author:last, first', + filter: "language:Spanish,startYear:1800,endYear:2000", + sort: "title:asc", + size: 20, + page: 3, + showAll: "true", +}; + +export const emptySearchQuery: ApiSearchQuery = { + filter: "language:english", + page: 0, + query: "", +}; diff --git a/src/__tests__/fixtures/SearchResultFixture.ts b/src/__tests__/fixtures/SearchResultFixture.ts new file mode 100644 index 00000000..fe07d3cd --- /dev/null +++ b/src/__tests__/fixtures/SearchResultFixture.ts @@ -0,0 +1,621 @@ +import { ApiSearchResult } from "~/src/types/SearchQuery"; + +export const searchResults: ApiSearchResult = { + data: { + facets: { + formats: [ + { + count: 6, + value: "text/html", + }, + { + count: 6, + value: "application/pdf", + }, + ], + languages: [ + { + count: 6, + value: "English", + }, + ], + }, + paging: { + currentPage: 1, + firstPage: 1, + lastPage: 3, + nextPage: 2, + previousPage: null, + recordsPerPage: 10, + }, + totalWorks: 26, + works: [ + { + alt_titles: ["Lungs of the alligator"], + authors: [ + { + lcnaf: "", + name: "Nook, Tammy", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Timmy", + primary: "true", + viaf: "", + }, + ], + contributors: [], + dates: null, + edition_count: 3, + editions: [ + { + edition: null, + edition_id: 1453292, + edition_statement: null, + extent: null, + items: [ + { + content_type: "ebook", + contributors: [ + { + lcnaf: "", + name: "University of Illinois at Urbana-Champaign", + roles: ["provider", "responsible"], + viaf: "", + }, + { + lcnaf: "", + name: "Google", + roles: ["digitizer"], + viaf: "", + }, + ], + drm: null, + item_id: 1956736, + links: [ + { + link_id: 3330416, + mediaType: "text/html", + url: "test-link-url-2", + flags: { + catalog: false, + download: false, + reader: false, + embed: true, + }, + }, + { + link_id: 3330415, + mediaType: "application/pdf", + url: "test-link-url-3", + flags: { + catalog: false, + download: true, + reader: false, + }, + }, + ], + location: null, + measurements: null, + modified: null, + rights: [ + { + license: "public_domain", + rightsStatement: "Public Domain", + source: "hathitrust", + }, + ], + source: "hathitrust", + }, + ], + languages: [ + { + iso_2: "en", + iso_3: "eng", + language: "English", + }, + { + iso_2: "es", + iso_3: "esp", + language: "Spanish", + }, + ], + links: [ + { + link_id: 1614426, + mediaType: "image/jpeg", + url: "test-cover-2", + flags: { + catalog: false, + download: false, + reader: false, + }, + }, + ], + publication_date: "1915", + publication_place: "Island Getaway", + publishers: [ + { + lcnaf: "", + name: "Nook Industries", + viaf: "", + }, + ], + summary: null, + table_of_contents: null, + title: "Alligator book", + volume: null, + work_uuid: "15a4aeb9-e9fb-43d8-b7f0-4e4a43e415ef", + }, + ], + languages: [ + { + iso_2: "en", + iso_3: "eng", + language: "English", + }, + ], + measurements: [], + medium: null, + series: null, + series_position: null, + sub_title: "Cute Tables Subtitle", + subjects: [ + { + authority: "fast", + controlNo: "(OCoLC)fst00805630", + heading: "Embryology", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst00908425", + heading: "Alligators", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst00805630", + heading: "American alligator", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst01003744", + heading: "Lungs", + }, + ], + title: "Happy Home Companion: Cute Tables", + uuid: "test-uuid-1", + }, + { + alt_titles: [], + authors: [ + { + lcnaf: "", + name: "display author", + primary: "", + viaf: "12345", + }, + ], + contributors: [], + dates: null, + edition_count: 1, + editions: [ + { + edition: null, + edition_id: 1172733, + edition_statement: null, + extent: null, + items: [ + { + content_type: "ebook", + contributors: null, + drm: null, + item_id: 1579612, + links: null, + location: null, + measurements: null, + modified: null, + rights: null, + source: "hathitrust", + }, + ], + languages: null, + links: [], + publication_date: null, + publication_place: null, + publishers: [], + summary: null, + table_of_contents: null, + title: + "The alligator and its allies, by Albert M. Reese ... with 62 figures and 28 plates", + volume: null, + work_uuid: "99ca3bdd-72c5-4a71-8446-c963f985bd04", + }, + ], + languages: [], + measurements: [], + medium: null, + series: null, + series_position: null, + sub_title: null, + subjects: [], + title: + "The alligator and its allies, by Albert M. Reese ... with 62 figures and 28 plates", + uuid: "test-uuid-2", + }, + { + alt_titles: ["Lungs of the alligator"], + authors: [ + { + lcnaf: "", + name: "Nook, Tom", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom1", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom2", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom3", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom4", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom5", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom6", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom7", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom8", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom9", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom10", + primary: "", + viaf: "", + }, + { + lcnaf: "", + name: "Nook, Tom11", + primary: "", + viaf: "", + }, + ], + contributors: [], + dates: null, + edition_count: 5, + editions: [ + { + edition: null, + edition_id: 1453292, + edition_statement: null, + extent: null, + items: [ + { + content_type: "ebook", + contributors: [ + { + lcnaf: "", + name: "University of Illinois at Urbana-Champaign", + roles: ["provider", "responsible"], + viaf: "", + }, + { + lcnaf: "", + name: "Google", + roles: ["digitizer"], + viaf: "", + }, + ], + drm: null, + item_id: 1956736, + links: [ + { + link_id: 3234, + mediaType: "text/html", + url: "test-link-url-5", + flags: { + catalog: false, + download: false, + reader: false, + embed: true, + }, + }, + ], + location: null, + measurements: null, + modified: null, + rights: [ + { + license: "public_domain", + rightsStatement: + "Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain", + source: "hathitrust", + }, + { + license: "public_domain", + rightsStatement: "Public Domain 2", + source: "hathitrust", + }, + { + license: "public_domain", + rightsStatement: "Public Domain 3", + source: "hathitrust", + }, + ], + source: "hathitrust", + }, + { + content_type: "ebook", + contributors: [ + { + lcnaf: "", + name: "University of Illinois at Urbana-Champaign", + roles: ["provider", "responsible"], + viaf: "", + }, + { + lcnaf: "", + name: "Google", + roles: ["digitizer"], + viaf: "", + }, + ], + drm: null, + item_id: 1956736, + links: [ + { + link_id: 3330415, + mediaType: "application/pdf", + url: "test-link-url-4", + flags: { + catalog: false, + download: true, + reader: false, + embed: false, + }, + }, + ], + location: null, + measurements: null, + modified: null, + rights: [ + { + license: "public_domain", + rightsStatement: "Public Domain 2", + source: "hathitrust", + }, + { + license: "public_domain", + rightsStatement: "Public Domain 3", + source: "hathitrust", + }, + ], + source: "hathitrust", + }, + ], + languages: [ + { + iso_2: "en", + iso_3: "eng", + language: "Lang1", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang2", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang3", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang4", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang5", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang6", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang7", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang8", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang9", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang10", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang11", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang12", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang13", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang14", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang15", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang16", + }, + { + iso_2: "sv", + iso_3: "swe", + language: "Lang17", + }, + ], + links: [ + { + link_id: 1614426, + mediaType: "image/jpeg", + url: "test-cover-2", + flags: { + catalog: false, + download: false, + reader: false, + }, + }, + ], + publication_date: "1945", + publication_place: + "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu", + publishers: [ + { + lcnaf: "", + name: "Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries ", + viaf: "", + }, + { + lcnaf: "", + name: "Nook Industries 2", + viaf: "", + }, + { + lcnaf: "", + name: "Nook Industries 3", + viaf: "", + }, + { + lcnaf: "", + name: "Nook Industries 4", + viaf: "", + }, + { + lcnaf: "", + name: "Nook Industries 5", + viaf: "", + }, + ], + summary: null, + table_of_contents: null, + title: "Alligator book", + volume: null, + work_uuid: "15a4aeb9-e9fb-43d8-b7f0-4e4a43e415ef", + }, + ], + languages: [ + { + iso_2: "en", + iso_3: "eng", + language: "English", + }, + { + iso_2: "es", + iso_3: "esp", + language: "Spanish", + }, + ], + measurements: [], + medium: null, + series: null, + series_position: null, + sub_title: + "super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long Subtitle", + subjects: [ + { + authority: "fast", + controlNo: "(OCoLC)fst00805630", + heading: "Embryology", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst00908425", + heading: "Alligators", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst00805630", + heading: "American alligator", + }, + { + authority: "fast", + controlNo: "(OCoLC)fst01003744", + heading: "Lungs", + }, + ], + title: + "Happy Home Companion: super super super supersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersuper long title", + uuid: "test-uuid-3", + }, + ], + }, + responseType: "searchResponse", + status: 200, + timestamp: "Wed, 14 Apr 2021 17:12:23 GMT", +}; diff --git a/src/__tests__/fixtures/results-list.json b/src/__tests__/fixtures/results-list.json deleted file mode 100644 index 16420e9d..00000000 --- a/src/__tests__/fixtures/results-list.json +++ /dev/null @@ -1,656 +0,0 @@ -{ - "data": { - "facets": { - "formats": [ - { - "count": 6, - "value": "text/html" - }, - { - "count": 6, - "value": "application/pdf" - } - ], - "languages": [ - { - "count": 6, - "value": "English" - } - ] - }, - "paging": { - "currentPage": 1, - "firstPage": 1, - "lastPage": 3, - "nextPage": 2, - "previousPage": null, - "recordsPerPage": 10 - }, - "totalWorks": 26, - "works": [ - { - "alt_titles": ["Lungs of the alligator"], - "authors": [ - { - "lcnaf": "", - "name": "Nook, Tammy", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Timmy", - "primary": "true", - "viaf": "" - } - ], - "contributors": [], - "dates": null, - "edition_count": 3, - "editions": [ - { - "alt_titles": ["Lungs of the alligator"], - "contributors": [], - "dates": [ - { - "date": "1915", - "type": "publication_date" - }, - { - "date": "1915", - "type": "copyright_date" - } - ], - "edition": null, - "edition_id": 1453292, - "edition_statement": null, - "extent": null, - "items": [ - { - "content_type": "ebook", - "contributors": [ - { - "lcnaf": "", - "name": "University of Illinois at Urbana-Champaign", - "roles": ["provider", "responsible"], - "viaf": "" - }, - { - "lcnaf": "", - "name": "Google", - "roles": ["digitizer"], - "viaf": "" - } - ], - "drm": null, - "item_id": 1956736, - "links": [ - { - "link_id": 3330416, - "mediaType": "text/html", - "url": "test-link-url-2", - "flags": { - "catalog": false, - "download": false, - "reader": false, - "embed": true - } - }, - { - "link_id": 3330415, - "mediaType": "application/pdf", - "url": "test-link-url-3", - "flags": { - "catalog": false, - "download": true, - "reader": false - } - } - ], - "location": null, - "measurements": null, - "modified": null, - "rights": [ - { - "license": "public_domain", - "rightsStatement": "Public Domain", - "source": "hathitrust" - } - ], - "source": "hathitrust" - } - ], - "languages": [ - { - "iso_2": "en", - "iso_3": "eng", - "language": "English" - }, - { - "iso_2": "es", - "iso_3": "esp", - "language": "Spanish" - } - ], - "links": [ - { - "link_id": 1614426, - "mediaType": "image/jpeg", - "url": "test-cover-2", - "flags": { - "catalog": false, - "download": false, - "reader": false - } - } - ], - "measurements": [ - { - "type": "government_document", - "value": "0" - } - ], - "publication_date": 1915, - "publication_place": "Island Getaway", - "publishers": [ - { - "lcnaf": "", - "name": "Nook Industries", - "viaf": "" - } - ], - "sub_title": null, - "summary": null, - "table_of_contents": null, - "title": "Alligator book", - "volume": null, - "work_uuid": "15a4aeb9-e9fb-43d8-b7f0-4e4a43e415ef" - } - ], - "languages": [ - { - "iso_2": "en", - "iso_3": "eng", - "language": "English" - } - ], - "measurements": [], - "medium": null, - "series": null, - "series_position": null, - "sub_title": "Cute Tables Subtitle", - "subjects": [ - { - "authority": "fast", - "controlNo": "(OCoLC)fst00805630", - "heading": "Embryology" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst00908425", - "heading": "Alligators" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst00805630", - "heading": "American alligator" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst01003744", - "heading": "Lungs" - } - ], - "title": "Happy Home Companion: Cute Tables", - "uuid": "test-uuid-1" - }, - { - "alt_titles": [], - "authors": [ - { - "lcnaf": "", - "name": "display author", - "primary": "", - "viaf": "12345" - } - ], - "contributors": [], - "dates": null, - "edition_count": 1, - "editions": [ - { - "alt_titles": [], - "contributors": [], - "dates": null, - "edition": null, - "edition_id": 1172733, - "edition_statement": null, - "extent": null, - "items": [ - { - "content_type": "ebook", - "contributors": null, - "drm": null, - "item_id": 1579612, - "links": null, - "location": null, - "measurements": null, - "modified": null, - "rights": null, - "source": "hathitrust" - } - ], - "languages": null, - "links": [], - "measurements": [ - { - "type": "government_document", - "value": "0" - } - ], - "publication_date": null, - "publication_place": null, - "publishers": [], - "sub_title": null, - "summary": null, - "table_of_contents": null, - "title": "The alligator and its allies, by Albert M. Reese ... with 62 figures and 28 plates", - "volume": null, - "work_uuid": "99ca3bdd-72c5-4a71-8446-c963f985bd04" - } - ], - "languages": [], - "measurements": [], - "medium": null, - "series": null, - "series_position": null, - "sub_title": null, - "subjects": [], - "title": "The alligator and its allies, by Albert M. Reese ... with 62 figures and 28 plates", - "uuid": "test-uuid-2" - }, - { - "alt_titles": ["Lungs of the alligator"], - "authors": [ - { - "lcnaf": "", - "name": "Nook, Tom", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom1", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom2", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom3", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom4", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom5", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom6", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom7", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom8", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom9", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom10", - "primary": "", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook, Tom11", - "primary": "", - "viaf": "" - } - ], - "contributors": [], - "dates": null, - "edition_count": 5, - "editions": [ - { - "alt_titles": ["Lungs of the alligator"], - "contributors": [], - "dates": [ - { - "date": "1915", - "type": "publication_date" - }, - { - "date": "1915", - "type": "copyright_date" - } - ], - "edition": null, - "edition_id": 1453292, - "edition_statement": null, - "extent": null, - "items": [ - { - "content_type": "ebook", - "contributors": [ - { - "lcnaf": "", - "name": "University of Illinois at Urbana-Champaign", - "roles": ["provider", "responsible"], - "viaf": "" - }, - { - "lcnaf": "", - "name": "Google", - "roles": ["digitizer"], - "viaf": "" - } - ], - "drm": null, - "item_id": 1956736, - "links": [ - { - "link_id": 3234, - "mediaType": "text/html", - "url": "test-link-url-5", - "flags": { - "catalog": false, - "download": false, - "reader": false, - "embed": true - } - } - ], - "location": null, - "measurements": null, - "modified": null, - "rights": [ - { - "license": "public_domain", - "rightsStatement": "Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain Public Domain", - "source": "hathitrust" - }, - { - "license": "public_domain", - "rightsStatement": "Public Domain 2", - "source": "hathitrust" - }, - { - "license": "public_domain", - "rightsStatement": "Public Domain 3", - "source": "hathitrust" - } - ], - "source": "hathitrust" - }, - { - "content_type": "ebook", - "contributors": [ - { - "lcnaf": "", - "name": "University of Illinois at Urbana-Champaign", - "roles": ["provider", "responsible"], - "viaf": "" - }, - { - "lcnaf": "", - "name": "Google", - "roles": ["digitizer"], - "viaf": "" - } - ], - "drm": null, - "item_id": 1956736, - "links": [ - { - "link_id": 3330415, - "mediaType": "application/pdf", - "url": "test-link-url-4", - "flags": { - "catalog": false, - "download": true, - "reader": false, - "embed": false - } - } - ], - "location": null, - "measurements": null, - "modified": null, - "rights": [ - { - "license": "public_domain", - "rightsStatement": "Public Domain 2", - "source": "hathitrust" - }, - { - "license": "public_domain", - "rightsStatement": "Public Domain 3", - "source": "hathitrust" - } - ], - "source": "hathitrust" - } - ], - "languages": [ - { - "iso_2": "en", - "iso_3": "eng", - "language": "Lang1" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang2" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang3" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang4" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang5" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang6" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang7" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang8" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang9" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang10" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang11" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang12" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang13" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang14" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang15" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang16" - }, - { - "iso_2": "sv", - "iso_3": "swe", - "language": "Lang17" - } - ], - "links": [ - { - "link_id": 1614426, - "mediaType": "image/jpeg", - "url": "test-cover-2" - } - ], - "measurements": [ - { - "type": "government_document", - "value": "0" - } - ], - "publication_date": 1945, - "publication_place": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu", - "publishers": [ - { - "lcnaf": "", - "name": "Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries Nook Industries ", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook Industries 2", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook Industries 3", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook Industries 4", - "viaf": "" - }, - { - "lcnaf": "", - "name": "Nook Industries 5", - "viaf": "" - } - ], - "sub_title": null, - "summary": null, - "table_of_contents": null, - "title": "Alligator book", - "volume": null, - "work_uuid": "15a4aeb9-e9fb-43d8-b7f0-4e4a43e415ef" - } - ], - "languages": [ - { - "iso_2": "en", - "iso_3": "eng", - "language": "English" - }, - { - "iso_2": "es", - "iso_3": "esp", - "language": "Spanish" - } - ], - "measurements": [], - "medium": null, - "series": null, - "series_position": null, - "sub_title": "super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long super long Subtitle", - "subjects": [ - { - "authority": "fast", - "controlNo": "(OCoLC)fst00805630", - "heading": "Embryology" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst00908425", - "heading": "Alligators" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst00805630", - "heading": "American alligator" - }, - { - "authority": "fast", - "controlNo": "(OCoLC)fst01003744", - "heading": "Lungs" - } - ], - "title": "Happy Home Companion: super super super supersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersupersuper long title", - "uuid": "test-uuid-3" - } - ] - }, - "responseType": "searchResponse", - "status": 200, - "timestamp": "Wed, 14 Apr 2021 17:12:23 GMT" -} diff --git a/src/__tests__/fixtures/search-query-missing-query.json b/src/__tests__/fixtures/search-query-missing-query.json deleted file mode 100644 index 217d5f94..00000000 --- a/src/__tests__/fixtures/search-query-missing-query.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "filters": "language:english", - "page": 0, - "per_page": 10, - "queries": [] -} diff --git a/src/__tests__/fixtures/search-query.json b/src/__tests__/fixtures/search-query.json deleted file mode 100644 index 38beab5c..00000000 --- a/src/__tests__/fixtures/search-query.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "query": "keyword:\"Civil War\" OR Lincoln,author:last, first", - "filter": "language:Spanish,startYear:1800,endYear:2000", - "sort": "title:asc", - "size": 20, - "page": 3, - "showAll": "true" -} \ No newline at end of file diff --git a/src/components/CollectionItemCard/CollectionItemCard.test.tsx b/src/components/CollectionItemCard/CollectionItemCard.test.tsx index 83abb2b6..826cb543 100644 --- a/src/components/CollectionItemCard/CollectionItemCard.test.tsx +++ b/src/components/CollectionItemCard/CollectionItemCard.test.tsx @@ -21,7 +21,7 @@ describe("Collection Item Card", () => { ).toBeInTheDocument(); }); test("Shows Read Online button", () => { - expect(screen.queryByText("Read Online")).toBeInTheDocument(); + expect(screen.getByText("Read Online")).toBeInTheDocument(); }); test("Shows cover", () => { expect(screen.getByAltText("").closest("img").src).toEqual( diff --git a/src/components/EditionCard/EditionCard.test.tsx b/src/components/EditionCard/EditionCard.test.tsx index 7056aeb4..174949d3 100644 --- a/src/components/EditionCard/EditionCard.test.tsx +++ b/src/components/EditionCard/EditionCard.test.tsx @@ -99,8 +99,8 @@ describe("Edition with EDD", () => { test("Shows Download and Read Online button when edition has both EDD and readable links", () => { render(); - expect(screen.queryByText("Download PDF")).toBeInTheDocument(); - expect(screen.queryByText("Read Online")).toBeInTheDocument(); + expect(screen.getByText("Download PDF")).toBeInTheDocument(); + expect(screen.getByText("Read Online")).toBeInTheDocument(); expect( screen.queryByText("Log in to request scan") ).not.toBeInTheDocument(); diff --git a/src/components/EditionCard/ScanAndDeliverBlurb.tsx b/src/components/EditionCard/ScanAndDeliverBlurb.tsx index c2f892bd..0dfd45cc 100644 --- a/src/components/EditionCard/ScanAndDeliverBlurb.tsx +++ b/src/components/EditionCard/ScanAndDeliverBlurb.tsx @@ -12,7 +12,7 @@ const ScanAndDeliverBlurb: React.FC = () => { > - A partial scan of this edition can be requested via NYPL's{" "} + A partial scan of this edition can be requested via NYPL's{" "} Scan and Deliver service diff --git a/src/components/EditionDetail/Edition.test.tsx b/src/components/EditionDetail/Edition.test.tsx index 9eda8ba1..c6a565ec 100644 --- a/src/components/EditionDetail/Edition.test.tsx +++ b/src/components/EditionDetail/Edition.test.tsx @@ -30,7 +30,7 @@ describe("Renders edition component when given valid edition", () => { screen.getByRole("heading", { name: breadcrumbTitles.drb }) ).toBeInTheDocument(); expect(screen.getByRole("combobox")).toHaveValue(inputTerms[0].value); - expect(screen.getByRole("textbox")).toBeInTheDocument; + expect(screen.getByRole("textbox")).toBeInTheDocument(); expect(screen.getByText("Advanced Search").closest("a").href).toContain( "/advanced-search" ); @@ -137,7 +137,7 @@ describe("All Copies Toggle", () => { const toggle = screen.getByLabelText( "Show only items currently available online" ) as HTMLInputElement; - expect(toggle).toBeInTheDocument; + expect(toggle).toBeInTheDocument(); expect(toggle).not.toBeChecked(); }); @@ -164,7 +164,7 @@ describe("All Copies Toggle", () => { const toggle = screen.getByLabelText( "Show only items currently available online" ) as HTMLInputElement; - expect(toggle).toBeInTheDocument; + expect(toggle).toBeInTheDocument(); expect(toggle).toBeChecked(); }); diff --git a/src/components/InstanceCard/InstanceCard.test.tsx b/src/components/InstanceCard/InstanceCard.test.tsx index bdac6220..48da7689 100644 --- a/src/components/InstanceCard/InstanceCard.test.tsx +++ b/src/components/InstanceCard/InstanceCard.test.tsx @@ -89,8 +89,8 @@ describe("Instance with EDD", () => { > ); - expect(screen.queryByText("Download PDF")).toBeInTheDocument(); - expect(screen.queryByText("Read Online")).toBeInTheDocument(); + expect(screen.getByText("Download PDF")).toBeInTheDocument(); + expect(screen.getByText("Read Online")).toBeInTheDocument(); expect(screen.queryByText("Log in for options")).not.toBeInTheDocument(); expect(screen.queryByText("Request Scan")).not.toBeInTheDocument(); }); diff --git a/src/components/Landing/Landing.tsx b/src/components/Landing/Landing.tsx index 4860fd3f..162b8539 100644 --- a/src/components/Landing/Landing.tsx +++ b/src/components/Landing/Landing.tsx @@ -79,7 +79,7 @@ const LandingPage: React.FC<{ collections?: Opds2Feed }> = ({ id="primary-hero" color="ui.black" > - Search the World's Research Collections + Search the World's Research Collections } subHeaderText={subHeader} diff --git a/src/components/Work/Work.test.tsx b/src/components/Work/Work.test.tsx index abb00858..46428cd4 100644 --- a/src/components/Work/Work.test.tsx +++ b/src/components/Work/Work.test.tsx @@ -28,7 +28,7 @@ describe("Renders Work component when given valid work", () => { screen.getByRole("heading", { name: breadcrumbTitles.drb }) ).toBeInTheDocument(); expect(screen.getByRole("combobox")).toHaveValue(inputTerms[0].value); - expect(screen.getByRole("textbox")).toBeInTheDocument; + expect(screen.getByRole("textbox")).toBeInTheDocument(); expect(screen.getByText("Advanced Search").closest("a").href).toContain( "/advanced-search" ); @@ -99,7 +99,7 @@ describe("Edition Cards and toggles", () => { const toggle = screen.getByLabelText( "Show only items currently available online" ) as HTMLInputElement; - expect(toggle).toBeInTheDocument; + expect(toggle).toBeInTheDocument(); expect(toggle).not.toBeChecked(); }); @@ -126,7 +126,7 @@ describe("Edition Cards and toggles", () => { const toggle = screen.getByLabelText( "Show only items currently available online" ) as HTMLInputElement; - expect(toggle).toBeInTheDocument; + expect(toggle).toBeInTheDocument(); expect(toggle).not.toBeChecked(); }); @@ -153,7 +153,7 @@ describe("Edition Cards and toggles", () => { const toggle = screen.getByLabelText( "Show only items currently available online" ) as HTMLInputElement; - expect(toggle).toBeInTheDocument; + expect(toggle).toBeInTheDocument(); expect(toggle).toBeChecked(); }); diff --git a/src/components/WorkDetailDefinitionList/WorkDetailDefinitionList.tsx b/src/components/WorkDetailDefinitionList/WorkDetailDefinitionList.tsx index 976e3057..6b835fe3 100644 --- a/src/components/WorkDetailDefinitionList/WorkDetailDefinitionList.tsx +++ b/src/components/WorkDetailDefinitionList/WorkDetailDefinitionList.tsx @@ -2,7 +2,7 @@ import React from "react"; import { List } from "@nypl/design-system-react-components"; import Link from "~/src/components/Link/Link"; import { unique, flattenDeep, uniqueAndSortByFrequency } from "~/src/util/Util"; -import { Language, Subject } from "~/src/types/DataModel"; +import { Language, Subject, WorkEdition } from "~/src/types/DataModel"; import { ApiWork } from "~/src/types/WorkQuery"; import AuthorsList from "../AuthorsList/AuthorsList"; @@ -13,7 +13,7 @@ const getLanguagesForWork = (work: ApiWork) => uniqueAndSortByFrequency( flattenDeep( work.editions.map( - (edition: any) => + (edition: WorkEdition) => edition.languages && edition.languages.length && edition.languages.map( diff --git a/src/lib/adobe/Analytics.test.ts b/src/lib/adobe/Analytics.test.ts index 0e00d92b..8be21241 100644 --- a/src/lib/adobe/Analytics.test.ts +++ b/src/lib/adobe/Analytics.test.ts @@ -1,4 +1,3 @@ -import React from "react"; import { SITE_SECTION } from "../../constants/analytics"; import { documentTitles } from "../../constants/labels"; import { trackCtaClick, trackPageview } from "./Analytics"; diff --git a/src/lib/newrelic/NewRelic.tsx b/src/lib/newrelic/NewRelic.tsx index b170c46b..631025b6 100644 --- a/src/lib/newrelic/NewRelic.tsx +++ b/src/lib/newrelic/NewRelic.tsx @@ -66,6 +66,7 @@ export function log(error: Error, errorInfo: string) { if (typeof window !== "undefined") { window.newrelic.noticeError(error, { errorInfo: errorInfo }); } else { + // eslint-disable-next-line @typescript-eslint/no-require-imports const newrelic = require("newrelic"); newrelic.noticeError(error, { errorInfo: errorInfo }); } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index f01ee5c7..c050a0f8 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -15,6 +15,7 @@ import { getQueryDecodedString } from "../util/SearchQueryUtils"; import NewRelicSnippet from "../lib/newrelic/NewRelic"; import ErrorBoundary from "../components/ErrorBoundary"; import { FeedbackProvider } from "../context/FeedbackContext"; +import { ParsedUrlQuery } from "querystring"; if (process.env.APP_ENV === "testing") { const { initMocks } = await import("mocks"); @@ -34,7 +35,7 @@ function isServerRendered(): boolean { * @param query the router query * @returns the title of the page (as shown in browser tab) */ -const setTitle = (query: any) => { +const setTitle = (query: ParsedUrlQuery) => { if (query.workId) { return documentTitles.workItem; } else if (query.editionId) { @@ -50,7 +51,7 @@ const setTitle = (query: any) => { } }; -const sendAnalytics = (query: any, pathname: string) => { +const sendAnalytics = (query: ParsedUrlQuery, pathname: string) => { if (query.workId) { trackPageview(pageNames.workItem + query.workId); } else if (query.editionId) { diff --git a/src/pages/read/[linkId].tsx b/src/pages/read/[linkId].tsx index 9f5a172e..ed1a799a 100644 --- a/src/pages/read/[linkId].tsx +++ b/src/pages/read/[linkId].tsx @@ -1,6 +1,7 @@ import React from "react"; import ReaderLayout from "~/src/components/ReaderLayout/ReaderLayout"; import { readFetcher, proxyUrlConstructor } from "~/src/lib/api/SearchApi"; +import { log } from "~/src/lib/newrelic/NewRelic"; import { LinkResult } from "~/src/types/LinkQuery"; import { getBackUrl } from "~/src/util/LinkUtils"; import Error from "../_error"; @@ -21,6 +22,7 @@ export async function getServerSideProps(context: any) { }, }; } catch (e) { + log(e, "Failed to fetch link"); return { notFound: true, }; diff --git a/src/util/__tests__/apiConversion.test.ts b/src/util/__tests__/apiConversion.test.ts index 3c9f758d..03f7b95a 100644 --- a/src/util/__tests__/apiConversion.test.ts +++ b/src/util/__tests__/apiConversion.test.ts @@ -6,8 +6,10 @@ import { toApiQuery, toSearchQuery } from "../apiConversion"; // Use require instead of import so that it will cast correctly to `ApiSearchQuery` // https://github.com/microsoft/TypeScript/issues/11152 -const apiQuery: ApiSearchQuery = require("../../__tests__/fixtures/search-query.json"); -const emptyApiQuery: ApiSearchQuery = require("../../__tests__/fixtures/search-query-missing-query.json"); +import { + searchQuery as apiQuery, + emptySearchQuery, +} from "../../__tests__/fixtures/SearchQueryFixture"; /** * Unit tests for `ApiConversion.ts` @@ -73,7 +75,7 @@ describe("Converting api query to search query", () => { test("Throws error when empty api query is passed", () => { expect(() => { - toSearchQuery(emptyApiQuery); + toSearchQuery(emptySearchQuery); }).toThrowError("Mising param `queries` in search request"); }); diff --git a/src/util/apiConversion.ts b/src/util/apiConversion.ts index 238173fa..702f8578 100644 --- a/src/util/apiConversion.ts +++ b/src/util/apiConversion.ts @@ -153,7 +153,7 @@ export const toApiQuery = (searchQuery: SearchQuery): ApiSearchQuery => { sort: toApiSorts(searchQuery.sort), }), ...(searchQuery.showAll !== undefined && - typeof searchQuery.showAll !== undefined && + typeof searchQuery.showAll !== "undefined" && searchQuery.showAll !== SearchQueryDefaults.showAll && { showAll: searchQuery.showAll.toString(), }),