From 7da55ff0570820dae57a6ffb52171711bc5bde85 Mon Sep 17 00:00:00 2001 From: Randy Schott <1815175+schottra@users.noreply.github.com> Date: Mon, 7 Dec 2020 15:45:54 -0800 Subject: [PATCH 1/4] ci: move from tslint->eslint --- .eslintignore | 8 + .eslintrc.js | 190 +++++++++++++++- package.json | 25 +-- tslint.json | 23 -- yarn.lock | 590 ++++++++++++++++++++++++-------------------------- 5 files changed, 479 insertions(+), 357 deletions(-) create mode 100644 .eslintignore delete mode 100644 tslint.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..7fb4865d4 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +src/generated/ +.dist/ +dist/ +node_modules/ +.vscode/ +tsd/ +package.json +webpack.config.ts diff --git a/.eslintrc.js b/.eslintrc.js index 5c05bf9e1..0caef351c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,13 +1,187 @@ -// We are using eslint with the typescript parser plugin only to validate things -// which are not supported in tslint, such as react hooks +/* +👋 Hi! This file was autogenerated by tslint-to-eslint-config. +https://github.com/typescript-eslint/tslint-to-eslint-config + +It represents the closest reasonable ESLint configuration to this +project's original TSLint configuration. + +We recommend eventually switching this configuration to extend from +the recommended rulesets in typescript-eslint. +https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md + +Happy linting! 💖 +*/ + module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - jsx: true, - sourceType: 'module' + root: true, + env: { + browser: true, + es6: true, + node: true }, - plugins: ['react-hooks'], + parser: '@typescript-eslint/parser', + plugins: ['@typescript-eslint', 'react-hooks', 'jest'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + 'plugin:jest/recommended', + 'prettier', + 'prettier/@typescript-eslint' + ], rules: { - 'react-hooks/rules-of-hooks': 'error' + 'no-case-declarations': 'warn', + 'jest/no-mocks-import': 'off', + 'jest/valid-title': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/ban-types': 'warn', + '@typescript-eslint/no-empty-function': 'warn' } }; +// module.exports = { +// "extends": [ +// "plugin:react/recommended", +// "prettier", +// "prettier/@typescript-eslint" +// ], +// "parser": "@typescript-eslint/parser", +// "parserOptions": { +// "project": "tsconfig.json", +// "sourceType": "module" +// }, +// "plugins": [ +// "eslint-plugin-import", +// "eslint-plugin-react", +// "@typescript-eslint", +// "@typescript-eslint/tslint" +// ], +// "rules": { +// "@typescript-eslint/indent": "off", +// "@typescript-eslint/member-delimiter-style": [ +// "off", +// { +// "multiline": { +// "delimiter": "none", +// "requireLast": true +// }, +// "singleline": { +// "delimiter": "semi", +// "requireLast": false +// } +// } +// ], +// "@typescript-eslint/naming-convention": "error", +// "@typescript-eslint/no-param-reassign": "error", +// "@typescript-eslint/no-this-alias": "error", +// "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", +// "@typescript-eslint/quotes": "off", +// "@typescript-eslint/semi": [ +// "off", +// null +// ], +// "@typescript-eslint/type-annotation-spacing": "off", +// "arrow-parens": [ +// "off", +// "always" +// ], +// "brace-style": [ +// "off", +// "off" +// ], +// "comma-dangle": "off", +// "curly": [ +// "error", +// "multi-line" +// ], +// "eol-last": "off", +// "eqeqeq": [ +// "error", +// "smart" +// ], +// "id-blacklist": [ +// "error", +// "any", +// "Number", +// "number", +// "String", +// "string", +// "Boolean", +// "boolean", +// "Undefined", +// "undefined" +// ], +// "id-match": "error", +// "import/order": "error", +// "linebreak-style": "off", +// "max-len": "off", +// "new-parens": "off", +// "newline-per-chained-call": "off", +// "no-duplicate-imports": "error", +// "no-eval": "error", +// "no-extra-semi": "off", +// "no-irregular-whitespace": "off", +// "no-multiple-empty-lines": "off", +// "no-new-wrappers": "error", +// "no-trailing-spaces": "off", +// "no-underscore-dangle": "error", +// "no-var": "error", +// "object-shorthand": "error", +// "one-var": [ +// "error", +// "never" +// ], +// "prefer-const": "error", +// "prefer-template": "error", +// "quote-props": "off", +// "radix": "error", +// "react-hooks/rules-of-hooks": "error", +// "react/jsx-boolean-value": "error", +// "react/jsx-curly-spacing": "off", +// "react/jsx-equals-spacing": "off", +// "react/jsx-key": "error", +// "react/jsx-no-bind": "error", +// "react/jsx-wrap-multilines": "off", +// "space-before-function-paren": "off", +// "space-in-parens": [ +// "off", +// "never" +// ], +// "spaced-comment": [ +// "error", +// "always", +// { +// "markers": [ +// "/" +// ] +// } +// ], +// "@typescript-eslint/tslint/config": [ +// "error", +// { +// "rules": { +// "function-name": [ +// true, +// { +// "function-regex": {}, +// "method-regex": {}, +// "private-method-regex": {}, +// "protected-method-regex": {}, +// "static-method-regex": {} +// } +// ], +// "import-name": true, +// "jsx-no-lambda": true, +// "jsx-no-string-ref": true, +// "jsx-self-close": true, +// "no-else-after-return": true, +// "no-function-constructor-with-string-args": true, +// "no-increment-decrement": true, +// "object-shorthand-properties-first": true, +// "prefer-array-literal": true, +// "prettier": true, +// "ter-prefer-arrow-callback": true +// } +// } +// ] +// } +// }; diff --git a/package.json b/package.json index d1e997a9f..b67391667 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,8 @@ "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.config.ts --mode=development", "clean": "rm -rf dist", "codecov": "codecov -f .coverage/coverage-final.json", - "lint": "tslint --project .", - "lint-fix": "tslint --fix --project . && prettier --write './**/*.{js,json}'", - "lint:hooks": "eslint \"src/**/*.{ts,tsx}\"", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "lint-fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix && prettier --write './**/*.{js,json}'", "mockApi": "node ./mockApi", "prebuild": "yarn run clean", "start": "node -r dotenv/config index.js", @@ -37,8 +36,7 @@ "license": "Apache-2.0", "lint-staged": { "*.{ts,tsx}": [ - "eslint", - "tslint --fix", + "eslint --fix --ext .js,.jsx,.ts,.tsx", "git add" ], "*.{js,json}": [ @@ -131,7 +129,8 @@ "@types/webpack-dev-middleware": "^1.9.2", "@types/webpack-env": "^1.13.1", "@types/webpack-hot-middleware": "^2.15.0", - "@typescript-eslint/parser": "^1.0.0", + "@typescript-eslint/eslint-plugin": "^4.9.1", + "@typescript-eslint/parser": "^4.9.1", "@xstate/react": "^1.0.0", "add-asset-html-webpack-plugin": "^2.1.3", "autoprefixer": "^8.3.0", @@ -150,8 +149,11 @@ "d3-shape": "^1.2.2", "debug": "^3.1.0", "dom-helpers": "^3.4.0", - "eslint": "^5.12.1", - "eslint-plugin-react-hooks": "^2.3.0", + "eslint": "^7.15.0", + "eslint-config-prettier": "^7.0.0", + "eslint-plugin-jest": "^24.1.3", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", "favicons-webpack-plugin": "^1.0.2", "file-loader": "^1.1.11", "fork-ts-checker-webpack-plugin": "^4.0.3", @@ -193,12 +195,7 @@ "ts-jest": "^26.3.0", "ts-loader": "^6.2.1", "ts-node": "^8.0.2", - "tslint": "^5.20.1", - "tslint-config-airbnb": "^5.11.2", - "tslint-config-prettier": "^1.18.0", - "tslint-plugin-prettier": "^2.0.1", - "tslint-react": "^4.1.0", - "typescript": "^4.0.0", + "typescript": "^4.1.2", "uglifyjs-webpack-plugin": "^1.2.5", "url-search-params": "^0.10.0", "use-react-router": "^1.0.7", diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 7b004c9d0..000000000 --- a/tslint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": [ - "tslint-config-airbnb", - "tslint-react", - "tslint-config-prettier" - ], - "rulesDirectory": ["tslint-plugin-prettier"], - // This section is here to keep tslint happy because we have allowJs: true in tsconfig.json - "jsRules": { - "no-empty": true - }, - "rules": { - "prettier": true, - "ordered-imports": true, - // This rule is here for now because of https://github.com/palantir/tslint-react/issues/120 - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-pascal-case" - ] - } -} diff --git a/yarn.lock b/yarn.lock index 814ebbdcf..00b3c5818 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1362,24 +1362,21 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@fimbul/bifrost@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.21.0.tgz#d0fafa25938fda475657a6a1e407a21bbe02c74e" - integrity sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg== - dependencies: - "@fimbul/ymir" "^0.21.0" - get-caller-file "^2.0.0" - tslib "^1.8.1" - tsutils "^3.5.0" - -"@fimbul/ymir@^0.21.0": - version "0.21.0" - resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.21.0.tgz#8525726787aceeafd4e199472c0d795160b5d4a1" - integrity sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg== +"@eslint/eslintrc@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" + integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== dependencies: - inversify "^5.0.0" - reflect-metadata "^0.1.12" - tslib "^1.8.1" + 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/cli@^1.2.0": version "1.2.0" @@ -3416,11 +3413,6 @@ resolved "https://registry.yarnpkg.com/@types/dom-helpers/-/dom-helpers-3.4.1.tgz#9a9b1be9cbbf289d2192964d65064f1279a3b5ed" integrity sha512-j6d+NJ8TaPKoIdyjJx7nuhhCaNmxZF86wBSc4wAT5AKikwftpPjVKi9HxEKLrmRztFEYRpje6T8W3R7Q9nyHcg== -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/express-serve-static-core@*": version "4.17.14" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.14.tgz#cabf91debeeb3cb04b798e2cff908864e89b6106" @@ -3960,32 +3952,75 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/experimental-utils@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== +"@typescript-eslint/eslint-plugin@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.9.1.tgz#66758cbe129b965fe9c63b04b405d0cf5280868b" + integrity sha512-QRLDSvIPeI1pz5tVuurD+cStNR4sle4avtHhxA+2uyixWGFjKzJ+EaFVRW6dA/jOgjV5DTAjOxboQkRDE8cRlQ== + dependencies: + "@typescript-eslint/experimental-utils" "4.9.1" + "@typescript-eslint/scope-manager" "4.9.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@4.9.1", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.9.1.tgz#86633e8395191d65786a808dc3df030a55267ae2" + integrity sha512-c3k/xJqk0exLFs+cWSJxIjqLYwdHCuLWhnpnikmPQD2+NGAx9KjLYlBDcSI81EArh9FDYSL6dslAUSwILeWOxg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -"@typescript-eslint/parser@^1.0.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" - integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== +"@typescript-eslint/parser@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.9.1.tgz#2d74c4db5dd5117379a9659081a4d1ec02629055" + integrity sha512-Gv2VpqiomvQ2v4UL+dXlQcZ8zCX4eTkoIW+1aGVWT6yTO+6jbxsw7yQl2z2pPl/4B9qa5JXeIbhJpONKjXIy3g== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.13.0" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-visitor-keys "^1.0.0" + "@typescript-eslint/scope-manager" "4.9.1" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/typescript-estree" "4.9.1" + debug "^4.1.1" -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== +"@typescript-eslint/scope-manager@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.9.1.tgz#cc2fde310b3f3deafe8436a924e784eaab265103" + integrity sha512-sa4L9yUfD/1sg9Kl8OxPxvpUcqxKXRjBeZxBuZSSV1v13hjfEJkn84n0An2hN8oLQ1PmEl2uA6FkI07idXeFgQ== dependencies: - lodash.unescape "4.0.1" - semver "5.5.0" + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + +"@typescript-eslint/types@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.9.1.tgz#a1a7dd80e4e5ac2c593bc458d75dd1edaf77faa2" + integrity sha512-fjkT+tXR13ks6Le7JiEdagnwEFc49IkOyys7ueWQ4O8k4quKPwPJudrwlVOJCUQhXo45PrfIvIarcrEjFTNwUA== + +"@typescript-eslint/typescript-estree@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.9.1.tgz#6e5b86ff5a5f66809e1f347469fadeec69ac50bf" + integrity sha512-bzP8vqwX6Vgmvs81bPtCkLtM/Skh36NE6unu6tsDeU/ZFoYthlTXbBmpIrvosgiDKlWTfb2ZpPELHH89aQjeQw== + dependencies: + "@typescript-eslint/types" "4.9.1" + "@typescript-eslint/visitor-keys" "4.9.1" + debug "^4.1.1" + globby "^11.0.1" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz#d76374a58c4ead9e92b454d186fea63487b25ae1" + integrity sha512-9gspzc6UqLQHd7lXQS7oWs+hrYggspv/rk6zzEMhCbYwPE/sF7oxo7GAjkS35Tdlt7wguIG+ViWCPtVZHz/ybQ== + dependencies: + "@typescript-eslint/types" "4.9.1" + eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.9.0": version "1.9.0" @@ -4196,7 +4231,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.0.0: +acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== @@ -4206,12 +4241,12 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.7, acorn@^6.4.1: +acorn@^6.4.1: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1: +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -4312,7 +4347,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.1.1, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.1.0, ajv@^6.1.1, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -4341,6 +4376,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -4518,7 +4558,7 @@ 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: +array-includes@^3.0.3, array-includes@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== @@ -4560,7 +4600,7 @@ array.prototype.flat@^1.2.1: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -array.prototype.flatmap@^1.2.1: +array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== @@ -5510,11 +5550,6 @@ buffer@^5.2.0, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -6270,7 +6305,7 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.12.1, commander@^2.14.1, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: +commander@^2.14.1, commander@^2.19.0, commander@^2.20.0, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6753,7 +6788,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -7098,7 +7133,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -7301,13 +7336,12 @@ dir-glob@^3.0.0, dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" - integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= +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 "^1.1.6" - isarray "0.0.1" + esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" @@ -7661,6 +7695,13 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + entities@^1.1.1, entities@^1.1.2, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -7858,20 +7899,41 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-plugin-prettier@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" - integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== +eslint-config-prettier@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz#c1ae4106f74e6c0357f44adb076771d032ac0e97" + integrity sha512-8Y8lGLVPPZdaNA7JXqnvETVC7IiVRgAP6afQu9gOQRn90YY3otMNh+x7Vr2vMePQntF+5erdSUBqSzCmU/AxaQ== + +eslint-plugin-jest@^24.1.3: + version "24.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" + integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" + "@typescript-eslint/experimental-utils" "^4.0.1" + +eslint-plugin-react-hooks@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react-hooks@^2.3.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0" - integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g== +eslint-plugin-react@^7.21.5: + version "7.21.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + 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 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" -eslint-scope@^4.0.0, eslint-scope@^4.0.3: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -7879,82 +7941,96 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.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.1.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" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^5.12.1: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.15.0: + version "7.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" + integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== dependencies: "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" + "@eslint/eslintrc" "^0.2.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" + glob-parent "^5.0.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" + levn "^0.4.1" + lodash "^4.17.19" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" + 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@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.4.0" + acorn-jsx "^5.3.1" + 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" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0: +esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== @@ -7971,11 +8047,6 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -esutils@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" - integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -8208,11 +8279,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - fast-glob@^2.0.2, fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -8359,12 +8425,12 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" file-loader@^1.1.11: version "1.1.11" @@ -8542,19 +8608,18 @@ findup-sync@^3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== flush-write-stream@^1.0.0: version "1.1.1" @@ -8877,7 +8942,7 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.0, get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -8996,7 +9061,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== @@ -9078,11 +9143,18 @@ global@^4.3.0, global@^4.3.2, global@^4.4.0, global@~4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globalthis@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" @@ -9893,25 +9965,6 @@ inquirer@7.0.4: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - inquirer@^7.0.0: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -9970,11 +10023,6 @@ invariant@^2.2.3, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -inversify@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" - integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== - invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -10630,11 +10678,6 @@ jest-diff@^26.0.0, jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-docblock@^21.0.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" - integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== - jest-docblock@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" @@ -11027,7 +11070,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.0, js-yaml@^3.13.1: +js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -11250,6 +11293,14 @@ jss@10.5.0, jss@^10.0.3: is-in-browser "^1.1.3" tiny-warning "^1.0.2" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.1" + junk@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" @@ -11348,7 +11399,15 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -11890,11 +11949,6 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -13262,7 +13316,7 @@ object.assign@^4.1.0, object.assign@^4.1.1: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.0: +object.entries@^1.1.0, object.entries@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== @@ -13272,7 +13326,7 @@ object.entries@^1.1.0: es-abstract "^1.18.0-next.1" has "^1.0.3" -"object.fromentries@^2.0.0 || ^1.0.0": +"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== @@ -13291,7 +13345,7 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -object.values@^1.1.0: +object.values@^1.1.0, object.values@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== @@ -13369,7 +13423,7 @@ opener@^1.5.1: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -13381,6 +13435,18 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -14129,6 +14195,11 @@ prebuild-install@^5.3.0: tunnel-agent "^0.6.0" which-pm-runs "^1.0.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -15270,11 +15341,6 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" -reflect-metadata@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - refractor@^2.4.1: version "2.10.1" resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" @@ -15348,10 +15414,10 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== regexpu-core@^4.7.1: version "4.7.1" @@ -15657,13 +15723,6 @@ rifm@^0.7.0: dependencies: "@babel/runtime" "^7.3.1" -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -15875,16 +15934,11 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - semver@6.3.0, semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -15895,7 +15949,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.x, semver@^7.1.2, semver@^7.3.2: +semver@7.x, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== @@ -16624,7 +16678,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -"string.prototype.matchall@^4.0.0 || ^3.0.1": +"string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== @@ -16764,7 +16818,12 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^3.1.0, 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" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -17365,12 +17424,7 @@ ts-pnp@^1.1.2, ts-pnp@^1.1.6: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== -tslib@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" - integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== - -tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -17380,95 +17434,7 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== -tslint-config-airbnb@^5.11.2: - version "5.11.2" - resolved "https://registry.yarnpkg.com/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz#2f3d239fa3923be8e7a4372217a7ed552671528f" - integrity sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow== - dependencies: - tslint-consistent-codestyle "^1.14.1" - tslint-eslint-rules "^5.4.0" - tslint-microsoft-contrib "~5.2.1" - -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== - -tslint-consistent-codestyle@^1.14.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz#52348ea899a7e025b37cc6545751c6a566a19077" - integrity sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw== - dependencies: - "@fimbul/bifrost" "^0.21.0" - tslib "^1.7.1" - tsutils "^2.29.0" - -tslint-eslint-rules@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" - integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== - dependencies: - doctrine "0.7.2" - tslib "1.9.0" - tsutils "^3.0.0" - -tslint-microsoft-contrib@~5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" - integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== - dependencies: - tsutils "^2.27.2 <2.29.0" - -tslint-plugin-prettier@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz#73fe71bf9f03842ac48c104122ca9b1de012ecf4" - integrity sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA== - dependencies: - eslint-plugin-prettier "^2.2.0" - lines-and-columns "^1.1.6" - tslib "^1.7.1" - -tslint-react@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.2.0.tgz#41b16e0438365f8d3ed4120501f02cabff9fd1e4" - integrity sha512-lO22+FKr9ZZGueGiuALzvZE/8ANoDoCHGCknX1Ge3ALrfcLQHQ1VGdyb1scZXQFdEQEfwBTIU40r5BUlJpn0JA== - dependencies: - tsutils "^3.9.1" - -tslint@^5.20.1: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -"tsutils@^2.27.2 <2.29.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" - integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== - dependencies: - tslib "^1.8.1" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.0.0, tsutils@^3.5.0, tsutils@^3.9.1: +tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== @@ -17492,6 +17458,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -17564,7 +17537,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.0.0: +typescript@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== @@ -17966,7 +17939,7 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== @@ -18304,7 +18277,7 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -18395,13 +18368,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^7.2.3: version "7.4.0" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" From 9b9d09e24eeac52d9c9fa8387dd19316260c37d4 Mon Sep 17 00:00:00 2001 From: Randy Schott <1815175+schottra@users.noreply.github.com> Date: Mon, 7 Dec 2020 15:46:52 -0800 Subject: [PATCH 2/4] fix: addressing eslint errors --- .eslintrc.js | 161 ------------------ src/common/test/formatters.spec.ts | 8 +- src/components/Cache/createCache.ts | 4 +- src/components/Cache/utils.ts | 7 +- src/components/Entities/EntityDetails.tsx | 8 +- .../Entities/test/EntitySchedules.test.tsx | 2 + .../Errors/test/LoginExpiredHandler.test.tsx | 3 +- .../NodeExecutionDetailsPanelContent.tsx | 2 +- .../StatusIndicator.tsx | 2 +- .../Executions/ExecutionFilters.tsx | 4 +- .../ExecutionInputsOutputsModal.tsx | 2 +- .../Tables/WorkflowExecutionsTable.tsx | 2 +- .../Executions/filters/useMultiFilterState.ts | 2 +- .../filters/useSingleFilterState.ts | 2 +- .../Executions/useNodeExecutionDetails.ts | 2 +- src/components/Launch/LaunchForm/services.ts | 7 +- src/components/Launch/LaunchPlansTable.tsx | 2 +- src/components/Launch/SchedulesTable.tsx | 2 +- .../Literals/Scalar/PrimitiveValue.tsx | 2 +- src/components/SelectProject/ProjectList.tsx | 2 +- src/components/Tables/types.ts | 2 +- src/components/Workflow/WorkflowsTable.tsx | 2 +- .../flytegraph/DragAllowingClickHandler.ts | 10 +- .../flytegraph/InteractiveViewBox.tsx | 2 +- src/components/flytegraph/types.ts | 2 +- src/components/hooks/useDataRefresher.ts | 2 +- src/components/hooks/useProjects.ts | 2 +- src/errors/fetchErrors.ts | 4 +- src/errors/parameterErrors.ts | 4 +- src/errors/protobufErrors.ts | 2 +- src/errors/validationErrors.ts | 2 +- src/models/Common/types.ts | 31 ++-- src/models/Node/types.ts | 4 +- src/models/__mocks__/launchPlanData.ts | 2 +- src/models/__mocks__/taskData.ts | 2 +- src/models/__mocks__/workflowData.ts | 2 +- src/routes/routes.ts | 4 +- 37 files changed, 72 insertions(+), 233 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 0caef351c..ef13318f2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,17 +1,3 @@ -/* -👋 Hi! This file was autogenerated by tslint-to-eslint-config. -https://github.com/typescript-eslint/tslint-to-eslint-config - -It represents the closest reasonable ESLint configuration to this -project's original TSLint configuration. - -We recommend eventually switching this configuration to extend from -the recommended rulesets in typescript-eslint. -https://github.com/typescript-eslint/tslint-to-eslint-config/blob/master/docs/FAQs.md - -Happy linting! 💖 -*/ - module.exports = { root: true, env: { @@ -38,150 +24,3 @@ module.exports = { '@typescript-eslint/no-empty-function': 'warn' } }; -// module.exports = { -// "extends": [ -// "plugin:react/recommended", -// "prettier", -// "prettier/@typescript-eslint" -// ], -// "parser": "@typescript-eslint/parser", -// "parserOptions": { -// "project": "tsconfig.json", -// "sourceType": "module" -// }, -// "plugins": [ -// "eslint-plugin-import", -// "eslint-plugin-react", -// "@typescript-eslint", -// "@typescript-eslint/tslint" -// ], -// "rules": { -// "@typescript-eslint/indent": "off", -// "@typescript-eslint/member-delimiter-style": [ -// "off", -// { -// "multiline": { -// "delimiter": "none", -// "requireLast": true -// }, -// "singleline": { -// "delimiter": "semi", -// "requireLast": false -// } -// } -// ], -// "@typescript-eslint/naming-convention": "error", -// "@typescript-eslint/no-param-reassign": "error", -// "@typescript-eslint/no-this-alias": "error", -// "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", -// "@typescript-eslint/quotes": "off", -// "@typescript-eslint/semi": [ -// "off", -// null -// ], -// "@typescript-eslint/type-annotation-spacing": "off", -// "arrow-parens": [ -// "off", -// "always" -// ], -// "brace-style": [ -// "off", -// "off" -// ], -// "comma-dangle": "off", -// "curly": [ -// "error", -// "multi-line" -// ], -// "eol-last": "off", -// "eqeqeq": [ -// "error", -// "smart" -// ], -// "id-blacklist": [ -// "error", -// "any", -// "Number", -// "number", -// "String", -// "string", -// "Boolean", -// "boolean", -// "Undefined", -// "undefined" -// ], -// "id-match": "error", -// "import/order": "error", -// "linebreak-style": "off", -// "max-len": "off", -// "new-parens": "off", -// "newline-per-chained-call": "off", -// "no-duplicate-imports": "error", -// "no-eval": "error", -// "no-extra-semi": "off", -// "no-irregular-whitespace": "off", -// "no-multiple-empty-lines": "off", -// "no-new-wrappers": "error", -// "no-trailing-spaces": "off", -// "no-underscore-dangle": "error", -// "no-var": "error", -// "object-shorthand": "error", -// "one-var": [ -// "error", -// "never" -// ], -// "prefer-const": "error", -// "prefer-template": "error", -// "quote-props": "off", -// "radix": "error", -// "react-hooks/rules-of-hooks": "error", -// "react/jsx-boolean-value": "error", -// "react/jsx-curly-spacing": "off", -// "react/jsx-equals-spacing": "off", -// "react/jsx-key": "error", -// "react/jsx-no-bind": "error", -// "react/jsx-wrap-multilines": "off", -// "space-before-function-paren": "off", -// "space-in-parens": [ -// "off", -// "never" -// ], -// "spaced-comment": [ -// "error", -// "always", -// { -// "markers": [ -// "/" -// ] -// } -// ], -// "@typescript-eslint/tslint/config": [ -// "error", -// { -// "rules": { -// "function-name": [ -// true, -// { -// "function-regex": {}, -// "method-regex": {}, -// "private-method-regex": {}, -// "protected-method-regex": {}, -// "static-method-regex": {} -// } -// ], -// "import-name": true, -// "jsx-no-lambda": true, -// "jsx-no-string-ref": true, -// "jsx-self-close": true, -// "no-else-after-return": true, -// "no-function-constructor-with-string-args": true, -// "no-increment-decrement": true, -// "object-shorthand-properties-first": true, -// "prefer-array-literal": true, -// "prettier": true, -// "ter-prefer-arrow-callback": true -// } -// } -// ] -// } -// }; diff --git a/src/common/test/formatters.spec.ts b/src/common/test/formatters.spec.ts index f2382b7f8..c0b9c2973 100644 --- a/src/common/test/formatters.spec.ts +++ b/src/common/test/formatters.spec.ts @@ -24,11 +24,11 @@ jest.mock('../timezone.ts', () => ({ const invalidDates = ['abc', -200, 0]; // Matches strings in the form 01/01/2000 01:01:00 PM (5 minutes ago) -const dateWithAgoRegex = /^[\w\/:\s]+ (AM|PM)\s+UTC\s+\([a\d] (minute|hour|day|second)s? ago\)$/; +const dateWithAgoRegex = /^[\w/:\s]+ (AM|PM)\s+UTC\s+\([a\d] (minute|hour|day|second)s? ago\)$/; const dateFromNowRegex = /^[a\d] (minute|hour|day|second)s? ago$/; -const dateRegex = /^[\w\/:\s]+ (AM|PM)/; -const utcDateRegex = /^[\w\/:\s]+ (AM|PM) UTC/; -const localDateRegex = /^[\w\/:\s]+ (AM|PM) (PDT|PST)/; +const dateRegex = /^[\w/:\s]+ (AM|PM)/; +const utcDateRegex = /^[\w/:\s]+ (AM|PM) UTC/; +const localDateRegex = /^[\w/:\s]+ (AM|PM) (PDT|PST)/; describe('dateWithFromNow', () => { invalidDates.forEach(v => diff --git a/src/components/Cache/createCache.ts b/src/components/Cache/createCache.ts index dfd12d9ec..2d177185f 100644 --- a/src/components/Cache/createCache.ts +++ b/src/components/Cache/createCache.ts @@ -1,12 +1,12 @@ import { getCacheKey } from './utils'; -type EntityKey = object | string | Symbol; +type EntityKey = object | string | symbol; interface HasIdObject { id: object; } function hasId(value: Object): value is HasIdObject { - return value.hasOwnProperty('id'); + return {}.hasOwnProperty.call(value, ('id')); } /** A generic cache for any type of object or Array. Keys can be objects, diff --git a/src/components/Cache/utils.ts b/src/components/Cache/utils.ts index c55401218..dab436216 100644 --- a/src/components/Cache/utils.ts +++ b/src/components/Cache/utils.ts @@ -3,8 +3,11 @@ import * as objectHash from 'object-hash'; /** Generic cache key generator. For object, will generate a unique hash. * Strings are passed through for convenience. */ -export function getCacheKey(id: any[] | object | string) { - return typeof id === 'string' || typeof id === 'symbol' +export function getCacheKey(id: any[] | object | string | symbol): string { + if (typeof id === 'symbol') { + return id.toString(); + } + return typeof id === 'string' ? id : // We only want to compare own properties, not .__proto__, .constructor, etc. objectHash(id, { respectType: false }); diff --git a/src/components/Entities/EntityDetails.tsx b/src/components/Entities/EntityDetails.tsx index a3a8caf4d..3b416d3e8 100644 --- a/src/components/Entities/EntityDetails.tsx +++ b/src/components/Entities/EntityDetails.tsx @@ -68,23 +68,23 @@ export const EntityDetails: React.FC = ({ id }) => { onClickLaunch={onLaunch} />
- {!!sections.description ? ( + {sections.description ? (
) : null} - {!!sections.schedules ? ( + {sections.schedules ? (
) : null}
- {!!sections.executions ? ( + {sections.executions ? (
) : null} - {!!sections.launch ? ( + {sections.launch ? ( { }) ); - await waitFor(() => {}); - expect(getByText('Login')).toBeInTheDocument(); + await waitFor(() => getByText('Login')); }); }); diff --git a/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx b/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx index 7bdf484e6..85b607c79 100644 --- a/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx +++ b/src/components/Executions/ExecutionDetails/NodeExecutionDetailsPanelContent.tsx @@ -171,7 +171,7 @@ const NodeExecutionTabs: React.FC<{ break; } case tabIds.task: { - tabContent = !!taskTemplate ? ( + tabContent = taskTemplate ? ( ) : null; break; diff --git a/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx b/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx index 69c3f6c29..47db1090a 100644 --- a/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx +++ b/src/components/Executions/ExecutionDetails/TaskExecutionNodeRenderer/StatusIndicator.tsx @@ -18,7 +18,7 @@ const useStyles = makeStyles((theme: Theme) => ({ } })); -const statusSize: number = 11; +const statusSize = 11; /** Renders an indicator for a node based on execution status */ export const StatusIndicator: React.FC<{ diff --git a/src/components/Executions/ExecutionFilters.tsx b/src/components/Executions/ExecutionFilters.tsx index 82183b179..108d6186d 100644 --- a/src/components/Executions/ExecutionFilters.tsx +++ b/src/components/Executions/ExecutionFilters.tsx @@ -27,6 +27,7 @@ const useStyles = makeStyles((theme: Theme) => ({ })); const RenderFilter: React.FC<{ filter: FilterState }> = ({ filter }) => { + const searchFilterState = filter as SearchFilterState; switch (filter.type) { case 'single': return )} />; @@ -35,8 +36,7 @@ const RenderFilter: React.FC<{ filter: FilterState }> = ({ filter }) => { )} /> ); case 'search': - const state = filter as SearchFilterState; - return ; + return ; default: return null; } diff --git a/src/components/Executions/ExecutionInputsOutputsModal.tsx b/src/components/Executions/ExecutionInputsOutputsModal.tsx index 1905b8ab4..349d671b6 100644 --- a/src/components/Executions/ExecutionInputsOutputsModal.tsx +++ b/src/components/Executions/ExecutionInputsOutputsModal.tsx @@ -145,7 +145,7 @@ export const ExecutionInputsOutputsModal: React.FC - {!!execution ? ( + {execution ? ( ) : (
diff --git a/src/components/Executions/Tables/WorkflowExecutionsTable.tsx b/src/components/Executions/Tables/WorkflowExecutionsTable.tsx index ee2716869..05e600525 100644 --- a/src/components/Executions/Tables/WorkflowExecutionsTable.tsx +++ b/src/components/Executions/Tables/WorkflowExecutionsTable.tsx @@ -222,7 +222,7 @@ const WorkflowExecutionRow: React.FC = ({ ); }; -export interface WorkflowExecutionsTableProps extends ListProps {} +export type WorkflowExecutionsTableProps = ListProps /** Renders a table of WorkflowExecution records. Executions with errors will * have an expanadable container rendered as part of the table row. diff --git a/src/components/Executions/filters/useMultiFilterState.ts b/src/components/Executions/filters/useMultiFilterState.ts index 2b4545fbd..1180f49e6 100644 --- a/src/components/Executions/filters/useMultiFilterState.ts +++ b/src/components/Executions/filters/useMultiFilterState.ts @@ -8,7 +8,7 @@ import { useFilterButtonState } from './useFilterButtonState'; function serializeForQueryState(values: any[]) { return values.join(';'); } -function deserializeFromQueryState(stateValue: string = '') { +function deserializeFromQueryState(stateValue = '') { return stateValue.split(';'); } diff --git a/src/components/Executions/filters/useSingleFilterState.ts b/src/components/Executions/filters/useSingleFilterState.ts index 3e464e22a..6cd7818e7 100644 --- a/src/components/Executions/filters/useSingleFilterState.ts +++ b/src/components/Executions/filters/useSingleFilterState.ts @@ -20,7 +20,7 @@ function valueOrDefault( return defaultValue; } - if (!options.hasOwnProperty(newValue)) { + if (!{}.hasOwnProperty.call(options,newValue)) { log.warn(`Filter has no option ${newValue}, using default`); return defaultValue; } diff --git a/src/components/Executions/useNodeExecutionDetails.ts b/src/components/Executions/useNodeExecutionDetails.ts index 726a878be..4d287b411 100644 --- a/src/components/Executions/useNodeExecutionDetails.ts +++ b/src/components/Executions/useNodeExecutionDetails.ts @@ -64,7 +64,7 @@ function createWorkflowNodeExecutionDetails( node: CompiledWorkflowNode ): NodeExecutionDetails { const displayType = NodeExecutionDisplayType.Workflow; - let displayId: string = ''; + let displayId = ''; const { launchplanRef, subWorkflowRef } = node.workflowNode; const identifier = (launchplanRef ? launchplanRef diff --git a/src/components/Launch/LaunchForm/services.ts b/src/components/Launch/LaunchForm/services.ts index 7f9d867ea..e219924e4 100644 --- a/src/components/Launch/LaunchForm/services.ts +++ b/src/components/Launch/LaunchForm/services.ts @@ -1,12 +1,10 @@ import { RefObject } from 'react'; import { correctInputErrors } from './constants'; -import { WorkflowLaunchContext } from './launchMachine'; import { LaunchFormInputsRef } from './types'; export async function validate( - formInputsRef: RefObject, - {}: WorkflowLaunchContext -) { + formInputsRef: RefObject +): Promise { if (formInputsRef.current === null) { throw new Error('Unexpected empty form inputs ref'); } @@ -14,4 +12,5 @@ export async function validate( if (!formInputsRef.current.validate()) { throw new Error(correctInputErrors); } + return true; } diff --git a/src/components/Launch/LaunchPlansTable.tsx b/src/components/Launch/LaunchPlansTable.tsx index 0097f4a0e..fc60e25ab 100644 --- a/src/components/Launch/LaunchPlansTable.tsx +++ b/src/components/Launch/LaunchPlansTable.tsx @@ -23,7 +23,7 @@ const useStyles = makeStyles((theme: Theme) => ({ } })); -export interface LaunchPlansTableProps extends ListProps {} +export type LaunchPlansTableProps = ListProps export interface CellDataGetterParams extends TableCellDataGetterParams { rowData: LaunchPlan; } diff --git a/src/components/Launch/SchedulesTable.tsx b/src/components/Launch/SchedulesTable.tsx index c3e220d5f..d92437950 100644 --- a/src/components/Launch/SchedulesTable.tsx +++ b/src/components/Launch/SchedulesTable.tsx @@ -27,7 +27,7 @@ const useStyles = makeStyles((theme: Theme) => ({ } })); -export interface SchedulesTableProps extends ListProps {} +export type SchedulesTableProps = ListProps interface CellDataGetterParams extends TableCellDataGetterParams { rowData: LaunchPlan; } diff --git a/src/components/Literals/Scalar/PrimitiveValue.tsx b/src/components/Literals/Scalar/PrimitiveValue.tsx index 4d3e28165..da297d24e 100644 --- a/src/components/Literals/Scalar/PrimitiveValue.tsx +++ b/src/components/Literals/Scalar/PrimitiveValue.tsx @@ -8,7 +8,7 @@ import { Primitive } from 'models'; function primitiveToString(primitive: Primitive): string { switch (primitive.value) { case 'boolean': - return !!primitive.boolean ? 'true' : 'false'; + return primitive.boolean ? 'true' : 'false'; case 'datetime': return formatDateUTC(timestampToDate(primitive.datetime!)); case 'duration': diff --git a/src/components/SelectProject/ProjectList.tsx b/src/components/SelectProject/ProjectList.tsx index 812df4cf3..2dda6b8d8 100644 --- a/src/components/SelectProject/ProjectList.tsx +++ b/src/components/SelectProject/ProjectList.tsx @@ -36,7 +36,7 @@ export interface ProjectListProps { const ProjectCard: React.FC<{ project: Project }> = ({ project }) => { const styles = useStyles(); const commonStyles = useCommonStyles(); - const description = !!project.description + const description = project.description ? project.description : defaultProjectDescription; return ( diff --git a/src/components/Tables/types.ts b/src/components/Tables/types.ts index 5ab55fdc9..e21918883 100644 --- a/src/components/Tables/types.ts +++ b/src/components/Tables/types.ts @@ -1,5 +1,5 @@ import { TableCellProps as BaseTableCellProps } from 'react-virtualized'; -export type LoadMoreRowItem = Symbol; +export type LoadMoreRowItem = symbol; /** A fixed row height shared across all rows, or a callback which receives an item index and computes the height */ export type RowHeight = number | ((index: number) => number); diff --git a/src/components/Workflow/WorkflowsTable.tsx b/src/components/Workflow/WorkflowsTable.tsx index 2a2844c39..2664749b6 100644 --- a/src/components/Workflow/WorkflowsTable.tsx +++ b/src/components/Workflow/WorkflowsTable.tsx @@ -23,7 +23,7 @@ const useStyles = makeStyles((theme: Theme) => ({ } })); -export interface WorkflowsTableProps extends ListProps {} +export type WorkflowsTableProps = ListProps export interface CellDataGetterParams extends TableCellDataGetterParams { rowData: Workflow; } diff --git a/src/components/flytegraph/DragAllowingClickHandler.ts b/src/components/flytegraph/DragAllowingClickHandler.ts index ac972ea80..553728fd8 100644 --- a/src/components/flytegraph/DragAllowingClickHandler.ts +++ b/src/components/flytegraph/DragAllowingClickHandler.ts @@ -9,11 +9,11 @@ export type DragFilteringClickHandlerListener = ( * will be called with the final mouseup event if the click has not been filtered */ export class DragFilteringClickHandler { - private deltaX: number = 0; - private deltaY: number = 0; - private xPos: number = 0; - private yPos: number = 0; - private dragging: boolean = false; + private deltaX = 0; + private deltaY = 0; + private xPos = 0; + private yPos = 0; + private dragging = false; constructor( private listener: DragFilteringClickHandlerListener, diff --git a/src/components/flytegraph/InteractiveViewBox.tsx b/src/components/flytegraph/InteractiveViewBox.tsx index 2da8611b4..2e528f8c2 100644 --- a/src/components/flytegraph/InteractiveViewBox.tsx +++ b/src/components/flytegraph/InteractiveViewBox.tsx @@ -87,7 +87,7 @@ function scaleViewBox(viewBox: ViewBoxRect, scaleDelta: number): ViewBoxRect { class InteractiveViewBoxImpl extends React.Component { private viewBox: ViewBoxRect; - private updating: boolean = false; + private updating = false; private dragData: DragData = defaultDragData; private viewboxRef: React.RefObject; diff --git a/src/components/flytegraph/types.ts b/src/components/flytegraph/types.ts index 643a75fcf..f850003da 100644 --- a/src/components/flytegraph/types.ts +++ b/src/components/flytegraph/types.ts @@ -71,7 +71,7 @@ export interface NodeRendererProps extends BaseNodeProps { textRenderer?: NodeTextRenderer; } -export interface NodeTextRendererProps extends BaseNodeProps {} +export type NodeTextRendererProps = BaseNodeProps export interface NodeLinkRendererProps { link: RenderableNodeLink; diff --git a/src/components/hooks/useDataRefresher.ts b/src/components/hooks/useDataRefresher.ts index f02c87e96..3ed5b9750 100644 --- a/src/components/hooks/useDataRefresher.ts +++ b/src/components/hooks/useDataRefresher.ts @@ -36,7 +36,7 @@ export function useDataRefresher( return; } - let timerId: number = 0; + let timerId = 0; const clear = () => { if (timerId === 0) { diff --git a/src/components/hooks/useProjects.ts b/src/components/hooks/useProjects.ts index 78341e66f..97e922991 100644 --- a/src/components/hooks/useProjects.ts +++ b/src/components/hooks/useProjects.ts @@ -22,7 +22,7 @@ const doFetchProjects = async (cache: ValueCache) => { export function useProjects(): FetchableData { const cache = useContext(CacheContext); - return useFetchableData( + return useFetchableData( { debugName: 'Projects', useCache: true, diff --git a/src/errors/fetchErrors.ts b/src/errors/fetchErrors.ts index b79454967..f63cdeada 100644 --- a/src/errors/fetchErrors.ts +++ b/src/errors/fetchErrors.ts @@ -2,14 +2,14 @@ export class NotFoundError extends Error { constructor( public name: string, - msg: string = 'The requested item could not be found' + msg = 'The requested item could not be found' ) { super(msg); } } /** Indicates failure to fetch a resource because the user is not authorized (401) */ export class NotAuthorizedError extends Error { - constructor(msg: string = 'User is not authorized to view this resource') { + constructor(msg = 'User is not authorized to view this resource') { super(msg); } } diff --git a/src/errors/parameterErrors.ts b/src/errors/parameterErrors.ts index 1715ae507..32f8390f0 100644 --- a/src/errors/parameterErrors.ts +++ b/src/errors/parameterErrors.ts @@ -7,14 +7,14 @@ export class ParameterError extends Error { /** Indicates that a parameter requires a value and none was provided */ export class RequiredError extends ParameterError { - constructor(public name: string, msg: string = 'This value is required') { + constructor(public name: string, msg = 'This value is required') { super(name, msg); } } /** Indicates that the provided parameter value is invalid */ export class ValueError extends ParameterError { - constructor(public name: string, msg: string = 'Invalid value') { + constructor(public name: string, msg = 'Invalid value') { super(name, msg); } } diff --git a/src/errors/protobufErrors.ts b/src/errors/protobufErrors.ts index eb7fa2dd0..d06c92eda 100644 --- a/src/errors/protobufErrors.ts +++ b/src/errors/protobufErrors.ts @@ -2,7 +2,7 @@ export class MessageMissingRequiredFieldsError extends Error { constructor( public fields: string[], - msg: string = `Message is missing required fields: ${fields.join(',')}` + msg = `Message is missing required fields: ${fields.join(',')}` ) { super(msg); } diff --git a/src/errors/validationErrors.ts b/src/errors/validationErrors.ts index ac177c836..5a140a1cc 100644 --- a/src/errors/validationErrors.ts +++ b/src/errors/validationErrors.ts @@ -4,7 +4,7 @@ import { ParameterError } from './parameterErrors'; export class ValidationError extends Error { constructor( public errors: ParameterError[], - msg: string = 'One or more parameters are invalid' + msg = 'One or more parameters are invalid' ) { super(msg); } diff --git a/src/models/Common/types.ts b/src/models/Common/types.ts index 2b29ebd4b..fd80c7f85 100644 --- a/src/models/Common/types.ts +++ b/src/models/Common/types.ts @@ -5,9 +5,9 @@ import { Collection } from 'react-virtualized'; /** These are types shared across multiple sections of the data model. Most of * map to types found in `flyteidl.core`. */ -export interface Alias extends Core.IAlias {} -export interface Binding extends Core.IBinding {} -export interface Container extends Core.IContainer {} +export type Alias = Core.IAlias +export type Binding = Core.IBinding +export type Container = Core.IContainer export type FixedRateUnit = Admin.FixedRateUnit; export const FixedRateUnit = Admin.FixedRateUnit; export interface Identifier extends Core.IIdentifier { @@ -18,26 +18,24 @@ export interface Identifier extends Core.IIdentifier { version: string; } -export interface NamedEntityIdentifier - extends RequiredNonNullable {} +export type NamedEntityIdentifier = RequiredNonNullable export interface ResourceIdentifier extends NamedEntityIdentifier { resourceType: Core.ResourceType; } -export interface NamedEntityMetadata - extends RequiredNonNullable {} +export type NamedEntityMetadata = RequiredNonNullable export interface NamedEntity extends Admin.INamedEntity { resourceType: Core.ResourceType; id: NamedEntityIdentifier; metadata: NamedEntityMetadata; } -export interface Notification extends Admin.INotification {} +export type Notification = Admin.INotification export type ResourceType = Core.ResourceType; export const ResourceType = Core.ResourceType; -export interface RetryStrategy extends Core.IRetryStrategy {} -export interface RuntimeMetadata extends Core.IRuntimeMetadata {} -export interface Schedule extends Admin.ISchedule {} +export type RetryStrategy = Core.IRetryStrategy +export type RuntimeMetadata = Core.IRuntimeMetadata +export type Schedule = Admin.ISchedule export type MessageFormat = Core.TaskLog.MessageFormat; export interface TaskLog extends Core.ITaskLog { name: string; @@ -45,7 +43,7 @@ export interface TaskLog extends Core.ITaskLog { } /*** Literals ****/ -export interface Binary extends RequiredNonNullable {} +export type Binary = RequiredNonNullable export interface Blob extends Core.IBlob { metadata: BlobMetadata; @@ -61,9 +59,9 @@ export interface BlobMetadata extends Core.IBlobMetadata { export interface BlobType extends Core.IBlobType { dimensionality: BlobDimensionality; } -export interface UrlBlob extends Admin.IUrlBlob {} +export type UrlBlob = Admin.IUrlBlob -export interface Error extends RequiredNonNullable {} +export type Error = RequiredNonNullable export interface Literal extends Core.Literal { value: keyof Core.ILiteral; @@ -79,10 +77,9 @@ export interface BlobLiteral extends Core.ILiteral { scalar: BlobScalar; } -export interface LiteralCollection - extends RequiredNonNullable {} +export type LiteralCollection = RequiredNonNullable -export interface LiteralMap extends RequiredNonNullable {} +export type LiteralMap = RequiredNonNullable export const LiteralMap = Core.LiteralMap; export interface LiteralMapBlob extends Admin.ILiteralMapBlob { values: LiteralMap; diff --git a/src/models/Node/types.ts b/src/models/Node/types.ts index c54145227..72acf1a5b 100644 --- a/src/models/Node/types.ts +++ b/src/models/Node/types.ts @@ -2,9 +2,9 @@ import { Core } from 'flyteidl'; import { Alias, Binding, Identifier } from 'models/Common'; /** A graph node indicating a subworkflow execution */ -export interface WorkflowNode extends Core.IWorkflowNode {} +export type WorkflowNode = Core.IWorkflowNode /** A graph node indicating a branching decision. */ -export interface BranchNode extends Core.IBranchNode {} +export type BranchNode = Core.IBranchNode /** A graph node indicating a task to be executed. This is the most common * node type in a Flyte graph. diff --git a/src/models/__mocks__/launchPlanData.ts b/src/models/__mocks__/launchPlanData.ts index b77bbe020..c2b75335a 100644 --- a/src/models/__mocks__/launchPlanData.ts +++ b/src/models/__mocks__/launchPlanData.ts @@ -45,7 +45,7 @@ const workflowId: (name: string, version: string) => Identifier = ( export const createMockLaunchPlan: ( name: string, version?: string -) => LaunchPlan = (name: string, version: string = 'abcdefg') => ({ +) => LaunchPlan = (name: string, version = 'abcdefg') => ({ id: workflowId(name, version), spec: createMockLaunchPlanSpec(), closure: cloneDeep(basicLaunchPlanClosure) diff --git a/src/models/__mocks__/taskData.ts b/src/models/__mocks__/taskData.ts index 7c9f9a345..2dc2f447c 100644 --- a/src/models/__mocks__/taskData.ts +++ b/src/models/__mocks__/taskData.ts @@ -21,7 +21,7 @@ const taskId: (name: string, version: string) => Identifier = ( export const createMockTask: (name: string, version?: string) => Task = ( name: string, - version: string = 'abcdefg' + version = 'abcdefg' ) => ({ id: taskId(name, version), closure: createMockTaskClosure() diff --git a/src/models/__mocks__/workflowData.ts b/src/models/__mocks__/workflowData.ts index 9724ca8df..ce992499c 100644 --- a/src/models/__mocks__/workflowData.ts +++ b/src/models/__mocks__/workflowData.ts @@ -22,7 +22,7 @@ const workflowId: (name: string, version: string) => Identifier = ( export const createMockWorkflow: ( name: string, version?: string -) => Workflow = (name: string, version: string = 'abcdefg') => ({ +) => Workflow = (name: string, version = 'abcdefg') => ({ id: workflowId(name, version) }); diff --git a/src/routes/routes.ts b/src/routes/routes.ts index b12942867..d05ffd8e5 100644 --- a/src/routes/routes.ts +++ b/src/routes/routes.ts @@ -9,7 +9,7 @@ import { import { makeRoute } from './utils'; /** Creates a path relative to a particular project */ -export const makeProjectBoundPath = (projectId: string, path: string = '') => +export const makeProjectBoundPath = (projectId: string, path = '') => makeRoute( `/projects/${projectId}${ path.length ? ensureSlashPrefixed(path) : path @@ -20,7 +20,7 @@ export const makeProjectBoundPath = (projectId: string, path: string = '') => export const makeProjectDomainBoundPath = ( projectId: string, domainId: string, - path: string = '' + path = '' ) => makeRoute(`/projects/${projectId}/domains/${domainId}${path}`); export class Routes { From 76379586bb71970dfcfc87c9500df861e33510b3 Mon Sep 17 00:00:00 2001 From: Randy Schott <1815175+schottra@users.noreply.github.com> Date: Mon, 7 Dec 2020 16:03:14 -0800 Subject: [PATCH 3/4] fix: remove passing of unused variable --- src/components/Launch/LaunchForm/useLaunchTaskFormState.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts b/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts index a3a0db62d..3c757c9be 100644 --- a/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts +++ b/src/components/Launch/LaunchForm/useLaunchTaskFormState.ts @@ -97,8 +97,7 @@ async function loadInputs( async function validate( formInputsRef: RefObject, - roleInputRef: RefObject, - context: any + roleInputRef: RefObject ) { if (roleInputRef.current === null) { throw new Error('Unexpected empty role input ref'); @@ -107,7 +106,7 @@ async function validate( if (!roleInputRef.current.validate()) { throw new Error(correctInputErrors); } - return baseValidate(formInputsRef, context); + return baseValidate(formInputsRef); } async function submit( From 2a3ea3b60ec91bb35a5240628720c4f70469e787 Mon Sep 17 00:00:00 2001 From: Randy Schott <1815175+schottra@users.noreply.github.com> Date: Mon, 7 Dec 2020 16:37:34 -0800 Subject: [PATCH 4/4] ci: remove unnecessary prettier config --- package.json | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index b67391667..236547651 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "build": "TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\"}' webpack --config webpack.config.ts --mode=development", "clean": "rm -rf dist", "codecov": "codecov -f .coverage/coverage-final.json", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "lint-fix": "eslint . --ext .js,.jsx,.ts,.tsx --fix && prettier --write './**/*.{js,json}'", + "lint": "eslint . --ext .js,.ts,.tsx", + "lint-fix": "eslint . --ext .js,.ts,.tsx --fix", "mockApi": "node ./mockApi", "prebuild": "yarn run clean", "start": "node -r dotenv/config index.js", @@ -35,12 +35,8 @@ "author": "Lyft ", "license": "Apache-2.0", "lint-staged": { - "*.{ts,tsx}": [ - "eslint --fix --ext .js,.jsx,.ts,.tsx", - "git add" - ], - "*.{js,json}": [ - "prettier --write", + "*.{js,ts,tsx}": [ + "eslint --fix", "git add" ] },