Fix most lint warnings

Summary:
I noticed that after the typescript upgrade, I got several weird positives from ESLint (like unused parameters in a type definition, which are obviously always unused, e.g. `type onClick = (e: Event) => void`). After some investigation, it turned out these warnings are generated by eslint, but that those rules should be performaned by typescript/eslint instead. For future reference to which rules this applies:

https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/README.md#extension-rules

Updated the config, and while at it, fixed all warnings in our codebase, except for `react-hooks/exhaustive-deps` warnings, since those require semantic changes.

This reduces the amount of eslint warnings from 86 to 39.

Reviewed By: passy

Differential Revision: D23905630

fbshipit-source-id: 0557708fd9ec6b17840a3c191e7d3baf225bdf23
This commit is contained in:
Michel Weststrate
2020-09-28 01:40:50 -07:00
committed by Facebook GitHub Bot
parent aaabe1cc82
commit ecf4cff7cf
26 changed files with 166 additions and 87 deletions

View File

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

View File

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

View File

@@ -227,7 +227,7 @@ class StripLogPrefix extends Transform {
_transform(
data: any,
encoding: string,
_encoding: string,
callback: (err?: Error, data?: any) => void,
) {
if (this.passedPrefix) {

View File

@@ -17,10 +17,6 @@ import {
TestUtils,
} from 'flipper-plugin';
interface PersistedState {
count: 1;
}
const pluginDetails = TestUtils.createMockPluginDetails();
let initialized = false;

View File

@@ -18,10 +18,6 @@ import {
TestUtils,
} from 'flipper-plugin';
interface PersistedState {
count: 1;
}
const pluginDetails = TestUtils.createMockPluginDetails();
let initialized = false;

View File

@@ -358,7 +358,7 @@ class Server extends EventEmitter {
};
_untrustedRequestHandler = (
socket: ReactiveSocket<string, any>,
_socket: ReactiveSocket<string, any>,
payload: Payload<string, any>,
): Partial<Responder<string, any>> => {
if (!payload.data) {

View File

@@ -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<HTMLSpanElement | null>(null);
useEffect(() => {
function onChange(prevHighlight: string, newHighlight: string) {

View File

@@ -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<typeof setTimeout> | null | undefined;
};
interface TooltipManager {
open(
container: HTMLDivElement,

View File

@@ -539,8 +539,6 @@ function parseColor(
return {a, b, g, r};
}
const pencilStyle = {cursor: 'pointer', marginLeft: 8};
type Picker = {
values: Set<string>;
selected: string;

View File

@@ -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 = <RecursiveBaseWrapper>Recursive</RecursiveBaseWrapper>;
/**

View File

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

View File

@@ -94,10 +94,6 @@ type ProcessNotificationStatesOptions = {
statusUpdate?: (msg: string) => void;
};
type SerializePluginStatesOptions = {
pluginStates: PluginStatesState;
};
type PluginsToProcess = {
pluginKey: string;
pluginId: string;

View File

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

View File

@@ -27,7 +27,7 @@ export function deserialize(str: string): any {
}
function processArray(
element: any,
_element: any,
array: Array<any>,
stack: Array<any>,
dict: Map<any, any>,
@@ -50,7 +50,7 @@ function processArray(
}
function processKeyValuePair(
element: any,
_element: any,
key: any,
value: any,
stack: Array<any>,

View File

@@ -112,7 +112,7 @@ export function maybeSnapLeft(
}
export function maybeSnapTop(
props: Rect,
_props: Rect,
windows: Array<Rect>,
top: number,
): number {

View File

@@ -188,9 +188,9 @@ export function startPlugin<Module extends FlipperPluginModule<any>>(
pluginInstance.disconnect();
},
call(
api: string,
_api: string,
method: string,
fromPlugin: boolean,
_fromPlugin: boolean,
params?: Object,
): Promise<Object> {
return sendStub(method, params);

View File

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

View File

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

View File

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

View File

@@ -79,12 +79,6 @@ const debugLog = (...args: any[]) => {
}
};
type ImagesMetaData = {
levels: ImagesListResponse;
events: Array<ImageEventWithId>;
imageDataList: Array<ImageData>;
};
export default class FlipperImagesPlugin extends FlipperPlugin<
PluginState,
BaseAction,

View File

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

View File

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

View File

@@ -85,7 +85,7 @@ const GrabMetroDevice = connect<
}: GrabMetroDeviceStoreProps & GrabMetroDeviceOwnProps) {
useEffect(() => {
onHasDevice(metroDevice);
}, [metroDevice]);
}, [metroDevice, onHasDevice]);
return null;
});

View File

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

View File

@@ -12,7 +12,6 @@ import {ResizeObserver} from './ResizeObserver.d';
import {Store} from '../app/src/reducers';
export {};
type RequestIdleHandle = number;
declare global {
interface StoreEnhancerStateSanitizer {

View File

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