diff --git a/e2e/utils.ts b/e2e/utils.ts index 29415bc9b60d8..d7f025ac8a19c 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -209,6 +209,11 @@ export function copyMissingPackages(): void { 'babel-loader', 'babel-plugin-macros', + 'eslint-plugin-import', + 'eslint-plugin-jsx-a11y', + 'eslint-plugin-react', + 'eslint-plugin-react-hooks', + 'document-register-element' ]; modulesToCopy.forEach(m => copyNodeModule(m)); diff --git a/package.json b/package.json index a32867d2bb490..eed46c710deed 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "codelyzer": "~5.0.1", "commitizen": "^4.0.3", "conventional-changelog-cli": "^2.0.23", + "confusing-browser-globals": "^1.0.8", "copy-webpack-plugin": "5.0.3", "cosmiconfig": "^4.0.0", "cypress": "3.4.1", @@ -87,6 +88,10 @@ "express": "4.17.1", "eslint": "6.1.0", "eslint-config-prettier": "6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.14.3", + "eslint-plugin-react-hooks": "^1.7.0", "fork-ts-checker-webpack-plugin": "^0.4.9", "fs-extra": "7.0.1", "graphviz": "^0.0.9", @@ -108,6 +113,7 @@ "karma-jasmine-html-reporter": "^0.2.2", "karma-webpack": "2.0.4", "license-webpack-plugin": "^1.4.0", + "mime": "2.4.4", "ng-packagr": "5.3.0", "ngrx-store-freeze": "0.2.4", "npm-run-all": "^4.1.5", @@ -139,8 +145,7 @@ "webpack-node-externals": "^1.7.2", "yargs": "^11.0.0", "yargs-parser": "10.0.0", - "zone.js": "^0.9.0", - "mime": "2.4.4" + "zone.js": "^0.9.0" }, "author": "Victor Savkin", "license": "MIT", diff --git a/packages/angular/src/schematics/application/application.ts b/packages/angular/src/schematics/application/application.ts index ecce222c1ff97..d19915aef2570 100644 --- a/packages/angular/src/schematics/application/application.ts +++ b/packages/angular/src/schematics/application/application.ts @@ -369,7 +369,9 @@ export default function(schema: Schema): Rule { ...options, skipFormat: true }), - addLintFiles(options.appProjectRoot, options.linter, true), + addLintFiles(options.appProjectRoot, options.linter, { + onlyGlobal: true + }), externalSchematic('@schematics/angular', 'application', { name: options.name, inlineStyle: options.inlineStyle, diff --git a/packages/angular/src/schematics/library/library.ts b/packages/angular/src/schematics/library/library.ts index a55843f0c730b..475c488e10b48 100644 --- a/packages/angular/src/schematics/library/library.ts +++ b/packages/angular/src/schematics/library/library.ts @@ -434,7 +434,7 @@ export default function(schema: Schema): Rule { } return chain([ - addLintFiles(options.projectRoot, Linter.TsLint, true), + addLintFiles(options.projectRoot, Linter.TsLint, { onlyGlobal: true }), addUnitTestRunner(options), externalSchematic('@schematics/angular', 'library', { name: options.name, diff --git a/packages/react/src/schematics/application/application.spec.ts b/packages/react/src/schematics/application/application.spec.ts index df2dd91420407..dc7d5f5ec6805 100644 --- a/packages/react/src/schematics/application/application.spec.ts +++ b/packages/react/src/schematics/application/application.spec.ts @@ -528,4 +528,27 @@ describe('app', () => { }); }); }); + + describe('--linter=eslint', () => { + it('should add .eslintrc and dependencies', async () => { + const tree = await runSchematic( + 'app', + { name: 'myApp', linter: 'eslint' }, + appTree + ); + + const eslintJson = readJsonInTree(tree, '/apps/my-app/.eslintrc'); + const packageJson = readJsonInTree(tree, '/package.json'); + + expect(eslintJson.plugins).toEqual( + expect.arrayContaining(['react', 'react-hooks']) + ); + expect(packageJson).toMatchObject({ + devDependencies: { + 'eslint-plugin-react': expect.anything(), + 'eslint-plugin-react-hooks': expect.anything() + } + }); + }); + }); }); diff --git a/packages/react/src/schematics/application/application.ts b/packages/react/src/schematics/application/application.ts index b9242e7075c00..ef89b78290e66 100644 --- a/packages/react/src/schematics/application/application.ts +++ b/packages/react/src/schematics/application/application.ts @@ -49,6 +49,7 @@ import { regeneratorVersion } from '../../utils/versions'; import { assertValidStyle } from '../../utils/assertion'; +import { extraEslintDependencies, reactEslintJson } from '../../utils/lint'; interface NormalizedSchema extends Schema { projectName: string; @@ -68,7 +69,10 @@ export default function(schema: Schema): Rule { ngAdd({ skipFormat: true }), - addLintFiles(options.appProjectRoot, options.linter), + addLintFiles(options.appProjectRoot, options.linter, { + localConfig: reactEslintJson, + extraPackageDeps: extraEslintDependencies + }), createApplicationFiles(options), updateNxJson(options), addProject(options), @@ -320,6 +324,7 @@ function setDefaults(options: NormalizedSchema): Rule { application: { babel: options.babel, style: options.style, + linter: options.linter, ...jsonIdentity(prev.application) }, component: { @@ -328,6 +333,7 @@ function setDefaults(options: NormalizedSchema): Rule { }, library: { style: options.style, + linter: options.linter, ...jsonIdentity(prev.library) } } diff --git a/packages/react/src/schematics/library/library.ts b/packages/react/src/schematics/library/library.ts index 704e7db42657e..560858ed4f55f 100644 --- a/packages/react/src/schematics/library/library.ts +++ b/packages/react/src/schematics/library/library.ts @@ -40,6 +40,7 @@ import { } from '../../utils/ast-utils'; import { reactRouterVersion } from '../../utils/versions'; import { assertValidStyle } from '../../utils/assertion'; +import { extraEslintDependencies, reactEslintJson } from '../../utils/lint'; export interface NormalizedSchema extends Schema { name: string; @@ -57,7 +58,10 @@ export default function(schema: Schema): Rule { const options = normalizeOptions(host, schema, context); return chain([ - addLintFiles(options.projectRoot, options.linter), + addLintFiles(options.projectRoot, options.linter, { + localConfig: reactEslintJson, + extraPackageDeps: extraEslintDependencies + }), createFiles(options), !options.skipTsConfig ? updateTsConfig(options) : noop(), addProject(options), diff --git a/packages/react/src/utils/lint.ts b/packages/react/src/utils/lint.ts new file mode 100644 index 0000000000000..5076bbdf77380 --- /dev/null +++ b/packages/react/src/utils/lint.ts @@ -0,0 +1,265 @@ +import { EsLintPlugins } from './versions'; +import * as restrictedGlobals from 'confusing-browser-globals'; + +export const extraEslintDependencies = { + dependencies: {}, + devDependencies: { + 'eslint-plugin-import': EsLintPlugins.importVersion, + 'eslint-plugin-jsx-a11y': EsLintPlugins.jsxA11yVersion, + 'eslint-plugin-react': EsLintPlugins.reactVersion, + 'eslint-plugin-react-hooks': EsLintPlugins.reactHooksVersion + } +}; + +/** + * ADAPTED FROM https://github.com/facebook/create-react-app/blob/567f36c9235f1e1fd4a76dc6d1ae00be754ca047/packages/eslint-config-react-app/index.js + */ +export const reactEslintJson = { + env: { + browser: true, + commonjs: true, + es6: true, + jest: true, + node: true + }, + settings: { + react: { + version: 'detect' + } + }, + plugins: ['import', 'jsx-a11y', 'react', 'react-hooks'], + + /** + * Inspired by configuration originally found in create-react-app + * https://github.com/facebook/create-react-app + */ + rules: { + '@nrwl/nx/enforce-module-boundaries': [ + 'error', + { + allow: [], + depConstraints: [{ sourceTag: '*', onlyDependOnLibsWithTags: ['*'] }] + } + ], + /** + * Standard ESLint rule configurations + * https://eslint.org/docs/rules + */ + 'array-callback-return': 'warn', + 'dot-location': ['warn', 'property'], + eqeqeq: ['warn', 'smart'], + 'new-parens': 'warn', + 'no-caller': 'warn', + 'no-cond-assign': ['warn', 'except-parens'], + 'no-const-assign': 'warn', + 'no-control-regex': 'warn', + 'no-delete-var': 'warn', + 'no-dupe-args': 'warn', + 'no-dupe-keys': 'warn', + 'no-duplicate-case': 'warn', + 'no-empty-character-class': 'warn', + 'no-empty-pattern': 'warn', + 'no-eval': 'warn', + 'no-ex-assign': 'warn', + 'no-extend-native': 'warn', + 'no-extra-bind': 'warn', + 'no-extra-label': 'warn', + 'no-fallthrough': 'warn', + 'no-func-assign': 'warn', + 'no-implied-eval': 'warn', + 'no-invalid-regexp': 'warn', + 'no-iterator': 'warn', + 'no-label-var': 'warn', + 'no-labels': ['warn', { allowLoop: true, allowSwitch: false }], + 'no-lone-blocks': 'warn', + 'no-loop-func': 'warn', + 'no-mixed-operators': [ + 'warn', + { + groups: [ + ['&', '|', '^', '~', '<<', '>>', '>>>'], + ['==', '!=', '===', '!==', '>', '>=', '<', '<='], + ['&&', '||'], + ['in', 'instanceof'] + ], + allowSamePrecedence: false + } + ], + 'no-multi-str': 'warn', + 'no-native-reassign': 'warn', + 'no-negated-in-lhs': 'warn', + 'no-new-func': 'warn', + 'no-new-object': 'warn', + 'no-new-symbol': 'warn', + 'no-new-wrappers': 'warn', + 'no-obj-calls': 'warn', + 'no-octal': 'warn', + 'no-octal-escape': 'warn', + 'no-redeclare': 'warn', + 'no-regex-spaces': 'warn', + 'no-restricted-syntax': ['warn', 'WithStatement'], + 'no-script-url': 'warn', + 'no-self-assign': 'warn', + 'no-self-compare': 'warn', + 'no-sequences': 'warn', + 'no-shadow-restricted-names': 'warn', + 'no-sparse-arrays': 'warn', + 'no-template-curly-in-string': 'warn', + 'no-this-before-super': 'warn', + 'no-throw-literal': 'warn', + 'no-restricted-globals': ['error'].concat(restrictedGlobals), + 'no-unexpected-multiline': 'warn', + 'no-unreachable': 'warn', + 'no-unused-expressions': [ + 'error', + { + allowShortCircuit: true, + allowTernary: true, + allowTaggedTemplates: true + } + ], + 'no-unused-labels': 'warn', + 'no-useless-computed-key': 'warn', + 'no-useless-concat': 'warn', + 'no-useless-escape': 'warn', + 'no-useless-rename': [ + 'warn', + { + ignoreDestructuring: false, + ignoreImport: false, + ignoreExport: false + } + ], + 'no-with': 'warn', + 'no-whitespace-before-property': 'warn', + 'react-hooks/exhaustive-deps': 'warn', + 'require-yield': 'warn', + 'rest-spread-spacing': ['warn', 'never'], + strict: ['warn', 'never'], + 'unicode-bom': ['warn', 'never'], + 'use-isnan': 'warn', + 'valid-typeof': 'warn', + 'no-restricted-properties': [ + 'error', + { + object: 'require', + property: 'ensure', + message: + 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting' + }, + { + object: 'System', + property: 'import', + message: + 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting' + } + ], + 'getter-return': 'warn', + + /** + * Import rule configurations + * https://github.com/benmosher/eslint-plugin-import + */ + 'import/first': 'error', + 'import/no-amd': 'error', + 'import/no-webpack-loader-syntax': 'error', + + /** + * React-specific rule configurations + * https://github.com/yannickcr/eslint-plugin-react + */ + 'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }], + 'react/jsx-no-comment-textnodes': 'warn', + 'react/jsx-no-duplicate-props': 'warn', + 'react/jsx-no-target-blank': 'warn', + 'react/jsx-no-undef': 'error', + 'react/jsx-pascal-case': [ + 'warn', + { + allowAllCaps: true, + ignore: [] + } + ], + 'react/jsx-uses-react': 'warn', + 'react/jsx-uses-vars': 'warn', + 'react/no-danger-with-children': 'warn', + 'react/no-direct-mutation-state': 'warn', + 'react/no-is-mounted': 'warn', + 'react/no-typos': 'error', + 'react/react-in-jsx-scope': 'error', + 'react/require-render-return': 'error', + 'react/style-prop-object': 'warn', + + /** + * JSX Accessibility rule configurations + * https://github.com/evcohen/eslint-plugin-jsx-a11y + */ + 'jsx-a11y/accessible-emoji': 'warn', + 'jsx-a11y/alt-text': 'warn', + 'jsx-a11y/anchor-has-content': 'warn', + 'jsx-a11y/anchor-is-valid': [ + 'warn', + { + aspects: ['noHref', 'invalidHref'] + } + ], + 'jsx-a11y/aria-activedescendant-has-tabindex': 'warn', + 'jsx-a11y/aria-props': 'warn', + 'jsx-a11y/aria-proptypes': 'warn', + 'jsx-a11y/aria-role': 'warn', + 'jsx-a11y/aria-unsupported-elements': 'warn', + 'jsx-a11y/heading-has-content': 'warn', + 'jsx-a11y/iframe-has-title': 'warn', + 'jsx-a11y/img-redundant-alt': 'warn', + 'jsx-a11y/no-access-key': 'warn', + 'jsx-a11y/no-distracting-elements': 'warn', + 'jsx-a11y/no-redundant-roles': 'warn', + 'jsx-a11y/role-has-required-aria-props': 'warn', + 'jsx-a11y/role-supports-aria-props': 'warn', + 'jsx-a11y/scope': 'warn', + + /** + * React Hooks rule configurations + * https://github.com/facebook/react/tree/master/packages/eslint-plugin-react-hooks + */ + 'react-hooks/rules-of-hooks': 'error', + + /** + * TypeScript-specific rule configurations (in addition to @typescript-eslint:recommended) + * https://github.com/typescript-eslint/typescript-eslint + */ + + // TypeScript"s `noFallthroughCasesInSwitch` option is more robust (#6906) + 'default-case': 'off', + // "tsc" already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/291) + 'no-dupe-class-members': 'off', + // "tsc" already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477) + 'no-undef': 'off', + + // Add TypeScript specific rules (and turn off ESLint equivalents) + '@typescript-eslint/consistent-type-assertions': 'warn', + 'no-array-constructor': 'off', + '@typescript-eslint/no-array-constructor': 'warn', + '@typescript-eslint/no-namespace': 'error', + 'no-use-before-define': 'off', + '@typescript-eslint/no-use-before-define': [ + 'warn', + { + functions: false, + classes: false, + variables: false, + typedefs: false + } + ], + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + args: 'none', + ignoreRestSiblings: true + } + ], + 'no-useless-constructor': 'off', + '@typescript-eslint/no-useless-constructor': 'warn' + } +}; diff --git a/packages/react/src/utils/versions.ts b/packages/react/src/utils/versions.ts index f88ee0e1dbf4b..d956c278636b0 100644 --- a/packages/react/src/utils/versions.ts +++ b/packages/react/src/utils/versions.ts @@ -16,3 +16,11 @@ export const babelLoaderVersion = '8.0.6'; export const babelPluginMacrosVersion = '2.6.1'; export const coreJsVersion = '3.1.4'; export const regeneratorVersion = '0.13.3'; +export const eslintConfigReactAppVersion = '5.0.1'; + +export const EsLintPlugins = { + importVersion: '2.18.2', + jsxA11yVersion: '6.2.3', + reactVersion: '7.14.3', + reactHooksVersion: '1.6.1' +}; diff --git a/packages/workspace/src/utils/lint.ts b/packages/workspace/src/utils/lint.ts index c3eba41802d34..0c55383b34925 100644 --- a/packages/workspace/src/utils/lint.ts +++ b/packages/workspace/src/utils/lint.ts @@ -48,17 +48,31 @@ export function generateProjectLint( } } +interface AddLintFileOptions { + onlyGlobal?: boolean; + localConfig?: any; + extraPackageDeps?: { + dependencies: { [key: string]: string }; + devDependencies: { [key: string]: string }; + }; +} export function addLintFiles( projectRoot: string, linter: Linter, - onlyGlobal = false + options: AddLintFileOptions = {} ): Rule { return (host: Tree, context: SchematicContext) => { + if (options.onlyGlobal && options.localConfig) { + throw new Error( + 'onlyGlobal and localConfig cannot be used at the same time' + ); + } + if (linter === 'tslint') { if (!host.exists('/tslint.json')) { host.create('/tslint.json', globalTsLint); } - if (!onlyGlobal) { + if (!options.onlyGlobal) { host.create( join(projectRoot as any, `tslint.json`), JSON.stringify({ @@ -74,34 +88,45 @@ export function addLintFiles( if (!host.exists('/.eslintrc')) { host.create('/.eslintrc', globalESLint); addDepsToPackageJson( - {}, + { + ...(options.extraPackageDeps + ? options.extraPackageDeps.dependencies + : {}) + }, { '@nrwl/eslint-plugin-nx': nxVersion, '@typescript-eslint/parser': typescriptESLintVersion, '@typescript-eslint/eslint-plugin': typescriptESLintVersion, eslint: eslintVersion, - 'eslint-config-prettier': eslintConfigPrettierVersion - - /** - * REACT SPECIFIC PLUGINS USED IN CONFIG REACT SPECIFIC CONFIG BELOW - * - * NOTE: They will also need adding to the root package.json of this repo - * when the time comes - */ - // "eslint-plugin-import": "2.18.2", - // "eslint-plugin-jsx-a11y": "6.2.3", - // "eslint-plugin-react": "7.14.3", - // "eslint-plugin-react-hooks": "1.6.1", + 'eslint-config-prettier': eslintConfigPrettierVersion, + ...(options.extraPackageDeps + ? options.extraPackageDeps.devDependencies + : {}) } )(host, context); } - if (!onlyGlobal) { + if (!options.onlyGlobal) { + let configJson; + const rootConfig = `${offsetFromRoot(projectRoot)}.eslintrc`; + if (options.localConfig) { + const extendsOption = options.localConfig.extends + ? Array.isArray(options.localConfig.extends) + ? options.localConfig.extends + : [options.localConfig.extends] + : []; + configJson = { + ...options.localConfig, + extends: [...extendsOption, rootConfig] + }; + } else { + configJson = { + extends: rootConfig, + rules: {} + }; + } host.create( join(projectRoot as any, `.eslintrc`), - JSON.stringify({ - extends: `${offsetFromRoot(projectRoot)}.eslintrc`, - rules: {} - }) + JSON.stringify(configJson) ); } } @@ -183,11 +208,11 @@ const globalESLint = ` }, "plugins": ["@typescript-eslint", "@nrwl/nx"], "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "prettier", - "prettier/@typescript-eslint" + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier', + 'prettier/@typescript-eslint' ], "rules": { "@typescript-eslint/explicit-member-accessibility": "off", @@ -213,337 +238,3 @@ const globalESLint = ` ] } `; - -/** - * CONFIG FOR REACT WORKSPACES - * - * ADAPTED FROM https://github.com/facebook/create-react-app/blob/567f36c9235f1e1fd4a76dc6d1ae00be754ca047/packages/eslint-config-react-app/index.js - */ -// { -// "parser": "@typescript-eslint/parser", -// "parserOptions": { -// "ecmaVersion": 2018, -// "sourceType": "module", -// "project": "./tsconfig.json" -// }, -// "env": { -// "browser": true, -// "commonjs": true, -// "es6": true, -// "jest": true, -// "node": true -// }, -// "settings": { -// "react": { -// "version": "detect" -// } -// }, -// "plugins": ["@typescript-eslint", "@nrwl/nx", "import", "jsx-a11y", "react", "react-hooks"], -// "extends": [ -// "eslint:recommended", -// "plugin:@typescript-eslint/eslint-recommended", -// "plugin:@typescript-eslint/recommended", -// "prettier", -// "prettier/@typescript-eslint" -// ], - -// /** -// * Inspired by configuration originally found in create-react-app -// * https://github.com/facebook/create-react-app -// */ -// "rules": { -// "@nrwl/nx/enforce-module-boundaries": [ -// "error", -// { -// "allow": [], -// "depConstraints": [ -// { "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] } -// ] -// } -// ], -// /** -// * Standard ESLint rule configurations -// * https://eslint.org/docs/rules -// */ -// "array-callback-return": "warn", -// "dot-location": ["warn", "property"], -// "eqeqeq": ["warn", "smart"], -// "new-parens": "warn", -// "no-caller": "warn", -// "no-cond-assign": ["warn", "except-parens"], -// "no-const-assign": "warn", -// "no-control-regex": "warn", -// "no-delete-var": "warn", -// "no-dupe-args": "warn", -// "no-dupe-keys": "warn", -// "no-duplicate-case": "warn", -// "no-empty-character-class": "warn", -// "no-empty-pattern": "warn", -// "no-eval": "warn", -// "no-ex-assign": "warn", -// "no-extend-native": "warn", -// "no-extra-bind": "warn", -// "no-extra-label": "warn", -// "no-fallthrough": "warn", -// "no-func-assign": "warn", -// "no-implied-eval": "warn", -// "no-invalid-regexp": "warn", -// "no-iterator": "warn", -// "no-label-var": "warn", -// "no-labels": ["warn", { "allowLoop": true, "allowSwitch": false }], -// "no-lone-blocks": "warn", -// "no-loop-func": "warn", -// "no-mixed-operators": [ -// "warn", -// { -// "groups": [ -// ["&", "|", "^", "~", "<<", ">>", ">>>"], -// ["==", "!=", "===", "!==", ">", ">=", "<", "<="], -// ["&&", "||"], -// ["in", "instanceof"], -// ], -// "allowSamePrecedence": false, -// }, -// ], -// "no-multi-str": "warn", -// "no-native-reassign": "warn", -// "no-negated-in-lhs": "warn", -// "no-new-func": "warn", -// "no-new-object": "warn", -// "no-new-symbol": "warn", -// "no-new-wrappers": "warn", -// "no-obj-calls": "warn", -// "no-octal": "warn", -// "no-octal-escape": "warn", -// "no-redeclare": "warn", -// "no-regex-spaces": "warn", -// "no-restricted-syntax": ["warn", "WithStatement"], -// "no-script-url": "warn", -// "no-self-assign": "warn", -// "no-self-compare": "warn", -// "no-sequences": "warn", -// "no-shadow-restricted-names": "warn", -// "no-sparse-arrays": "warn", -// "no-template-curly-in-string": "warn", -// "no-this-before-super": "warn", -// "no-throw-literal": "warn", -// "no-restricted-globals": [ -// "error", -// [ -// "addEventListener", -// "blur", -// "close", -// "closed", -// "confirm", -// "defaultStatus", -// "defaultstatus", -// "event", -// "external", -// "find", -// "focus", -// "frameElement", -// "frames", -// "history", -// "innerHeight", -// "innerWidth", -// "length", -// "location", -// "locationbar", -// "menubar", -// "moveBy", -// "moveTo", -// "name", -// "onblur", -// "onerror", -// "onfocus", -// "onload", -// "onresize", -// "onunload", -// "open", -// "opener", -// "opera", -// "outerHeight", -// "outerWidth", -// "pageXOffset", -// "pageYOffset", -// "parent", -// "print", -// "removeEventListener", -// "resizeBy", -// "resizeTo", -// "screen", -// "screenLeft", -// "screenTop", -// "screenX", -// "screenY", -// "scroll", -// "scrollbars", -// "scrollBy", -// "scrollTo", -// "scrollX", -// "scrollY", -// "self", -// "status", -// "statusbar", -// "stop", -// "toolbar", -// "top", -// ] -// ], -// "no-unexpected-multiline": "warn", -// "no-unreachable": "warn", -// "no-unused-expressions": [ -// "error", -// { -// "allowShortCircuit": true, -// "allowTernary": true, -// "allowTaggedTemplates": true, -// }, -// ], -// "no-unused-labels": "warn", -// "no-useless-computed-key": "warn", -// "no-useless-concat": "warn", -// "no-useless-escape": "warn", -// "no-useless-rename": [ -// "warn", -// { -// "ignoreDestructuring": false, -// "ignoreImport": false, -// "ignoreExport": false, -// }, -// ], -// "no-with": "warn", -// "no-whitespace-before-property": "warn", -// "react-hooks/exhaustive-deps": "warn", -// "require-yield": "warn", -// "rest-spread-spacing": ["warn", "never"], -// "strict": ["warn", "never"], -// "unicode-bom": ["warn", "never"], -// "use-isnan": "warn", -// "valid-typeof": "warn", -// "no-restricted-properties": [ -// "error", -// { -// "object": "require", -// "property": "ensure", -// "message": -// "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting", -// }, -// { -// "object": "System", -// "property": "import", -// "message": -// "Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting", -// }, -// ], -// "getter-return": "warn", - -// /** -// * Import rule configurations -// * https://github.com/benmosher/eslint-plugin-import -// */ -// "import/first": "error", -// "import/no-amd": "error", -// "import/no-webpack-loader-syntax": "error", - -// /** -// * React-specific rule configurations -// * https://github.com/yannickcr/eslint-plugin-react -// */ -// "react/forbid-foreign-prop-types": ["warn", { "allowInPropTypes": true }], -// "react/jsx-no-comment-textnodes": "warn", -// "react/jsx-no-duplicate-props": "warn", -// "react/jsx-no-target-blank": "warn", -// "react/jsx-no-undef": "error", -// "react/jsx-pascal-case": [ -// "warn", -// { -// "allowAllCaps": true, -// "ignore": [], -// }, -// ], -// "react/jsx-uses-react": "warn", -// "react/jsx-uses-vars": "warn", -// "react/no-danger-with-children": "warn", -// "react/no-direct-mutation-state": "warn", -// "react/no-is-mounted": "warn", -// "react/no-typos": "error", -// "react/react-in-jsx-scope": "error", -// "react/require-render-return": "error", -// "react/style-prop-object": "warn", - -// /** -// * JSX Accessibility rule configurations -// * https://github.com/evcohen/eslint-plugin-jsx-a11y -// */ -// "jsx-a11y/accessible-emoji": "warn", -// "jsx-a11y/alt-text": "warn", -// "jsx-a11y/anchor-has-content": "warn", -// "jsx-a11y/anchor-is-valid": [ -// "warn", -// { -// "aspects": ["noHref", "invalidHref"], -// }, -// ], -// "jsx-a11y/aria-activedescendant-has-tabindex": "warn", -// "jsx-a11y/aria-props": "warn", -// "jsx-a11y/aria-proptypes": "warn", -// "jsx-a11y/aria-role": "warn", -// "jsx-a11y/aria-unsupported-elements": "warn", -// "jsx-a11y/heading-has-content": "warn", -// "jsx-a11y/iframe-has-title": "warn", -// "jsx-a11y/img-redundant-alt": "warn", -// "jsx-a11y/no-access-key": "warn", -// "jsx-a11y/no-distracting-elements": "warn", -// "jsx-a11y/no-redundant-roles": "warn", -// "jsx-a11y/role-has-required-aria-props": "warn", -// "jsx-a11y/role-supports-aria-props": "warn", -// "jsx-a11y/scope": "warn", - -// /** -// * React Hooks rule configurations -// * https://github.com/facebook/react/tree/master/packages/eslint-plugin-react-hooks -// */ -// "react-hooks/rules-of-hooks": "error", - -// /** -// * TypeScript-specific rule configurations (in addition to @typescript-eslint:recommended) -// * https://github.com/typescript-eslint/typescript-eslint -// */ - -// // TypeScript"s `noFallthroughCasesInSwitch` option is more robust (#6906) -// "default-case": "off", -// // "tsc" already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/291) -// "no-dupe-class-members": "off", -// // "tsc" already handles this (https://github.com/typescript-eslint/typescript-eslint/issues/477) -// "no-undef": "off", - -// // Add TypeScript specific rules (and turn off ESLint equivalents) -// "@typescript-eslint/consistent-type-assertions": "warn", -// "no-array-constructor": "off", -// "@typescript-eslint/no-array-constructor": "warn", -// "@typescript-eslint/no-namespace": "error", -// "no-use-before-define": "off", -// "@typescript-eslint/no-use-before-define": [ -// "warn", -// { -// "functions": false, -// "classes": false, -// "variables": false, -// "typedefs": false, -// }, -// ], -// "no-unused-vars": "off", -// "@typescript-eslint/no-unused-vars": [ -// "warn", -// { -// "args": "none", -// "ignoreRestSiblings": true, -// }, -// ], -// "no-useless-constructor": "off", -// "@typescript-eslint/no-useless-constructor": "warn", -// "@typescript-eslint/explicit-member-accessibility": "off", -// "@typescript-eslint/explicit-function-return-type": "off" -// } -// } diff --git a/yarn.lock b/yarn.lock index 9b5fb1d409275..7dc3da4334e67 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2316,6 +2316,14 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -2407,7 +2415,7 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -ast-types-flow@0.0.7: +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= @@ -4139,6 +4147,11 @@ configstore@^4.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +confusing-browser-globals@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz#93ffec1f82a6e2bf2bc36769cc3a92fa20e502f3" + integrity sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg== + connect-history-api-fallback@^1.3.0, connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -4176,6 +4189,11 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -5036,7 +5054,7 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -5252,6 +5270,21 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -5406,7 +5439,7 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^7.0.1: +emoji-regex@^7.0.1, emoji-regex@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== @@ -5513,7 +5546,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.4.3, es-abstract@^1.5.1: +es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -5611,6 +5644,74 @@ eslint-config-prettier@6.0.0: dependencies: get-stdin "^6.0.0" +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.11.0" + +eslint-plugin-jsx-a11y@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== + dependencies: + "@babel/runtime" "^7.4.5" + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.2.1" + +eslint-plugin-react-hooks@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" + integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== + +eslint-plugin-react@^7.14.3: + version "7.14.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" + integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== + dependencies: + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.1.0" + object.entries "^1.1.0" + object.fromentries "^2.0.0" + object.values "^1.1.0" + prop-types "^15.7.2" + resolve "^1.10.1" + eslint-scope@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -8654,6 +8755,14 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb" + integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ== + dependencies: + array-includes "^3.0.3" + object.assign "^4.1.0" + karma-chrome-launcher@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" @@ -8952,6 +9061,16 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -10132,6 +10251,26 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.entries@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" + integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" + integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== + dependencies: + define-properties "^1.1.2" + es-abstract "^1.11.0" + function-bind "^1.1.1" + has "^1.0.1" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -10155,6 +10294,16 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -10687,6 +10836,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -10764,6 +10920,13 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -10973,7 +11136,7 @@ prompts@^2.0.1: kleur "^3.0.2" sisteransi "^1.0.0" -prop-types@^15.5.4, prop-types@^15.6.2: +prop-types@^15.5.4, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -11272,6 +11435,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -11305,6 +11476,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -11768,6 +11948,13 @@ resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.11.0, r dependencies: path-parse "^1.0.6" +resolve@^1.10.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7"