From 1e849ccac27f935e36f876887909ff6dc78be47a Mon Sep 17 00:00:00 2001 From: Abbie Sims <74302970+abbiesims@users.noreply.github.com> Date: Tue, 14 Jan 2025 07:46:05 +0100 Subject: [PATCH] upgrade eslint packages (#2054) --- eslint.config.mjs | 101 ++++++ package.json | 8 +- requirements.txt | 2 +- static/js/src/base/tooltip-icon-modal.js | 2 +- static/js/src/libs/debounce.js | 5 +- static/js/src/libs/notification-close.js | 8 +- .../src/public/docs/docs-side-navigation.js | 16 +- .../js/src/public/store-details/packages.ts | 179 ++++++---- static/js/src/public/store-details/topics.js | 2 +- webpack.config.js | 5 +- yarn.lock | 315 +++++++----------- 11 files changed, 371 insertions(+), 272 deletions(-) create mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..af8fb16ee --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,101 @@ + +import jest from "eslint-plugin-jest"; +import react from "eslint-plugin-react"; +import prettier from "eslint-plugin-prettier"; +import globals from "globals"; +import babelParser from "@babel/eslint-parser"; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [ + { + ignores: [ + "static/js/publisher-pages/pages/Releases", + "static/js/publisher-pages/pages/Metrics/metrics", + "static/js/public/snap-details/publicise.ts", + "static/js/modules", + "static/js/dist", + "node_modules/*", + ], + }, + ...compat.extends( + "eslint:recommended", + "plugin:react/recommended", + "plugin:prettier/recommended", + ), + { + plugins: { + jest, + react, + prettier, + }, + languageOptions: { + globals: Object.fromEntries( + Object.entries({ + ...globals.browser, + ...globals.node, + ...jest.environments.globals.globals, + }).map(([key, value]) => [key.trim(), value]) + ), + parser: babelParser, + ecmaVersion: 2020, + sourceType: "module", + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + requireConfigFile: false, + }, + }, + settings: { + react: { + version: "detect", + }, + }, + rules: { + "linebreak-style": ["error", "unix"], + semi: ["error", "always"], + "object-curly-spacing": ["error", "always"], + "prettier/prettier": "error", + "react/react-in-jsx-scope": "off", + "react/no-unescaped-entities": "off", + "react/display-name": "off", + }, + }, + { + files: ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], + plugins: { + "@typescript-eslint": typescriptEslint, + }, + languageOptions: { + parser: tsParser, + ecmaVersion: 2020, + }, + rules: { + ...compat.extends("plugin:@typescript-eslint/recommended").reduce( + (rules, config) => ({ ...rules, ...config.rules }), + {} + ), + "@typescript-eslint/no-unused-expressions": ["error", { allowTernary: true }], + "@typescript-eslint/no-unused-vars": [ + "error", + { + "argsIgnorePattern": "^_", // Ignore variables starting with an underscore + "caughtErrorsIgnorePattern": "^_" // Ignore `catch` block errors starting with an underscore + } + ] + }, + }, +]; \ No newline at end of file diff --git a/package.json b/package.json index 544e0ea6d..7a8d9b28f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build-js": "webpack", "format-python": "black --line-length 79 webapp", "lint-python": "flake8 --extend-ignore=E203 webapp tests && black --check --line-length 79 webapp tests", - "lint-js": "eslint --ext=.jsx,.js,.tsx,.ts static/js/src/", + "lint-js": "eslint static/js/src", "lint-scss": "stylelint static/**/*.scss", "serve": "./entrypoint 0.0.0.0:${PORT}", "start": "yarn run build && concurrently --raw 'yarn run watch-scss' 'yarn run watch-js' 'yarn run serve'", @@ -76,9 +76,9 @@ "babel-jest": "29.7.0", "babel-plugin-prismjs": "2.1.0", "concurrently": "8.2.2", - "eslint": "^8.57.0", + "eslint": "^9.0.0", "eslint-config-prettier": "9.1.0", - "eslint-plugin-jest": "27.9.0", + "eslint-plugin-jest": "28.10.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "5.2.1", "eslint-plugin-react": "7.37.3", @@ -86,7 +86,7 @@ "jest-environment-jsdom": "29.7.0", "sass-loader": "16.0.4", "stylelint": "16.12.0", - "stylelint-config-standard-scss": "13.1.0", + "stylelint-config-standard-scss": "14.0.0", "stylelint-order": "6.0.4", "undici": "6.21.0" } diff --git a/requirements.txt b/requirements.txt index edfc13c06..ae9da58a2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,6 +16,6 @@ ruamel.yaml.clib==0.2.12 ruamel.yaml==0.18.9 PyGithub==2.5.0 black==24.10.0 -flake8==6.1.0 +flake8==7.1.1 Flask-Caching==2.3.0 responses==0.25.3 diff --git a/static/js/src/base/tooltip-icon-modal.js b/static/js/src/base/tooltip-icon-modal.js index 2b2ca4792..4cdd68bd9 100644 --- a/static/js/src/base/tooltip-icon-modal.js +++ b/static/js/src/base/tooltip-icon-modal.js @@ -14,7 +14,7 @@ export function toggleModal(modal) { // Add click handler for clicks on elements with aria-controls document.addEventListener("click", function (event) { - var targetControls = event.target.getAttribute("aria-controls"); + const targetControls = event.target.getAttribute("aria-controls"); if (targetControls) { toggleModal(document.getElementById(targetControls)); } diff --git a/static/js/src/libs/debounce.js b/static/js/src/libs/debounce.js index 9439c0183..c22855398 100644 --- a/static/js/src/libs/debounce.js +++ b/static/js/src/libs/debounce.js @@ -7,9 +7,8 @@ export default function debounce(func, wait, immediate) { let timeout; - const debounced = function () { - const args = arguments; - let later = () => { + const debounced = function (...args) { + const later = () => { timeout = null; if (!immediate) func.apply(this, args); }; diff --git a/static/js/src/libs/notification-close.js b/static/js/src/libs/notification-close.js index a517ab46f..4229d67d6 100644 --- a/static/js/src/libs/notification-close.js +++ b/static/js/src/libs/notification-close.js @@ -5,8 +5,8 @@ export default function initCloseButton() { */ function setupCloseButton(closeButton) { closeButton.addEventListener("click", function (event) { - var target = event.target.getAttribute("aria-controls"); - var notification = document.getElementById(target); + const target = event.target.getAttribute("aria-controls"); + const notification = document.getElementById(target); if (notification) { notification.classList.add("u-hide"); @@ -15,11 +15,11 @@ export default function initCloseButton() { } // Set up all notification close buttons. - var closeButtons = document.querySelectorAll( + const closeButtons = document.querySelectorAll( ".p-notification [aria-controls]" ); - for (var i = 0, l = closeButtons.length; i < l; i++) { + for (let i = 0, l = closeButtons.length; i < l; i++) { setupCloseButton(closeButtons[i]); } } diff --git a/static/js/src/public/docs/docs-side-navigation.js b/static/js/src/public/docs/docs-side-navigation.js index d21c14177..d690ab48a 100644 --- a/static/js/src/public/docs/docs-side-navigation.js +++ b/static/js/src/public/docs/docs-side-navigation.js @@ -1,10 +1,10 @@ function initSideNav() { - var sideNav = document.getElementById("drawer"); - var path = window.location.pathname; + const sideNav = document.getElementById("drawer"); + const path = window.location.pathname; if (!sideNav) { return; } - var active = sideNav.querySelector(`a[href="${path}"]`); + const active = sideNav.querySelector(`a[href="${path}"]`); if (active) { active.setAttribute("aria-current", "page"); @@ -32,14 +32,14 @@ function initSideNav() { @param {HTMLElement} sideNavigation The side navigation element. */ function setupSideNavigation(sideNavigation) { - var toggles = [].slice.call( + const toggles = [].slice.call( sideNavigation.querySelectorAll(".js-drawer-toggle") ); toggles.forEach(function (toggle) { toggle.addEventListener("click", function (event) { event.preventDefault(); - var sideNav = document.getElementById( + const sideNav = document.getElementById( toggle.getAttribute("aria-controls") ); @@ -53,12 +53,12 @@ function initSideNav() { setupSideNavigation(sideNav); // scroll active side navigation item into view (without scrolling whole page) - var currentItem = sideNav.querySelector('[aria-current="page"]'); + const currentItem = sideNav.querySelector('[aria-current="page"]'); if (sideNav && currentItem) { // calculate scroll by comparing top of side nav and top of active item - var currentItemOffset = currentItem.getBoundingClientRect().top; - var offset = currentItemOffset - sideNav.getBoundingClientRect().top; + const currentItemOffset = currentItem.getBoundingClientRect().top; + const offset = currentItemOffset - sideNav.getBoundingClientRect().top; // only scroll if active link is off screen or close to bottom of the window setTimeout(function () { diff --git a/static/js/src/public/store-details/packages.ts b/static/js/src/public/store-details/packages.ts index ee88b795e..82cdafda4 100644 --- a/static/js/src/public/store-details/packages.ts +++ b/static/js/src/public/store-details/packages.ts @@ -17,13 +17,37 @@ type Entity = { apps: { name: string; title: string }[]; }; +type DOMElement = { + el: HTMLElement | null; + selector: string; +}; + +type DOMElementCollection = { + el: NodeListOf; + selector: string; +}; + +type DOMElements = { + baseSwitcher: DOMElement; + categoryFilters: DOMElementCollection; + featuredContainer: DOMElement; + filterButtonMobileClose: DOMElement; + filterButtonMobileOpen: DOMElement; + packageContainer: DOMElement; + packageTypeSwitcher: DOMElement; + placeholderContainer: DOMElement; + resultsCountContainer: DOMElement; + searchInputDesktop: DOMElement; + searchInputMobile: DOMElement; + showAllPackagesButton: DOMElement; +}; + /** Store page filters */ class initPackages { allPackages: Entity[]; searchCache: string; _filters: { [key: string]: string[] }; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - domEl: any; + domEl: DOMElements; filteredPackagesAllCategories: Entity[]; packages: Entity[]; @@ -118,8 +142,14 @@ class initPackages { if (this._filters.q.length > 0) { const queryString = this._filters.q.join(","); - this.domEl.searchInputDesktop.el.value = queryString; - this.domEl.searchInputMobile.el.value = queryString; + if (this.domEl.searchInputDesktop.el) { + (this.domEl.searchInputDesktop.el as HTMLInputElement).value = + queryString; + } + if (this.domEl.searchInputMobile.el) { + (this.domEl.searchInputMobile.el as HTMLInputElement).value = + queryString; + } } this.filterPackages(); @@ -143,14 +173,29 @@ class initPackages { this.togglePackageContainer(true); this.togglePlaceholderContainer(); this.toggleShowAllPackagesButton(); - handleBundleIcons(this.domEl.packageContainer.el); + if (this.domEl.packageContainer.el) { + handleBundleIcons(this.domEl.packageContainer.el); + } } this.captureTooltipButtonClick(); } selectElements() { - this.domEl = {}; + this.domEl = { + baseSwitcher: { el: null, selector: "" }, + categoryFilters: { el: document.querySelectorAll(""), selector: "" }, + featuredContainer: { el: null, selector: "" }, + filterButtonMobileClose: { el: null, selector: "" }, + filterButtonMobileOpen: { el: null, selector: "" }, + packageContainer: { el: null, selector: "" }, + packageTypeSwitcher: { el: null, selector: "" }, + placeholderContainer: { el: null, selector: "" }, + resultsCountContainer: { el: null, selector: "" }, + searchInputDesktop: { el: null, selector: "" }, + searchInputMobile: { el: null, selector: "" }, + showAllPackagesButton: { el: null, selector: "" }, + }; this.domEl.resultsCountContainer = { el: document.querySelector("[data-js='results-count-container']"), @@ -214,7 +259,9 @@ class initPackages { this.renderButtonMobileOpen(); this.toggleFeaturedContainer(); this.toggleShowAllPackagesButton(); - handleBundleIcons(this.domEl.packageContainer.el); + if (this.domEl.packageContainer.el) { + handleBundleIcons(this.domEl.packageContainer.el); + } window.scrollTo(0, 0); } ); @@ -232,7 +279,7 @@ class initPackages { if (this.domEl.resultsCountContainer.el) { if (featured) { - this.domEl.resultsCountContainer.el.innerHTML = `${this.domEl.featuredContainer.el.children.length} Featured`; + this.domEl.resultsCountContainer.el.innerHTML = `${this.domEl.featuredContainer.el?.children.length} Featured`; } else if (this._filters.q.length > 0) { this.domEl.resultsCountContainer.el.innerHTML = `${ this.packages.length @@ -293,7 +340,9 @@ class initPackages { this.toggleFeaturedContainer(); this.toggleShowAllPackagesButton(); this.togglePackageContainer(true); - handleBundleIcons(this.domEl.packageContainer.el); + if (this.domEl.packageContainer.el) { + handleBundleIcons(this.domEl.packageContainer.el); + } }); } else { throw new Error( @@ -318,7 +367,9 @@ class initPackages { this.toggleFeaturedContainer(); this.toggleShowAllPackagesButton(); this.togglePackageContainer(true); - handleBundleIcons(this.domEl.packageContainer.el); + if (this.domEl.packageContainer.el) { + handleBundleIcons(this.domEl.packageContainer.el); + } } ); } else { @@ -330,40 +381,41 @@ class initPackages { handleFilterClick() { if (this.domEl.categoryFilters.el) { - this.domEl.categoryFilters.el.forEach( - (categoryFilter: HTMLInputElement) => { - if ( - this._filters.filter.length > 0 && - this._filters.filter.indexOf(categoryFilter.value) !== -1 - ) { - categoryFilter.checked = true; + this.domEl.categoryFilters.el.forEach((categoryFilter) => { + const inputElement = categoryFilter as HTMLInputElement; + if ( + this._filters.filter.length > 0 && + this._filters.filter.indexOf(inputElement.value) !== -1 + ) { + inputElement.checked = true; + } else { + inputElement.checked = false; + } + + inputElement.addEventListener("click", () => { + if (inputElement.checked) { + this._filters.filter.push(inputElement.value); } else { - categoryFilter.checked = false; + this._filters.filter = this._filters.filter.filter( + (el: string) => el !== inputElement.value + ); } - categoryFilter.addEventListener("click", () => { - if (categoryFilter.checked) { - this._filters.filter.push(categoryFilter.value); - } else { - this._filters.filter = this._filters.filter.filter( - (el: string) => el !== categoryFilter.value - ); - } - - this.filterPackages(); - this.updateEnabledCategories(); - this.renderPackages(); - this.renderResultsCount(); - this.renderButtonMobileOpen(); - this.renderButtonMobileClose(); - this.updateHistory(); - this.toggleFeaturedContainer(); - this.toggleShowAllPackagesButton(); - this.togglePackageContainer(true); + this.filterPackages(); + this.updateEnabledCategories(); + this.renderPackages(); + this.renderResultsCount(); + this.renderButtonMobileOpen(); + this.renderButtonMobileClose(); + this.updateHistory(); + this.toggleFeaturedContainer(); + this.toggleShowAllPackagesButton(); + this.togglePackageContainer(true); + if (this.domEl.packageContainer.el) { handleBundleIcons(this.domEl.packageContainer.el); - }); - } - ); + } + }); + }); } else { throw new Error( `There are no elements containing ${this.domEl.categoryFilters.selector} selector.` @@ -373,8 +425,8 @@ class initPackages { updateEnabledCategories() { // Enable all categories by default - this.domEl.categoryFilters.el.forEach((filter: { disabled: boolean }) => { - filter.disabled = false; + this.domEl.categoryFilters.el.forEach((filter) => { + (filter as HTMLInputElement).disabled = false; }); // If the user is searching or using filters @@ -396,29 +448,29 @@ class initPackages { }); // We hide categories without results - this.domEl.categoryFilters.el.forEach( - (filter: { value: string; disabled: boolean }) => { + this.domEl.categoryFilters.el.forEach((filter) => { + if (filter instanceof HTMLInputElement) { if (categories.includes(filter.value)) { filter.disabled = false; } else { filter.disabled = true; } } - ); + }); } } togglePlaceholderContainer(visibility: boolean = false) { - if (this.domEl.placeholderContainer.el) { - if (visibility) { - this.domEl.placeholderContainer.el.classList.remove("u-hide"); - } else { - this.domEl.placeholderContainer.el.classList.add("u-hide"); + try { + if (this.domEl.placeholderContainer.el) { + if (visibility) { + this.domEl.placeholderContainer.el.classList.remove("u-hide"); + } else { + this.domEl.placeholderContainer.el.classList.add("u-hide"); + } } - } else { - throw new Error( - `There is no element containing ${this.domEl.placeholderContainer.selector} selector.` - ); + } catch (error) { + console.warn("togglePlaceholderContainer error:", error); } } @@ -509,7 +561,7 @@ class initPackages { this.domEl.packageContainer.el.innerHTML = ""; this.packages.forEach((entity: Entity) => { - this.domEl.packageContainer.el.appendChild(buildPackageCard(entity)); + this.domEl.packageContainer.el?.appendChild(buildPackageCard(entity)); }); this.captureTooltipButtonClick(); @@ -526,9 +578,10 @@ class initPackages { this.domEl.showAllPackagesButton.el && this.domEl.packageTypeSwitcher.el ) { - this.domEl.baseSwitcher.el.disabled = false; - this.domEl.packageTypeSwitcher.el.disabled = false; - this.domEl.showAllPackagesButton.el.disabled = false; + (this.domEl.baseSwitcher.el as HTMLInputElement).disabled = false; + (this.domEl.packageTypeSwitcher.el as HTMLInputElement).disabled = false; + (this.domEl.showAllPackagesButton.el as HTMLInputElement).disabled = + false; } } @@ -576,10 +629,12 @@ class initPackages { if (this.domEl.filterButtonMobileOpen.el) { const filterSpanEl = this.domEl.filterButtonMobileOpen.el.querySelector("span"); - if (this._filters.filter.length > 0) { - filterSpanEl.innerHTML = `Filters (${this._filters.filter.length})`; - } else { - filterSpanEl.innerHTML = `Filters`; + if (filterSpanEl) { + if (this._filters.filter.length > 0) { + filterSpanEl.innerHTML = `Filters (${this._filters.filter.length})`; + } else { + filterSpanEl.innerHTML = `Filters`; + } } } else { throw new Error( diff --git a/static/js/src/public/store-details/topics.js b/static/js/src/public/store-details/topics.js index c58758a6d..ac700fd12 100644 --- a/static/js/src/public/store-details/topics.js +++ b/static/js/src/public/store-details/topics.js @@ -205,7 +205,7 @@ class initTopics { ); if (this.topics.length < 3) { - var bucketFillers = this.allTopics.reduce((acc, topic) => { + const bucketFillers = this.allTopics.reduce((acc, topic) => { if (!this.topics.includes(topic)) { acc.push(topic); } diff --git a/webpack.config.js b/webpack.config.js index 434b58eb3..2e3f17f7c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ -/* eslint-env node */ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); const entry = require("./webpack.config.entry.js"); const rules = require("./webpack.config.rules.js"); @@ -9,7 +10,7 @@ module.exports = { entry: entry, output: { filename: "[name].js", - path: __dirname + "/static/js/dist", + path: path.resolve(__dirname, "static/js/dist"), }, mode: production ? "production" : "development", devtool: production ? "source-map" : "eval-source-map", diff --git a/yarn.lock b/yarn.lock index 25e8f20f1..cf35b72ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1149,54 +1149,91 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": version "4.12.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@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/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@eslint/js@9.17.0": + version "9.17.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec" + integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" "@fortawesome/fontawesome-free@^6.0.0": version "6.7.2" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz#8249de9b7e22fcb3ceb5e66090c30a1d5492b81a" integrity sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA== -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== "@iconify/types@^2.0.0": version "2.0.0" @@ -1492,7 +1529,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -2132,7 +2169,7 @@ "@types/tough-cookie" "*" parse5 "^7.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -2261,11 +2298,6 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -2334,14 +2366,6 @@ "@typescript-eslint/visitor-keys" "8.19.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - "@typescript-eslint/scope-manager@8.19.1": version "8.19.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz#794cfc8add4f373b9cd6fa32e367e7565a0e231b" @@ -2360,29 +2384,11 @@ debug "^4.3.4" ts-api-utils "^2.0.0" -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - "@typescript-eslint/types@8.19.1": version "8.19.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.19.1.tgz#015a991281754ed986f2e549263a1188d6ed0a8c" integrity sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - 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" - "@typescript-eslint/typescript-estree@8.19.1": version "8.19.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz#c1094bb00bc251ac76cf215569ca27236435036b" @@ -2397,7 +2403,7 @@ semver "^7.6.0" ts-api-utils "^2.0.0" -"@typescript-eslint/utils@8.19.1": +"@typescript-eslint/utils@8.19.1", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": version "8.19.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.19.1.tgz#dd8eabd46b92bf61e573286e1c0ba6bd243a185b" integrity sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA== @@ -2407,28 +2413,6 @@ "@typescript-eslint/types" "8.19.1" "@typescript-eslint/typescript-estree" "8.19.1" -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - 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" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@8.19.1": version "8.19.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz#fce54d7cfa5351a92387d6c0c5be598caee072e0" @@ -2437,7 +2421,7 @@ "@typescript-eslint/types" "8.19.1" eslint-visitor-keys "^4.2.0" -"@ungap/structured-clone@^1.0.0", "@ungap/structured-clone@^1.2.0": +"@ungap/structured-clone@^1.0.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== @@ -2613,7 +2597,7 @@ acorn-walk@^8.0.2: dependencies: acorn "^8.11.0" -acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.1.0, acorn@^8.11.0, acorn@^8.14.0, acorn@^8.8.1, acorn@^8.8.2: version "8.14.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== @@ -3379,7 +3363,7 @@ create-jest@^29.7.0: jest-util "^29.7.0" prompts "^2.0.1" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3968,13 +3952,6 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -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-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" @@ -4289,12 +4266,12 @@ eslint-config-prettier@9.1.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== -eslint-plugin-jest@27.9.0: - version "27.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== +eslint-plugin-jest@28.10.0: + version "28.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.10.0.tgz#4b35b8abb0f7cfe699bff8d9060270a2ddd770ea" + integrity sha512-hyMWUxkBH99HpXT3p8hc7REbEZK3D+nk8vHXGgpB+XXsi0gO4PxMSP+pjfUzb67GnV9yawV9a53eUmcde1CCZA== dependencies: - "@typescript-eslint/utils" "^5.10.0" + "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" eslint-plugin-jsx-a11y@^6.10.2: version "6.10.2" @@ -4349,7 +4326,7 @@ eslint-plugin-react@7.37.3: string.prototype.matchall "^4.0.12" string.prototype.repeat "^1.0.0" -eslint-scope@5.1.1, eslint-scope@^5.1.1: +eslint-scope@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -4357,10 +4334,10 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -4370,7 +4347,7 @@ eslint-visitor-keys@^2.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" 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== @@ -4380,65 +4357,61 @@ eslint-visitor-keys@^4.2.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== -eslint@^8.57.0: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== +eslint@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.17.0.tgz#faa1facb5dd042172fdc520106984b5c2421bb0c" + integrity sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA== dependencies: "@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" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.17.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== dependencies: - acorn "^8.9.0" + acorn "^8.14.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" + eslint-visitor-keys "^4.2.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2: +esquery@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== @@ -4573,12 +4546,12 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" file-entry-cache@^9.1.0: version "9.1.0" @@ -4633,14 +4606,13 @@ find-up@^6.3.0: locate-path "^7.1.0" path-exists "^5.0.0" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flat-cache@^5.0.0: version "5.0.0" @@ -4889,12 +4861,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globals@^15.13.0: version "15.14.0" @@ -5448,11 +5418,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" @@ -6169,7 +6134,7 @@ katex@^0.16.9: dependencies: commander "^8.3.0" -keyv@^4.5.3, keyv@^4.5.4: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -7060,7 +7025,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -8024,7 +7989,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.2: +rimraf@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8166,7 +8131,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.4, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: +semver@^7.3.4, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -8509,7 +8474,7 @@ style-to-object@^1.0.0: dependencies: inline-style-parser "0.2.4" -stylelint-config-recommended-scss@^14.0.0: +stylelint-config-recommended-scss@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz#1a5855655cddcb5f77c10f38c76567adf2bb9aa3" integrity sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg== @@ -8523,15 +8488,15 @@ stylelint-config-recommended@^14.0.1: resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz#d25e86409aaf79ee6c6085c2c14b33c7e23c90c6" integrity sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg== -stylelint-config-standard-scss@13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-13.1.0.tgz#2be36ca13087325a42c1f26df8267808667cc886" - integrity sha512-Eo5w7/XvwGHWkeGLtdm2FZLOMYoZl1omP2/jgFCXyl2x5yNz7/8vv4Tj6slHvMSSUNTaGoam/GAZ0ZhukvalfA== +stylelint-config-standard-scss@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz#d2a3dde0eeae3601ccdd734a63a0e3be12430a7e" + integrity sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg== dependencies: - stylelint-config-recommended-scss "^14.0.0" - stylelint-config-standard "^36.0.0" + stylelint-config-recommended-scss "^14.1.0" + stylelint-config-standard "^36.0.1" -stylelint-config-standard@^36.0.0: +stylelint-config-standard@^36.0.1: version "36.0.1" resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz#727cbb2a1ef3e210f5ce8329cde531129f156609" integrity sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw== @@ -8707,11 +8672,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - thenby@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc" @@ -8792,23 +8752,11 @@ ts-loader@9.5.1: semver "^7.3.4" source-map "^0.7.4" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - tslib@^2.0.0, tslib@^2.1.0, tslib@^2.6.2, tslib@^2.7.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - turbo-stream@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/turbo-stream/-/turbo-stream-2.4.0.tgz#1e4fca6725e90fa14ac4adb782f2d3759a5695f0" @@ -8826,11 +8774,6 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"