From 283a4962c23c9414759351ff2f45d6c5196a9ebb Mon Sep 17 00:00:00 2001 From: Splines <37160523+Splines@users.noreply.github.com> Date: Thu, 4 Jan 2024 22:44:56 +0100 Subject: [PATCH] Reconfigure ESLint with flat config (#577) * Upgrade ESLint configuration to new flat config We sadly have to get rid of cypress for the moment. * Run linter with `--no-warn-ignored` flag See this answer: https://stackoverflow.com/a/77758970/9655481 for the background behind this change. * Also lint the ESLint config file itself * Get rid of `--ignore-path .gitignore` --- .eslintrc.js | 87 --------------- .github/workflows/linter.yml | 10 +- .vscode/settings.json | 2 + eslint.config.mjs | 86 +++++++++++++++ package.json | 6 +- yarn.lock | 203 +++++++++++++++++------------------ 6 files changed, 196 insertions(+), 198 deletions(-) delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mjs diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index da7dbdaeb..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,87 +0,0 @@ -// Starting with v9, this config will be deprecated in favor of the new -// configuration files [1]. @stylistic is already ready for the new "flat config", -// when it's time, copy the new config from [2]. -// [1] https://eslint.org/docs/latest/use/configure/configuration-files-new -// [2] https://eslint.style/guide/config-presets#configuration-factory - -// Stylistic Plugin for ESLint -// see the rules in [3] and [4]. -// [3] https://eslint.style/packages/js#rules -// [4] https://eslint.org/docs/rules/ -const stylistic = require("@stylistic/eslint-plugin"); - -const customizedStylistic = stylistic.configs.customize({ - "indent": 2, - "jsx": false, - "quote-props": "always", - "semi": "always", - "brace-style": "1tbs", -}); - -const cypressRules = { - "cypress/no-assigning-return-values": "error", - "cypress/no-unnecessary-waiting": "off", // TODO: fix this issue - "cypress/assertion-before-screenshot": "warn", - "cypress/no-force": "warn", - "cypress/no-async-tests": "error", - "cypress/no-pause": "error", -}; - -const ignoreFilesWithSprocketRequireSyntax = [ - "app/assets/javascripts/application.js", - "app/assets/config/manifest.js", - "app/assets/javascripts/edit_clicker_assets.js", - "app/assets/javascripts/show_clicker_assets.js", - "app/assets/javascripts/geogebra_assets.js", - "vendor/assets/javascripts/thredded_timeago.js", -]; - -const customGlobals = { - TomSelect: "readable", - bootstrap: "readable", - - // Rails globals - Routes: "readable", - App: "readable", - ActionCable: "readable", - - // Common global methods - initBootstrapPopovers: "readable", -}; - -module.exports = { - root: true, - parserOptions: { - ecmaVersion: 2022, - sourceType: "module", - }, - env: { - "node": true, - "browser": true, - "jquery": true, - "cypress/globals": true, - }, - extends: [ - "eslint:recommended", - // Allow linting of ERB files, see https://github.com/Splines/eslint-plugin-erb - "plugin:erb/recommended", - ], - globals: customGlobals, - plugins: ["@stylistic", "erb", "cypress"], - rules: { - ...customizedStylistic.rules, - "no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], - ...cypressRules, - // see https://github.com/eslint-stylistic/eslint-stylistic/issues/254 - "@stylistic/quotes": ["error", "double", { avoidEscape: true }], - }, - ignorePatterns: [ - "node_modules/", - "pdfcomprezzor/", - "tmp/", - "public/packs/", - "public/packs-test/", - "public/uploads/", - ...ignoreFilesWithSprocketRequireSyntax, - ], -}; diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 620283737..e40132f75 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -49,7 +49,8 @@ jobs: id: js-changed uses: ./.github/actions/changed_files/ with: - file-extensions: \.js$|\.js.erb$ + # .(mjs is only used for eslint.config.mjs as of January 2024) + file-extensions: \.js$|\.mjs$|\.js.erb$ - name: Setup Node.js if: ${{ steps.js-changed.outputs.changed-files != ''}} @@ -62,8 +63,13 @@ jobs: if: ${{ steps.js-changed.outputs.changed-files != ''}} run: yarn install + # with ESLint v9 --ignore-path does not exist anymore + # see [1] for the PR. However, my feeling for this is totally reflected + # by [2]. Hopefully, it will come back in future versions. + # [1] https://github.com/eslint/eslint/pull/16355 + # [2] https://github.com/eslint/eslint/issues/16264#issuecomment-1292858747 - name: Run ESLint if: ${{ steps.js-changed.outputs.changed-files != ''}} run: | echo "🚨 Running ESLint version: $(yarn run --silent eslint --version)" - yarn run eslint --ignore-path .gitignore --max-warnings 0 ${{ steps.js-changed.outputs.changed-files }} + yarn run eslint --max-warnings 0 --no-warn-ignored ${{ steps.js-changed.outputs.changed-files }} diff --git a/.vscode/settings.json b/.vscode/settings.json index b43e16464..21983ff1e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,5 @@ { + "editor.formatOnSave": false, // it still autosaves with the options below ////////////////////////////////////// // JS (ESLint) ////////////////////////////////////// @@ -12,6 +13,7 @@ "source.fixAll.eslint": "explicit" }, "eslint.format.enable": true, // use ESLint as formatter + "eslint.experimental.useFlatConfig": true, // this disables VSCode built-in formatter (instead we want to use ESLint) "javascript.validate.enable": false, ////////////////////////////////////// diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..f037398b8 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,86 @@ +// Starting with v9, this config will be deprecated in favor of the new +// configuration files [1]. @stylistic is already ready for the new "flat config", +// when it's time, copy the new config from [2]. +// [1] https://eslint.org/docs/latest/use/configure/configuration-files-new +// [2] https://eslint.style/guide/config-presets#configuration-factory + +// Stylistic Plugin for ESLint +// see the rules in [3] and [4]. +// [3] https://eslint.style/packages/js#rules +// [4] https://eslint.org/docs/rules/ +import js from "@eslint/js"; +import stylistic from "@stylistic/eslint-plugin"; +import erb from "eslint-plugin-erb"; +import globals from "globals"; + +const ignoreFilesWithSprocketRequireSyntax = [ + "app/assets/javascripts/application.js", + "app/assets/config/manifest.js", + "app/assets/javascripts/edit_clicker_assets.js", + "app/assets/javascripts/show_clicker_assets.js", + "app/assets/javascripts/geogebra_assets.js", + "vendor/assets/javascripts/thredded_timeago.js", +]; + +const customGlobals = { + TomSelect: "readable", + bootstrap: "readable", + + // Rails globals + Routes: "readable", + App: "readable", + ActionCable: "readable", + + // Common global methods + initBootstrapPopovers: "readable", +}; + +// We don't have cypress linting yet, as the Cypress ESLint plugin +// doesn't support the new flat config yet +// https://github.com/cypress-io/eslint-plugin-cypress/issues/146 + +export default [ + js.configs.recommended, + // Allow linting of ERB files, see https://github.com/Splines/eslint-plugin-erb + erb.configs.recommended, + // Globally ignore the following files + { + ignores: [ + "node_modules/", + "pdfcomprezzor/", + "tmp/", + "public/packs/", + "public/packs-test/", + "public/uploads/", + "public/pdfcomprezzor/", + "spec/cypress/", + ...ignoreFilesWithSprocketRequireSyntax, + ], + }, + { + plugins: { + "@stylistic": stylistic, + }, + rules: { + ...stylistic.configs.customize({ + "indent": 2, + "jsx": false, + "quote-props": "always", + "semi": "always", + "brace-style": "1tbs", + }).rules, + "@stylistic/quotes": ["error", "double", { avoidEscape: true }], + "no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], + }, + languageOptions: { + ecmaVersion: 2022, + sourceType: "module", + globals: { + ...customGlobals, + ...globals.browser, + ...globals.jquery, + ...globals.node, + }, + }, + }, +]; diff --git a/package.json b/package.json index 0ffb3fcf9..1b2cc12ee 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ }, "devDependencies": { "@stylistic/eslint-plugin": "^1.5.0", - "eslint": "^8.55.0", - "eslint-plugin-cypress": "^2.15.1", - "eslint-plugin-erb": "^1.1.0" + "eslint": "^9.0.0-alpha.0", + "eslint-plugin-erb": "^2.0.0", + "globals": "^13.24.0" } } diff --git a/yarn.lock b/yarn.lock index a32b4e906..b58fa340d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1018,10 +1018,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== +"@eslint/eslintrc@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.0.tgz#eac0198d2dd82d11356e5bbb8a9bf0fda08d5ea0" + integrity sha512-R8p3jN1kdWvFRiRfgpUxZ4PMgfJJFt6NuLGDnnqLb7RKmsd5Xa0KqRMjmaqRO7e38ZbG/9zKPgDjeJeqsDofSA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1033,10 +1033,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.55.0": - version "8.55.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6" - integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA== +"@eslint/js@9.0.0-alpha.0": + version "9.0.0-alpha.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.0.0-alpha.0.tgz#91f1b478e0548516dce99cd57f66d6441483e00d" + integrity sha512-SsmCfB6P+1D7RbUjWxi206LMt3jmiVXolUHIgR2ZeJGKyXdNtXY6t3yl8mkfO1XuCJM9iGHMKzQm9H52UyuSpQ== "@gar/promisify@^1.0.1": version "1.1.3" @@ -1193,50 +1193,48 @@ webpack-cli "^3.3.12" webpack-sources "^1.4.3" -"@stylistic/eslint-plugin-js@1.5.0", "@stylistic/eslint-plugin-js@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.5.0.tgz#d502d2470f114a4a2b682930ade6ca4eeebaa9f8" - integrity sha512-TuGQv1bsIshkbJUInCewp4IUWy24W5RFiVNMV0quPSkuZ8gsYoqq6kLHvvaxpjxN9TvwSoOIwnhgrYKei2Tgcw== +"@stylistic/eslint-plugin-js@1.5.3", "@stylistic/eslint-plugin-js@^1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.5.3.tgz#da7a7576a6ba9feef1f6db12504a5c4ba45a70a1" + integrity sha512-XlKnm82fD7Sw9kQ6FFigE0tobvptNBXZWsdfoKmUyK7bNxHsAHOFT8zJGY3j3MjZ0Fe7rLTu86hX/vOl0bRRdQ== dependencies: - acorn "^8.11.2" + acorn "^8.11.3" escape-string-regexp "^4.0.0" eslint-visitor-keys "^3.4.3" espree "^9.6.1" - graphemer "^1.4.0" -"@stylistic/eslint-plugin-jsx@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-1.5.0.tgz#f8fcb23dcc75b455650426887b24711c4831bee6" - integrity sha512-sqFdA1mS0jwovAatS8xFAiwxPbcy69S2AUjrGMxyhxaKbELPjvqbxPYJL+35ylT0xqirUlm118xZIFDooC8koQ== +"@stylistic/eslint-plugin-jsx@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-1.5.3.tgz#ec152b94853c187b521d2d3d1e0b93bb36677d77" + integrity sha512-gKXWFmvg3B4e6G+bVz2p37icjj3gS5lzazZD6oLjmQ2b0Lw527VpnxGjWxQ16keKXtrVzUfebakjskOoALg3CQ== dependencies: - "@stylistic/eslint-plugin-js" "^1.5.0" + "@stylistic/eslint-plugin-js" "^1.5.3" estraverse "^5.3.0" -"@stylistic/eslint-plugin-plus@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.5.0.tgz#49ad5560bb6b699c1b5d2940586a4048ebc35b1c" - integrity sha512-+A4qXFuM6V7x25Hj+xqfVIUbEckG+MUSvL6m83M6YtRq3d5zLW+giKKEL7eSCAw12MwnoDwPcEhqIJK6BRDR3w== +"@stylistic/eslint-plugin-plus@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.5.3.tgz#be632459c60c300df85cdb37528bdcd5692c35b5" + integrity sha512-fuOBySbH4dbfY4Dwvu+zg5y+e0lALHTyQske5+a2zNC8Ejnx4rFlVjYOmaVFtxFhTD4V0vM7o21Ozci0igcxKg== dependencies: - "@typescript-eslint/utils" "^6.13.2" + "@typescript-eslint/utils" "^6.17.0" -"@stylistic/eslint-plugin-ts@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.5.0.tgz#ed84ffe3c2809748337079b6309f2906ff268e02" - integrity sha512-OusNGWRXnOV+ywnoXmBFoMtU6Ig/MX1bEu5Jigqmy2cIT8GRMMn7jUl/bXevkv2o66MYnC7PT1Q/3GvN7t0/eg== +"@stylistic/eslint-plugin-ts@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.5.3.tgz#4076f96727904a734cf4f954276b20215cb1cff3" + integrity sha512-/gUEqGo0gpFeu220YmC0788VliKnmTaAz4pI82KA5cUuCp6OzEhGlrNkb1eevMwH0RRgyND20HJxOYvEGlwu+w== dependencies: - "@stylistic/eslint-plugin-js" "1.5.0" - "@typescript-eslint/utils" "^6.13.2" - graphemer "^1.4.0" + "@stylistic/eslint-plugin-js" "1.5.3" + "@typescript-eslint/utils" "^6.17.0" "@stylistic/eslint-plugin@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-1.5.0.tgz#d89c813c9f2121a33e1e6d3d3c521ff015964e61" - integrity sha512-XmlB5nxk06nlnx1/ka0l+WNqHcjnnXfDts4ZaCvrpCY/6l8lNtHwLwdCKF/UpBYNuRWI/HLWCTtQc0jjfwrfBA== + version "1.5.3" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-1.5.3.tgz#bb4639722a2239d72cf8c2cb38ea6bec7cac8ed6" + integrity sha512-Vee+hHKaCd8DPRoRJTCV+mOFz+zFIaA9QiNJaAvgBzmPkcDnSC7Ewh518fN6SSNe9psS8TDIpcxd1g5v4MSY5A== dependencies: - "@stylistic/eslint-plugin-js" "1.5.0" - "@stylistic/eslint-plugin-jsx" "1.5.0" - "@stylistic/eslint-plugin-plus" "1.5.0" - "@stylistic/eslint-plugin-ts" "1.5.0" + "@stylistic/eslint-plugin-js" "1.5.3" + "@stylistic/eslint-plugin-jsx" "1.5.3" + "@stylistic/eslint-plugin-plus" "1.5.3" + "@stylistic/eslint-plugin-ts" "1.5.3" "@types/body-parser@*": version "1.19.2" @@ -1393,58 +1391,54 @@ dependencies: "@types/node" "*" -"@typescript-eslint/scope-manager@6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz#5fa4e4adace028dafac212c770640b94e7b61052" - integrity sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA== +"@typescript-eslint/scope-manager@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" + integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== dependencies: - "@typescript-eslint/types" "6.13.2" - "@typescript-eslint/visitor-keys" "6.13.2" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" -"@typescript-eslint/types@6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.13.2.tgz#c044aac24c2f6cefb8e921e397acad5417dd0ae6" - integrity sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg== +"@typescript-eslint/types@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" + integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== -"@typescript-eslint/typescript-estree@6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz#ae556ee154c1acf025b48d37c3ef95a1d55da258" - integrity sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w== +"@typescript-eslint/typescript-estree@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" + integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== dependencies: - "@typescript-eslint/types" "6.13.2" - "@typescript-eslint/visitor-keys" "6.13.2" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@^6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.13.2.tgz#8eb89e53adc6d703a879b131e528807245486f89" - integrity sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ== +"@typescript-eslint/utils@^6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e" + integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.13.2" - "@typescript-eslint/types" "6.13.2" - "@typescript-eslint/typescript-estree" "6.13.2" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.13.2": - version "6.13.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz#e0a4a80cf842bb08e6127b903284166ac4a5594c" - integrity sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw== +"@typescript-eslint/visitor-keys@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" + integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== dependencies: - "@typescript-eslint/types" "6.13.2" + "@typescript-eslint/types" "6.17.0" eslint-visitor-keys "^3.4.1" -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -1635,10 +1629,10 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.11.2, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +acorn@^8.11.3, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== acorn@^8.8.2: version "8.9.0" @@ -2025,6 +2019,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -3026,13 +3027,6 @@ dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -3242,17 +3236,10 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-plugin-cypress@^2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.1.tgz#336afa7e8e27451afaf65aa359c9509e0a4f3a7b" - integrity sha512-eLHLWP5Q+I4j2AWepYq0PgFEei9/s5LvjuSqWrxurkg1YZ8ltxdvMNmdSf0drnsNo57CTgYY/NIHHLRSWejR7w== - dependencies: - globals "^13.20.0" - -eslint-plugin-erb@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-erb/-/eslint-plugin-erb-1.1.0.tgz#ac0ac8d5b5e75602c0e41016ff525748cc66d95e" - integrity sha512-uKd0Trv+g2B6xvv471NvGfph17dBYbv4zKruCkbI/EmZVGJaZw7ohhfV/60ld7Rdl74pUG5CV2OLo7TQPDLDPg== +eslint-plugin-erb@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-erb/-/eslint-plugin-erb-2.0.0.tgz#34ef70ff7f04987f3f385a5d498ce4992b504bb7" + integrity sha512-yLfDeaVjY5PzoBR9mk1hRIlOZ/LuzIi8CSZi2DYsRWVY0WIQLRL/D6372OFwhyJomqsnT17V6XRhi6rbeumUhw== eslint-scope@^4.0.3: version "4.0.3" @@ -3275,24 +3262,22 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.55.0: - version "8.55.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8" - integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA== +eslint@^9.0.0-alpha.0: + version "9.0.0-alpha.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.0.0-alpha.0.tgz#5e8552b097a447c373b9b8073f8f10f3e1294581" + integrity sha512-21yCNcPYvXtvn3RrqPQP5+2X3LAqkfuPWSkxdkQyftorCYwUgu0rTNXxWAy8sSeBBDoVpHfeg2UTI15H26wkXQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.55.0" + "@eslint/eslintrc" "^3.0.0" + "@eslint/js" "9.0.0-alpha.0" "@humanwhocodes/config-array" "^0.11.13" "@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.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" eslint-scope "^7.2.2" eslint-visitor-keys "^3.4.3" @@ -3309,7 +3294,6 @@ eslint@^8.55.0: imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" @@ -3518,9 +3502,9 @@ fastest-levenshtein@^1.0.12: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== dependencies: reusify "^1.0.4" @@ -3909,7 +3893,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globals@^13.20.0: +globals@^13.24.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== @@ -5074,6 +5058,13 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"