diff --git a/.circleci/config.yml b/.circleci/config.yml index 33951410c4b04..10f08e30b72db 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,6 +58,9 @@ jobs: - run: name: '`yarn prettier` changes committed?' command: yarn prettier check-changed + - run: + name: Lint + command: yarn lint:ci workflows: version: 2 pipeline: diff --git a/.eslintrc.js b/.eslintrc.js index b9a1b2b740be1..5eaf8f8eedfa9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,36 +1,99 @@ +const confusingBrowserGlobals = require('confusing-browser-globals'); +const path = require('path'); + module.exports = { - parser: "@typescript-eslint/parser", // Specifies the ESLint parser - extends: [ - "plugin:react/recommended", // Uses the recommended rules from @eslint-plugin-react - "plugin:@typescript-eslint/recommended", // Uses the recommended rules from the @typescript-eslint/eslint-plugin - "prettier/@typescript-eslint", // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier - "plugin:prettier/recommended", // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. + root: true, // So parent files don't get applied + globals: { + preval: false, // Used in the documentation + }, + env: { + es6: true, + browser: true, + node: true, + }, + extends: ['airbnb', 'prettier', 'prettier/react'], + parser: 'babel-eslint', + parserOptions: { + ecmaVersion: 7, + sourceType: 'module', + }, + plugins: ['babel', 'react-hooks'], + settings: {}, + /** + * Sorted alphanumerically within each group. built-in and each plugin form + * their own groups. + */ + rules: { + 'consistent-this': ['error', 'self'], + 'linebreak-style': 'off', // Doesn't play nicely with Windows + // just as bad as "max components per file" + 'max-classes-per-file': 'off', + 'no-alert': 'error', + // Strict, airbnb is using warn; allow warn and error for dev environments + 'no-console': ['error', { allow: ['warn', 'error'] }], + 'no-constant-condition': 'error', + // Airbnb use error + 'no-param-reassign': 'off', + 'no-prototype-builtins': 'off', + 'no-restricted-imports': [ + 'error', + { + patterns: [ + '@material-ui/*/*/*', + '!@material-ui/core/test-utils/*', + '!@material-ui/utils/macros/*.macro', + ], + }, ], - plugins: [ - "unused-imports" , - "react-hooks" + 'nonblock-statement-body-position': 'error', + // Airbnb restricts isNaN and isFinite which are necessary for IE 11 + // we have to be disciplined about the usage and ensure the Number type for its + // arguments + 'no-restricted-globals': ['error'].concat(confusingBrowserGlobals), + 'no-underscore-dangle': 'error', + 'prefer-arrow-callback': ['error', { allowNamedFunctions: true }], + 'prefer-destructuring': 'off', // Destructuring harm grep potential. + + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/label-has-for': 'off', // deprecated + 'jsx-a11y/no-autofocus': 'off', // We are a library, people do what they want. + + // This rule is great for raising people awareness of what a key is and how it works. + 'react/no-array-index-key': 'off', + 'react/destructuring-assignment': 'off', + // It's buggy + 'react/forbid-prop-types': 'off', + 'react/jsx-curly-brace-presence': 'off', + // prefer over <>. The former allows `key` while the latter doesn't + 'react/jsx-fragments': ['error', 'element'], + 'react/jsx-filename-extension': ['error', { extensions: ['.js'] }], // airbnb is using .jsx + 'react/jsx-handler-names': [ + 'error', + { + // airbnb is disabling this rule + eventHandlerPrefix: 'handle', + eventHandlerPropPrefix: 'on', + }, ], - parserOptions: { - ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features - sourceType: "module", // Allows for the use of imports - ecmaFeatures: { - jsx: true // Allows for the parsing of JSX - } - }, - rules: { - // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs - // e.g. "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports-ts": 2, - "unused-imports/no-unused-vars-ts": 1, - "react/prop-types": 0, - "eslint-disable react/display-name":0, - "react-hooks/rules-of-hooks": "error", // Checks rules of Hooks - "react-hooks/exhaustive-deps": "error" // Checks effect dependencies - }, - settings: { - react: { - version: "detect" // Tells eslint-plugin-react to automatically detect the version of React to use - } - } - }; \ No newline at end of file + // not a good rule for components close to the DOM + 'react/jsx-props-no-spreading': 'off', + 'react/no-danger': 'error', + // Strict, airbnb is using off + 'react/no-direct-mutation-state': 'error', + 'react/no-find-dom-node': 'off', + 'react/no-multi-comp': 'off', + 'react/require-default-props': 'off', + 'react/sort-prop-types': 'error', + // This depends entirely on what you're doing. There's no universal pattern + 'react/state-in-constructor': 'off', + // stylistic opinion. For conditional assignment we want it outside, otherwise as static + 'react/static-property-placement': 'off', + + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': ['error', { additionalHooks: 'useEnhancedEffect' }], + + 'import/no-unresolved': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + overrides: [], +}; diff --git a/.gitignore b/.gitignore index 0b70368e404f7..3a6c2793403c8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ .DS_STORE *.log +/.eslintcache dist node_modules __diff_output__ \ No newline at end of file diff --git a/package.json b/package.json index 9675b541dec46..a3f0b778d49e8 100644 --- a/package.json +++ b/package.json @@ -5,43 +5,49 @@ "author": "Damien Tassone", "private": true, "devDependencies": { + "@material-ui/core": "^4.9.12", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "^4.0.0-alpha.54", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", - "@types/enzyme": "^3.10.5", "@types/enzyme-adapter-react-16": "^1.0.6", + "@types/enzyme": "^3.10.5", "@types/jest": "^25.1.2", "@types/node": "^12.0.0", - "@types/react": "^16.9.25", "@types/react-dom": "^16.9.5", + "@types/react": "^16.9.25", "@types/styled-components": "^5.0.1", "@typescript-eslint/eslint-plugin": "^2.19.0", "@typescript-eslint/parser": "^2.19.0", - "@material-ui/core": "^4.9.12", - "@material-ui/icons": "^4.9.1", - "@material-ui/lab": "^4.0.0-alpha.54", - "styled-components": "^5.1.0", - "enzyme": "^3.11.0", + "babel-eslint": "^10.1.0", + "confusing-browser-globals": "^1.0.9", "enzyme-adapter-react-16": "^1.15.2", - "eslint": "^6.8.0", + "enzyme": "^3.11.0", + "eslint-config-airbnb": "^18.2.0", "eslint-config-prettier": "^6.10.0", + "eslint-plugin-babel": "^5.3.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-react": "^7.18.3", "eslint-plugin-react-hooks": "^2.5.0", + "eslint-plugin-react": "^7.18.3", "eslint-plugin-unused-imports": "^0.1.2", + "eslint": "^6.8.0", "glob-gitignore": "^1.0.14", - "jest": "^25.1.0", "jest-cli": "^25.1.0", "jest-transform-stub": "^2.0.0", + "jest": "^25.1.0", "lerna": "^3.20.2", "prettier": "^1.19.1", - "react": "^16.13.1", "react-dom": "^16.13.1", - "stylelint": "^13.3.3", + "react": "^16.13.1", + "styled-components": "^5.1.0", "stylelint-config-recommended": "^3.0.0", "stylelint-config-standard": "^20.0.0", "stylelint-config-styled-components": "^0.1.1", "stylelint-processor-styled-components": "^1.10.0", + "stylelint": "^13.3.3", "ts-jest": "^25.2.0" }, "scripts": { @@ -51,7 +57,9 @@ "start": "lerna run start --parallel", "prettier": "node ./scripts/prettier.js", "test": "lerna run test --parallel", - "lint": "lerna run lint --parallel" + "lint": "eslint . --cache --report-unused-disable-directives", + "lint:ci": "eslint . --report-unused-disable-directives", + "lint:fix": "eslint . --cache --fix" }, "eslintConfig": { "extends": "react-app" @@ -59,9 +67,7 @@ "setupFiles": [ "/src/setupTests.js" ], - "dependencies": { - "styled-components": "^5.1.0" - }, + "dependencies": {}, "workspaces": [ "packages/*", "!packages/grid", diff --git a/packages/demo-app/webpack.common.js b/packages/demo-app/webpack.common.js index 2987f7bdf2b48..10ce82905a7cd 100644 --- a/packages/demo-app/webpack.common.js +++ b/packages/demo-app/webpack.common.js @@ -6,9 +6,6 @@ const CopyPlugin = require('copy-webpack-plugin'); module.exports = { context: __dirname, entry: ['./src/index.tsx'], - optimization: { - usedExports: true, - }, resolve: { modules: [ path.resolve(__dirname, 'node_modules'), diff --git a/packages/grid/data-grid/rollup.config.js b/packages/grid/data-grid/rollup.config.js index 31969c6fbce2e..c00ac677d7586 100644 --- a/packages/grid/data-grid/rollup.config.js +++ b/packages/grid/data-grid/rollup.config.js @@ -1,11 +1,11 @@ import resolve from '@rollup/plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; import dts from 'rollup-plugin-dts'; import command from 'rollup-plugin-command'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; @@ -28,7 +28,7 @@ export default [ external: [...Object.keys(pkg.peerDependencies || {})], plugins: [ resolve({ - resolveOnly: [/^@material-ui\/x\-.*$/], //we bundle x-license and x-grid-modules + resolveOnly: [/^@material-ui\/x-.*$/], // we bundle x-license and x-grid-modules }), production && cleaner({ diff --git a/packages/grid/x-grid-data-generator/bin/data-gen-script.js b/packages/grid/x-grid-data-generator/bin/data-gen-script.js index 0a67ba08d3f7c..143d52aa82909 100755 --- a/packages/grid/x-grid-data-generator/bin/data-gen-script.js +++ b/packages/grid/x-grid-data-generator/bin/data-gen-script.js @@ -1,7 +1,6 @@ #!/usr/bin/env node -require = require('esm')(module /*, options*/); - -// eslint-disable-next-line @typescript-eslint/no-var-requires +// eslint-disable-next-line no-global-assign +require = require('esm')(module); require('../dist/index-cjs').datagenCli(process.argv); diff --git a/packages/grid/x-grid-data-generator/bin/data-gen-script_BAK.js b/packages/grid/x-grid-data-generator/bin/data-gen-script_BAK.js deleted file mode 100755 index 3bd0e2b02692f..0000000000000 --- a/packages/grid/x-grid-data-generator/bin/data-gen-script_BAK.js +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env node - -// eslint-disable-next-line @typescript-eslint/no-var-requires -const program = require('commander'); -// eslint-disable-next-line @typescript-eslint/no-var-requires -const fs = require('fs'); - -program - .arguments('') - .option('-s, --size ', 'The number of rows to generate', '100') - .option('-o, --out ', 'The output file', './output.json') - .action(async function(dataset) { - console.log('size: %s dataset: %s', program.size, dataset); - const data = await dataGenerator.getRealData( - Number(program.size), - dataset.toLowerCase() === 'commodity' - ? dataGenerator.commodityColumns - : dataGenerator.binemployeeColumns, - ); - fs.writeFile(program.output, JSON.stringify(data, null, 2)); - }) - .parse(process.argv); diff --git a/packages/grid/x-grid-data-generator/rollup.config.js b/packages/grid/x-grid-data-generator/rollup.config.js index 627e4bf3eb92e..a595365283326 100644 --- a/packages/grid/x-grid-data-generator/rollup.config.js +++ b/packages/grid/x-grid-data-generator/rollup.config.js @@ -1,5 +1,4 @@ import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; @@ -7,6 +6,7 @@ import css from 'rollup-plugin-css-only'; import commonjs from 'rollup-plugin-commonjs'; import postcss from 'rollup-plugin-postcss'; import dts from 'rollup-plugin-dts'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; diff --git a/packages/grid/x-grid-modules/rollup.config.js b/packages/grid/x-grid-modules/rollup.config.js index e674b2af686d7..982501e417195 100644 --- a/packages/grid/x-grid-modules/rollup.config.js +++ b/packages/grid/x-grid-modules/rollup.config.js @@ -1,9 +1,9 @@ import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; import dts from 'rollup-plugin-dts'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; diff --git a/packages/grid/x-grid/rollup.config.js b/packages/grid/x-grid/rollup.config.js index 0ba68f96f1e94..543e0bc7f1a85 100644 --- a/packages/grid/x-grid/rollup.config.js +++ b/packages/grid/x-grid/rollup.config.js @@ -1,6 +1,5 @@ import typescript from 'rollup-plugin-typescript2'; import { generateReleaseInfo } from '@material-ui/x-license'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; @@ -8,6 +7,7 @@ import replace from '@rollup/plugin-replace'; import resolve from '@rollup/plugin-node-resolve'; import dts from 'rollup-plugin-dts'; import command from 'rollup-plugin-command'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; @@ -33,7 +33,7 @@ export default [ __RELEASE_INFO__: generateReleaseInfo(), }), resolve({ - resolveOnly: [/^@material-ui\/x\-.*$/], //we bundle x-license and x-grid-modules + resolveOnly: [/^@material-ui\/x-.*$/], // we bundle x-license and x-grid-modules }), production && cleaner({ diff --git a/packages/license/bin/license-gen-script.js b/packages/license/bin/license-gen-script.js index ad391f68ff627..9cf41332967cb 100755 --- a/packages/license/bin/license-gen-script.js +++ b/packages/license/bin/license-gen-script.js @@ -1,7 +1,6 @@ #!/usr/bin/env node -require = require('esm')(module /*, options*/); - -// eslint-disable-next-line @typescript-eslint/no-var-requires +// eslint-disable-next-line no-global-assign +require = require('esm')(module); require('../dist/cjs/license-cli').licenseGenCli(process.argv); diff --git a/packages/license/rollup.config.js b/packages/license/rollup.config.js index 506eea3cbbdce..c547914fa4f4c 100644 --- a/packages/license/rollup.config.js +++ b/packages/license/rollup.config.js @@ -1,10 +1,10 @@ import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; import commonjs from 'rollup-plugin-commonjs'; import dts from 'rollup-plugin-dts'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; diff --git a/packages/panel/rollup.config.js b/packages/panel/rollup.config.js index d14bb116b4416..532973a09059a 100644 --- a/packages/panel/rollup.config.js +++ b/packages/panel/rollup.config.js @@ -1,8 +1,8 @@ import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; diff --git a/packages/splitter/rollup.config.js b/packages/splitter/rollup.config.js index e3df570596bde..dd1021fdbc646 100644 --- a/packages/splitter/rollup.config.js +++ b/packages/splitter/rollup.config.js @@ -1,8 +1,8 @@ import typescript from 'rollup-plugin-typescript2'; -import pkg from './package.json'; import cleaner from 'rollup-plugin-cleaner'; import sourceMaps from 'rollup-plugin-sourcemaps'; import { terser } from 'rollup-plugin-terser'; +import pkg from './package.json'; // dev build if watching, prod build if not const production = !process.env.ROLLUP_WATCH; diff --git a/packages/storybook/integration/setup/setupTests.js b/packages/storybook/integration/setup/setupTests.js index 1bb0cfbc756ce..9ae4332aa5dba 100644 --- a/packages/storybook/integration/setup/setupTests.js +++ b/packages/storybook/integration/setup/setupTests.js @@ -1,3 +1,4 @@ const { toMatchImageSnapshot } = require('jest-image-snapshot'); +// eslint-disable-next-line no-undef expect.extend({ toMatchImageSnapshot }); diff --git a/yarn.lock b/yarn.lock index a310df2aceb31..2f4cfbb6fc2c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -303,7 +303,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.10.3", "@babel/parser@^7.4.2", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.8.3", "@babel/parser@^7.9.6": +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.10.3", "@babel/parser@^7.4.2", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.7.0", "@babel/parser@^7.8.3", "@babel/parser@^7.9.6": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== @@ -1001,7 +1001,7 @@ "@babel/parser" "^7.10.3" "@babel/types" "^7.10.3" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== @@ -1016,7 +1016,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0", "@babel/types@^7.9.6": +"@babel/types@^7.0.0", "@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0", "@babel/types@^7.7.0", "@babel/types@^7.9.6": version "7.10.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== @@ -3570,6 +3570,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/mdast@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" @@ -4380,7 +4385,7 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^4.0.2: +aria-query@^4.0.2, aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== @@ -4553,6 +4558,11 @@ 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: + 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= + ast-types@0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" @@ -4651,11 +4661,16 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== -axe-core@^3.3.2: +axe-core@^3.3.2, axe-core@^3.5.4: version "3.5.5" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axobject-query@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -4670,6 +4685,18 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-helper-evaluate-path@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" @@ -6194,6 +6221,11 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" +confusing-browser-globals@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== + 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" @@ -6224,6 +6256,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" @@ -6787,6 +6824,11 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" @@ -6829,7 +6871,7 @@ de-indent@^1.0.2: resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -7139,6 +7181,14 @@ 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" @@ -7387,6 +7437,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" + integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -7672,6 +7727,24 @@ escodegen@^1.12.0, escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" +eslint-config-airbnb-base@^14.2.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" + integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== + dependencies: + confusing-browser-globals "^1.0.9" + object.assign "^4.1.0" + object.entries "^1.1.2" + +eslint-config-airbnb@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz#8a82168713effce8fc08e10896a63f1235499dcd" + integrity sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg== + dependencies: + eslint-config-airbnb-base "^14.2.0" + object.assign "^4.1.0" + object.entries "^1.1.2" + eslint-config-prettier@^6.10.0: version "6.11.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" @@ -7679,6 +7752,65 @@ eslint-config-prettier@^6.10.0: dependencies: get-stdin "^6.0.0" +eslint-import-resolver-node@^0.3.3: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-babel@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.0.tgz#2e7f251ccc249326da760c1a4c948a91c32d0023" + integrity sha512-HPuNzSPE75O+SnxHIafbW5QB45r2w78fxqwK3HmjqIUoPfPzVrq6rD+CINU3yzoDSzEhUkX07VUphbF73Lth/w== + dependencies: + eslint-rule-composer "^0.3.0" + +eslint-plugin-import@^2.22.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" + integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== + dependencies: + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.3" + eslint-module-utils "^2.6.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.1" + read-pkg-up "^2.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jsx-a11y@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" + integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== + dependencies: + "@babel/runtime" "^7.10.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^3.5.4" + axobject-query "^2.1.2" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1" + language-tags "^1.0.5" + eslint-plugin-prettier@^3.1.2: version "3.1.4" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" @@ -7754,7 +7886,7 @@ eslint-utils@^2.0.0: dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -11648,7 +11780,7 @@ jstransformer@1.0.0: is-promise "^2.0.0" promise "^7.0.1" -jsx-ast-utils@^2.2.3: +jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== @@ -11714,6 +11846,18 @@ known-css-properties@^0.19.0: resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.19.0.tgz#5d92b7fa16c72d971bda9b7fe295bdf61836ee5b" integrity sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA== +language-subtag-registry@~0.3.2: + version "0.3.20" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" + integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + lazy-ass@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -11826,6 +11970,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" @@ -13187,7 +13341,7 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.1.0, object.entries@^1.1.1: +object.entries@^1.1.0, object.entries@^1.1.1, 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== @@ -13704,6 +13858,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" @@ -13795,6 +13956,13 @@ pixelmatch@^5.1.0: dependencies: pngjs "^4.0.1" +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" @@ -15213,6 +15381,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" @@ -15247,6 +15423,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" @@ -15777,7 +15962,7 @@ resolve@1.15.1: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.3.2: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -17671,6 +17856,16 @@ ts-pnp@^1.1.2: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.2.tgz#9c79d83272c9a7aaf166f73915c9667ecdde3cc9"