diff --git a/.eslintrc.js b/.eslintrc.js index 4d604c901b60280cffb38ec3f550d01b84bbda2f..ecbdf8bed73adb95b3afc85268186afbfa9439dd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -29,6 +29,8 @@ module.exports = { 'no-console': 'off', '@typescript-eslint/no-explicit-any': 'warn', '@typescript-eslint/prefer-optional-chain': 'warn', + 'no-param-reassign': 'warn', + 'spaced-comment': ['error', 'always', { block: { exceptions: ['*'] } }], 'react/self-closing-comp': 'warn', }, settings: { diff --git a/package.json b/package.json index 608ce972b4129527c28a4ab6f734e1a4c2a4f6d1..e461dbb151290fb75aa9cdc9de618aca488d4f07 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "deploy-dev": "git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev}", "deploy-test": "git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-test}", "lint": "yarn lint:js", - "lint:js": "cs lint {src,test}/**/*.{js,jsx,ts,tsx} --fix", + "lint:js": "eslint src -c .eslintrc.js --fix", "load-data": "cd test && importData.bat", "prebuild": "yarn lint", "prepare": "husky install", @@ -63,7 +63,6 @@ "cozy-ui": "79.3.0", "d3": "^6.0.0", "detect-browser": "^5.1.1", - "eslint-config-cozy-app": "5.1.0", "file-saver": "^2.0.5", "global": "^4.4.0", "handlebars": "^4.7.7", diff --git a/src/components/Analysis/MaxConsumptionCard.spec.tsx b/src/components/Analysis/MaxConsumptionCard.spec.tsx index 2ddf41589a393cecfcbc066aae5d5efaff276123..ec38f627242e4390c7442297dd30f9ecd8ff48b0 100644 --- a/src/components/Analysis/MaxConsumptionCard.spec.tsx +++ b/src/components/Analysis/MaxConsumptionCard.spec.tsx @@ -78,12 +78,12 @@ describe('MaxConsumptionCard component', () => { </Provider> ) expect(wrapper.find('.arrow-next').exists()).toBeTruthy() - //navigate next + // navigate next wrapper.find('.arrow-next').first().simulate('click') expect(wrapper.find('.fluid').text()).toBe('FLUID.GAS.LABEL') wrapper.find('.arrow-next').first().simulate('click') expect(wrapper.find('.fluid').text()).toBe('FLUID.ELECTRICITY.LABEL') - //navigate prev + // navigate prev wrapper.find('.arrow-prev').first().simulate('click') expect(wrapper.find('.fluid').text()).toBe('FLUID.GAS.LABEL') wrapper.find('.arrow-prev').first().simulate('click') diff --git a/src/components/Challenge/ChallengeCardLocked.spec.tsx b/src/components/Challenge/ChallengeCardLocked.spec.tsx index 84fee1557824212f28c305867f4d42d2a9869718..80236b17128106e6182305ff54c56fc882de0776 100644 --- a/src/components/Challenge/ChallengeCardLocked.spec.tsx +++ b/src/components/Challenge/ChallengeCardLocked.spec.tsx @@ -12,7 +12,7 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => { }), } }) -//TODO fis MUI theme error +// TODO fis MUI theme error describe('ChallengeCardLocked component', () => { it('should be rendered correctly', () => { const component = shallow( diff --git a/src/components/Challenge/ChallengeCardOnGoing.tsx b/src/components/Challenge/ChallengeCardOnGoing.tsx index 9933fcbee9c92fbeb3c714c2aec83529ba3312cb..be9eb1452d2e10d288d0d6c459a9b5725c31510f 100644 --- a/src/components/Challenge/ChallengeCardOnGoing.tsx +++ b/src/components/Challenge/ChallengeCardOnGoing.tsx @@ -50,7 +50,7 @@ const ChallengeCardOnGoing: React.FC<ChallengeCardOnGoingProps> = ({ }, []) const goDuel = async () => { setIsLoading(true) - //Check if at least one fluid is up + // Check if at least one fluid is up if (fluidTypes.length !== 0) { if (userChallenge.duel.state !== UserDuelState.ONGOING) { const challengeService = new ChallengeService(client) diff --git a/src/components/Challenge/ChallengeView.tsx b/src/components/Challenge/ChallengeView.tsx index 7e3e1b74400fb374057a641308494c6ba64846c6..49a0ee304f46ef334935fa6504d92e0bc7b47314 100644 --- a/src/components/Challenge/ChallengeView.tsx +++ b/src/components/Challenge/ChallengeView.tsx @@ -36,7 +36,7 @@ const ChallengeView: React.FC = () => { } const resetValues = () => { - //Method used to cancel a swipe on a simple click + // Method used to cancel a swipe on a simple click setTouchEnd(0) setTouchStart(0) } @@ -85,16 +85,16 @@ const ChallengeView: React.FC = () => { } const handleClickOrTouchEnd = () => { - //if the swipe is too small and can be taken for a touch + // if the swipe is too small and can be taken for a touch if (touchStart && touchEnd) { if (touchStart - touchEnd < 5 && -5 < touchStart - touchEnd) return - //Change the following value in order to change the swipe sensibilyy + // Change the following value in order to change the swipe sensibilyy if (touchStart - touchEnd > 75) { - //If swipe left move slider right and add positive translation + // If swipe left move slider right and add positive translation moveSliderRight() } if (touchStart - touchEnd < -75) { - //If swipe right move slider left and add negative translation + // If swipe right move slider left and add negative translation moveSliderLeft() } } diff --git a/src/components/Challenge/StarsContainer.tsx b/src/components/Challenge/StarsContainer.tsx index 2559ff83acb1c4de1994214d1acdcf5ff76560c1..47ce2ce2b5535aaef9a2251b151d6232058d011e 100644 --- a/src/components/Challenge/StarsContainer.tsx +++ b/src/components/Challenge/StarsContainer.tsx @@ -16,7 +16,7 @@ const StarsContainer: React.FC<StarsContainerProps> = ({ useEffect(() => { const renderStars = () => { - //To be removed when action and explorations will be done + // To be removed when action and explorations will be done if (result === 5) { elements.splice(0, elements.length) } diff --git a/src/components/Connection/ConnectionResult.tsx b/src/components/Connection/ConnectionResult.tsx index 214dadb432b29f2b133e84845c040769ecd0b501..9fc8b66bd622340ccb59b4c03dde027d912b9ece 100644 --- a/src/components/Connection/ConnectionResult.tsx +++ b/src/components/Connection/ConnectionResult.tsx @@ -119,7 +119,7 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({ if (fluidType == FluidType.ELECTRICITY) { const accountData = fluidStatus.connection.account ?.auth as AccountSgeData - //store the previous account data since the onDelete will remove account from DB + // store the previous account data since the onDelete will remove account from DB dispatch( updateSgeStore({ currentStep: 0, diff --git a/src/components/Connection/ExpiredConsentModal.tsx b/src/components/Connection/ExpiredConsentModal.tsx index 792c8301f707e54b63001033112137c3ac2070c9..ef0c9c5ee1e79676fdf55d944776d9c241b6cb56 100644 --- a/src/components/Connection/ExpiredConsentModal.tsx +++ b/src/components/Connection/ExpiredConsentModal.tsx @@ -39,7 +39,7 @@ const ExpiredConsentModal: React.FC<ExpiredConsentModalProps> = ({ if (fluidType === FluidType.ELECTRICITY) { const accountData = fluidStatus[FluidType.ELECTRICITY].connection.account ?.auth as AccountSgeData - //store the previous account data since the onDelete will remove account from DB + // store the previous account data since the onDelete will remove account from DB dispatch( updateSgeStore({ currentStep: 0, diff --git a/src/components/Connection/FormOAuth.tsx b/src/components/Connection/FormOAuth.tsx index 08dd87b6588ed37684a4cfcb9a16dd2e39c96d82..93eb4226d71030e257ce674a95612e72073ae415 100644 --- a/src/components/Connection/FormOAuth.tsx +++ b/src/components/Connection/FormOAuth.tsx @@ -33,7 +33,7 @@ const FormOAuth: React.FC<FormOAuthProps> = ({ const dispatch = useDispatch() const endOAuth = useCallback(() => { setStatus(IDLE) - //Set back to false the variable that allows to automatically refresh the consent (deletes and recreates the account) + // Set back to false the variable that allows to automatically refresh the consent (deletes and recreates the account) dispatch(setShouldRefreshConsent(false)) }, [dispatch]) diff --git a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx index 31bf92185c0694392301ece6e18260f6de790754..9377278e20666b2d250966bfdae2446230b00954 100644 --- a/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx +++ b/src/components/ConsumptionVisualizer/DataloadConsumptionVisualizer.spec.tsx @@ -163,7 +163,7 @@ describe('Dataload consumption visualizer component', () => { const mockAddEvent = jest.fn() UsageEventService.addEvent = mockAddEvent - //Render Navlinks to fluids + // Render Navlinks to fluids wrapper.find('.dataloadvisualizer-euro-fluid').first().simulate('click') expect(mockAddEvent).toHaveBeenCalled() }) diff --git a/src/components/ConsumptionVisualizer/DataloadNoValue.tsx b/src/components/ConsumptionVisualizer/DataloadNoValue.tsx index e00a7d364f4fad6492e0791110b50331c5b285aa..cef6acd8c784debd24d4757265284e0b0b00ca8b 100644 --- a/src/components/ConsumptionVisualizer/DataloadNoValue.tsx +++ b/src/components/ConsumptionVisualizer/DataloadNoValue.tsx @@ -25,12 +25,12 @@ const DataloadNoValue: React.FC<DataloadNoValueProps> = ({ const content = document.querySelector('.content-view') if (content && app) { setTimeout(() => { - //Desktop devices + // Desktop devices app.scrollTo({ top: content.scrollHeight + 300, behavior: 'smooth', }) - //Mobiles devices + // Mobiles devices app.scrollIntoView({ behavior: 'smooth', block: 'end', diff --git a/src/components/Ecogesture/SingleEcogesture.tsx b/src/components/Ecogesture/SingleEcogesture.tsx index 5368d0dcaef600f6fad9839d817c2b15dd61a011..58b9237fa77d9516f247ad05f6aa865fbb839415 100644 --- a/src/components/Ecogesture/SingleEcogesture.tsx +++ b/src/components/Ecogesture/SingleEcogesture.tsx @@ -95,7 +95,7 @@ const SingleEcogesture: React.FC = () => { if (subscribed) { if (data?.[0]) { setEcogesture(data[0]) - //Prevent case this key doesn't exist in doctype + // Prevent case this key doesn't exist in doctype setIsObjective(data[0].objective) setIsDoing(data[0].doing) const icon = await importIconById(data[0].id, 'ecogesture') diff --git a/src/components/EcogestureForm/EcogestureFormView.spec.tsx b/src/components/EcogestureForm/EcogestureFormView.spec.tsx index 9e98552b954a5a99919aef179238e9c3e6e99cc1..ced14d322584a1e305bf25e77408304d441950b2 100644 --- a/src/components/EcogestureForm/EcogestureFormView.spec.tsx +++ b/src/components/EcogestureForm/EcogestureFormView.spec.tsx @@ -98,13 +98,13 @@ describe('EcogestureFormView component', () => { <EcogestureFormView /> </Provider> ) - //go first to next step + // go first to next step await waitForComponentToPaint(wrapper) wrapper.find('input').first().simulate('change') await waitForComponentToPaint(wrapper) wrapper.find(Button).at(1).simulate('click') await waitForComponentToPaint(wrapper) - //then go back + // then go back wrapper.find(Button).first().simulate('click') expect(wrapper.find('.ecogesture-form-single').exists()).toBeTruthy() }) diff --git a/src/components/FormGlobal/FormNavigation.tsx b/src/components/FormGlobal/FormNavigation.tsx index c720d5bb6e359f917011f99cb5f6829895c6e4c6..dc4fd447dfefce259af2e3a477d0d9dd5f94688b 100644 --- a/src/components/FormGlobal/FormNavigation.tsx +++ b/src/components/FormGlobal/FormNavigation.tsx @@ -36,7 +36,7 @@ const FormNavigation: React.FC<FormNavigationProps> = ({ } const handleNextClick = () => { handleNext() - //handle go back to connect for SGE + // handle go back to connect for SGE if (isLastConnectStep) { navigate('/consumption/electricity') } diff --git a/src/components/Home/ConsumptionView.tsx b/src/components/Home/ConsumptionView.tsx index f73f22f87cacaaa208002bcba1d626f20a35f46d..83a6b6199ecb48bf127eb9b54d0e763fbdc172bf 100644 --- a/src/components/Home/ConsumptionView.tsx +++ b/src/components/Home/ConsumptionView.tsx @@ -161,7 +161,7 @@ const ConsumptionView: React.FC<ConsumptionViewProps> = ({ useEffect(() => { let subscribed = true const expiredConsents: FluidType[] = [] - //Check if some fluids have expired consent error + // Check if some fluids have expired consent error for (const fluid of fluidStatus) { const error = fluid.connection.triggerState?.last_error if (error && getKonnectorUpdateError(error) === 'error_update_oauth') { diff --git a/src/components/Home/FluidButton.tsx b/src/components/Home/FluidButton.tsx index f4dfb311c37cfda5578adaad528d77996a1cd085..9d24a0d2bfd91151d24226762d4b6bb63f878fb2 100644 --- a/src/components/Home/FluidButton.tsx +++ b/src/components/Home/FluidButton.tsx @@ -74,7 +74,7 @@ const FluidButton: React.FC<FluidButtonProps> = ({ const isFluidMaintenance = () => fluidStatus[fluidType]?.maintenance useEffect(() => { - //Show errors only on konnected konnectors that are in error, outdated, with no data (specific case), and not in multifluid + // Show errors only on konnected konnectors that are in error, outdated, with no data (specific case), and not in multifluid if ( (fluidType !== FluidType.MULTIFLUID && isConnected() && isErrored()) || (fluidType !== FluidType.MULTIFLUID && isConnected() && isOutdated()) || diff --git a/src/components/Konnector/KonnectorModal.tsx b/src/components/Konnector/KonnectorModal.tsx index 1b6dd8ddb1ae49e9c3313e1e38ec11349999f17f..6796da60af91e44930b4132117a7ba45773a33ae 100644 --- a/src/components/Konnector/KonnectorModal.tsx +++ b/src/components/Konnector/KonnectorModal.tsx @@ -149,7 +149,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ {state === ERROR_EVENT && ( <> {error === KonnectorError.LOGIN_FAILED && ( - //LOGIN FAILED FOR ENEDIS AND EGL + // LOGIN FAILED FOR ENEDIS AND EGL <div className="konnector-config"> <Icon icon={errorIcon} size={48} /> <div className="kce-picto-txt text-20-bold"> @@ -196,7 +196,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ {error === KonnectorError.TERMS_VERSION_MISMATCH && isUpdating && fluidType === FluidType.ELECTRICITY && ( - //MISMATCH UPDATE ERROR ENEDIS + // MISMATCH UPDATE ERROR ENEDIS <div className="kce-picto-txt konnector-config mismatch"> <Icon icon={EnedisIcon} width={120} height={80} /> <div className="title text-20-bold"> @@ -215,7 +215,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ )} {error !== KonnectorError.LOGIN_FAILED && error !== KonnectorError.TERMS_VERSION_MISMATCH && ( - //DEFAULT CASE + // DEFAULT CASE <div className="konnector-config"> {console.log('errortype', error)} <Icon icon={errorIcon} size={48} /> @@ -237,7 +237,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({ </> )} {state === SUCCESS_EVENT && ( - //SUCCESS CASE + // SUCCESS CASE <div className="konnector-config"> <Icon icon={successIcon} size={48} /> <div className="kcs-picto-txt text-20-bold"> diff --git a/src/components/Konnector/KonnectorModalFooter.tsx b/src/components/Konnector/KonnectorModalFooter.tsx index 584dd67a680539af203bf5b9fb600d97a620cbb0..c8e14e357a442a2fbb47278a991d5498a92b48f9 100644 --- a/src/components/Konnector/KonnectorModalFooter.tsx +++ b/src/components/Konnector/KonnectorModalFooter.tsx @@ -52,7 +52,7 @@ const KonnectorModalFooter: React.FC<KonnectorModalFooterProps> = ({ const errorButtons = () => { switch (error) { case KonnectorError.USER_ACTION_NEEDED: - //INSEE CODE ERROR ENEDIS + // INSEE CODE ERROR ENEDIS return ( <Button aria-label={t('konnector_modal.accessibility.button_close')} @@ -67,7 +67,7 @@ const KonnectorModalFooter: React.FC<KonnectorModalFooterProps> = ({ </Button> ) case KonnectorError.LOGIN_FAILED: - //MISMATCH NAME / ADDRESS / PDL + // MISMATCH NAME / ADDRESS / PDL return ( <Button aria-label={t('konnector_modal.accessibility.button_close')} @@ -111,8 +111,8 @@ const KonnectorModalFooter: React.FC<KonnectorModalFooterProps> = ({ </div> ) default: - //DEFAULT FOOTER BUTTONS - //TODO change default button + // DEFAULT FOOTER BUTTONS + // TODO change default button return ( <Button aria-label={t('konnector_modal.accessibility.button_close')} @@ -130,7 +130,7 @@ const KonnectorModalFooter: React.FC<KonnectorModalFooterProps> = ({ } const successButton = () => { - //DEFAULT FOOTER BUTTONS + // DEFAULT FOOTER BUTTONS return ( <Button aria-label={t('konnector_modal.accessibility.button_close')} diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx index 694f150279862272115515c3fdbb35689fd7c5c7..e4b391981cf37fef3b8f4813f4eb3dcc578b42bc 100644 --- a/src/components/Konnector/KonnectorViewerCard.tsx +++ b/src/components/Konnector/KonnectorViewerCard.tsx @@ -184,7 +184,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({ const handleConnectionEnd = useCallback( async (isSuccess?: boolean) => { if ( - //CASE FOR GLOBAL LOGIN FAILED + // CASE FOR GLOBAL LOGIN FAILED (account && !isSuccess && (konnectorErrorDescription === KonnectorError.LOGIN_FAILED || @@ -193,7 +193,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({ fluidStatus !== null && fluidStatus.connection.account !== null && fluidStatus.connection.account.auth !== undefined) || - //CASE FOR ENEDIS CODE INSEE ERROR + // CASE FOR ENEDIS CODE INSEE ERROR (account && !isSuccess && !isUpdating && @@ -202,19 +202,19 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({ fluidStatus.connection.account !== null && fluidStatus.connection.account.auth !== undefined) ) { - //KEEP CREDENTIALS FOR EGL + // KEEP CREDENTIALS FOR EGL if (fluidSlug === FluidSlugType.WATER) { const auth = fluidStatus.connection.account.auth as AccountAuthData fluidStatus.connection.konnectorConfig.lastKnownCredentials = auth.login } - //DELETE ACCOUNT + // DELETE ACCOUNT const accountService = new AccountService(client) await accountService.deleteAccount(account) await handleAccountDeletion() } else { if (isSuccess && fluidStatus.lastDataDate === null) { - //UPDATE THE DACC EVENT STATUS TO SUCCESS + // UPDATE THE DACC EVENT STATUS TO SUCCESS await UsageEventService.udpateConnectionAttemptEvent( client, fluidSlug diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx index ea6cffa0c8b08d8a6ae93b8c42c74bca27d66bf9..a7432b5eb92cc99a539a70a5d255f46fd1ee8b26 100644 --- a/src/components/Splash/SplashRoot.tsx +++ b/src/components/Splash/SplashRoot.tsx @@ -214,7 +214,7 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => { ) ) - //init Terms + // init Terms const termsStatus: TermsStatus = await initializationService.initConsent() if (subscribed) dispatch(updateTermValidation(termsStatus)) diff --git a/src/locales/fr.json b/src/locales/fr.json index 522a8737951f6fd0052ebf074ec86943c909e5a6..fcf5f1b82b34a385ae9bd9bda04b414630494abb 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -854,7 +854,7 @@ "p6b": "Maintenance technique : ", "p6": "Délégation Développement économique, emploi & savoirs - Innovation numérique & systèmes d’information - Usages et services numériques - Développement des services numériques", "title1": "Crédits", - "part1": "Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, eslint-config-cozy-app, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.", + "part1": "Ce site est le résultat de développements spécifiques réalisés dans les langages Go, TypeScript, HTML et Sass. Les développements s’appuient sur plusieurs bibliothèques et frameworks libres : axios, cozy-bar, cozy-client, cozy-harvest-lib, cozy-scripts, cozy-ui, d3, detect-browser, global, lodash, luxon, moment, moment-timezone, node-sass, object-hash, react, react-dom, react-redux, react-router-dom, react-swipeable-views, redux-devtools-extension, sass-loader. Les tests de l’application s’appuient sur les bibliothèques et frameworks libres suivants: enzyme, enzyme-adapter-react-16, jest-junit, react-test-renderer, redux-mock-store. La pile technique intègre également les applications Cozy stack, Yarn, Docker, ACH. Les déploiements sont réalisés sur le registre hébergé chez Cozy. L’équipe de réalisation utilise au quotidien les applications GitLab, IceScrum, RocketChat, SonarQube.", "title2": "Traitement des données personnelles et droit d’accès, de modification et de suppression", "part2": "Conformément à la réglementation en vigueur en matière de protection des données personnelles, le service Ecolyo a fait l’objet d’une inscription au registre des traitements de la Métropole de Lyon. Ecolyo fait partie de l’écosystème de services orientés « self data » déployés par la Métropole de Lyon avec l’ambition d’offrir aux usagers métropolitains les outils et les services leur permettant d’exercer directement leur droit à la portabilité, dans un cadre apte à garantir aussi bien la transparence et le contrôle sur l’usage de leurs données personnelles que l’exploitation directe du contenu de ces données selon leurs libres choix. Le self data est en effet selon la Fondation Internet Nouvelle Génération (FING) « la production, l’exploitation et le partage de données personnelles par les individus, sous leur contrôle et à leurs propres fins ». Au sein de cet environnement self data, la gestion des données s’appuie sur l’organisation suivante des rôles et responsabilités associées : ", "part2-1": "Les partenaires du service GRDF et Eau Publique du Grand Lyon sont responsables exclusivement des seuls traitements de Données Personnelles relatifs à la collecte des données de consommation de gaz et d’eau de l’utilisateur et à leur transmission sur la plateforme de cloud personnel, après consentement de l’utilisateur.", diff --git a/src/services/account.service.spec.ts b/src/services/account.service.spec.ts index c52dfac07ef6af8d05f3d14f6d6da1b07b62ade5..a3d19f98421c49f3de145633f8b23cdb12e20836 100644 --- a/src/services/account.service.spec.ts +++ b/src/services/account.service.spec.ts @@ -30,7 +30,7 @@ describe('Account service', () => { mockHavestLibAccounts.createAccount.mockResolvedValueOnce(accountsData[2]) const mockAuthData: AccountAuthData = { login: 'login', - password: 'password', //NOSONAR + password: 'password', // NOSONAR } const result = await accountService.createAccount( konnectorsData[2], diff --git a/src/services/action.service.ts b/src/services/action.service.ts index 2383d7f14c6c55f9af7b6c3f7a79dee6e7b5db62..7a705f6501a4580806ec52db1786e4916f1788b2 100644 --- a/src/services/action.service.ts +++ b/src/services/action.service.ts @@ -38,7 +38,7 @@ export default class ActionService { .map(challenge => challenge.action) .filter(action => action.state === UserActionState.DONE) .map(action => action.ecogesture && action.ecogesture.id) - //Remove actions Done from the list + // Remove actions Done from the list if (actionsDone.length > 0) { actionsListIds.forEach(id => { if (actionsDone.includes(id)) { diff --git a/src/services/challenge.service.ts b/src/services/challenge.service.ts index fb7c042a7eb0a63983263c6bfdcb8e35a14359f5..012741fb6b44e8c916d83f5ec208335ad39770a0 100644 --- a/src/services/challenge.service.ts +++ b/src/services/challenge.service.ts @@ -162,7 +162,7 @@ export default class ChallengeService { ): Promise<boolean> { let isValid = false const fluidCondition: FluidType[] = exploration.fluid_condition - //check if the fluid is connected + // check if the fluid is connected if ( fluidStatus[fluidCondition[0]].status !== FluidState.KONNECTOR_NOT_FOUND && @@ -212,7 +212,7 @@ export default class ChallengeService { fluidStatus: FluidStatus[] ): Promise<UserChallenge | undefined> { let userChallenge: UserChallenge | null = null - //Check if it's a conditionnal exploration + // Check if it's a conditionnal exploration if (exploration.fluid_condition.length > 0) { const isConditionVerified = await this.isExplorationConditionVerified( exploration, @@ -228,7 +228,7 @@ export default class ChallengeService { ) return userChallenge } - } //if there is no condition, add the exploration + } // if there is no condition, add the exploration else { userChallenge = this.parseChallengeEntityToUserChallenge( challenge, @@ -383,7 +383,7 @@ export default class ChallengeService { quizEntities || [], relationEntities.quizEntityRelation._id ) - //Only one exploration relation + // Only one exploration relation if (relationEntities.explorationEntityRelation.length === 1) { const exploration: UserExploration = explorationService.getUserExplorationfromExplorationEntities( @@ -398,7 +398,7 @@ export default class ChallengeService { ) buildList.push(userChallenge) } - //Several explorations with fluid condition + // Several explorations with fluid condition else { await this.processExploration( explorationEntities, diff --git a/src/services/consumption.service.spec.ts b/src/services/consumption.service.spec.ts index b8757e23e964ab656f16744efe1ac05abc54d10c..226026b0218eb20bf7268620490e7e5289394e61 100644 --- a/src/services/consumption.service.spec.ts +++ b/src/services/consumption.service.spec.ts @@ -351,7 +351,7 @@ describe('Consumption service', () => { mockFetchFluidData.mockResolvedValueOnce(mockFetchDataComparison) mockFetchFluidData.mockResolvedValueOnce(mockFetchDataActual) mockFetchFluidData.mockResolvedValueOnce(mockFetchDataComparison) - //Incomplete Data to test all possibilities + // Incomplete Data to test all possibilities mockFetchFluidData.mockResolvedValueOnce([ { date: DateTime.fromISO('2020-08-01T00:23:20.000Z'), diff --git a/src/services/consumption.service.ts b/src/services/consumption.service.ts index 535e8857f51c31a890bd29c4f6328c86f6b9dfc2..3ad7142253b3466eff3013c0fc8994e957d88c23 100644 --- a/src/services/consumption.service.ts +++ b/src/services/consumption.service.ts @@ -403,7 +403,7 @@ export default class ConsumptionDataManager { private aggregateGraphData( singleFluidCharts: ISingleFluidChartData[] - //,withComparison: boolean = true + // ,withComparison: boolean = true ): Datachart | null { if (singleFluidCharts[0]?.chartData) { const converterService = new ConverterService() diff --git a/src/services/consumptionValidator.service.spec.ts b/src/services/consumptionValidator.service.spec.ts index 41aee67ea568051b34b999f90c11d3bc4aefb262..2957f46199dafdb72428df2c46ee6521e925bdaa 100644 --- a/src/services/consumptionValidator.service.spec.ts +++ b/src/services/consumptionValidator.service.spec.ts @@ -95,7 +95,7 @@ describe('ConsumptionFormatter service', () => { expect(result).toBeFalsy() }) it('should return false because of HALF_AN_HOUR and ValidateTimePeriodLength', () => { - fluidTypes = [0] //Only fluid without TimeStep incompatibilty + fluidTypes = [0] // Only fluid without TimeStep incompatibilty const mockTimePeriodTooLong: TimePeriod = { startDate: DateTime.fromISO('2020-10-01T00:00:00.000Z', { zone: 'utc', diff --git a/src/services/exploration.service.ts b/src/services/exploration.service.ts index 1bc61c88c8ded0ec3b84af5f13c2bfb30144f64b..40ddc77db05644fb4c019b09d13fa4275487a342 100644 --- a/src/services/exploration.service.ts +++ b/src/services/exploration.service.ts @@ -144,7 +144,7 @@ export default class ExplorationService { const updatedUserExploration: UserExploration = { ...userExploration, state: UserExplorationState.NOTIFICATION, - progress: 5, //userExploration.type === UserExplorationType.ACTION ? 3 : 1, + progress: 5, // userExploration.type === UserExplorationType.ACTION ? 3 : 1, } return updatedUserExploration } @@ -157,7 +157,7 @@ export default class ExplorationService { const updatedUserExploration: UserExploration = { ...userExploration, state: UserExplorationState.DONE, - progress: 5, //userExploration.type === UserExplorationType.ACTION ? 3 : 1, + progress: 5, // userExploration.type === UserExplorationType.ACTION ? 3 : 1, } return updatedUserExploration } @@ -194,7 +194,7 @@ export default class ExplorationService { const challengeService = new ChallengeService(this._client) switch (explorationID) { case UserExplorationID.EXPLORATION007: - //ECOLYO CONNEXION EXPLORATION + // ECOLYO CONNEXION EXPLORATION if ( currentChallenge.exploration.progress + 1 < currentChallenge.exploration.target diff --git a/src/services/fluidConfig.service.ts b/src/services/fluidConfig.service.ts index e78242383011c4f0eb662ac64bfb228c29e0fd03..b6aae3539923e43031c0aed00555ccef4c1a6324 100644 --- a/src/services/fluidConfig.service.ts +++ b/src/services/fluidConfig.service.ts @@ -12,8 +12,8 @@ export default class ConfigService { * @param max Maximum hour for cron */ public getCronArgs(min = 8, max = 9): string { - const randomHour = Math.floor(Math.random() * (max - min + 1) + min) //NOSONAR - const randomMinutes = Math.floor(Math.random() * 59) //NOSONAR + const randomHour = Math.floor(Math.random() * (max - min + 1) + min) // NOSONAR + const randomMinutes = Math.floor(Math.random() * 59) // NOSONAR return `0 ${randomMinutes} ${randomHour} * * *` } } diff --git a/src/services/fluidsPrices.service.ts b/src/services/fluidsPrices.service.ts index 91dea069893fa1b05968be1ef058284c99588676..39ac3bf3469841cbef873209ff80e67d88869bc3 100644 --- a/src/services/fluidsPrices.service.ts +++ b/src/services/fluidsPrices.service.ts @@ -23,7 +23,7 @@ export default class FluidPricesService { */ public async getAllPrices(): Promise<FluidPrice[]> { const query: QueryDefinition = Q(FLUIDPRICES_DOCTYPE).limitBy(900) - //TODO : handle case of 1000+ entries in doctype + // TODO : handle case of 1000+ entries in doctype const { data: fluidsPrices }: QueryResult<FluidPrice[]> = await this._client.query(query) return fluidsPrices diff --git a/src/services/performanceIndicator.service.spec.ts b/src/services/performanceIndicator.service.spec.ts index ec4706dce86629482fbe83a5842d0d634d849380..e73c56e12bbff334a54eb2dad48533a9787e833f 100644 --- a/src/services/performanceIndicator.service.spec.ts +++ b/src/services/performanceIndicator.service.spec.ts @@ -34,7 +34,7 @@ describe('performanceIndicator service', () => { ) expect(result).toEqual(expectedResult) - //Only two values + // Only two values performanceIndicator = [ { value: 10, @@ -58,7 +58,7 @@ describe('performanceIndicator service', () => { ) expect(result).toEqual(expectedResult) - //lack of value for one + // lack of value for one performanceIndicator = [ { value: null, @@ -87,7 +87,7 @@ describe('performanceIndicator service', () => { ) expect(result).toEqual(expectedResult) - //lack of compareValue for one + // lack of compareValue for one performanceIndicator = [ { value: 30, @@ -116,7 +116,7 @@ describe('performanceIndicator service', () => { ) expect(result).toEqual(expectedResult) - //Only one with no compared value + // Only one with no compared value performanceIndicator = [ { value: 30, @@ -135,7 +135,7 @@ describe('performanceIndicator service', () => { ) expect(result).toEqual(expectedResult) - //Only one with no value + // Only one with no value performanceIndicator = [ { value: null, diff --git a/src/services/profileType.service.ts b/src/services/profileType.service.ts index 3aab00466cb866d4b3e60bba663f1bd975fef282..5dafc811a2b4aba27376f9452a1a9179ee3c7148 100644 --- a/src/services/profileType.service.ts +++ b/src/services/profileType.service.ts @@ -83,7 +83,7 @@ export default class ProfileTypeService { this.profileType.hasReplacedHeater const heating = this.profileType.heating - //Apply corrections + // Apply corrections const correctionsNbWalls = heatingData.adjustment_outisde_facing_walls[housingType] const correctionWalls: number = correctionsNbWalls[outsideFacingWalls] @@ -497,7 +497,7 @@ export default class ProfileTypeService { .endOf('month') .plus({ minutes: 5 }) .toISO() - //We add or remove 5 minutes so the api returns the exact period + // We add or remove 5 minutes so the api returns the exact period try { const result = await this._client .getStackClient() diff --git a/src/services/quiz.service.ts b/src/services/quiz.service.ts index 8f6aa656e7543b081b4063f0e77d488fb6552c09..ca0bb4cb5a4b2332a13ea7426ee0fc3ca468f28b 100644 --- a/src/services/quiz.service.ts +++ b/src/services/quiz.service.ts @@ -289,7 +289,7 @@ export default class QuizService { if (customQuestionEntity.singleFluid === true) { let unitLabel = 'kWh' let fluidLabel = "d'électricité" - //Define the right fluidType + // Define the right fluidType if (fluidType.includes(FluidType.ELECTRICITY)) { useFluidType = [FluidType.ELECTRICITY] unit = 'kWh' @@ -303,12 +303,12 @@ export default class QuizService { unitLabel = 'litre' fluidLabel = "d'eau" } - //Adapt the question + // Adapt the question questionLabel = questionLabel.replace('#unit', unitLabel) questionLabel = questionLabel.replace('#fluid', fluidLabel) } if (customQuestionEntity.type === CustomQuestionType.DATE) { - //Interval + // Interval const intervalAsnwer: IntervalAnswer = await this.getMaxLoadOnLastInterval( customQuestionEntity.timeStep, @@ -321,7 +321,7 @@ export default class QuizService { finalInterval ) } else if (customQuestionEntity.type === CustomQuestionType.MAXDATA) { - //Max data + // Max data const consumptionService = new ConsumptionDataManager(this._client) let maxLoad = await consumptionService.getMaxLoad( finalInterval, @@ -333,7 +333,7 @@ export default class QuizService { maxLoad = maxLoad === null ? 0 : maxLoad answers = this.getAnswersForNumberValue(maxLoad as number, unit) } else { - //average + // average const averageLoad: number = await this.getAverageOnGivenPeriod( customQuestionEntity.timeStep, finalInterval, @@ -642,11 +642,11 @@ export default class QuizService { private getAnswersForNumberValue(maxLoad: number, unit: string): Answer[] { const coefList: number[] = [0.6, 0.7, 0.8, 0.12, 0.13] // Pick a random number in the coefList and remove it from array - const index1: number = Math.floor(Math.random() * coefList.length) //NOSONAR + const index1: number = Math.floor(Math.random() * coefList.length) // NOSONAR const roll: number[] = coefList.splice(index1, 1) const coef1: number = roll[0] // Pick a second number in the coefList - const index2: number = Math.floor(Math.random() * coefList.length) //NOSONAR + const index2: number = Math.floor(Math.random() * coefList.length) // NOSONAR const roll2: number[] = coefList.splice(index2, 1) const coef2: number = roll2[0] // Format answers diff --git a/src/services/usageEvent.service.ts b/src/services/usageEvent.service.ts index 6ab397dddc94aded55f52890a8a6c70860ede6ce..9b18e59c4e342fd543fb8410e12019c12a244779 100644 --- a/src/services/usageEvent.service.ts +++ b/src/services/usageEvent.service.ts @@ -77,7 +77,7 @@ export default class UsageEventService { konnectorSlug: string ): Promise<UsageEventEntity | undefined> { try { - //Get last Connection attempt Event + // Get last Connection attempt Event const query: QueryDefinition = Q(USAGEEVENT_DOCTYPE) .where({ type: UsageEventType.KONNECTOR_ATTEMPT_EVENT, diff --git a/src/store/global/global.reducer.ts b/src/store/global/global.reducer.ts index 848faf512645af8b0dc5798479555daf8672fd2a..624e2edbd11368e5476dcb9a06bcd910e081000a 100644 --- a/src/store/global/global.reducer.ts +++ b/src/store/global/global.reducer.ts @@ -141,7 +141,7 @@ const getFluidTypesFromStatus = (fluidStatus: FluidStatus[]): FluidType[] => { (fluid.status !== FluidState.KONNECTOR_NOT_FOUND && fluid.status !== FluidState.NOT_CONNECTED && fluid.status !== FluidState.ERROR_LOGIN_FAILED) || - //Handle Login Error case for oauth konnectors + // Handle Login Error case for oauth konnectors (fluid.status === FluidState.ERROR_LOGIN_FAILED && fluid.fluidType !== FluidType.WATER) ) { diff --git a/src/targets/services/aggregatorUsageEvents.ts b/src/targets/services/aggregatorUsageEvents.ts index fbdbf208f27aef9a4d46fa81939868c9d25c87a8..9a2c6fd14d664f99a0012268a3438a784aa75834 100644 --- a/src/targets/services/aggregatorUsageEvents.ts +++ b/src/targets/services/aggregatorUsageEvents.ts @@ -782,7 +782,7 @@ const sendKonnectorEvents = async (client: Client) => { }) .startOf('day') .toISODate(), - value: allConnectionEvents.length + 1, //+1 in order to count the success + value: allConnectionEvents.length + 1, // +1 in order to count the success } // Send indicator if it's in current month if (successEvent.eventDate.month === today.minus({ month: 1 }).month) { diff --git a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts index 3f9a56f5067212532b5652b798e69f526cb9a81c..ab802266964624187c87a08b331389733577213c 100644 --- a/src/targets/services/enedisHalfHourMonthlyAnalysis.ts +++ b/src/targets/services/enedisHalfHourMonthlyAnalysis.ts @@ -191,7 +191,7 @@ const getEnedisMonthAnalysisData = async ( const syncEnedisMonthlyAnalysisDataDoctype = async ({ client, }: EnedisMonthlyProps) => { - //SERVICE RUNS ONLY IF ENEDIS MINUTE IS ACTIVATED + // SERVICE RUNS ONLY IF ENEDIS MINUTE IS ACTIVATED const emas = new EnedisMonthlyAnalysisDataService(client) const cs = new ConsumptionService(client) const firstMinuteData = (await cs.getFirsDataDateFromDoctype( @@ -200,7 +200,7 @@ const syncEnedisMonthlyAnalysisDataDoctype = async ({ const lastEnedisMonthlyAnalysis = await emas.getLastEnedisMonthlyAnalysis() if (firstMinuteData && firstMinuteData[0]) { - //First creates the analysis of the month - 1 + // First creates the analysis of the month - 1 logStack('info', 'Fetching last Enedis monthly Analysis...') const firstMinuteDate = DateTime.fromObject({ year: firstMinuteData[0].year, @@ -234,7 +234,7 @@ const syncEnedisMonthlyAnalysisDataDoctype = async ({ logStack('info', 'Getting first endis half hour data date') if (lastEnedisMonthlyAnalysis.length > 0) { - //If user has more than one entry (already synced), fetch the full history + // If user has more than one entry (already synced), fetch the full history const firstEnedisMonthlyAnalysis = (await cs.getFirsDataDateFromDoctype( ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE )) as EnedisMonthlyAnalysisData[] @@ -271,7 +271,7 @@ const syncEnedisMonthlyAnalysisDataDoctype = async ({ } } } else { - //If user only have the last analysis available, fetch one year history + // If user only have the last analysis available, fetch one year history logStack( 'info', 'Doctype is empty, fetching history for one year maximum or until first enedis minute date' diff --git a/src/targets/services/fluidsPrices.ts b/src/targets/services/fluidsPrices.ts index 4f4c1137cee6ae0244fef384fa2dee0d953a6e0f..fd0208f8c30d7cf85b447d2edc473de8659bccba 100644 --- a/src/targets/services/fluidsPrices.ts +++ b/src/targets/services/fluidsPrices.ts @@ -51,13 +51,13 @@ const synchroPricesToUpdate = async ( let firstEditedPrice: string | null = null await Promise.all( remotePrices.map(remotePrice => { - //eslint-disable-next-line no-async-promise-executor + // eslint-disable-next-line no-async-promise-executor return new Promise<void>(async resolve => { try { - //Check if price exist in database + // Check if price exist in database const existingPrice = await fps.checkIfPriceExists(remotePrice) if (existingPrice) { - //Check if the remote price is more recent + // Check if the remote price is more recent if ( existingPrice.UpdatedAt && remotePrice.UpdatedAt && @@ -67,7 +67,7 @@ const synchroPricesToUpdate = async ( 'debug', `Price exist in db but not up to date, updating it` ) - //If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation + // If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation if (firstEditedPrice === null) { firstEditedPrice = remotePrice.startDate } @@ -75,7 +75,7 @@ const synchroPricesToUpdate = async ( firstEditedPrice = remotePrice.startDate } - //update this price in db + // update this price in db await fps.updatePrice(existingPrice, { price: remotePrice.price, UpdatedAt: remotePrice.UpdatedAt, @@ -83,7 +83,7 @@ const synchroPricesToUpdate = async ( endDate: remotePrice.endDate, }) } else if (!existingPrice.UpdatedAt && remotePrice.UpdatedAt) { - //updatedAt key doesn't exist in db + // updatedAt key doesn't exist in db await fps.updatePrice(existingPrice, { UpdatedAt: remotePrice.UpdatedAt, }) @@ -92,14 +92,14 @@ const synchroPricesToUpdate = async ( } } else { logStack('debug', `Price doesn't exist in db, creating new price`) - //If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation + // If a price has been updated, set the oldest startDate of the edited price so we can redo aggregation if (firstEditedPrice === null) { firstEditedPrice = remotePrice.startDate } if (firstEditedPrice >= remotePrice.startDate) { firstEditedPrice = remotePrice.startDate } - //create price in db + // create price in db await fps.createPrice(remotePrice) } } catch (error) { @@ -239,7 +239,7 @@ const applyPrices = async (client: Client, fluidType: FluidType) => { const cdm = new ConsumptionDataManager(client) const qr = new QueryRunner(client) - //Synchro dbprices with remote prices + // Synchro dbprices with remote prices const firstEditedPriceDate = await synchroPricesToUpdate(client, fluidType) const firstDataDate = await cdm.fetchAllFirstDateData([fluidType]) const prices = await fluidsPricesService.getAllPrices() @@ -326,7 +326,7 @@ const applyPrices = async (client: Client, fluidType: FluidType) => { // If lastItem has a price, skip this day (in order to save perf) const lastItem = data?.data && data.data[data.data.length - 1] if (lastItem && priceData) { - //if a price has been updated in backoffice re-calculates all price from the firstEditedPriceDate + // if a price has been updated in backoffice re-calculates all price from the firstEditedPriceDate data && data.data.forEach((element: DataloadEntity) => { element.price = element.load * priceData.price diff --git a/yarn.lock b/yarn.lock index 644998649cb3dc2ad1de790b9ac75fef38429235..f2c2ae1fb0b07a72a3b9d1139b94ad6e5070bd06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -139,7 +139,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/eslint-parser@7.18.9", "@babel/eslint-parser@^7.16.3": +"@babel/eslint-parser@^7.16.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz#255a63796819a97b7578751bb08ab9f2a375a031" integrity sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ== @@ -1692,35 +1692,11 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356" - integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" - integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" - "@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" @@ -1739,16 +1715,6 @@ debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/gitignore-to-minimatch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" - integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - "@humanwhocodes/object-schema@^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" @@ -3017,21 +2983,6 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.0.tgz#8f159c4cdb3084eb5d4b72619a2ded942aa109e5" - integrity sha512-X3In41twSDnYRES7hO2xna4ZC02SY05UN9sGW//eL1P5k4CKfvddsdC2hOq0O3+WU1wkCPQkiTY9mzSnXKkA0w== - dependencies: - "@typescript-eslint/scope-manager" "5.36.0" - "@typescript-eslint/type-utils" "5.36.0" - "@typescript-eslint/utils" "5.36.0" - debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/eslint-plugin@^5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz#5ccdd5d9004120f28fc6e717fb4b5c9bddcfbc04" @@ -3047,16 +2998,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.36.0.tgz#c08883073fb65acaafd268a987fd2314ce80c789" - integrity sha512-dlBZj7EGB44XML8KTng4QM0tvjI8swDh8MdpE5NX5iHWgWEfIuqSfSE+GPeCrCdj7m4tQLuevytd57jNDXJ2ZA== - dependencies: - "@typescript-eslint/scope-manager" "5.36.0" - "@typescript-eslint/types" "5.36.0" - "@typescript-eslint/typescript-estree" "5.36.0" - debug "^4.3.4" - "@typescript-eslint/parser@^5.10.0": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" @@ -3085,14 +3026,6 @@ "@typescript-eslint/types" "5.30.5" "@typescript-eslint/visitor-keys" "5.30.5" -"@typescript-eslint/scope-manager@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.36.0.tgz#f4f859913add160318c0a5daccd3a030d1311530" - integrity sha512-PZUC9sz0uCzRiuzbkh6BTec7FqgwXW03isumFVkuPw/Ug/6nbAqPUZaRy4w99WCOUuJTjhn3tMjsM94NtEj64g== - dependencies: - "@typescript-eslint/types" "5.36.0" - "@typescript-eslint/visitor-keys" "5.36.0" - "@typescript-eslint/scope-manager@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz#044980e4f1516a774a418dafe701a483a6c9f9ca" @@ -3101,16 +3034,6 @@ "@typescript-eslint/types" "5.37.0" "@typescript-eslint/visitor-keys" "5.37.0" -"@typescript-eslint/type-utils@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.36.0.tgz#5d2f94a36a298ae240ceca54b3bc230be9a99f0a" - integrity sha512-W/E3yJFqRYsjPljJ2gy0YkoqLJyViWs2DC6xHkXcWyhkIbCDdaVnl7mPLeQphVI+dXtY05EcXFzWLXhq8Mm/lQ== - dependencies: - "@typescript-eslint/typescript-estree" "5.36.0" - "@typescript-eslint/utils" "5.36.0" - debug "^4.3.4" - tsutils "^3.21.0" - "@typescript-eslint/type-utils@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz#43ed2f567ada49d7e33a6e4b6f9babd060445fe5" @@ -3126,16 +3049,16 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== -"@typescript-eslint/types@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.36.0.tgz#cde7b94d1c09a4f074f46db99e7bd929fb0a5559" - integrity sha512-3JJuLL1r3ljRpFdRPeOtgi14Vmpx+2JcR6gryeORmW3gPBY7R1jNYoq4yBN1L//ONZjMlbJ7SCIwugOStucYiQ== - "@typescript-eslint/types@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.37.0.tgz#09e4870a5f3af7af3f84e08d792644a87d232261" integrity sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA== +"@typescript-eslint/types@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" + integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== + "@typescript-eslint/typescript-estree@5.30.5": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" @@ -3149,19 +3072,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.0.tgz#0acce61b4850bdb0e578f0884402726680608789" - integrity sha512-EW9wxi76delg/FS9+WV+fkPdwygYzRrzEucdqFVWXMQWPOjFy39mmNNEmxuO2jZHXzSQTXzhxiU1oH60AbIw9A== - dependencies: - "@typescript-eslint/types" "5.36.0" - "@typescript-eslint/visitor-keys" "5.36.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz#956dcf5c98363bcb97bdd5463a0a86072ff79355" @@ -3175,18 +3085,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.36.0.tgz#104c864ecc1448417606359275368bf3872bbabb" - integrity sha512-wAlNhXXYvAAUBbRmoJDywF/j2fhGLBP4gnreFvYvFbtlsmhMJ4qCKVh/Z8OP4SgGR3xbciX2nmG639JX0uw1OQ== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.36.0" - "@typescript-eslint/types" "5.36.0" - "@typescript-eslint/typescript-estree" "5.36.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@typescript-eslint/utils@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.37.0.tgz#7784cb8e91390c4f90ccaffd24a0cf9874df81b2" @@ -3207,14 +3105,6 @@ "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.36.0": - version "5.36.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.0.tgz#565d35a5ca00d00a406a942397ead2cb190663ba" - integrity sha512-pdqSJwGKueOrpjYIex0T39xarDt1dn4p7XJ+6FqBWugNQwXlNGC5h62qayAIYZ/RPPtD+ButDWmpXT1eGtiaYg== - dependencies: - "@typescript-eslint/types" "5.36.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.37.0": version "5.37.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz#7b72dd343295ea11e89b624995abc7103c554eee" @@ -3223,6 +3113,14 @@ "@typescript-eslint/types" "5.37.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.44.0": + version "5.44.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" + integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== + dependencies: + "@typescript-eslint/types" "5.44.0" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -3437,11 +3335,6 @@ acorn@^8.2.4, acorn@^8.7.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -7333,23 +7226,6 @@ eslint-config-cozy-app@1.5.0: eslint-plugin-vue "5.2.3" prettier "1.18.2" -eslint-config-cozy-app@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-cozy-app/-/eslint-config-cozy-app-5.1.0.tgz#17cf39c01edf587512164aaf340a139f65bc9bb7" - integrity sha512-S5dILPftGUzbFJM8bLCegTqj6kHyU+9mXMoa+jd06ARenvcqE8TQuDhGLhI6z/EdpIlXBNBED/eBQZ+fyyhDXQ== - dependencies: - "@babel/eslint-parser" "7.18.9" - "@typescript-eslint/eslint-plugin" "5.36.0" - "@typescript-eslint/parser" "5.36.0" - eslint "8.23.0" - eslint-config-prettier "8.5.0" - eslint-plugin-prettier "4.2.1" - eslint-plugin-promise "6.0.1" - eslint-plugin-react "7.31.1" - eslint-plugin-react-hooks "4.6.0" - prettier "2.7.1" - typescript "4.8.2" - eslint-config-prettier@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-4.3.0.tgz#c55c1fcac8ce4518aeb77906984e134d9eb5a4f0" @@ -7357,7 +7233,7 @@ eslint-config-prettier@4.3.0: dependencies: get-stdin "^6.0.0" -eslint-config-prettier@8.5.0, eslint-config-prettier@^8.5.0: +eslint-config-prettier@^8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== @@ -7380,18 +7256,13 @@ eslint-plugin-prettier@3.1.2: dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-prettier@4.2.1, eslint-plugin-prettier@^4.2.1: +eslint-plugin-prettier@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-promise@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz#a8cddf96a67c4059bdabf4d724a29572188ae423" - integrity sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw== - eslint-plugin-react-hooks@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a" @@ -7402,11 +7273,6 @@ eslint-plugin-react-hooks@4.0.4: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.4.tgz#aed33b4254a41b045818cacb047b81e6df27fa58" integrity sha512-equAdEIsUETLFNCmmCkiCGq6rkSK5MoJhXFPFYeUebcjKgBmWWcgVOqZyQC8Bv1BwVCnTq9tBxgJFgAJTWoJtA== -eslint-plugin-react-hooks@4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== - eslint-plugin-react-hooks@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" @@ -7445,26 +7311,6 @@ eslint-plugin-react@7.19.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" -eslint-plugin-react@7.31.1: - version "7.31.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz#d29793ed27743f3ed8a473c347b1bf5a0a8fb9af" - integrity sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - eslint-plugin-react@7.31.8: version "7.31.8" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf" @@ -7602,51 +7448,6 @@ eslint@5.16.0: table "^5.2.3" text-table "^0.2.0" -eslint@8.23.0: - version "8.23.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.23.0.tgz#a184918d288820179c6041bb3ddcc99ce6eea040" - integrity sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA== - dependencies: - "@eslint/eslintrc" "^1.3.1" - "@humanwhocodes/config-array" "^0.10.4" - "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" - "@humanwhocodes/module-importer" "^1.0.1" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" - globby "^11.1.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - eslint@^7.32.0: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" @@ -7770,15 +7571,6 @@ espree@^9.0.0, espree@^9.3.2: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" -espree@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a" - integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -8751,11 +8543,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -13359,7 +13146,7 @@ prettier@1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== -prettier@2.7.1, prettier@^2.5.1, prettier@^2.7.1: +prettier@^2.5.1, prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== @@ -16198,11 +15985,6 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.2.tgz#e3b33d5ccfb5914e4eeab6699cf208adee3fd790" - integrity sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw== - typescript@^4.0.0, typescript@^4.5.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235"