From 6a2f416abfed31aa478ac0a7e7b901e333c0ecff Mon Sep 17 00:00:00 2001 From: Emmanuel Chambon Date: Thu, 8 Dec 2022 12:31:53 +0100 Subject: [PATCH 1/4] chore: prepare for consistent return eslint rule --- .../jest-helpers/src/__tests__/index.test.tsx | 6 +++--- .../src/helpers/renderWithTheme.tsx | 5 +++-- .../src/helpers/shouldMatchEmotionSnapshot.ts | 6 +++--- .../shouldMatchEmotionSnapshotWithPortal.ts | 6 +++--- packages/jest-helpers/src/index.ts | 20 +++++++++---------- .../use-dataloader/src/DataLoaderProvider.tsx | 13 +++--------- .../src/__tests__/DataLoaderProvider.test.tsx | 2 +- .../src/__tests__/useDataLoader.test.tsx | 4 ++-- .../__tests__/usePaginatedDataLoader.test.tsx | 4 ++-- packages/use-dataloader/src/dataloader.ts | 2 +- packages/use-dataloader/src/useDataLoader.ts | 2 +- .../src/usePaginatedDataLoader.ts | 2 +- packages/use-gtm/src/__tests__/index.tsx | 7 ++++--- packages/use-gtm/src/scripts.ts | 2 +- packages/use-gtm/src/useGTM.tsx | 5 +++-- packages/use-i18n/src/__tests__/formatDate.ts | 3 ++- packages/use-i18n/src/__tests__/formatUnit.ts | 3 ++- packages/use-i18n/src/__tests__/usei18n.tsx | 2 +- packages/use-i18n/src/formatters.ts | 3 ++- packages/use-i18n/src/usei18n.tsx | 19 +++++++++--------- packages/use-media/src/types.ts | 2 +- packages/use-media/src/useMedia.ts | 2 +- .../use-query-params/src/__tests__/index.tsx | 6 ++++-- packages/use-segment/src/__tests__/index.tsx | 5 +++-- packages/use-segment/src/useSegment.tsx | 10 ++-------- packages/validate-icu-locales/src/index.ts | 2 +- packages_deprecated/countries/index.d.ts | 2 -- 27 files changed, 68 insertions(+), 77 deletions(-) diff --git a/packages/jest-helpers/src/__tests__/index.test.tsx b/packages/jest-helpers/src/__tests__/index.test.tsx index a474aad7c..10fe2f4c0 100644 --- a/packages/jest-helpers/src/__tests__/index.test.tsx +++ b/packages/jest-helpers/src/__tests__/index.test.tsx @@ -1,7 +1,7 @@ import makeHelpers from '..' -import { RenderWithThemeFn } from '../helpers/renderWithTheme' -import { ShouldMatchEmotionSnapshotFn } from '../helpers/shouldMatchEmotionSnapshot' -import { ShouldMatchEmotionSnapshotWithPortalFn } from '../helpers/shouldMatchEmotionSnapshotWithPortal' +import type { RenderWithThemeFn } from '../helpers/renderWithTheme' +import type { ShouldMatchEmotionSnapshotFn } from '../helpers/shouldMatchEmotionSnapshot' +import type { ShouldMatchEmotionSnapshotWithPortalFn } from '../helpers/shouldMatchEmotionSnapshotWithPortal' describe('@jest-helpers', () => { let renderWithTheme: RenderWithThemeFn diff --git a/packages/jest-helpers/src/helpers/renderWithTheme.tsx b/packages/jest-helpers/src/helpers/renderWithTheme.tsx index 6ba32de87..78da68f22 100644 --- a/packages/jest-helpers/src/helpers/renderWithTheme.tsx +++ b/packages/jest-helpers/src/helpers/renderWithTheme.tsx @@ -1,7 +1,8 @@ import createCache from '@emotion/cache' import { CacheProvider } from '@emotion/react' -import { RenderOptions, render } from '@testing-library/react' -import { FC, ReactNode } from 'react' +import type { RenderOptions } from '@testing-library/react' +import { render } from '@testing-library/react' +import type { FC, ReactNode } from 'react' const emotionCache = createCache({ key: 'cache', diff --git a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts index b77eaa60b..f9792c5e6 100644 --- a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts +++ b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts @@ -1,6 +1,6 @@ -import { RenderOptions, render } from '@testing-library/react' -import { ReactNode } from 'react' -import { RenderWithThemeFn } from './renderWithTheme' +import type { RenderOptions, render } from '@testing-library/react' +import type { ReactNode } from 'react' +import type { RenderWithThemeFn } from './renderWithTheme' interface Options { options?: RenderOptions diff --git a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts index 4fedd1059..6f996ebd0 100644 --- a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts +++ b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts @@ -1,6 +1,6 @@ -import { RenderOptions, render } from '@testing-library/react' -import { ReactNode } from 'react' -import { RenderWithThemeFn } from './renderWithTheme' +import type { RenderOptions, render } from '@testing-library/react' +import type { ReactNode } from 'react' +import type { RenderWithThemeFn } from './renderWithTheme' interface Options { options?: RenderOptions diff --git a/packages/jest-helpers/src/index.ts b/packages/jest-helpers/src/index.ts index db784578d..fafe3ef61 100644 --- a/packages/jest-helpers/src/index.ts +++ b/packages/jest-helpers/src/index.ts @@ -1,14 +1,12 @@ -import { CreateSerializerOptions, createSerializer } from '@emotion/jest' -import { FC, ReactNode } from 'react' -import makeRenderWithTheme, { - RenderWithThemeFn, -} from './helpers/renderWithTheme' -import makeShouldMatchEmotionSnapshot, { - ShouldMatchEmotionSnapshotFn, -} from './helpers/shouldMatchEmotionSnapshot' -import makeShouldMatchEmotionSnapshotWithPortal, { - ShouldMatchEmotionSnapshotWithPortalFn, -} from './helpers/shouldMatchEmotionSnapshotWithPortal' +import type { CreateSerializerOptions } from '@emotion/jest' +import { createSerializer } from '@emotion/jest' +import type { FC, ReactNode } from 'react' +import type { RenderWithThemeFn } from './helpers/renderWithTheme' +import makeRenderWithTheme from './helpers/renderWithTheme' +import type { ShouldMatchEmotionSnapshotFn } from './helpers/shouldMatchEmotionSnapshot' +import makeShouldMatchEmotionSnapshot from './helpers/shouldMatchEmotionSnapshot' +import type { ShouldMatchEmotionSnapshotWithPortalFn } from './helpers/shouldMatchEmotionSnapshotWithPortal' +import makeShouldMatchEmotionSnapshotWithPortal from './helpers/shouldMatchEmotionSnapshotWithPortal' export { default as makeRenderWithTheme } from './helpers/renderWithTheme' diff --git a/packages/use-dataloader/src/DataLoaderProvider.tsx b/packages/use-dataloader/src/DataLoaderProvider.tsx index 500f05f64..78c2e61e6 100644 --- a/packages/use-dataloader/src/DataLoaderProvider.tsx +++ b/packages/use-dataloader/src/DataLoaderProvider.tsx @@ -1,19 +1,12 @@ import PropTypes from 'prop-types' -import { - ReactElement, - ReactNode, - createContext, - useCallback, - useContext, - useMemo, - useRef, -} from 'react' +import type { ReactElement, ReactNode } from 'react' +import { createContext, useCallback, useContext, useMemo, useRef } from 'react' import { DEFAULT_MAX_CONCURRENT_REQUESTS, KEY_IS_NOT_STRING_ERROR, } from './constants' import DataLoader from './dataloader' -import { OnErrorFn, PromiseType } from './types' +import type { OnErrorFn, PromiseType } from './types' type CachedData = Record type Reloads = Record Promise> diff --git a/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx b/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx index 46d32bb2d..83088abc5 100644 --- a/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx +++ b/packages/use-dataloader/src/__tests__/DataLoaderProvider.test.tsx @@ -1,5 +1,5 @@ import { render, renderHook, screen, waitFor } from '@testing-library/react' -import { ReactNode } from 'react' +import type { ReactNode } from 'react' import DataLoaderProvider, { useDataLoaderContext } from '../DataLoaderProvider' import { KEY_IS_NOT_STRING_ERROR, StatusEnum } from '../constants' diff --git a/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx b/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx index 919eca328..ab2e6b35a 100644 --- a/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx +++ b/packages/use-dataloader/src/__tests__/useDataLoader.test.tsx @@ -1,8 +1,8 @@ /* eslint-disable no-console */ import { renderHook, waitFor } from '@testing-library/react' -import { ReactNode } from 'react' +import type { ReactNode } from 'react' import DataLoaderProvider, { useDataLoaderContext } from '../DataLoaderProvider' -import { KeyType, UseDataLoaderConfig } from '../types' +import type { KeyType, UseDataLoaderConfig } from '../types' import useDataLoader from '../useDataLoader' type UseDataLoaderHookProps = { diff --git a/packages/use-dataloader/src/__tests__/usePaginatedDataLoader.test.tsx b/packages/use-dataloader/src/__tests__/usePaginatedDataLoader.test.tsx index ae125d051..cda064f47 100644 --- a/packages/use-dataloader/src/__tests__/usePaginatedDataLoader.test.tsx +++ b/packages/use-dataloader/src/__tests__/usePaginatedDataLoader.test.tsx @@ -1,8 +1,8 @@ /* eslint-disable no-console */ import { act, renderHook, waitFor } from '@testing-library/react' -import { ReactNode } from 'react' +import type { ReactNode } from 'react' import DataLoaderProvider from '../DataLoaderProvider' -import { UsePaginatedDataLoaderMethodParams } from '../types' +import type { UsePaginatedDataLoaderMethodParams } from '../types' import usePaginatedDataLoader from '../usePaginatedDataLoader' const PROMISE_TIMEOUT = 5 diff --git a/packages/use-dataloader/src/dataloader.ts b/packages/use-dataloader/src/dataloader.ts index d53f6b6ce..776ff9ea8 100644 --- a/packages/use-dataloader/src/dataloader.ts +++ b/packages/use-dataloader/src/dataloader.ts @@ -1,5 +1,5 @@ import { DEFAULT_MAX_CONCURRENT_REQUESTS, StatusEnum } from './constants' -import { PromiseType } from './types' +import type { PromiseType } from './types' export type DataLoaderConstructorArgs = { key: string diff --git a/packages/use-dataloader/src/useDataLoader.ts b/packages/use-dataloader/src/useDataLoader.ts index 6519e9626..e0d8c7c33 100644 --- a/packages/use-dataloader/src/useDataLoader.ts +++ b/packages/use-dataloader/src/useDataLoader.ts @@ -2,7 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useDataLoaderContext } from './DataLoaderProvider' import { StatusEnum } from './constants' import { marshalQueryKey } from './helpers' -import { +import type { KeyType, PromiseType, UseDataLoaderConfig, diff --git a/packages/use-dataloader/src/usePaginatedDataLoader.ts b/packages/use-dataloader/src/usePaginatedDataLoader.ts index ad7e892c4..696ea7cf1 100644 --- a/packages/use-dataloader/src/usePaginatedDataLoader.ts +++ b/packages/use-dataloader/src/usePaginatedDataLoader.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useState } from 'react' -import { +import type { KeyType, PromiseType, UsePaginatedDataLoaderConfig, diff --git a/packages/use-gtm/src/__tests__/index.tsx b/packages/use-gtm/src/__tests__/index.tsx index daf1b4d0d..095892e8f 100644 --- a/packages/use-gtm/src/__tests__/index.tsx +++ b/packages/use-gtm/src/__tests__/index.tsx @@ -1,8 +1,9 @@ import { fireEvent, renderHook } from '@testing-library/react' import mockdate from 'mockdate' -import { ReactNode } from 'react' -import GTMProvider, { SendGTM, useGTM } from '..' -import { GTMProviderProps } from '../useGTM' +import type { ReactNode } from 'react' +import type { SendGTM } from '..' +import GTMProvider, { useGTM } from '..' +import type { GTMProviderProps } from '../useGTM' const defaultEvents = { sampleEvent: (sendGTM?: SendGTM) => (extraValue: string) => { diff --git a/packages/use-gtm/src/scripts.ts b/packages/use-gtm/src/scripts.ts index ba920d48f..76fb0e178 100644 --- a/packages/use-gtm/src/scripts.ts +++ b/packages/use-gtm/src/scripts.ts @@ -1,4 +1,4 @@ -import { GTMEnvironment } from './types' +import type { GTMEnvironment } from './types' export const DATALAYER_NAME = 'dataLayer' export const LOAD_ERROR_EVENT = 'gtm_loading_error' diff --git a/packages/use-gtm/src/useGTM.tsx b/packages/use-gtm/src/useGTM.tsx index 36cfcbe09..4338d6708 100644 --- a/packages/use-gtm/src/useGTM.tsx +++ b/packages/use-gtm/src/useGTM.tsx @@ -1,6 +1,7 @@ -import { ReactNode, createContext, useContext, useEffect, useMemo } from 'react' +import type { ReactNode } from 'react' +import { createContext, useContext, useEffect, useMemo } from 'react' import generateScripts, { DATALAYER_NAME, LOAD_ERROR_EVENT } from './scripts' -import { DataLayerEvent, Events, GTMEnvironment, SendGTM } from './types' +import type { DataLayerEvent, Events, GTMEnvironment, SendGTM } from './types' interface GTMContextInterface { sendGTM: SendGTM | undefined diff --git a/packages/use-i18n/src/__tests__/formatDate.ts b/packages/use-i18n/src/__tests__/formatDate.ts index f9979c709..4b2988748 100644 --- a/packages/use-i18n/src/__tests__/formatDate.ts +++ b/packages/use-i18n/src/__tests__/formatDate.ts @@ -1,4 +1,5 @@ -import formatDate, { FormatDateOptions, supportedFormats } from '../formatDate' +import type { FormatDateOptions } from '../formatDate' +import formatDate, { supportedFormats } from '../formatDate' const locales = ['en', 'fr', 'de', 'ro', 'es'] diff --git a/packages/use-i18n/src/__tests__/formatUnit.ts b/packages/use-i18n/src/__tests__/formatUnit.ts index b229278ca..80166600a 100644 --- a/packages/use-i18n/src/__tests__/formatUnit.ts +++ b/packages/use-i18n/src/__tests__/formatUnit.ts @@ -1,4 +1,5 @@ -import formatUnit, { FormatUnitOptions, supportedUnits } from '../formatUnit' +import type { FormatUnitOptions } from '../formatUnit' +import formatUnit, { supportedUnits } from '../formatUnit' const locales = ['en', 'fr', 'ro'] diff --git a/packages/use-i18n/src/__tests__/usei18n.tsx b/packages/use-i18n/src/__tests__/usei18n.tsx index 3be17491f..b184da58b 100644 --- a/packages/use-i18n/src/__tests__/usei18n.tsx +++ b/packages/use-i18n/src/__tests__/usei18n.tsx @@ -1,6 +1,6 @@ import { act, renderHook, waitFor } from '@testing-library/react' import mockdate from 'mockdate' -import { ReactNode } from 'react' +import type { ReactNode } from 'react' import I18n, { useI18n, useTranslation } from '..' import en from './locales/en.json' import es from './locales/es.json' diff --git a/packages/use-i18n/src/formatters.ts b/packages/use-i18n/src/formatters.ts index f3a6cd506..06ed2618e 100644 --- a/packages/use-i18n/src/formatters.ts +++ b/packages/use-i18n/src/formatters.ts @@ -1,5 +1,6 @@ import type { NumberFormatOptions } from '@formatjs/ecma402-abstract' -import memoize, { Cache, strategies } from '@formatjs/fast-memoize' +import type { Cache } from '@formatjs/fast-memoize' +import memoize, { strategies } from '@formatjs/fast-memoize' import IntlTranslationFormat from 'intl-messageformat' // Deeply inspired by https://github.com/formatjs/formatjs/blob/7406e526a9c5666cee22cc2316dad1fa1d88697c/packages/intl-messageformat/src/core.ts diff --git a/packages/use-i18n/src/usei18n.tsx b/packages/use-i18n/src/usei18n.tsx index 6c1c84e86..7e5b94c7b 100644 --- a/packages/use-i18n/src/usei18n.tsx +++ b/packages/use-i18n/src/usei18n.tsx @@ -1,14 +1,10 @@ import type { NumberFormatOptions } from '@formatjs/ecma402-abstract' -import { - Locale as DateFnsLocale, - formatDistanceToNow, - formatDistanceToNowStrict, -} from 'date-fns' +import type { Locale as DateFnsLocale } from 'date-fns' +import { formatDistanceToNow, formatDistanceToNowStrict } from 'date-fns' import type { BaseLocale } from 'international-types' import PropTypes from 'prop-types' +import type { ReactElement, ReactNode } from 'react' import { - ReactElement, - ReactNode, createContext, useCallback, useContext, @@ -17,9 +13,12 @@ import { useState, } from 'react' import ReactDOM from 'react-dom' -import dateFormat, { FormatDateOptions } from './formatDate' -import unitFormat, { FormatUnitOptions } from './formatUnit' -import formatters, { IntlListFormatOptions } from './formatters' +import type { FormatDateOptions } from './formatDate' +import dateFormat from './formatDate' +import type { FormatUnitOptions } from './formatUnit' +import unitFormat from './formatUnit' +import type { IntlListFormatOptions } from './formatters' +import formatters from './formatters' import type { ReactParamsObject, ScopedTranslateFn, TranslateFn } from './types' const LOCALE_ITEM_STORAGE = 'locale' diff --git a/packages/use-media/src/types.ts b/packages/use-media/src/types.ts index d028ef8c5..0c3c69e5e 100644 --- a/packages/use-media/src/types.ts +++ b/packages/use-media/src/types.ts @@ -1,3 +1,3 @@ -import { DependencyList, EffectCallback } from 'react' +import type { DependencyList, EffectCallback } from 'react' export type Effect = (effect: EffectCallback, deps?: DependencyList) => void diff --git a/packages/use-media/src/useMedia.ts b/packages/use-media/src/useMedia.ts index 0c5b75a93..49bd93644 100644 --- a/packages/use-media/src/useMedia.ts +++ b/packages/use-media/src/useMedia.ts @@ -1,5 +1,5 @@ import { useEffect, useLayoutEffect, useState } from 'react' -import { Effect } from './types' +import type { Effect } from './types' function noop() {} diff --git a/packages/use-query-params/src/__tests__/index.tsx b/packages/use-query-params/src/__tests__/index.tsx index b3ea75250..d87f4f00a 100644 --- a/packages/use-query-params/src/__tests__/index.tsx +++ b/packages/use-query-params/src/__tests__/index.tsx @@ -1,6 +1,8 @@ import { act, renderHook } from '@testing-library/react' -import { History, createMemoryHistory } from 'history' -import { ReactNode, useLayoutEffect, useState } from 'react' +import type { History } from 'history' +import { createMemoryHistory } from 'history' +import type { ReactNode } from 'react' +import { useLayoutEffect, useState } from 'react' import { MemoryRouter, Router } from 'react-router-dom' import useQueryParams from '..' diff --git a/packages/use-segment/src/__tests__/index.tsx b/packages/use-segment/src/__tests__/index.tsx index 2c15c81ae..3d97e9170 100644 --- a/packages/use-segment/src/__tests__/index.tsx +++ b/packages/use-segment/src/__tests__/index.tsx @@ -1,6 +1,7 @@ -import { AnalyticsBrowser, Context } from '@segment/analytics-next' +import type { Context } from '@segment/analytics-next' +import { AnalyticsBrowser } from '@segment/analytics-next' import { renderHook, waitFor } from '@testing-library/react' -import { ReactNode } from 'react' +import type { ReactNode } from 'react' import waitForExpect from 'wait-for-expect' import SegmentProvider, { useSegment } from '..' import type { Analytics, OnEventError, SegmentProviderProps } from '..' diff --git a/packages/use-segment/src/useSegment.tsx b/packages/use-segment/src/useSegment.tsx index 4ddda26d4..45a1199a5 100644 --- a/packages/use-segment/src/useSegment.tsx +++ b/packages/use-segment/src/useSegment.tsx @@ -4,14 +4,8 @@ import type { AnalyticsBrowserSettings, InitOptions, } from '@segment/analytics-next' -import { - ReactNode, - createContext, - useContext, - useEffect, - useMemo, - useState, -} from 'react' +import type { ReactNode } from 'react' +import { createContext, useContext, useEffect, useMemo, useState } from 'react' export type OnEventError = (error: Error) => Promise | void type EventFunction = (...args: never[]) => Promise diff --git a/packages/validate-icu-locales/src/index.ts b/packages/validate-icu-locales/src/index.ts index 6d6df1f24..3455e5a65 100644 --- a/packages/validate-icu-locales/src/index.ts +++ b/packages/validate-icu-locales/src/index.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import { parse } from '@formatjs/icu-messageformat-parser' -import { ParserError } from '@formatjs/icu-messageformat-parser/error' +import type { ParserError } from '@formatjs/icu-messageformat-parser/error' import { readFile } from 'fs/promises' import { globby } from 'globby' import { importFromString } from 'module-from-string' diff --git a/packages_deprecated/countries/index.d.ts b/packages_deprecated/countries/index.d.ts index 01e528d41..b685188bc 100644 --- a/packages_deprecated/countries/index.d.ts +++ b/packages_deprecated/countries/index.d.ts @@ -24,5 +24,3 @@ declare module './subdivisions/*.json' { const SubDivisionList: SubDivisions export default SubDivisionList } - -export type AvailableCountries = import('./countries').AvailableCountries From 694f7298b21d9222dca0b60324cdbdbee1953d69 Mon Sep 17 00:00:00 2001 From: Emmanuel Chambon Date: Thu, 8 Dec 2022 13:04:35 +0100 Subject: [PATCH 2/4] fix: export and type definition --- .../jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts | 2 +- .../src/helpers/shouldMatchEmotionSnapshotWithPortal.ts | 2 +- packages/outdated-browser/src/index.ts | 1 + packages/use-dataloader/src/types.ts | 4 ++-- packages/use-gtm/src/useGTM.tsx | 3 ++- packages/use-i18n/src/formatUnit.ts | 2 +- packages/use-i18n/src/formatters.ts | 4 ++-- packages/use-i18n/src/usei18n.tsx | 2 +- packages/use-query-params/src/index.ts | 2 +- packages/use-segment/src/useSegment.tsx | 2 +- packages_deprecated/countries/index.d.ts | 4 ++-- 11 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts index f9792c5e6..e56159b7f 100644 --- a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts +++ b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshot.ts @@ -2,7 +2,7 @@ import type { RenderOptions, render } from '@testing-library/react' import type { ReactNode } from 'react' import type { RenderWithThemeFn } from './renderWithTheme' -interface Options { +type Options = { options?: RenderOptions transform?: (node: ReturnType) => Promise | void theme?: Theme diff --git a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts index 6f996ebd0..74c0535a7 100644 --- a/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts +++ b/packages/jest-helpers/src/helpers/shouldMatchEmotionSnapshotWithPortal.ts @@ -2,7 +2,7 @@ import type { RenderOptions, render } from '@testing-library/react' import type { ReactNode } from 'react' import type { RenderWithThemeFn } from './renderWithTheme' -interface Options { +type Options = { options?: RenderOptions transform?: (node: ReturnType) => Promise | void theme?: Theme diff --git a/packages/outdated-browser/src/index.ts b/packages/outdated-browser/src/index.ts index aed208c3a..e2b62d4a7 100644 --- a/packages/outdated-browser/src/index.ts +++ b/packages/outdated-browser/src/index.ts @@ -62,6 +62,7 @@ const STORAGE_KEY = '__outdated' const ignore = sessionStorage.getItem(STORAGE_KEY) || 'false' declare global { + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Window { closeOutdated: () => void } diff --git a/packages/use-dataloader/src/types.ts b/packages/use-dataloader/src/types.ts index eec8b728c..f4ee321ae 100644 --- a/packages/use-dataloader/src/types.ts +++ b/packages/use-dataloader/src/types.ts @@ -27,7 +27,7 @@ export type NeedPollingType = * @property {number} [dataLifetime=undefined] Time before data from previous success is considered as outdated (in millisecond) * @property {NeedPollingType} [needPolling=true] When pollingInterval is set you can set a set a custom callback to know if polling is enabled */ -export interface UseDataLoaderConfig { +export type UseDataLoaderConfig = { enabled?: boolean initialData?: ResultType keepPreviousData?: boolean @@ -50,7 +50,7 @@ export interface UseDataLoaderConfig { * @property {string} error the error occured during the request * @property {Function} reload reload the data */ -export interface UseDataLoaderResult { +export type UseDataLoaderResult = { data?: ResultType error?: ErrorType isError: boolean diff --git a/packages/use-gtm/src/useGTM.tsx b/packages/use-gtm/src/useGTM.tsx index 4338d6708..da0f329d2 100644 --- a/packages/use-gtm/src/useGTM.tsx +++ b/packages/use-gtm/src/useGTM.tsx @@ -3,12 +3,13 @@ import { createContext, useContext, useEffect, useMemo } from 'react' import generateScripts, { DATALAYER_NAME, LOAD_ERROR_EVENT } from './scripts' import type { DataLayerEvent, Events, GTMEnvironment, SendGTM } from './types' -interface GTMContextInterface { +type GTMContextInterface = { sendGTM: SendGTM | undefined events: { [K in keyof T]: ReturnType } } declare global { + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Window { dataLayer: DataLayerEvent[] | undefined } diff --git a/packages/use-i18n/src/formatUnit.ts b/packages/use-i18n/src/formatUnit.ts index 8f49dfcc0..1be297a5b 100644 --- a/packages/use-i18n/src/formatUnit.ts +++ b/packages/use-i18n/src/formatUnit.ts @@ -243,7 +243,7 @@ export const supportedUnits: Partial< ), } -export interface FormatUnitOptions { +export type FormatUnitOptions = { unit: SupportedUnits short?: boolean } diff --git a/packages/use-i18n/src/formatters.ts b/packages/use-i18n/src/formatters.ts index 06ed2618e..1c48e8a4b 100644 --- a/packages/use-i18n/src/formatters.ts +++ b/packages/use-i18n/src/formatters.ts @@ -9,7 +9,7 @@ import IntlTranslationFormat from 'intl-messageformat' // Intl.ListFormat in at TC39 stage 4 and is widely adopted in browsers // So we expose homegrown types // https://github.com/tc39/proposal-intl-list-format -export interface IntlListFormatOptions { +export type IntlListFormatOptions = { localeMatcher?: 'best fit' | 'lookup' type?: 'conjunction' | 'disjunction' | 'unit' style?: 'long' | 'short' | 'narrow' @@ -21,7 +21,7 @@ declare abstract class IntlListFormat { format: (items: string[]) => string } -interface BaseFormatters { +type BaseFormatters = { getNumberFormat( locales?: string | string[], opts?: NumberFormatOptions, diff --git a/packages/use-i18n/src/usei18n.tsx b/packages/use-i18n/src/usei18n.tsx index 7e5b94c7b..9011c1a25 100644 --- a/packages/use-i18n/src/usei18n.tsx +++ b/packages/use-i18n/src/usei18n.tsx @@ -61,7 +61,7 @@ const getCurrentLocale = ({ ) } -interface Context { +type Context = { currentLocale: string dateFnsLocale?: DateFnsLocale datetime: ( diff --git a/packages/use-query-params/src/index.ts b/packages/use-query-params/src/index.ts index e788ac657..158dad95e 100644 --- a/packages/use-query-params/src/index.ts +++ b/packages/use-query-params/src/index.ts @@ -2,7 +2,7 @@ import { parse, stringify } from 'query-string' import { useCallback, useMemo } from 'react' import { useLocation, useNavigate } from 'react-router-dom' -interface Options { +type Options = { /** Set to true to push a new entry onto the history stack */ push: boolean } diff --git a/packages/use-segment/src/useSegment.tsx b/packages/use-segment/src/useSegment.tsx index 45a1199a5..d17edf46e 100644 --- a/packages/use-segment/src/useSegment.tsx +++ b/packages/use-segment/src/useSegment.tsx @@ -14,7 +14,7 @@ type Events = Record< (analytics?: Analytics, onEventError?: OnEventError) => EventFunction > -interface SegmentContextInterface { +type SegmentContextInterface = { analytics: Analytics | undefined events: { [K in keyof T]: ReturnType } } diff --git a/packages_deprecated/countries/index.d.ts b/packages_deprecated/countries/index.d.ts index b685188bc..fd7b36618 100644 --- a/packages_deprecated/countries/index.d.ts +++ b/packages_deprecated/countries/index.d.ts @@ -1,4 +1,4 @@ -export interface Country { +export type Country = { name: string dial_code: string code: string @@ -7,7 +7,7 @@ export interface Country { export type Countries = Country[] -export interface SubDivision { +export type SubDivision = { code: string country_code: string name: string From 65a5a3897e41b2b7a2292cd4d853351617da56da Mon Sep 17 00:00:00 2001 From: Emmanuel Chambon Date: Thu, 8 Dec 2022 12:34:25 +0100 Subject: [PATCH 3/4] feat(eslint-config-react): enforce consistent type imports --- packages/eslint-config-react/typescript.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/eslint-config-react/typescript.js b/packages/eslint-config-react/typescript.js index 638f0b05e..b667a076d 100644 --- a/packages/eslint-config-react/typescript.js +++ b/packages/eslint-config-react/typescript.js @@ -18,7 +18,8 @@ module.exports = { }, }, ], - '@typescript-eslint/no-unused-vars': ['error'], + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/consistent-type-imports': 'error', // We favor object defaults instead of default props in TS // https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/default_props/#you-may-not-need-defaultprops // https://twitter.com/dan_abramov/status/1133878326358171650 From 7e52e18943cb79f1f6ff9a1da2d0d862d1c4a431 Mon Sep 17 00:00:00 2001 From: Emmanuel Chambon Date: Thu, 8 Dec 2022 13:05:25 +0100 Subject: [PATCH 4/4] feat: add export and definition --- packages/eslint-config-react/typescript.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/eslint-config-react/typescript.js b/packages/eslint-config-react/typescript.js index b667a076d..adc88bffc 100644 --- a/packages/eslint-config-react/typescript.js +++ b/packages/eslint-config-react/typescript.js @@ -20,6 +20,8 @@ module.exports = { ], '@typescript-eslint/no-unused-vars': 'error', '@typescript-eslint/consistent-type-imports': 'error', + '@typescript-eslint/consistent-type-exports': 'error', + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], // We favor object defaults instead of default props in TS // https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/default_props/#you-may-not-need-defaultprops // https://twitter.com/dan_abramov/status/1133878326358171650