diff --git a/desktop/.eslintrc.js b/desktop/.eslintrc.js index f7a349fe9..4ec76cef2 100644 --- a/desktop/.eslintrc.js +++ b/desktop/.eslintrc.js @@ -87,9 +87,16 @@ module.exports = { files: ['*.tsx', '*.ts'], parser: '@typescript-eslint/parser', rules: { - 'no-undef': 0, // taken care of by TypeScript already - 'import/no-unresolved': 0, // taken care of by TypeScript already 'prettier/prettier': [2, {...prettierConfig, parser: 'typescript'}], + // following rules are disabled because TS already handles it + 'no-undef': 0, + 'import/no-unresolved': 0, + // following rules are disabled because they don't handle TS correctly, + // while their @typescript-eslint counterpart does + // for reference: https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/README.md#extension-rules + 'no-unused-vars': 0, + 'no-redeclare': 0, + '@typescript-eslint/no-redeclare': 1, '@typescript-eslint/no-unused-vars': [ 1, { diff --git a/desktop/app/src/chrome/mainsidebar/MainSidebar2.tsx b/desktop/app/src/chrome/mainsidebar/MainSidebar2.tsx index fb6bf76eb..c251be0b2 100644 --- a/desktop/app/src/chrome/mainsidebar/MainSidebar2.tsx +++ b/desktop/app/src/chrome/mainsidebar/MainSidebar2.tsx @@ -63,7 +63,7 @@ import {useLocalStorage} from '../../utils/useLocalStorage'; import {PluginDefinition, ClientPluginMap, DevicePluginMap} from '../../plugin'; type FlipperPlugins = PluginDefinition[]; -type PluginsByCategory = [string, FlipperPlugins][]; +type PluginsByCategoryType = [string, FlipperPlugins][]; type SectionLevel = 1 | 2 | 3; @@ -398,10 +398,12 @@ function isStaticViewActive( return current && selected && current === selected; } -function groupPluginsByCategory(plugins: FlipperPlugins): PluginsByCategory { +function groupPluginsByCategory( + plugins: FlipperPlugins, +): PluginsByCategoryType { const sortedPlugins = plugins.slice().sort(sortPluginsByName); const byCategory: {[cat: string]: FlipperPlugins} = {}; - const res: PluginsByCategory = []; + const res: PluginsByCategoryType = []; sortedPlugins.forEach((plugin) => { const category = plugin.category || ''; (byCategory[category] || (byCategory[category] = [])).push(plugin); @@ -477,7 +479,7 @@ const PluginList = memo(function PluginList({ selectedApp?: null | string; }) { // client is a mutable structure, so we need the event emitter to detect the addition of plugins.... - const [_, setPluginsChanged] = useState(0); + const [, setPluginsChanged] = useState(0); useEffect(() => { const listener = () => setPluginsChanged((v) => v + 1); client.on('plugins-change', listener); @@ -493,7 +495,7 @@ const PluginList = memo(function PluginList({ plugin, }); }, - [client], + [client, starPlugin], ); const allPlugins = Array.from(clientPlugins.values()).filter( diff --git a/desktop/app/src/devices/IOSDevice.tsx b/desktop/app/src/devices/IOSDevice.tsx index 630b3fd19..992438183 100644 --- a/desktop/app/src/devices/IOSDevice.tsx +++ b/desktop/app/src/devices/IOSDevice.tsx @@ -227,7 +227,7 @@ class StripLogPrefix extends Transform { _transform( data: any, - encoding: string, + _encoding: string, callback: (err?: Error, data?: any) => void, ) { if (this.passedPrefix) { diff --git a/desktop/app/src/reducers/__tests__/sandydeviceplugins.node.tsx b/desktop/app/src/reducers/__tests__/sandydeviceplugins.node.tsx index 7e64d90cf..ecd1fc346 100644 --- a/desktop/app/src/reducers/__tests__/sandydeviceplugins.node.tsx +++ b/desktop/app/src/reducers/__tests__/sandydeviceplugins.node.tsx @@ -17,10 +17,6 @@ import { TestUtils, } from 'flipper-plugin'; -interface PersistedState { - count: 1; -} - const pluginDetails = TestUtils.createMockPluginDetails(); let initialized = false; diff --git a/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx b/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx index ec8d6c036..868872098 100644 --- a/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx +++ b/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx @@ -18,10 +18,6 @@ import { TestUtils, } from 'flipper-plugin'; -interface PersistedState { - count: 1; -} - const pluginDetails = TestUtils.createMockPluginDetails(); let initialized = false; diff --git a/desktop/app/src/server.tsx b/desktop/app/src/server.tsx index 66da6a8ce..80ca3e922 100644 --- a/desktop/app/src/server.tsx +++ b/desktop/app/src/server.tsx @@ -358,7 +358,7 @@ class Server extends EventEmitter { }; _untrustedRequestHandler = ( - socket: ReactiveSocket, + _socket: ReactiveSocket, payload: Payload, ): Partial> => { if (!payload.data) { diff --git a/desktop/app/src/ui/components/Highlight.tsx b/desktop/app/src/ui/components/Highlight.tsx index 378229f5b..53ea97135 100644 --- a/desktop/app/src/ui/components/Highlight.tsx +++ b/desktop/app/src/ui/components/Highlight.tsx @@ -35,7 +35,7 @@ function createHighlightManager(initialText: string = ''): HighlightManager { let currentFilter = initialText; const Highlight: React.FC<{text: string}> = memo(({text}) => { - const [_update, setUpdate] = useState(0); + const [, setUpdate] = useState(0); const elem = useRef(null); useEffect(() => { function onChange(prevHighlight: string, newHighlight: string) { diff --git a/desktop/app/src/ui/components/TooltipProvider.tsx b/desktop/app/src/ui/components/TooltipProvider.tsx index 1057561ca..81f71be5d 100644 --- a/desktop/app/src/ui/components/TooltipProvider.tsx +++ b/desktop/app/src/ui/components/TooltipProvider.tsx @@ -120,21 +120,12 @@ const TooltipTail = styled.div<{ })); TooltipTail.displayName = 'TooltipProvider:TooltipTail'; -type TooltipProps = { - children: React.ReactNode; -}; - type TooltipObject = { rect: ClientRect; title: React.ReactNode; options: TooltipOptions; }; -type TooltipState = { - tooltip: TooltipObject | null | undefined; - timeoutID: ReturnType | null | undefined; -}; - interface TooltipManager { open( container: HTMLDivElement, diff --git a/desktop/app/src/ui/components/data-inspector/DataDescription.tsx b/desktop/app/src/ui/components/data-inspector/DataDescription.tsx index c5c54b60f..e0a5da658 100644 --- a/desktop/app/src/ui/components/data-inspector/DataDescription.tsx +++ b/desktop/app/src/ui/components/data-inspector/DataDescription.tsx @@ -539,8 +539,6 @@ function parseColor( return {a, b, g, r}; } -const pencilStyle = {cursor: 'pointer', marginLeft: 8}; - type Picker = { values: Set; selected: string; diff --git a/desktop/app/src/ui/components/data-inspector/DataInspector.tsx b/desktop/app/src/ui/components/data-inspector/DataInspector.tsx index 5584ec23d..b2c6c5bcc 100644 --- a/desktop/app/src/ui/components/data-inspector/DataInspector.tsx +++ b/desktop/app/src/ui/components/data-inspector/DataInspector.tsx @@ -314,14 +314,6 @@ function isComponentExpanded(data: any, diffType: string, diffValue: any) { return false; } -type DataInspectorState = { - shouldExpand: boolean; - isExpanded: boolean; - isExpandable: boolean; - res: any; - resDiff: any; -}; - const recursiveMarker = Recursive; /** diff --git a/desktop/app/src/ui/components/data-inspector/__tests__/DataInspector.node.tsx b/desktop/app/src/ui/components/data-inspector/__tests__/DataInspector.node.tsx index dd13e4406..6a08c32cf 100644 --- a/desktop/app/src/ui/components/data-inspector/__tests__/DataInspector.node.tsx +++ b/desktop/app/src/ui/components/data-inspector/__tests__/DataInspector.node.tsx @@ -8,13 +8,7 @@ */ import * as React from 'react'; -import { - render, - fireEvent, - waitFor, - act, - waitForElement, -} from '@testing-library/react'; +import {render, fireEvent, waitFor, act} from '@testing-library/react'; import ManagedDataInspector from '../ManagedDataInspector'; import {sleep} from '../../../../utils'; diff --git a/desktop/app/src/utils/exportData.tsx b/desktop/app/src/utils/exportData.tsx index d84219d96..95f592e45 100644 --- a/desktop/app/src/utils/exportData.tsx +++ b/desktop/app/src/utils/exportData.tsx @@ -94,10 +94,6 @@ type ProcessNotificationStatesOptions = { statusUpdate?: (msg: string) => void; }; -type SerializePluginStatesOptions = { - pluginStates: PluginStatesState; -}; - type PluginsToProcess = { pluginKey: string; pluginId: string; diff --git a/desktop/app/src/utils/iOSContainerUtility.tsx b/desktop/app/src/utils/iOSContainerUtility.tsx index 735ced92b..a8c6f0500 100644 --- a/desktop/app/src/utils/iOSContainerUtility.tsx +++ b/desktop/app/src/utils/iOSContainerUtility.tsx @@ -15,7 +15,6 @@ import {killOrphanedInstrumentsProcesses} from './processCleanup'; import {reportPlatformFailures} from './metrics'; import {promises, constants} from 'fs'; import memoize from 'lodash.memoize'; -import GK from '../fb-stubs/GK'; import {notNull} from './typeUtils'; // Use debug to get helpful logs when idb fails diff --git a/desktop/app/src/utils/serialization.tsx b/desktop/app/src/utils/serialization.tsx index 66abdad60..f7873318a 100644 --- a/desktop/app/src/utils/serialization.tsx +++ b/desktop/app/src/utils/serialization.tsx @@ -27,7 +27,7 @@ export function deserialize(str: string): any { } function processArray( - element: any, + _element: any, array: Array, stack: Array, dict: Map, @@ -50,7 +50,7 @@ function processArray( } function processKeyValuePair( - element: any, + _element: any, key: any, value: any, stack: Array, diff --git a/desktop/app/src/utils/snap.tsx b/desktop/app/src/utils/snap.tsx index b78935a60..3ba886e26 100644 --- a/desktop/app/src/utils/snap.tsx +++ b/desktop/app/src/utils/snap.tsx @@ -112,7 +112,7 @@ export function maybeSnapLeft( } export function maybeSnapTop( - props: Rect, + _props: Rect, windows: Array, top: number, ): number { diff --git a/desktop/flipper-plugin/src/test-utils/test-utils.tsx b/desktop/flipper-plugin/src/test-utils/test-utils.tsx index 96a7dda2b..a55cd9e8c 100644 --- a/desktop/flipper-plugin/src/test-utils/test-utils.tsx +++ b/desktop/flipper-plugin/src/test-utils/test-utils.tsx @@ -188,9 +188,9 @@ export function startPlugin>( pluginInstance.disconnect(); }, call( - api: string, + _api: string, method: string, - fromPlugin: boolean, + _fromPlugin: boolean, params?: Object, ): Promise { return sendStub(method, params); diff --git a/desktop/package.json b/desktop/package.json index 449215ee6..88b694836 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -172,7 +172,7 @@ "detect-port": "^1.1.1", "electron": "10.1.1", "electron-builder": "^22.8.0", - "eslint": "^7.4.0", + "eslint": "^7.9.0", "eslint-config-fbjs": "^3.1.1", "eslint-config-prettier": "^6.10.1", "eslint-import-resolver-typescript": "^2.3.0", @@ -184,7 +184,7 @@ "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react": "^7.21.1", "eslint-plugin-react-hooks": "^4.0.4", "expand-tilde": "^2.0.2", "express": "^4.15.2", diff --git a/desktop/plugins/crash_reporter/index.tsx b/desktop/plugins/crash_reporter/index.tsx index 344785ca0..39e757056 100644 --- a/desktop/plugins/crash_reporter/index.tsx +++ b/desktop/plugins/crash_reporter/index.tsx @@ -387,7 +387,7 @@ function addFileWatcherForiOSCrashLogs( // Directory doesn't exist return; } - fs.watch(dir, (eventType, filename) => { + fs.watch(dir, (_eventType, filename) => { // We just parse the crash logs with extension `.crash` const checkFileExtension = /.crash$/.exec(filename); if (!filename || !checkFileExtension) { @@ -643,7 +643,7 @@ export default class CrashReporterPlugin extends FlipperDevicePlugin< const referenceDate = new Date(); (function ( store: Store, - date: Date, + _date: Date, setPersistedState: ( pluginKey: string, newPluginState: Maybe, diff --git a/desktop/plugins/fresco/ImagesCacheOverview.tsx b/desktop/plugins/fresco/ImagesCacheOverview.tsx index 7785ddaf0..17a9df125 100644 --- a/desktop/plugins/fresco/ImagesCacheOverview.tsx +++ b/desktop/plugins/fresco/ImagesCacheOverview.tsx @@ -20,7 +20,6 @@ import { FlexColumn, LoadingIndicator, styled, - Select, ToggleButton, Text, } from 'flipper'; @@ -96,13 +95,6 @@ type ImagesCacheOverviewState = { size: number; }; -const _StyledSelect = styled(Select)({ - marginLeft: 6, - marginRight: 6, - height: '100%', - maxWidth: 164, -}); - export default class ImagesCacheOverview extends PureComponent< ImagesCacheOverviewProps, ImagesCacheOverviewState diff --git a/desktop/plugins/fresco/index.tsx b/desktop/plugins/fresco/index.tsx index d0a84d82a..ced02004f 100644 --- a/desktop/plugins/fresco/index.tsx +++ b/desktop/plugins/fresco/index.tsx @@ -79,12 +79,6 @@ const debugLog = (...args: any[]) => { } }; -type ImagesMetaData = { - levels: ImagesListResponse; - events: Array; - imageDataList: Array; -}; - export default class FlipperImagesPlugin extends FlipperPlugin< PluginState, BaseAction, diff --git a/desktop/plugins/kaios-allocations/types/firefox-client.d.tsx b/desktop/plugins/kaios-allocations/types/firefox-client.d.tsx index 855659e92..657da9fbc 100644 --- a/desktop/plugins/kaios-allocations/types/firefox-client.d.tsx +++ b/desktop/plugins/kaios-allocations/types/firefox-client.d.tsx @@ -43,7 +43,5 @@ declare module 'firefox-client/lib/client-methods' { } declare module 'firefox-client/lib/extend' { - import FirefoxClient from 'firefox-client'; - export default function extend(prototype: any, o: any): any; } diff --git a/desktop/plugins/network/RequestDetails.tsx b/desktop/plugins/network/RequestDetails.tsx index 4fe34e155..e84197833 100644 --- a/desktop/plugins/network/RequestDetails.tsx +++ b/desktop/plugins/network/RequestDetails.tsx @@ -553,7 +553,7 @@ class JSONTextFormatter { ); }; - formatResponse = (request: Request, response: Response) => { + formatResponse = (_request: Request, response: Response) => { return this.format( decodeBody(response), getHeaderValue(response.headers, 'content-type'), @@ -589,7 +589,7 @@ class XMLTextFormatter { ); }; - formatResponse = (request: Request, response: Response) => { + formatResponse = (_request: Request, response: Response) => { return this.format( decodeBody(response), getHeaderValue(response.headers, 'content-type'), @@ -611,7 +611,7 @@ class JSONFormatter { ); }; - formatResponse = (request: Request, response: Response) => { + formatResponse = (_request: Request, response: Response) => { return this.format( decodeBody(response), getHeaderValue(response.headers, 'content-type'), @@ -715,7 +715,7 @@ class GraphQLFormatter { } }; - formatResponse = (request: Request, response: Response) => { + formatResponse = (_request: Request, response: Response) => { return this.format( decodeBody(response), getHeaderValue(response.headers, 'content-type'), diff --git a/desktop/plugins/reactdevtools/index.tsx b/desktop/plugins/reactdevtools/index.tsx index 3f648b106..12638360c 100644 --- a/desktop/plugins/reactdevtools/index.tsx +++ b/desktop/plugins/reactdevtools/index.tsx @@ -85,7 +85,7 @@ const GrabMetroDevice = connect< }: GrabMetroDeviceStoreProps & GrabMetroDeviceOwnProps) { useEffect(() => { onHasDevice(metroDevice); - }, [metroDevice]); + }, [metroDevice, onHasDevice]); return null; }); diff --git a/desktop/scripts/start-dev-server.ts b/desktop/scripts/start-dev-server.ts index b382096fa..a41f4bd94 100644 --- a/desktop/scripts/start-dev-server.ts +++ b/desktop/scripts/start-dev-server.ts @@ -142,7 +142,7 @@ function startAssetServer( ): Promise<{app: Express; server: http.Server}> { const app = express(); - app.use((req, res, next) => { + app.use((req, _res, next) => { if (knownErrors[req.url] != null) { delete knownErrors[req.url]; outputScreen(); @@ -150,14 +150,14 @@ function startAssetServer( next(); }); - app.use((req, res, next) => { + app.use((_req, res, next) => { res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate'); res.header('Expires', '-1'); res.header('Pragma', 'no-cache'); next(); }); - app.post('/_restartElectron', (req, res) => { + app.post('/_restartElectron', (_req, res) => { if (shutdownElectron) { shutdownElectron(); } @@ -165,8 +165,8 @@ function startAssetServer( res.end(); }); - app.get('/', (req, res) => { - fs.readFile(path.join(staticDir, 'index.dev.html'), (err, content) => { + app.get('/', (_req, res) => { + fs.readFile(path.join(staticDir, 'index.dev.html'), (_err, content) => { res.end(content); }); }); diff --git a/desktop/types/globals.ts b/desktop/types/globals.ts index 44cc1c622..dba80808c 100644 --- a/desktop/types/globals.ts +++ b/desktop/types/globals.ts @@ -12,7 +12,6 @@ import {ResizeObserver} from './ResizeObserver.d'; import {Store} from '../app/src/reducers'; export {}; -type RequestIdleHandle = number; declare global { interface StoreEnhancerStateSanitizer { diff --git a/desktop/yarn.lock b/desktop/yarn.lock index e90f3a0f2..e0cedf7c7 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -1345,6 +1345,22 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@eslint/eslintrc@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" + integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@iarna/toml@^2.2.5": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" @@ -2717,7 +2733,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== -acorn@7.1.1, acorn@^6.0.1, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.2.0: +acorn@7.1.1, acorn@^6.0.1, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.2.0, acorn@^7.4.0: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== @@ -2785,6 +2801,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.12.4: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + algoliasearch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.4.0.tgz#25c356d8bdcf7e3f941633f61e1ac111ddcba404" @@ -3114,6 +3140,15 @@ array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +array.prototype.flatmap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -5419,6 +5454,23 @@ eslint-plugin-react@^7.20.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" +eslint-plugin-react@^7.21.1: + version "7.21.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.1.tgz#3d9fe506eab78756f67c671bb2a9aa9c20990a39" + integrity sha512-TGtWzWrFjZtrD1giMz0O6a9ul++YR9vZSzIL/a7qlb5I/ra/O5RkMGMJK+KKYnJrzz884kyAkEyWiU4Hg2HTrg== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.17.0" + string.prototype.matchall "^4.0.2" + eslint-rule-composer@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" @@ -5439,6 +5491,13 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" +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== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.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" @@ -5491,6 +5550,49 @@ eslint@^7.4.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.9.0.tgz#522aeccc5c3a19017cf0cb46ebfd660a79acf337" + integrity sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.1.3" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.3.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + 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" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + espree@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" @@ -5500,6 +5602,15 @@ espree@^7.1.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.2.0" +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -6685,7 +6796,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -9378,6 +9489,15 @@ object.entries@^1.1.1: function-bind "^1.1.1" has "^1.0.3" +object.entries@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + object.fromentries@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" @@ -12048,6 +12168,11 @@ strip-json-comments@^3.1.0: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"