Refacto de la config eslint (#1962)

*  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
pull/2000/head
Jérémy Rialland 2022-02-07 09:34:32 +01:00 committed by GitHub
parent e42c70d284
commit bbcb981c3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 378 additions and 356 deletions

View File

@ -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',
],
}

View File

@ -1,4 +1,3 @@
.eslintrc.js
dist
site/source/locales/*.yaml
site/source/ATInternetTracking/smarttag.js

View File

@ -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",

View File

@ -1,6 +0,0 @@
globals:
cy: false
Cypress: false
expect: false
env:
mocha: true

View File

@ -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",

View File

@ -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

View File

@ -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: {
</Grid>
<Grid item xs={12}>
{state.value && !searchPending && (
<Results results={results} onSubmit={props.onSubmit ?? (() => {})} />
<Results results={results} onSubmit={props.onSubmit} />
)}
</Grid>
</Grid>
@ -84,7 +84,7 @@ function Results({
onSubmit,
}: {
results: Array<FabriqueSocialEntreprise>
onSubmit: (établissement: FabriqueSocialEntreprise) => void
onSubmit?: (établissement: FabriqueSocialEntreprise) => void
}) {
return !results.length ? (
<FromTop>
@ -101,7 +101,7 @@ function Results({
<Grid container spacing={2} data-testid="company-search-results">
{results.map((etablissement) => (
<Grid key={etablissement.siren} item xs={12} xl={6}>
<StyledCard onPress={() => onSubmit(etablissement)} compact>
<StyledCard onPress={() => onSubmit?.(etablissement)} compact>
<CompanyDetails entreprise={etablissement} />
</StyledCard>
</Grid>

View File

@ -46,7 +46,7 @@ export default function LegalNotice() {
<br />
San Francisco, CA 94107 <br />
Site web :&nbsp;
<a href="https://www.netlify.com" target="_blank">
<a href="https://www.netlify.com" target="_blank" rel="noreferrer">
https://www.netlify.com
</a>
</Trans>
@ -56,7 +56,11 @@ export default function LegalNotice() {
</H2>
<Body>
<Trans i18nKey="legalNotice.contact.content">
<a target="_blank" href="mailto:contact@mon-entreprise.beta.gouv.fr">
<a
href="mailto:contact@mon-entreprise.beta.gouv.fr"
target="_blank"
rel="noreferrer"
>
contact@mon-entreprise.beta.gouv.fr
</a>
</Trans>

View File

@ -3,27 +3,29 @@ import { Trans } from 'react-i18next'
import { Link } from 'react-router-dom'
import Emoji from './utils/Emoji'
export default () => (
<div
style={{
color: '#333350',
margin: '15% auto',
width: '15em',
textAlign: 'center',
}}
>
<p>
<Trans i18nKey="404.message">
Cette page n'existe pas ou n'existe plus
</Trans>
<Emoji emoji=" 🙅" />
</p>
<Link to="/">
{/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */}
<img style={{ margin: '3%' }} width="100%" src={image} />
<em>
<Trans i18nKey="404.action">Revenir en lieu sûr</Trans>
</em>
</Link>
</div>
)
export default function Route404() {
return (
<div
style={{
color: '#333350',
margin: '15% auto',
width: '15em',
textAlign: 'center',
}}
>
<p>
<Trans i18nKey="404.message">
Cette page n'existe pas ou n'existe plus
</Trans>
<Emoji emoji=" 🙅" />
</p>
<Link to="/">
{/* TODO: credits for the image to add: https://thenounproject.com/term/treasure-map/96666/ */}
<img style={{ margin: '3%' }} width="100%" src={image} />
<em>
<Trans i18nKey="404.action">Revenir en lieu sûr</Trans>
</em>
</Link>
</div>
)
}

View File

@ -86,7 +86,11 @@ function TopSection({ toggles }: { toggles?: React.ReactNode }) {
alignItems="flex-end"
justifyContent="center"
>
<LogoContainer href={process.env.FR_BASE_URL} target="_blank">
<LogoContainer
href={process.env.FR_BASE_URL}
target="_blank"
rel="noreferrer"
>
<Logo />
</LogoContainer>
</Grid>

View File

@ -9,7 +9,7 @@ export default function ExportRecover() {
<Trans i18nKey="pages.simulateurs.print-info.recover">
Retrouvez cette simulation ainsi que d'autres outils d'aide à la
création et à la gestion d'entreprise, sur{' '}
<a href={useUrl()} target="_blank">
<a href={useUrl()} target="_blank" rel="noreferrer">
mon-entreprise.urssaf.fr
</a>
.

View File

@ -42,8 +42,9 @@ export default function InstitutionsPartenaires() {
<Condition expression="dirigeant . indépendant . PL . PAMC . participation CPAM > 0">
<InstitutionLine>
<InstitutionLogo
target="_blank"
href="https://www.ameli.fr/assure/droits-demarches/salaries-travailleurs-independants-et-personnes-sans-emploi/emploi-independant-non-salarie/praticien-auxiliaire-medical"
target="_blank"
rel="noreferrer"
>
<img src={assuranceMaladieSrc} title="Logo CPAM" />
</InstitutionLogo>
@ -93,8 +94,9 @@ export function CotisationsUrssaf({
return (
<InstitutionLine>
<InstitutionLogo
target="_blank"
href="https://www.urssaf.fr/portail/home.html"
target="_blank"
rel="noreferrer"
>
<img src={urssafSrc} title="logo Urssaf" />
</InstitutionLogo>
@ -116,7 +118,11 @@ export function ImpôtsDGFIP() {
return (
<Condition expression="impôt . montant > 0">
<InstitutionLine>
<InstitutionLogo target="_blank" href="https://www.impots.gouv.fr">
<InstitutionLogo
href="https://www.impots.gouv.fr"
target="_blank"
rel="noreferrer"
>
<img src={dgfipSrc} title="logo DGFiP" />
</InstitutionLogo>
<Body>
@ -161,8 +167,9 @@ function CaisseRetraite() {
<Condition expression={dottedName} key={caisse}>
<InstitutionLine>
<InstitutionLogo
target="_blank"
href={références && Object.values(références)[0]}
target="_blank"
rel="noreferrer"
>
<img src={logosSrc[caisse]} title={`logo ${caisse}`} />
</InstitutionLogo>
@ -210,7 +217,11 @@ export function InstitutionsPartenairesArtisteAuteur() {
/>
<Condition expression="artiste-auteur . cotisations . IRCEC > 0">
<InstitutionLine>
<InstitutionLogo target="_blank" href="http://www.ircec.fr/">
<InstitutionLogo
href="http://www.ircec.fr/"
target="_blank"
rel="noreferrer"
>
<img src={logosSrc['IRCEC']} title="logo IRCEC" />
</InstitutionLogo>
<Body>{descriptionIRCEC}</Body>

View File

@ -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 (
<>
<span {...labelProps} className="sr-only">
{props.label}
{propsBar.label}
</span>
<ProgressContainer {...progressBarProps}>
<ProgressBar style={{ width: `${progress * 100}%` }} />

View File

@ -42,6 +42,7 @@ type ScrollToElementProps = React.ComponentProps<'div'> & {
onlyIfNotVisible?: boolean
when?: boolean
behavior?: ScrollBehavior
style?: React.CSSProperties
}
export function ScrollToElement({

View File

@ -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 (
<Link target="_blank" href={href} {...otherProps}>
<Link target="_blank" rel="noreferrer" href={href} {...otherProps}>
{children}
</Link>
)
@ -60,6 +61,8 @@ const TextRenderer = ({ children }: { children: string }) => (
type MarkdownProps = React.ComponentProps<typeof MarkdownToJsx> & {
className?: string
components?: MarkdownToJSX.Overrides
renderers?: Record<string, unknown>
}
const CodeBlock = ({
@ -81,6 +84,7 @@ const CodeBlock = ({
<a
href={`https://publi.codes/studio?code=${encodeURIComponent(value)}`}
target="_blank"
rel="noreferrer"
css="position: absolute; bottom: 5px; right: 10px; color: white !important;"
>
<Emoji emoji="⚡" /> Lancer le calcul
@ -133,16 +137,24 @@ export const MarkdownWithAnchorLinks = ({
/>
)
const flatMapChildren = (children: React.ReactNode): Array<string> => {
const flatMapChildren = (children: React.ReactNode): Array<string | number> => {
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({

View File

@ -72,6 +72,7 @@ export function useExternalLinkProps({
return {
title: (title ? `${title} - ` : '') + t('Nouvelle fenêtre'),
target: '_blank',
rel: 'noreferrer',
external: true,
children: children && (
<>

View File

@ -59,6 +59,7 @@ export default function Accessibilité() {
<Link
href="https://www.acoss.fr/files/RGAA/accessibilite_numerique-schema_pluriannuel_2020_2022-Acoss.pdf"
target="_blank"
rel="noreferrer"
title="La stratégie et le plan daction à mettre en œuvre - Nouvelle fenêtre"
>
la stratégie et le plan daction à mettre en œuvre
@ -81,6 +82,7 @@ export default function Accessibilité() {
<Link
href="https://numerique.gouv.fr/publications/rgaa-accessibilite/"
target="_blank"
rel="noreferrer"
title="Référentiel général damélioration de laccessibilité (RGAA) - Nouvelle fenêtre"
>
référentiel général damélioration de laccessibilité (RGAA)
@ -123,6 +125,7 @@ export default function Accessibilité() {
<Link
href="https://formulaire.defenseurdesdroits.fr/"
target="_blank"
rel="noreferrer"
title="https://formulaire.defenseurdesdroits.fr/ - Nouvelle fenêtre"
>
https://formulaire.defenseurdesdroits.fr/
@ -134,6 +137,7 @@ export default function Accessibilité() {
<Link
href="https://www.defenseurdesdroits.fr/saisir/delegues"
target="_blank"
rel="noreferrer"
title="https://www.defenseurdesdroits.fr/saisir/delegues - Nouvelle fenêtre"
>
https://www.defenseurdesdroits.fr/saisir/delegues

View File

@ -173,7 +173,7 @@ export function References({ references }: ReferencesProps) {
/>
)}
</span>
<a href={link} target="_blank">
<a href={link} target="_blank" rel="noreferrer">
{capitalise0(name)}
</a>
<span className="ui__ label">{domain}</span>

View File

@ -29,6 +29,7 @@ export default function ResultatsSimples() {
<Link
href="https://www.impots.gouv.fr/portail/www2/minisite/declaration/independants.html?11"
target="_blank"
rel="noreferrer"
>
En savoir plus
</Link>

View File

@ -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"
>
{' '}
<Trans>Plus d'informations</Trans>
@ -87,7 +88,11 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<Trans i18nKey="embauche.tâches.dpae.description">
Ceci peut être fait par le biais du formulaire appelé DPAE, doit
être complété dans les 8 jours avant toute embauche, et peut{' '}
<a href="https://www.due.urssaf.fr" target="_blank">
<a
href="https://www.due.urssaf.fr"
target="_blank"
rel="noreferrer"
>
être effectué en ligne
</a>
.
@ -106,13 +111,18 @@ function Embaucher({ onChecklistInitialization, onItemCheck }: EmbaucherProps) {
<Trans i18nKey="embauche.tâches.logiciel de paie.description">
Les fiches de paie et les déclarations peuvent être traitées en
ligne gratuitement par le{' '}
<a href="http://www.letese.urssaf.fr" target="_blank">
<a
href="http://www.letese.urssaf.fr"
target="_blank"
rel="noreferrer"
>
Tese
</a>
. Vous pouvez aussi utiliser un{' '}
<a
href="http://www.dsn-info.fr/convention-charte.htm"
target="_blank"
rel="noreferrer"
>
logiciel de paie privé.
</a>
@ -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"
>
<Trans>Plus d'informations</Trans>
</a>
@ -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"
>
<Trans i18nKey="embauche.tâches.pension.description">
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).
<br />
Certaines offres de service de lUrssaf comme le{' '}
<Link href="https://www.letese.urssaf.fr" target="_blank">
<Link
href="https://www.letese.urssaf.fr"
target="_blank"
rel="noreferrer"
>
titre emploi service entreprise (Tese)
</Link>{' '}
ou le{' '}
<Link href="https://www.cesu.urssaf.fr" target="_blank">
<Link
href="https://www.cesu.urssaf.fr"
target="_blank"
rel="noreferrer"
>
chèque emploi associatif (CEA)
</Link>{' '}
gèrent automatiquement la transmission de la DSN pour vous.

View File

@ -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'

View File

@ -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 }) => ({

View File

@ -707,6 +707,7 @@ export function getSimulatorsData({
versement des dividendes, sauf si le bénéficiaire remplit{' '}
<a
target="_blank"
rel="noreferrer"
title="Aller sur le site Service Public sur les dividendes"
href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F32963"
>

View File

@ -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) => (
<Grid item xs={6} md={4} lg={3}>
<Indicator main={main} subTitle={subTitle} footnote={footnote} />
</Grid>

View File

@ -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 (

View File

@ -43,6 +43,7 @@ export default function Library() {
<Link
href="https://publi.codes/documentation/se-lancer"
target="_blank"
rel="noreferrer"
>
documentation dédiée
</Link>
@ -78,7 +79,7 @@ export default function Library() {
</Body>
<Body>
Toutes ces variables sont listées et expliquées sur la{' '}
<Link target="_blank" href="/documentation">
<Link target="_blank" rel="noreferrer" href="/documentation">
documentation en ligne
</Link>
. Cette documentation est auto-générée depuis les fichiers de règles

View File

@ -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(/^:.*?\//, '/')),

View File

@ -76,3 +76,7 @@ export function omit<T, K extends keyof T>(obj: T, key: K): Omit<T, K> {
delete returnObject[key]
return returnObject
}
export function isIterable<T>(obj: unknown): obj is Iterable<T> {
return Symbol.iterator in Object(obj)
}

View File

@ -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'

View File

@ -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
})
})

343
yarn.lock
View File

@ -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"