From bbcb981c3e736cc0c7db35c5de5ec5d7e61487e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Rialland?= Date: Mon, 7 Feb 2022 09:34:32 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Refacto=20de=20la=20config=20eslint?= =?UTF-8?q?=20(#1962)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ Refacto de la config eslint * ✨ Ajout de rel='noreferrer' sur les liens * ✨ Fix de différentes erreurs de types et de tests * ✨ Ajout des regles cypress dans eslint * ✨ Suppression de la regle react/jsx-no-target-blank * ✨ Fix import --- .eslintrc.cjs | 121 +++--- .prettierignore | 1 - package.json | 4 +- site/cypress/.eslintrc.yaml | 6 - site/package.json | 15 +- site/source/components/CompanyDetails.tsx | 2 +- site/source/components/CompanySearchField.tsx | 10 +- site/source/components/LegalNotice.tsx | 8 +- site/source/components/Route404.tsx | 50 +-- .../components/Simulation/SimulationGoals.tsx | 6 +- .../simulationExplanation/ExportRecover.tsx | 2 +- .../InstitutionsPartenaires.tsx | 21 +- site/source/components/ui/Progress.tsx | 8 +- site/source/components/utils/Scroll.tsx | 1 + site/source/components/utils/markdown.tsx | 26 +- site/source/design-system/typography/link.tsx | 1 + site/source/pages/Accessibilité.tsx | 4 + site/source/pages/Documentation.tsx | 2 +- .../RésultatSimple.tsx | 1 + site/source/pages/Gerer/Embaucher.tsx | 28 +- .../ActivitésSelection.tsx | 2 +- .../EconomieCollaborative/reducer.ts | 4 +- site/source/pages/Simulateurs/metadata.tsx | 1 + site/source/pages/Stats/GlobalStats.tsx | 8 +- site/source/pages/Stats/utils.tsx | 3 +- site/source/pages/integration/Library.tsx | 3 +- site/source/{redirects.jsx => redirects.tsx} | 9 +- site/source/utils.ts | 4 + site/test/regressions/simulations.test.ts | 2 - site/test/unit-translations.test.js | 38 +- yarn.lock | 343 ++++++++---------- 31 files changed, 378 insertions(+), 356 deletions(-) delete mode 100644 site/cypress/.eslintrc.yaml rename site/source/{redirects.jsx => redirects.tsx} (76%) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1219b455a..ce22f82d4 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,5 +1,6 @@ module.exports = { root: true, + parser: '@typescript-eslint/parser', parserOptions: { sourceType: 'module', ecmaVersion: 'latest', @@ -15,27 +16,10 @@ module.exports = { globals: { process: false, }, - plugins: ['react', 'react-hooks'], + extends: ['eslint:recommended', 'prettier'], rules: { - quotes: [ - 1, - 'single', - { - avoidEscape: true, - }, - ], - 'no-console': 1, - 'no-restricted-globals': [2, 'length'], - 'no-global-assign': 0, - 'no-unsafe-negation': 0, - 'react/prop-types': 0, - 'react/jsx-no-target-blank': 0, - 'react/no-unescaped-entities': 0, - 'react/display-name': 1, - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', - 'react/jsx-uses-react': 'off', - 'react/react-in-jsx-scope': 'off', + 'no-console': 'warn', + 'no-restricted-globals': ['error', 'length'], 'no-restricted-syntax': [ 'error', { @@ -51,67 +35,76 @@ module.exports = { }, }, overrides: [ + { + files: ['**/*.{js,jsx}'], + env: { node: true }, + }, { files: ['**/*.{ts,tsx}'], parser: '@typescript-eslint/parser', parserOptions: { - ecmaFeatures: { - jsx: true, - }, + ecmaFeatures: { jsx: true }, // eslint-disable-next-line no-undef tsconfigRootDir: __dirname, project: ['./site/tsconfig.json'], }, - plugins: ['@typescript-eslint'], - rules: { - '@typescript-eslint/no-empty-interface': 0, - '@typescript-eslint/no-empty-function': 0, - '@typescript-eslint/no-use-before-define': 0, - '@typescript-eslint/member-delimiter-style': [ - 2, - { - multiline: { - delimiter: 'none', - }, - }, - ], - '@typescript-eslint/explicit-function-return-type': 0, - '@typescript-eslint/prefer-string-starts-ends-with': 1, - '@typescript-eslint/no-unnecessary-type-assertion': 1, // has false positives (Object.values result) v 2.29.0 - '@typescript-eslint/no-inferrable-types': 1, // causes problems with unknown values v 2.29.0 typescript v 3.8.3 - '@typescript-eslint/no-var-requires': 'off', - // TODO - enable these new recommended rules, a first step would be to switch from "off" to "warn" - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/no-floating-promises': 'off', - '@typescript-eslint/no-misused-promises': 'off', - '@typescript-eslint/no-extra-semi': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/prefer-regexp-exec': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, extends: [ + 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'plugin:react/recommended', + 'plugin:react/jsx-runtime', + 'plugin:react-hooks/recommended', + 'prettier', ], + plugins: ['@typescript-eslint', 'react', 'react-hooks'], + rules: { + 'ban-ts-comment': 'off', + 'react/no-unescaped-entities': 'off', + 'react/jsx-no-target-blank': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + + '@typescript-eslint/no-unsafe-call': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/restrict-template-expressions': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + '@typescript-eslint/no-empty-function': 'warn', + '@typescript-eslint/restrict-plus-operands': 'warn', + '@typescript-eslint/no-floating-promises': 'warn', + '@typescript-eslint/member-delimiter-style': [ + 'error', + { multiline: { delimiter: 'none' } }, + ], + }, }, { - files: ['**/*.test.js'], + files: ['**/*.test.{js,ts}', 'site/cypress/**/*.js'], env: { mocha: true, }, + extends: [ + 'eslint:recommended', + 'plugin:cypress/recommended', + 'plugin:mocha/recommended', + 'prettier', + ], + plugins: ['cypress', 'mocha'], + rules: { + 'cypress/no-unnecessary-waiting': 'warn', + + 'mocha/no-exclusive-tests': 'error', + 'mocha/no-skipped-tests': 'warn', + 'mocha/no-mocha-arrows': 'warn', + 'mocha/no-setup-in-describe': 'warn', + 'mocha/max-top-level-suites': 'warn', + 'mocha/no-global-tests': 'warn', + 'mocha/no-exports': 'warn', + }, }, ], - extends: [ - 'eslint:recommended', - 'plugin:react/recommended', - 'prettier', - 'prettier/react', - 'prettier/@typescript-eslint', - ], } diff --git a/.prettierignore b/.prettierignore index 2c0b32c7b..d390742f0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,4 +1,3 @@ -.eslintrc.js dist site/source/locales/*.yaml site/source/ATInternetTracking/smarttag.js diff --git a/package.json b/package.json index 23ba6939c..d8215c10f 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ ], "type": "module", "scripts": { - "lint:eslintrc": "eslint --print-config .eslintrc.cjs | eslint-config-prettier-check", - "lint:eslint": "export NODE_OPTIONS='--max-old-space-size=4096'; eslint . --ext .js,.jsx,.ts,.tsx", + "lint:eslintrc": "npx eslint-config-prettier .eslintrc.cjs", + "lint:eslint": "export NODE_OPTIONS='--max-old-space-size=4096'; eslint .", "lint:eslint:fix": "yarn lint:eslint --fix", "lint:prettier": "yarn run prettier --check \"**/*.{js,jsx,ts,tsx,yaml,yml}\"", "lint:prettier:fix": "yarn lint:prettier --write", diff --git a/site/cypress/.eslintrc.yaml b/site/cypress/.eslintrc.yaml deleted file mode 100644 index 538969434..000000000 --- a/site/cypress/.eslintrc.yaml +++ /dev/null @@ -1,6 +0,0 @@ -globals: - cy: false - Cypress: false - expect: false -env: - mocha: true diff --git a/site/package.json b/site/package.json index b2701b9d8..82ce7e13c 100644 --- a/site/package.json +++ b/site/package.json @@ -113,8 +113,8 @@ "@types/react-router-dom": "^5.3.2", "@types/recharts": "^1.8.16", "@types/styled-components": "^5.1.9", - "@typescript-eslint/eslint-plugin": "^4.0.1", - "@typescript-eslint/parser": "^4.0.1", + "@typescript-eslint/eslint-plugin": "^5.10.2", + "@typescript-eslint/parser": "^5.10.2", "@vitejs/plugin-legacy": "^1.6.4", "@vitejs/plugin-react": "=1.1.3", "babel-plugin-styled-components": "^2.0.2", @@ -122,14 +122,15 @@ "cypress-plugin-tab": "^1.0.5", "cypress-wait-until": "^1.7.2", "dotenv": "=8.1.0", - "eslint": "^7.0.0", - "eslint-config-prettier": "^4.0.0", - "eslint-plugin-mocha": "^8.0.0", - "eslint-plugin-react": "^7.12.4", + "eslint": "^8.8.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-cypress": "^2.12.1", + "eslint-plugin-mocha": "^10.0.3", + "eslint-plugin-react": "^7.28.0", "eslint-plugin-react-hooks": "^4.3.0", "i18next-parser": "^5.3.0", "isomorphic-fetch": "^2.2.1", - "prettier": "^2.3.2", + "prettier": "^2.5.1", "rimraf": "^3.0.2", "rollup-plugin-toml": "^1.0.0", "typescript": "^4.3.2", diff --git a/site/source/components/CompanyDetails.tsx b/site/source/components/CompanyDetails.tsx index 0e9171e19..b5df871d2 100644 --- a/site/source/components/CompanyDetails.tsx +++ b/site/source/components/CompanyDetails.tsx @@ -7,7 +7,7 @@ import { Trans, useTranslation } from 'react-i18next' import { Company } from 'Reducers/inFranceAppReducer' import styled from 'styled-components' -export default function ({ +export default function CompanyDetails({ entreprise, }: { entreprise: FabriqueSocialEntreprise | Company diff --git a/site/source/components/CompanySearchField.tsx b/site/source/components/CompanySearchField.tsx index b57d519f5..070760564 100644 --- a/site/source/components/CompanySearchField.tsx +++ b/site/source/components/CompanySearchField.tsx @@ -51,9 +51,9 @@ export function CompanySearchField(props: { const state = useSearchFieldState(searchFieldProps) - const { onValue = () => {}, onClear = () => {} } = props + const { onValue, onClear } = props useEffect( - () => (!state.value ? onClear() : onValue()), + () => (!state.value ? onClear?.() : onValue?.()), [state.value, onValue, onClear] ) @@ -72,7 +72,7 @@ export function CompanySearchField(props: { {state.value && !searchPending && ( - {})} /> + )} @@ -84,7 +84,7 @@ function Results({ onSubmit, }: { results: Array - onSubmit: (établissement: FabriqueSocialEntreprise) => void + onSubmit?: (établissement: FabriqueSocialEntreprise) => void }) { return !results.length ? ( @@ -101,7 +101,7 @@ function Results({ {results.map((etablissement) => ( - onSubmit(etablissement)} compact> + onSubmit?.(etablissement)} compact> diff --git a/site/source/components/LegalNotice.tsx b/site/source/components/LegalNotice.tsx index 2cb70978b..628a63db1 100644 --- a/site/source/components/LegalNotice.tsx +++ b/site/source/components/LegalNotice.tsx @@ -46,7 +46,7 @@ export default function LegalNotice() {
San Francisco, CA 94107
Site web :  - + https://www.netlify.com @@ -56,7 +56,11 @@ export default function LegalNotice() { - + contact@mon-entreprise.beta.gouv.fr diff --git a/site/source/components/Route404.tsx b/site/source/components/Route404.tsx index 14765afa7..9f0848997 100644 --- a/site/source/components/Route404.tsx +++ b/site/source/components/Route404.tsx @@ -3,27 +3,29 @@ import { Trans } from 'react-i18next' import { Link } from 'react-router-dom' import Emoji from './utils/Emoji' -export default () => ( -
-

- - Cette page n'existe pas ou n'existe plus - - -

- - {/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */} - - - Revenir en lieu sûr - - -
-) +export default function Route404() { + return ( +
+

+ + Cette page n'existe pas ou n'existe plus + + +

+ + {/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */} + + + Revenir en lieu sûr + + +
+ ) +} diff --git a/site/source/components/Simulation/SimulationGoals.tsx b/site/source/components/Simulation/SimulationGoals.tsx index 669a38128..11784f7f1 100644 --- a/site/source/components/Simulation/SimulationGoals.tsx +++ b/site/source/components/Simulation/SimulationGoals.tsx @@ -86,7 +86,11 @@ function TopSection({ toggles }: { toggles?: React.ReactNode }) { alignItems="flex-end" justifyContent="center" > - +
diff --git a/site/source/components/simulationExplanation/ExportRecover.tsx b/site/source/components/simulationExplanation/ExportRecover.tsx index aa42cc072..0cb88e7ae 100644 --- a/site/source/components/simulationExplanation/ExportRecover.tsx +++ b/site/source/components/simulationExplanation/ExportRecover.tsx @@ -9,7 +9,7 @@ export default function ExportRecover() { Retrouvez cette simulation ainsi que d'autres outils d'aide à la création et à la gestion d'entreprise, sur{' '} - + mon-entreprise.urssaf.fr . diff --git a/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx b/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx index 9383d82bb..ffe327ddd 100644 --- a/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx +++ b/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx @@ -42,8 +42,9 @@ export default function InstitutionsPartenaires() { @@ -93,8 +94,9 @@ export function CotisationsUrssaf({ return ( @@ -116,7 +118,11 @@ export function ImpôtsDGFIP() { return ( - + @@ -161,8 +167,9 @@ function CaisseRetraite() { @@ -210,7 +217,11 @@ export function InstitutionsPartenairesArtisteAuteur() { /> - + {descriptionIRCEC} diff --git a/site/source/components/ui/Progress.tsx b/site/source/components/ui/Progress.tsx index fe2dbeed9..5c679b6b4 100644 --- a/site/source/components/ui/Progress.tsx +++ b/site/source/components/ui/Progress.tsx @@ -1,11 +1,12 @@ import { useProgressBar } from '@react-aria/progress' import styled from 'styled-components' + type ProgressProps = { progress: number } export default function Progress({ progress }: ProgressProps) { - const props = { + const propsBar = { showValueLabel: false, label: 'Précision de votre simulation', minValue: 0, @@ -13,11 +14,12 @@ export default function Progress({ progress }: ProgressProps) { value: progress, } - const { progressBarProps, labelProps } = useProgressBar(props) + const { progressBarProps, labelProps } = useProgressBar(propsBar) + return ( <> - {props.label} + {propsBar.label} diff --git a/site/source/components/utils/Scroll.tsx b/site/source/components/utils/Scroll.tsx index 2ffa4d416..dabf3c0c6 100644 --- a/site/source/components/utils/Scroll.tsx +++ b/site/source/components/utils/Scroll.tsx @@ -42,6 +42,7 @@ type ScrollToElementProps = React.ComponentProps<'div'> & { onlyIfNotVisible?: boolean when?: boolean behavior?: ScrollBehavior + style?: React.CSSProperties } export function ScrollToElement({ diff --git a/site/source/components/utils/markdown.tsx b/site/source/components/utils/markdown.tsx index fafe3815e..fcd516783 100644 --- a/site/source/components/utils/markdown.tsx +++ b/site/source/components/utils/markdown.tsx @@ -3,9 +3,10 @@ import { H1, H2, H3, H4, H5, H6 } from 'DesignSystem/typography/heading' import { Link } from 'DesignSystem/typography/link' import { Li, Ul } from 'DesignSystem/typography/list' import { Body } from 'DesignSystem/typography/paragraphs' -import MarkdownToJsx from 'markdown-to-jsx' +import MarkdownToJsx, { MarkdownToJSX } from 'markdown-to-jsx' import React, { useContext, useEffect } from 'react' import { useLocation } from 'react-router-dom' +import { isIterable } from '../../utils' import { SiteNameContext } from '../../Provider' import Emoji from './Emoji' @@ -49,7 +50,7 @@ export function LinkRenderer({ } return ( - + {children} ) @@ -60,6 +61,8 @@ const TextRenderer = ({ children }: { children: string }) => ( type MarkdownProps = React.ComponentProps & { className?: string + components?: MarkdownToJSX.Overrides + renderers?: Record } const CodeBlock = ({ @@ -81,6 +84,7 @@ const CodeBlock = ({ Lancer le calcul @@ -133,16 +137,24 @@ export const MarkdownWithAnchorLinks = ({ /> ) -const flatMapChildren = (children: React.ReactNode): Array => { +const flatMapChildren = (children: React.ReactNode): Array => { return React.Children.toArray(children).flatMap((child) => - typeof child !== 'object' || !('props' in child) + typeof child === 'string' || typeof child === 'number' ? child - : child.props?.value ?? flatMapChildren(child.props?.children) + : isIterable(child) + ? flatMapChildren(Array.from(child)) + : typeof child == 'object' && 'props' in child + ? // eslint-disable-next-line + (child.props?.value as string) ?? flatMapChildren(child.props?.children) + : '' ) } + export function useScrollToHash() { + const location = useLocation() + useEffect(() => { - const { hash } = window.location + const { hash } = location if (hash) { const id = hash.replace('#', '') const element = document.getElementById(id) @@ -151,7 +163,7 @@ export function useScrollToHash() { } element.scrollIntoView() } - }, [window?.location.hash]) + }, [location]) } export function HeadingWithAnchorLink({ diff --git a/site/source/design-system/typography/link.tsx b/site/source/design-system/typography/link.tsx index c5dfb48cb..d039421e5 100644 --- a/site/source/design-system/typography/link.tsx +++ b/site/source/design-system/typography/link.tsx @@ -72,6 +72,7 @@ export function useExternalLinkProps({ return { title: (title ? `${title} - ` : '') + t('Nouvelle fenêtre'), target: '_blank', + rel: 'noreferrer', external: true, children: children && ( <> diff --git a/site/source/pages/Accessibilité.tsx b/site/source/pages/Accessibilité.tsx index 264febf77..373360e3d 100644 --- a/site/source/pages/Accessibilité.tsx +++ b/site/source/pages/Accessibilité.tsx @@ -59,6 +59,7 @@ export default function Accessibilité() { la stratégie et le plan d’action à mettre en œuvre @@ -81,6 +82,7 @@ export default function Accessibilité() { référentiel général d’amélioration de l’accessibilité (RGAA) @@ -123,6 +125,7 @@ export default function Accessibilité() { https://formulaire.defenseurdesdroits.fr/ @@ -134,6 +137,7 @@ export default function Accessibilité() { https://www.defenseurdesdroits.fr/saisir/delegues diff --git a/site/source/pages/Documentation.tsx b/site/source/pages/Documentation.tsx index 13af3e041..d2ac1d951 100644 --- a/site/source/pages/Documentation.tsx +++ b/site/source/pages/Documentation.tsx @@ -173,7 +173,7 @@ export function References({ references }: ReferencesProps) { /> )} - + {capitalise0(name)} {domain} diff --git a/site/source/pages/Gerer/AideDéclarationIndépendant/RésultatSimple.tsx b/site/source/pages/Gerer/AideDéclarationIndépendant/RésultatSimple.tsx index 5f4a7aa86..8fac57ea9 100644 --- a/site/source/pages/Gerer/AideDéclarationIndépendant/RésultatSimple.tsx +++ b/site/source/pages/Gerer/AideDéclarationIndépendant/RésultatSimple.tsx @@ -29,6 +29,7 @@ export default function ResultatsSimples() { En savoir plus diff --git a/site/source/pages/Gerer/Embaucher.tsx b/site/source/pages/Gerer/Embaucher.tsx index ed4439314..0f4c7ef9d 100644 --- a/site/source/pages/Gerer/Embaucher.tsx +++ b/site/source/pages/Gerer/Embaucher.tsx @@ -69,6 +69,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { className="ui__ button" href="https://www.service-public.fr/particuliers/vosdroits/N19871" target="_blank" + rel="noreferrer" > {' '} Plus d'informations @@ -87,7 +88,11 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { Ceci peut être fait par le biais du formulaire appelé DPAE, doit être complété dans les 8 jours avant toute embauche, et peut{' '} - + être effectué en ligne . @@ -106,13 +111,18 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { Les fiches de paie et les déclarations peuvent être traitées en ligne gratuitement par le{' '} - + Tese . Vous pouvez aussi utiliser un{' '} logiciel de paie privé. @@ -132,6 +142,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F1784" className="ui__ button" target="_blank" + rel="noreferrer" > Plus d'informations @@ -150,6 +161,7 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { href="https://www.espace-entreprise.agirc-arrco.fr/simape/#/donneesDep" className="ui__ button" target="_blank" + rel="noreferrer" > Trouver mon institution de prévoyance @@ -203,11 +215,19 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) { et les transmettre via la déclaration sociale nominative (DSN).
Certaines offres de service de l’Urssaf comme le{' '} - + titre emploi service entreprise (Tese) {' '} ou le{' '} - + chèque emploi associatif (CEA) {' '} gèrent automatiquement la transmission de la DSN pour vous. diff --git a/site/source/pages/Simulateurs/EconomieCollaborative/ActivitésSelection.tsx b/site/source/pages/Simulateurs/EconomieCollaborative/ActivitésSelection.tsx index 69abc8ca6..e4fcbd4ed 100644 --- a/site/source/pages/Simulateurs/EconomieCollaborative/ActivitésSelection.tsx +++ b/site/source/pages/Simulateurs/EconomieCollaborative/ActivitésSelection.tsx @@ -6,7 +6,7 @@ import { Spacing } from 'DesignSystem/layout' import { H1, H2 } from 'DesignSystem/typography/heading' import { Body, SmallBody } from 'DesignSystem/typography/paragraphs' import { intersection } from 'ramda' -import React, { useContext } from 'react' +import { useContext } from 'react' import { Trans, useTranslation } from 'react-i18next' import { TrackPage } from '../../../ATInternetTracking' import { ActiviteCard } from './ActiviteCard' diff --git a/site/source/pages/Simulateurs/EconomieCollaborative/reducer.ts b/site/source/pages/Simulateurs/EconomieCollaborative/reducer.ts index 9b9fc9fa8..4320eb8aa 100644 --- a/site/source/pages/Simulateurs/EconomieCollaborative/reducer.ts +++ b/site/source/pages/Simulateurs/EconomieCollaborative/reducer.ts @@ -68,7 +68,7 @@ type State = Record< > const reducer = reduceReducers( - ((state: State, { type, activité }: Action) => { + (state: State, { type, activité }: Action) => { if (type === 'TOGGLE_ACTIVITÉ_EFFECTUÉE' && state[activité].effectuée) { return getSousActivités(activité).reduce( (newState: State, sousActivité: any) => ({ @@ -83,7 +83,7 @@ const reducer = reduceReducers( ) } return state - }) as any, + }, combineReducers( flatActivités.reduce( (reducers, { titre }) => ({ diff --git a/site/source/pages/Simulateurs/metadata.tsx b/site/source/pages/Simulateurs/metadata.tsx index ce0a24cb6..b3f75d131 100644 --- a/site/source/pages/Simulateurs/metadata.tsx +++ b/site/source/pages/Simulateurs/metadata.tsx @@ -707,6 +707,7 @@ export function getSimulatorsData({ versement des dividendes, sauf si le bénéficiaire remplit{' '} diff --git a/site/source/pages/Stats/GlobalStats.tsx b/site/source/pages/Stats/GlobalStats.tsx index cb69dd688..7d009b6dd 100644 --- a/site/source/pages/Stats/GlobalStats.tsx +++ b/site/source/pages/Stats/GlobalStats.tsx @@ -5,17 +5,13 @@ import { Link } from 'DesignSystem/typography/link' import { useTranslation } from 'react-i18next' import { SatisfactionStyle } from './SatisfactionChart' import { SatisfactionLevel, StatsStruct } from './types' -import { Indicator } from './utils' +import { Indicator, IndicatorProps } from './utils' const add = (a: number, b: number) => a + b const lastCompare = (startDate: Date, dateStr: string) => startDate < new Date(dateStr) -export const BigIndicator: typeof Indicator = ({ - main, - subTitle, - footnote, -}) => ( +export const BigIndicator = ({ main, subTitle, footnote }: IndicatorProps) => ( diff --git a/site/source/pages/Stats/utils.tsx b/site/source/pages/Stats/utils.tsx index 8aebc7b2a..f86dc5f0e 100644 --- a/site/source/pages/Stats/utils.tsx +++ b/site/source/pages/Stats/utils.tsx @@ -4,11 +4,10 @@ import { Intro, SmallBody } from 'DesignSystem/typography/paragraphs' import React from 'react' import styled from 'styled-components' -type IndicatorProps = { +export type IndicatorProps = { main?: React.ReactNode subTitle?: React.ReactNode footnote?: React.ReactNode - width?: string } export function Indicator({ main, subTitle, footnote }: IndicatorProps) { return ( diff --git a/site/source/pages/integration/Library.tsx b/site/source/pages/integration/Library.tsx index c20af34ae..b73452d0c 100644 --- a/site/source/pages/integration/Library.tsx +++ b/site/source/pages/integration/Library.tsx @@ -43,6 +43,7 @@ export default function Library() { documentation dédiée @@ -78,7 +79,7 @@ export default function Library() { Toutes ces variables sont listées et expliquées sur la{' '} - + documentation en ligne . Cette documentation est auto-générée depuis les fichiers de règles diff --git a/site/source/redirects.jsx b/site/source/redirects.tsx similarity index 76% rename from site/source/redirects.jsx rename to site/source/redirects.tsx index 25e3b9c9b..bbe96bca7 100644 --- a/site/source/redirects.jsx +++ b/site/source/redirects.tsx @@ -1,8 +1,15 @@ import { Redirect } from 'react-router-dom' +// @ts-ignore import netlifyToml from '../netlify.toml' +interface NetlifyRedirect { + from: string + to: string + status: number +} + // TODO : doesn't work when previewing netlify redirect in developpement mode (yarn run build:preview) -export default netlifyToml.redirects +export default (netlifyToml as { redirects: NetlifyRedirect[] }).redirects .filter(({ from, status }) => status === 301 && !from.startsWith('https')) .map(({ from, to }) => ({ from: decodeURIComponent(from.replace(/^:.*?\//, '/')), diff --git a/site/source/utils.ts b/site/source/utils.ts index eed953a26..901320d5a 100644 --- a/site/source/utils.ts +++ b/site/source/utils.ts @@ -76,3 +76,7 @@ export function omit(obj: T, key: K): Omit { delete returnObject[key] return returnObject } + +export function isIterable(obj: unknown): obj is Iterable { + return Symbol.iterator in Object(obj) +} diff --git a/site/test/regressions/simulations.test.ts b/site/test/regressions/simulations.test.ts index a42160054..c4d6aecde 100644 --- a/site/test/regressions/simulations.test.ts +++ b/site/test/regressions/simulations.test.ts @@ -5,8 +5,6 @@ // We only persist targets values in the file system, in order to be resilient to rule renaming (if a rule is // renamed the test configuration may be adapted but the persisted snapshot will remain unchanged). -/* eslint-disable no-undef */ - import { expect, it } from 'vitest' import rules, { DottedName } from 'modele-social' import { engineFactory } from '../../source/components/utils/EngineContext' diff --git a/site/test/unit-translations.test.js b/site/test/unit-translations.test.js index f77ec259e..d2d650ded 100644 --- a/site/test/unit-translations.test.js +++ b/site/test/unit-translations.test.js @@ -1,26 +1,28 @@ -import { it, expect } from 'vitest' +import { it, expect, describe } from 'vitest' import { parsePublicodes } from 'publicodes' import { uniq } from 'ramda' import rawRules from 'modele-social' import unitsTranslations from '../source/locales/units.yaml' -it('use unit that exists in publicodes', () => { - const rules = parsePublicodes(rawRules) - const units = uniq( - Object.keys(rules).reduce( - (prev, name) => [ - ...prev, - ...(rules[name].unit?.numerators ?? []), - ...(rules[name].unit?.denumerators ?? []), - ], - [] +describe('Tests units', function () { + it('use unit that exists in publicodes', function () { + const rules = parsePublicodes(rawRules) + const units = uniq( + Object.keys(rules).reduce( + (prev, name) => [ + ...prev, + ...(rules[name].unit?.numerators ?? []), + ...(rules[name].unit?.denumerators ?? []), + ], + [] + ) ) - ) - const blackList = ['€', '%'] - const translatedKeys = Object.keys(unitsTranslations.en) - const missingTranslations = units.filter( - (unit) => ![...translatedKeys, ...blackList].includes(unit) - ) - expect(missingTranslations).to.be.empty + const blackList = ['€', '%'] + const translatedKeys = Object.keys(unitsTranslations.en) + const missingTranslations = units.filter( + (unit) => ![...translatedKeys, ...blackList].includes(unit) + ) + expect(missingTranslations).to.be.empty + }) }) diff --git a/yarn.lock b/yarn.lock index 6f5ecdebd..a527aaa9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -111,13 +111,6 @@ "@algolia/logger-common" "4.12.0" "@algolia/requester-common" "4.12.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" @@ -266,7 +259,7 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": +"@babel/highlight@^7.16.7": version "7.16.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== @@ -514,18 +507,18 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -568,16 +561,16 @@ dependencies: tslib "^2.1.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" + integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -1667,7 +1660,7 @@ resolved "https://registry.yarnpkg.com/@types/iframe-resizer/-/iframe-resizer-3.5.9.tgz#75c4cda33cee5f4da4c7693a0d9ad1ccb0c5ee98" integrity sha512-RQUBI75F+uXruB95BFpC/8V8lPgJg4MQ6HxOCtAZYBB/h0FNCfrFfb4I+u2pZJIV7sKeszZbFqy1UnGeBMrvsA== -"@types/json-schema@^7.0.7": +"@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -1847,75 +1840,85 @@ resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.4.tgz#fad54fef623464dacd9e765d854f0e76ff1184f7" integrity sha512-RRHc1+8Hc5mf/2lZKnom6kCnqcNS07s8keahniWTOva0KELF6RgDJmaEcvGEKUUJgN4UgessmEsWuidaOycIOw== -"@typescript-eslint/eslint-plugin@^4.0.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== +"@typescript-eslint/eslint-plugin@^5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152" + integrity sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q== dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" + "@typescript-eslint/scope-manager" "5.10.2" + "@typescript-eslint/type-utils" "5.10.2" + "@typescript-eslint/utils" "5.10.2" + debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== +"@typescript-eslint/parser@^5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.2.tgz#b6076d27cc5499ce3f2c625f5ccde946ecb7db9a" + integrity sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" + "@typescript-eslint/scope-manager" "5.10.2" + "@typescript-eslint/types" "5.10.2" + "@typescript-eslint/typescript-estree" "5.10.2" + debug "^4.3.2" + +"@typescript-eslint/scope-manager@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz#92c0bc935ec00f3d8638cdffb3d0e70c9b879639" + integrity sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw== + dependencies: + "@typescript-eslint/types" "5.10.2" + "@typescript-eslint/visitor-keys" "5.10.2" + +"@typescript-eslint/type-utils@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz#ad5acdf98a7d2ab030bea81f17da457519101ceb" + integrity sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw== + dependencies: + "@typescript-eslint/utils" "5.10.2" + debug "^4.3.2" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.2.tgz#604d15d795c4601fffba6ecb4587ff9fdec68ce8" + integrity sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== + +"@typescript-eslint/typescript-estree@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz#810906056cd3ddcb35aa333fdbbef3713b0fe4a7" + integrity sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ== + dependencies: + "@typescript-eslint/types" "5.10.2" + "@typescript-eslint/visitor-keys" "5.10.2" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.2.tgz#1fcd37547c32c648ab11aea7173ec30060ee87a8" + integrity sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.10.2" + "@typescript-eslint/types" "5.10.2" + "@typescript-eslint/typescript-estree" "5.10.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.0.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== +"@typescript-eslint/visitor-keys@5.10.2": + version "5.10.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz#fdbf272d8e61c045d865bd6c8b41bea73d222f3d" + integrity sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q== dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== - dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "5.10.2" + eslint-visitor-keys "^3.0.0" "@vitejs/plugin-legacy@^1.6.4": version "1.6.4" @@ -1952,10 +1955,10 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.7.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== aggregate-error@^3.0.0: version "3.1.0" @@ -1975,16 +1978,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - algoliasearch-helper@>=3, algoliasearch-helper@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.7.0.tgz#c0a0493df84d850360f664ad7a9d4fc78a94fd78" @@ -2869,7 +2862,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -3040,7 +3033,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5, enquirer@^2.3.6: +enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3243,19 +3236,24 @@ escodegen@~1.2.0: optionalDependencies: source-map "~0.1.30" -eslint-config-prettier@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0" - integrity sha512-sZwhSTHVVz78+kYD3t5pCWSYEdVSBR0PXnwjDRsUs8ytIrK8PLXw+6FKp8r3Z7rx4ZszdetWlXYKOHoUrrwPlA== - dependencies: - get-stdin "^6.0.0" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-plugin-mocha@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-8.2.0.tgz#1d9724edcef37583921ef853494200c2b8a3730d" - integrity sha512-8oOR47Ejt+YJPNQzedbiklDqS1zurEaNrxXpRs+Uk4DMDPVmKNagShFeUaYsfvWP55AhI+P1non5QZAHV6K78A== +eslint-plugin-cypress@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632" + integrity sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA== dependencies: - eslint-utils "^2.1.0" + globals "^11.12.0" + +eslint-plugin-mocha@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.3.tgz#a4ecf2351828e852156316b7e936e7336fc0ff5e" + integrity sha512-9mM7PZGxfejpjey+MrG0Cu3Lc8MyA5E2s7eUCdHXgS4SY/H9zLuwa7wVAjnEaoDjbBilA+0bPEB+iMO7lBUPcg== + dependencies: + eslint-utils "^3.0.0" ramda "^0.27.1" eslint-plugin-react-hooks@^4.3.0: @@ -3263,7 +3261,7 @@ eslint-plugin-react-hooks@^4.3.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== -eslint-plugin-react@^7.12.4: +eslint-plugin-react@^7.28.0: version "7.28.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== @@ -3291,12 +3289,13 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" @@ -3305,70 +3304,65 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - eslint-visitor-keys@^2.0.0: version "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@^7.0.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" + integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== + +eslint@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d" + integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" 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" + eslint-scope "^7.1.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.2.0" + espree "^9.3.0" esquery "^1.4.0" 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" + glob-parent "^6.0.1" globals "^13.6.0" - ignore "^4.0.6" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + 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" 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" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.2.0, espree@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" + integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== dependencies: - acorn "^7.4.0" + acorn "^8.7.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.1.0" esprima@^4.0.0: version "4.0.1" @@ -3724,11 +3718,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -3773,6 +3762,13 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -3808,7 +3804,7 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" -globals@^11.1.0: +globals@^11.1.0, globals@^11.12.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -3820,7 +3816,7 @@ globals@^13.6.0, globals@^13.9.0: dependencies: type-fest "^0.20.2" -globby@^11.0.3: +globby@^11.0.4: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -4191,7 +4187,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4385,7 +4381,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.13.1, js-yaml@^3.14.0: +js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -4413,11 +4409,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" @@ -4540,11 +4531,6 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -5027,7 +5013,7 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@^2.3.2: +prettier@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== @@ -5047,11 +5033,6 @@ process@0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-map-series@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promise-map-series/-/promise-map-series-0.3.0.tgz#41873ca3652bb7a042b387d538552da9b576f8a1" @@ -5514,7 +5495,7 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -5553,11 +5534,6 @@ request-progress@^3.0.0: dependencies: throttleit "^1.0.0" -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -5733,7 +5709,7 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.5: +semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -5870,7 +5846,7 @@ string-replace-to-array@^2.1.0: resolved "https://registry.yarnpkg.com/string-replace-to-array/-/string-replace-to-array-2.1.0.tgz#44571dbd33a3e23de31db948b5b84f1b7913fb39" integrity sha512-xG2w4fE5FsTXS4AFxoF3uctByqTIFBX8lFRNcPcIznTVCMXbYvbatkPVLpAo13tfuWtzbWEV6u5bjoE9bOv87w== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6007,17 +5983,6 @@ tabbable@^5.2.1: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.2.1.tgz#e3fda7367ddbb172dcda9f871c0fdb36d1c4cd9c" integrity sha512-40pEZ2mhjaZzK0BnI+QGNjJO8UYx9pP5v7BGe17SORTO0OEuuaAwQTkAp8whcZvqon44wKFOikD+Al11K3JICQ== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - 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" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"