From f48169633ce9a9387d468081140b1b1a6e2c5ad6 Mon Sep 17 00:00:00 2001 From: Steven Vachon Date: Fri, 7 Feb 2020 20:40:04 -0500 Subject: [PATCH] =?UTF-8?q?TSLint=20=E2=86=92=20ESLint=20(#21006)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Alphabetized tslint and tsconfig files * Optimized tsconfig files * Optimized editorconfig & prettier config files … to reduce redundancy * Switched to @grafana/tsconfig … and: * de-duped options * removed options with default values * Fixed nasty issue with types for nested slate-react * Replaced TSLint with ESLint * TSLint disables → ESLint disables … also JSHint removals, which haven’t had an affect since it was replaced with TSLint. * Compliances for ESLint, Prettier and TypeScript * Updated lockfile --- .editorconfig | 3 + .eslintrc | 4 + Dockerfile | 2 +- Dockerfile.ubuntu | 2 +- devenv/e2e-api-tests/tsconfig.json | 41 +- package.json | 21 +- packages/grafana-data/.eslintrc | 6 + packages/grafana-data/package.json | 4 +- .../src/dataframe/ArrowDataFrame.test.ts | 4 +- .../src/datetime/moment_wrapper.ts | 2 +- .../src/vector/AppendedVectors.ts | 4 +- packages/grafana-data/tsconfig.build.json | 4 +- packages/grafana-data/tsconfig.json | 14 +- packages/grafana-data/tslint.json | 6 - .../cypress/plugins/cy-ts-preprocessor.js | 14 +- packages/grafana-e2e/cypress/tsconfig.json | 2 +- packages/grafana-e2e/package.json | 3 +- packages/grafana-e2e/tsconfig.build.json | 4 +- packages/grafana-e2e/tsconfig.json | 16 +- packages/grafana-e2e/tslint.json | 4 - packages/grafana-runtime/.eslintrc | 6 + packages/grafana-runtime/package.json | 3 +- packages/grafana-runtime/tsconfig.build.json | 4 +- packages/grafana-runtime/tsconfig.json | 18 +- packages/grafana-runtime/tslint.json | 6 - packages/grafana-toolkit/.eslintrc | 6 + packages/grafana-toolkit/README.md | 12 +- packages/grafana-toolkit/package.json | 12 +- .../src/cli/tasks/plugin.build.ts | 124 +--- .../src/cli/tasks/plugin.dev.ts | 5 +- .../src/cli/tasks/plugin/create.ts | 4 +- .../src/cli/tasks/precommit.ts | 2 +- .../src/cli/tasks/toolkit.build.ts | 2 +- .../grafana-toolkit/src/cli/tsconfig.json | 4 +- .../grafana-toolkit/src/cli/utils/execTask.ts | 1 + .../src/cli/utils/githubClient.test.ts | 2 +- .../src/cli/utils/useSpinner.ts | 2 +- .../src/config/eslint.plugin.json | 3 + .../mocks/webpack/overrides/webpack.config.js | 2 +- .../overridesNamedExport/webpack.config.js | 2 +- .../src/config/prettier.plugin.rc.js | 2 +- .../src/config/tsconfig.plugin.json | 30 +- .../src/config/tsconfig.plugin.local.json | 6 +- .../src/config/tslint.plugin.json | 76 --- .../src/config/webpack.plugin.config.test.ts | 6 +- .../src/plugins/e2e/launcher.ts | 1 - packages/grafana-toolkit/tsconfig.json | 18 +- packages/grafana-toolkit/tslint.json | 7 - packages/grafana-ui/.eslintrc | 6 + packages/grafana-ui/.storybook/tsconfig.json | 11 +- packages/grafana-ui/package.json | 3 +- .../ColorPicker/ColorPickerTrigger.tsx | 2 +- .../src/themes/_variables.dark.scss.tmpl.ts | 2 +- .../src/themes/_variables.light.scss.tmpl.ts | 2 +- .../src/themes/_variables.scss.tmpl.ts | 2 +- packages/grafana-ui/src/utils/typeahead.ts | 9 +- packages/grafana-ui/tsconfig.build.json | 12 +- packages/grafana-ui/tsconfig.json | 18 +- packages/grafana-ui/tslint.json | 6 - packages/tsconfig.json | 13 - .../code_editor/theme-grafana-dark.js | 21 +- .../query_part/query_part_editor.ts | 4 - .../components/sql_part/sql_part_editor.ts | 4 - public/app/core/services/analytics.ts | 2 +- public/app/core/services/echo/Echo.ts | 2 +- public/app/core/services/ng_react.ts | 2 +- .../dashboard/services/DashboardLoaderSrv.ts | 4 +- .../explore/AdHocFilterField.test.tsx | 3 + public/app/features/plugins/plugin_loader.ts | 3 +- .../features/templating/interval_variable.ts | 4 +- .../components/QueryEditor.test.tsx | 2 +- .../editor/kusto/kusto.ts | 2 +- .../datasource/graphite/func_editor.ts | 6 - .../app/plugins/datasource/graphite/lexer.ts | 4 - .../plugins/datasource/postgres/mode-sql.js | 185 +++--- .../plugins/panel/graph/jquery.flot.events.ts | 1 - public/e2e-tests/tsconfig.json | 2 +- public/test/mocks/dashboard-mock.js | 17 +- scripts/cli/tsconfig.json | 4 +- scripts/grunt/default_task.js | 8 +- scripts/grunt/options/exec.js | 21 +- scripts/webpack/webpack.dev.js | 6 +- scripts/webpack/webpack.prod.js | 8 +- tsconfig.json | 47 +- tslint.json | 81 --- yarn.lock | 600 ++++++++++++++++-- 86 files changed, 909 insertions(+), 746 deletions(-) create mode 100644 .eslintrc create mode 100644 packages/grafana-data/.eslintrc delete mode 100644 packages/grafana-data/tslint.json delete mode 100644 packages/grafana-e2e/tslint.json create mode 100644 packages/grafana-runtime/.eslintrc delete mode 100644 packages/grafana-runtime/tslint.json create mode 100644 packages/grafana-toolkit/.eslintrc create mode 100644 packages/grafana-toolkit/src/config/eslint.plugin.json delete mode 100644 packages/grafana-toolkit/src/config/tslint.plugin.json delete mode 100644 packages/grafana-toolkit/tslint.json create mode 100644 packages/grafana-ui/.eslintrc delete mode 100644 packages/grafana-ui/tslint.json delete mode 100644 packages/tsconfig.json delete mode 100644 tslint.json diff --git a/.editorconfig b/.editorconfig index 18e6162dd6d..88df70e91e7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -16,6 +16,9 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true +[*.{js,ts,tsx,scss}] +quote_type = single + [*.md] trim_trailing_whitespace = false diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000000..bbdacd10d25 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,4 @@ +{ + "extends": ["@grafana/eslint-config"], + "root": true +} diff --git a/Dockerfile b/Dockerfile index 51387f7cf75..d51ec4fa5d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -35,7 +35,7 @@ COPY packages packages RUN yarn install --pure-lockfile --no-progress -COPY Gruntfile.js tsconfig.json tslint.json .browserslistrc ./ +COPY Gruntfile.js tsconfig.json .eslintrc .browserslistrc ./ COPY public public COPY scripts scripts COPY emails emails diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu index 56950b58eec..3f11b23202b 100644 --- a/Dockerfile.ubuntu +++ b/Dockerfile.ubuntu @@ -26,7 +26,7 @@ COPY packages packages RUN yarn install --pure-lockfile -COPY Gruntfile.js tsconfig.json tslint.json .browserslistrc ./ +COPY Gruntfile.js tsconfig.json .eslintrc .browserslistrc ./ COPY public public COPY scripts scripts COPY emails emails diff --git a/devenv/e2e-api-tests/tsconfig.json b/devenv/e2e-api-tests/tsconfig.json index 3dd8c94d7d0..322c5f5f278 100644 --- a/devenv/e2e-api-tests/tsconfig.json +++ b/devenv/e2e-api-tests/tsconfig.json @@ -1,24 +1,21 @@ { - "compilerOptions": { - "moduleResolution": "node", - "target": "es6", - "lib": ["es6"], - "module": "commonjs", - "declaration": false, - "allowSyntheticDefaultImports": true, - "inlineSourceMap": false, - "sourceMap": true, - "noEmitOnError": false, - "emitDecoratorMetadata": false, - "experimentalDecorators": true, - "noImplicitReturns": true, - "noImplicitThis": false, - "noImplicitUseStrict":false, - "noImplicitAny": false, - "noUnusedLocals": true - }, - "include": [ - "*.ts", - "**/*.ts" - ] + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "declaration": false, + "emitDecoratorMetadata": false, + "experimentalDecorators": true, + "inlineSourceMap": false, + "lib": ["es6"], + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "noImplicitAny": false, + "noImplicitReturns": true, + "noImplicitThis": false, + "noImplicitUseStrict": false, + "noUnusedLocals": true, + "sourceMap": true, + "target": "es6" + }, + "include": ["*.ts", "**/*.ts"] } diff --git a/package.json b/package.json index a92f99aac7a..840763de76f 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,8 @@ "@types/slate-react": "0.22.5", "@types/testing-library__react-hooks": "^3.1.0", "@types/tinycolor2": "1.4.2", + "@typescript-eslint/eslint-plugin": "2.19.0", + "@typescript-eslint/parser": "2.19.0", "angular-mocks": "1.6.6", "autoprefixer": "9.5.0", "axios": "0.19.0", @@ -73,6 +75,12 @@ "enzyme-to-json": "3.3.5", "es6-promise": "3.3.1", "es6-shim": "0.35.5", + "eslint": "6.8.0", + "eslint-config-prettier": "6.10.0", + "eslint-loader": "^3.0.3", + "eslint-plugin-jsdoc": "21.0.0", + "eslint-plugin-prettier": "3.1.2", + "eslint-plugin-react": "7.18.3", "expect-puppeteer": "4.1.1", "expect.js": "0.2.0", "expose-loader": "0.7.5", @@ -133,9 +141,6 @@ "ts-jest": "24.1.0", "ts-node": "8.5.0", "tslib": "1.10.0", - "tslint": "5.20.1", - "tslint-loader": "3.5.4", - "tslint-react": "4.1.0", "typescript": "3.7.2", "webpack": "4.29.6", "webpack-bundle-analyzer": "3.3.2", @@ -155,9 +160,9 @@ "watch": "yarn start -d watch,start core:start --watchTheme ", "build": "grunt build", "test": "grunt test", - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint public/app public/e2e-test public/test --ext=.js,.ts,.tsx", + "lint:fix": "yarn lint --fix", "typecheck": "tsc --noEmit", - "typecheckPackages": "yarn workspaces run typecheck", "jest": "jest --notify --watch", "jest-ci": "mkdir -p reports/junit && export JEST_JUNIT_OUTPUT_DIR=reports/junit && jest --ci --reporters=default --reporters=jest-junit --maxWorkers 2", "e2e": "cd packages/grafana-e2e && yarn start --env BASE_URL=$BASE_URL,CIRCLE_SHA1=$CIRCLE_SHA1,SLOWMO=$SLOWMO --config integrationFolder=../../public/e2e-tests/integration,screenshotsFolder=../../public/e2e-tests/screenShots,videosFolder=../../public/e2e-tests/videos,fileServerFolder=./cypress,viewportWidth=1920,viewportHeight=1080,trashAssetsBeforeRuns=false", @@ -170,6 +175,8 @@ "prettier:write": "prettier --list-different \"**/*.{ts,tsx,scss}\" --write", "precommit": "grafana-toolkit precommit", "themes:generate": "ts-node --project ./scripts/cli/tsconfig.json ./scripts/cli/generateSassVariableFiles.ts", + "packages:lint": "lerna run lint", + "packages:typecheck": "lerna run typecheck", "packages:prepare": "lerna version --no-push --no-git-tag-version --force-publish --exact", "packages:build": "lerna run clean && lerna run build", "packages:publish": "lerna publish from-package --contents dist", @@ -193,9 +200,7 @@ ] }, "prettier": { - "trailingComma": "es5", - "singleQuote": true, - "printWidth": 120 + "trailingComma": "es5" }, "dependencies": { "@braintree/sanitize-url": "4.0.0", diff --git a/packages/grafana-data/.eslintrc b/packages/grafana-data/.eslintrc new file mode 100644 index 00000000000..a0ebe163503 --- /dev/null +++ b/packages/grafana-data/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": ["@grafana/eslint-config"], + "rules": { + "no-restricted-imports": [2, "^@grafana/data.*", "^@grafana/runtime.*", "^@grafana/ui.*"] + } +} diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index 3375dd32eb0..42cd88ad34c 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -14,13 +14,15 @@ "main": "src/index.ts", "types": "src/index.ts", "scripts": { - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint src/ --ext=.js,.ts,.tsx", "typecheck": "tsc --noEmit", "clean": "rimraf ./dist ./compiled", "bundle": "rollup -c rollup.config.ts", "build": "grafana-toolkit package:build --scope=data" }, "devDependencies": { + "@grafana/eslint-config": "^1.0.0-rc1", + "@grafana/tsconfig": "^1.0.0-rc1", "@types/jest": "23.3.14", "@types/jquery": "1.10.35", "@types/lodash": "4.14.123", diff --git a/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts b/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts index 975ddf9bd96..c3c99d77437 100644 --- a/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts +++ b/packages/grafana-data/src/dataframe/ArrowDataFrame.test.ts @@ -6,7 +6,7 @@ import { toDataFrameDTO, toDataFrame } from './processDataFrame'; import { FieldType } from '../types'; import { Table } from 'apache-arrow'; -/* tslint:disable */ +/* eslint-disable */ const resp = { results: { '': { @@ -21,7 +21,7 @@ const resp = { }, }, }; -/* tslint:enable */ +/* eslint-enable */ describe('GEL Utils', () => { test('should parse output with dataframe', () => { diff --git a/packages/grafana-data/src/datetime/moment_wrapper.ts b/packages/grafana-data/src/datetime/moment_wrapper.ts index 32e58f80ca5..7be53d9e249 100644 --- a/packages/grafana-data/src/datetime/moment_wrapper.ts +++ b/packages/grafana-data/src/datetime/moment_wrapper.ts @@ -1,5 +1,5 @@ import { TimeZone } from '../types/time'; -/* tslint:disable:import-blacklist ban ban-types */ +/* eslint-disable id-blacklist, no-restricted-imports, @typescript-eslint/ban-types */ import moment, { Moment, MomentInput, DurationInputArg1 } from 'moment'; export interface DateTimeBuiltinFormat { __momentBuiltinFormatBrand: any; diff --git a/packages/grafana-data/src/vector/AppendedVectors.ts b/packages/grafana-data/src/vector/AppendedVectors.ts index 7cfc0d42c47..a10568a0393 100644 --- a/packages/grafana-data/src/vector/AppendedVectors.ts +++ b/packages/grafana-data/src/vector/AppendedVectors.ts @@ -14,7 +14,7 @@ interface AppendedVectorInfo { */ export class AppendedVectors implements Vector { length = 0; - source: Array> = new Array>(); + source: Array> = []; constructor(startAt = 0) { this.length = startAt; @@ -29,7 +29,7 @@ export class AppendedVectors implements Vector { this.length = length; } else if (length < this.length) { // make the array shorter - const sources: Array> = new Array>(); + const sources: Array> = []; for (const src of this.source) { sources.push(src); if (src.end > length) { diff --git a/packages/grafana-data/tsconfig.build.json b/packages/grafana-data/tsconfig.build.json index 34e37b5d0b8..9ec189c28ea 100644 --- a/packages/grafana-data/tsconfig.build.json +++ b/packages/grafana-data/tsconfig.build.json @@ -1,4 +1,4 @@ { - "extends": "./tsconfig.json", - "exclude": ["dist", "node_modules", "**/*.test.ts", "**/*.test.tsx"] + "exclude": ["dist", "node_modules", "**/*.test.ts*"], + "extends": "./tsconfig.json" } diff --git a/packages/grafana-data/tsconfig.json b/packages/grafana-data/tsconfig.json index a7d3e870c45..99a0e5ed841 100644 --- a/packages/grafana-data/tsconfig.json +++ b/packages/grafana-data/tsconfig.json @@ -1,11 +1,11 @@ { - "extends": "../tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx", "../../public/app/types/jquery/*.ts"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "rootDirs": ["."], - "typeRoots": ["./node_modules/@types", "types"], "declarationDir": "dist", - "outDir": "compiled" - } + "outDir": "compiled", + "rootDirs": ["."], + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["dist", "node_modules"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts*", "../../public/app/types/jquery/*.ts"] } diff --git a/packages/grafana-data/tslint.json b/packages/grafana-data/tslint.json deleted file mode 100644 index cf23cbe034b..00000000000 --- a/packages/grafana-data/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "import-blacklist": [true, ["^@grafana/data.*"], ["^@grafana/ui.*"], ["^@grafana/runtime.*"]] - } -} diff --git a/packages/grafana-e2e/cypress/plugins/cy-ts-preprocessor.js b/packages/grafana-e2e/cypress/plugins/cy-ts-preprocessor.js index 3bc28e322f2..02ab5016c13 100644 --- a/packages/grafana-e2e/cypress/plugins/cy-ts-preprocessor.js +++ b/packages/grafana-e2e/cypress/plugins/cy-ts-preprocessor.js @@ -2,7 +2,7 @@ const wp = require('@cypress/webpack-preprocessor'); const webpackOptions = { resolve: { - extensions: ['.ts', '.js'] + extensions: ['.ts', '.js'], }, module: { rules: [ @@ -11,16 +11,16 @@ const webpackOptions = { exclude: [/node_modules/], use: [ { - loader: 'ts-loader' - } - ] - } - ] + loader: 'ts-loader', + }, + ], + }, + ], }, }; const options = { - webpackOptions + webpackOptions, }; module.exports = wp(options); diff --git a/packages/grafana-e2e/cypress/tsconfig.json b/packages/grafana-e2e/cypress/tsconfig.json index 18a942e80c0..c5d0b72aed0 100644 --- a/packages/grafana-e2e/cypress/tsconfig.json +++ b/packages/grafana-e2e/cypress/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../tsconfig.json", "compilerOptions": { "types": ["cypress"] }, + "extends": "../tsconfig.json", "include": ["**/*.ts"] } diff --git a/packages/grafana-e2e/package.json b/packages/grafana-e2e/package.json index d978ea5fb40..ff8f25accbf 100644 --- a/packages/grafana-e2e/package.json +++ b/packages/grafana-e2e/package.json @@ -15,7 +15,7 @@ }, "main": "src/index.ts", "scripts": { - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint cypress/ src/ --ext=.js,.ts,.tsx", "typecheck": "tsc --noEmit", "clean": "rimraf ./dist ./compiled", "bundle": "rollup -c rollup.config.ts", @@ -25,6 +25,7 @@ }, "devDependencies": { "@cypress/webpack-preprocessor": "4.1.1", + "@grafana/tsconfig": "^1.0.0-rc1", "blink-diff": "1.0.13", "rollup": "1.6.0", "rollup-plugin-commonjs": "9.2.1", diff --git a/packages/grafana-e2e/tsconfig.build.json b/packages/grafana-e2e/tsconfig.build.json index 34e37b5d0b8..9ec189c28ea 100644 --- a/packages/grafana-e2e/tsconfig.build.json +++ b/packages/grafana-e2e/tsconfig.build.json @@ -1,4 +1,4 @@ { - "extends": "./tsconfig.json", - "exclude": ["dist", "node_modules", "**/*.test.ts", "**/*.test.tsx"] + "exclude": ["dist", "node_modules", "**/*.test.ts*"], + "extends": "./tsconfig.json" } diff --git a/packages/grafana-e2e/tsconfig.json b/packages/grafana-e2e/tsconfig.json index b9b5958932f..7e51e9fbda7 100644 --- a/packages/grafana-e2e/tsconfig.json +++ b/packages/grafana-e2e/tsconfig.json @@ -1,12 +1,12 @@ { - "extends": "../tsconfig.json", - "include": ["src/**/*.ts", "./cypress/support/index.d.ts"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "types": ["cypress"], - "rootDirs": ["."], - "typeRoots": ["./node_modules/@types", "types"], "declarationDir": "dist", - "outDir": "compiled" - } + "outDir": "compiled", + "rootDirs": ["."], + "typeRoots": ["node_modules/@types"], + "types": ["cypress"] + }, + "exclude": ["dist", "node_modules"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts", "cypress/support/index.d.ts"] } diff --git a/packages/grafana-e2e/tslint.json b/packages/grafana-e2e/tslint.json deleted file mode 100644 index 8e2f21b3624..00000000000 --- a/packages/grafana-e2e/tslint.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": {} -} diff --git a/packages/grafana-runtime/.eslintrc b/packages/grafana-runtime/.eslintrc new file mode 100644 index 00000000000..c4cc0c0304a --- /dev/null +++ b/packages/grafana-runtime/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": ["@grafana/eslint-config"], + "rules": { + "no-restricted-imports": [2, "^@grafana/runtime.*"] + } +} diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json index d04a62e8b06..0e5ea01b7c6 100644 --- a/packages/grafana-runtime/package.json +++ b/packages/grafana-runtime/package.json @@ -14,7 +14,7 @@ }, "main": "src/index.ts", "scripts": { - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint src/ --ext=.js,.ts,.tsx", "typecheck": "tsc --noEmit", "clean": "rimraf ./dist ./compiled", "bundle": "rollup -c rollup.config.ts", @@ -27,6 +27,7 @@ "systemjs-plugin-css": "0.1.37" }, "devDependencies": { + "@grafana/tsconfig": "^1.0.0-rc1", "@types/systemjs": "^0.20.6", "lodash": "4.17.15", "pretty-format": "24.9.0", diff --git a/packages/grafana-runtime/tsconfig.build.json b/packages/grafana-runtime/tsconfig.build.json index 34e37b5d0b8..9ec189c28ea 100644 --- a/packages/grafana-runtime/tsconfig.build.json +++ b/packages/grafana-runtime/tsconfig.build.json @@ -1,4 +1,4 @@ { - "extends": "./tsconfig.json", - "exclude": ["dist", "node_modules", "**/*.test.ts", "**/*.test.tsx"] + "exclude": ["dist", "node_modules", "**/*.test.ts*"], + "extends": "./tsconfig.json" } diff --git a/packages/grafana-runtime/tsconfig.json b/packages/grafana-runtime/tsconfig.json index a7d3e870c45..8bb070b0c58 100644 --- a/packages/grafana-runtime/tsconfig.json +++ b/packages/grafana-runtime/tsconfig.json @@ -1,11 +1,15 @@ { - "extends": "../tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx", "../../public/app/types/jquery/*.ts"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "rootDirs": ["."], - "typeRoots": ["./node_modules/@types", "types"], + "baseUrl": ".", "declarationDir": "dist", - "outDir": "compiled" - } + "outDir": "compiled", + "rootDirs": ["."], + "paths": { + "@grafana/slate-react": ["../grafana-ui/node_modules/@types/slate-react"] + }, + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["dist", "node_modules"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts*", "../../public/app/types/jquery/*.ts"] } diff --git a/packages/grafana-runtime/tslint.json b/packages/grafana-runtime/tslint.json deleted file mode 100644 index f5129373624..00000000000 --- a/packages/grafana-runtime/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "import-blacklist": [true, ["^@grafana/runtime.*"]] - } -} diff --git a/packages/grafana-toolkit/.eslintrc b/packages/grafana-toolkit/.eslintrc new file mode 100644 index 00000000000..c4cc0c0304a --- /dev/null +++ b/packages/grafana-toolkit/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": ["@grafana/eslint-config"], + "rules": { + "no-restricted-imports": [2, "^@grafana/runtime.*"] + } +} diff --git a/packages/grafana-toolkit/README.md b/packages/grafana-toolkit/README.md index 39be02f6614..10b063b8487 100644 --- a/packages/grafana-toolkit/README.md +++ b/packages/grafana-toolkit/README.md @@ -98,13 +98,13 @@ This command creates a production-ready build of your plugin. See [Grafana packages versioning guide](https://github.com/grafana/grafana/blob/master/packages/README.md#versioning). ### What tools does grafana-toolkit use? -grafana-toolkit comes with Typescript, TSLint, Prettier, Jest, CSS and SASS support. +grafana-toolkit comes with TypeScript, ESLint, Prettier, Jest, CSS and SASS support. ### How to start using grafana-toolkit in my plugin? See [Updating your plugin to use grafana-toolkit](#updating-your-plugin-to-use-grafana-toolkit). -### Can I use Typescript to develop Grafana plugins? -Yes! grafana-toolkit supports Typescript by default. +### Can I use TypeScript to develop Grafana plugins? +Yes! grafana-toolkit supports TypeScript by default. ### How can I test my plugin? grafana-toolkit comes with Jest as a test runner. @@ -199,7 +199,7 @@ To learn more about using Grafana theme please refer to [Theme usage guide](http > We do not support Emotion's `css` prop. Use className instead! -### Can I adjust Typescript configuration to suit my needs? +### Can I adjust TypeScript configuration to suit my needs? Yes! However, it's important that your `tsconfig.json` file contains the following lines: ```json @@ -213,8 +213,8 @@ Yes! However, it's important that your `tsconfig.json` file contains the followi } ``` -### Can I adjust TSLint configuration to suit my needs? -grafana-toolkit comes with [default config for TSLint](https://github.com/grafana/grafana/blob/master/packages/grafana-toolkit/src/config/tslint.plugin.json). For now, there is now way to customise TSLint config. +### Can I adjust ESLint configuration to suit my needs? +grafana-toolkit comes with [default config for ESLint](https://github.com/grafana/grafana/blob/master/packages/grafana-toolkit/src/config/eslint.plugin.json). For now, there is now way to customise ESLint config. ### How is Prettier integrated into grafana-toolkit workflow? When building plugin with [`grafana-toolkit plugin:build`](#building-plugin) task, grafana-toolkit performs Prettier check. If the check detects any Prettier issues, the build will not pass. To avoid such situation we suggest developing plugin with [`grafana-toolkit plugin:dev --watch`](#developing-plugin) task running. This task tries to fix Prettier issues automatically. diff --git a/packages/grafana-toolkit/package.json b/packages/grafana-toolkit/package.json index 2de51d88055..1e4f5095cd7 100644 --- a/packages/grafana-toolkit/package.json +++ b/packages/grafana-toolkit/package.json @@ -18,9 +18,9 @@ "grafana-toolkit": "./bin/grafana-toolkit.js" }, "scripts": { - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint src/ --ext=.js,.ts,.tsx", "typecheck": "tsc --noEmit", - "precommit": "npm run tslint & npm run typecheck", + "precommit": "npm run lint & npm run typecheck", "clean": "rimraf ./dist ./compiled", "build": "grafana-toolkit toolkit:build" }, @@ -29,6 +29,8 @@ "@babel/core": "7.8.3", "@babel/preset-env": "7.8.3", "@grafana/data": "6.7.0-pre", + "@grafana/eslint-config": "^1.0.0-rc1", + "@grafana/tsconfig": "^1.0.0-rc1", "@grafana/ui": "6.7.0-pre", "@types/command-exists": "^1.2.0", "@types/execa": "^0.9.0", @@ -54,6 +56,10 @@ "concurrently": "4.1.0", "copy-webpack-plugin": "5.0.3", "css-loader": "^3.0.0", + "eslint": "6.7.2", + "eslint-config-prettier": "6.7.0", + "eslint-plugin-jsdoc": "18.4.1", + "eslint-plugin-prettier": "3.1.1", "execa": "^1.0.0", "expect-puppeteer": "4.1.1", "file-loader": "^4.0.0", @@ -94,8 +100,6 @@ "ts-loader": "6.2.1", "ts-node": "8.5.0", "tslib": "1.10.0", - "tslint": "5.20.1", - "tslint-config-prettier": "^1.18.0", "typescript": "3.7.2", "url-loader": "^2.0.1", "webpack": "4.35.0" diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts index 12cdccc7f14..929980296dd 100644 --- a/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.build.ts @@ -1,4 +1,3 @@ -import * as prettier from 'prettier'; import { useSpinner } from '../utils/useSpinner'; import { testPlugin } from './plugin/tests'; import { Task, TaskRunner } from './task'; @@ -8,11 +7,11 @@ import { promisify } from 'util'; import globby from 'globby'; import execa from 'execa'; import { constants as fsConstants, promises as fs } from 'fs'; +import { CLIEngine } from 'eslint'; import { bundlePlugin as bundleFn, PluginBundleOptions } from './plugin/bundle'; -import { Configuration, Linter, LintResult, RuleFailure } from 'tslint'; -const { access, copyFile, readFile, writeFile } = fs; -const { COPYFILE_EXCL, F_OK } = fsConstants; +const { copyFile } = fs; +const { COPYFILE_EXCL } = fsConstants; const rimraf = promisify(rimrafCallback); interface PluginBuildOptions { @@ -60,117 +59,40 @@ const typecheckPlugin = useSpinner('Typechecking', async () => { const getTypescriptSources = () => globby(resolvePath(process.cwd(), 'src/**/*.+(ts|tsx)')); +// @ts-ignore const getStylesSources = () => globby(resolvePath(process.cwd(), 'src/**/*.+(scss|css)')); -export const prettierCheckPlugin = useSpinner('Prettier check', async ({ fix }) => { - // @todo remove explicit params when possible -- https://github.com/microsoft/TypeScript/issues/35626 - const [prettierConfig, paths] = await Promise.all([ - readFile(resolvePath(__dirname, '../../config/prettier.plugin.config.json'), 'utf8').then( - contents => JSON.parse(contents) as object - ), - - Promise.all([getStylesSources(), getTypescriptSources()]).then(results => results.flat()), - ]); - - const promises: Array> = paths.map(path => - readFile(path, 'utf8') - .then(contents => { - const config = { - ...prettierConfig, - filepath: path, - }; - - if (fix && !prettier.check(contents, config)) { - return prettier.format(contents, config); - } else { - return undefined; - } - }) - .then(newContents => { - if (newContents === undefined) { - return true; // Nothing to fix - } else if (fix) { - if (newContents.length > 10) { - return writeFile(path, newContents) - .then(() => { - console.log(`Fixed: ${path}`); - return true; - }) - .catch(error => { - console.log(`Error fixing ${path}`, error); - return false; - }); - } - console.log(`No automatic fix for: ${path}`); - } - return false; - }) - .then(success => ({ path, success })) - ); - - const failures = (await Promise.all(promises)).filter(({ success }) => !success); - - if (failures.length > 0) { - console.log('\nFix Prettier issues in following files:'); - failures.forEach(({ path }) => console.log(path)); - console.log('\nRun toolkit:dev to fix errors'); - throw new Error('Prettier failed'); - } -}); - export const lintPlugin = useSpinner('Linting', async ({ fix }) => { - let tsLintConfigPath = resolvePath(process.cwd(), 'tslint.json'); - - try { - await access(tsLintConfigPath, F_OK); - } catch (error) { - tsLintConfigPath = resolvePath(__dirname, '../../config/tslint.plugin.json'); - } - - const options = { - fix: fix === true, - formatter: 'json', - }; - - const configuration = Configuration.findConfiguration(tsLintConfigPath).results; - const sourcesToLint = await getTypescriptSources(); - - const lintPromises = sourcesToLint.map(fileName => - readFile(fileName, 'utf8').then(contents => { - const linter = new Linter(options); - linter.lint(fileName, contents, configuration); - return linter.getResult(); - }) + // @todo should remove this because the config file could be in a parent dir or within package.json + const configFile = await globby(resolvePath(process.cwd(), '.eslintrc?(.cjs|.js|.json|.yaml|.yml)')).then( + filePaths => { + if (filePaths.length > 0) { + return filePaths[0]; + } else { + return resolvePath(__dirname, '../../config/eslint.plugin.json'); + } + } ); - const lintResults: LintResult[] = (await Promise.all(lintPromises)).filter( - ({ errorCount, warningCount }) => errorCount > 0 || warningCount > 0 - ); + const cli = new CLIEngine({ + configFile, + fix, + }); - if (lintResults.length > 0) { + const { errorCount, results, warningCount } = cli.executeOnFiles(await getTypescriptSources()); + + if (errorCount > 0 || warningCount > 0) { + const formatter = cli.getFormatter(); console.log('\n'); - const failures = lintResults.reduce((failures, result) => { - return [...failures, ...result.failures]; - }, []); - failures.forEach(f => { - // tslint:disable-next-line - console.log( - `${f.getRuleSeverity() === 'warning' ? 'WARNING' : 'ERROR'}: ${ - f.getFileName().split('src')[1] - }[${f.getStartPosition().getLineAndCharacter().line + 1}:${ - f.getStartPosition().getLineAndCharacter().character - }]: ${f.getFailure()}` - ); - }); + console.log(formatter(results)); console.log('\n'); - throw new Error(`${failures.length} linting errors found in ${lintResults.length} files`); + throw new Error(`${errorCount + warningCount} linting errors found in ${results.length} files`); } }); export const pluginBuildRunner: TaskRunner = async ({ coverage }) => { await clean(); await prepare(); - await prettierCheckPlugin({ fix: false }); await lintPlugin({ fix: false }); await testPlugin({ updateSnapshot: false, coverage, watch: false }); await bundlePlugin({ watch: false, production: true }); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts index ef809d8d2b7..da7a695c6bc 100644 --- a/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.dev.ts @@ -1,7 +1,7 @@ import { Task, TaskRunner } from './task'; import { bundlePlugin as bundleFn, PluginBundleOptions } from './plugin/bundle'; import { useSpinner } from '../utils/useSpinner'; -import { lintPlugin, prettierCheckPlugin } from './plugin.build'; +import { lintPlugin } from './plugin.build'; // @ts-ignore import execa = require('execa'); @@ -41,8 +41,7 @@ const pluginDevRunner: TaskRunner = async options => { if (options.watch) { await bundleFn(options); } else { - // Always fix lint/prettier in dev mode - await prettierCheckPlugin({ fix: true }); + // Always fix lint in dev mode await lintPlugin({ fix: true }); const result = await bundlePlugin(options); diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin/create.ts b/packages/grafana-toolkit/src/cli/tasks/plugin/create.ts index 87a0cea5fbb..4d3437f0e5e 100644 --- a/packages/grafana-toolkit/src/cli/tasks/plugin/create.ts +++ b/packages/grafana-toolkit/src/cli/tasks/plugin/create.ts @@ -78,7 +78,7 @@ export const promptPluginDetails = async (name?: string) => { // Try using git specified username promptConfirm('author', `Author (${username})`, username, username !== ''), // Prompt for manual author entry if no git user.name specifed - promptInput('author', `Author`, true, undefined, answers => !answers.author || username === ''), + promptInput('author', `Author`, true, undefined, (answers: any) => !answers.author || username === ''), promptInput('url', 'Your URL (i.e. organisation url)'), ]); @@ -136,6 +136,7 @@ export const prepareJsonFiles = useSpinner<{ pluginDetails: PluginDetails; plugi export const removeGitFiles = useSpinner('Cleaning', async pluginPath => rmdir(`${path.resolve(pluginPath, '.git')}`)); +/* eslint-disable no-console */ export const formatPluginDetails = (details: PluginDetails) => { console.group(); console.log(); @@ -151,3 +152,4 @@ export const formatPluginDetails = (details: PluginDetails) => { console.log(); console.groupEnd(); }; +/* eslint-enable no-console */ diff --git a/packages/grafana-toolkit/src/cli/tasks/precommit.ts b/packages/grafana-toolkit/src/cli/tasks/precommit.ts index 31ee30c68dc..2fea0df41d2 100644 --- a/packages/grafana-toolkit/src/cli/tasks/precommit.ts +++ b/packages/grafana-toolkit/src/cli/tasks/precommit.ts @@ -61,7 +61,7 @@ const precommitRunner: TaskRunner = async () => { } console.log(chalk.yellow('Skipping precommit checks, no front-end changes detected')); - return; + return undefined; }; export const precommitTask = new Task('Precommit task', precommitRunner); diff --git a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts index 2cbcfaceb0f..db35034284c 100644 --- a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts +++ b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts @@ -58,7 +58,7 @@ const copyFiles = () => { 'src/config/prettier.plugin.rc.js', 'src/config/tsconfig.plugin.json', 'src/config/tsconfig.plugin.local.json', - 'src/config/tslint.plugin.json', + 'src/config/eslint.plugin.json', 'src/config/styles.mock.js', // plugin test file diff --git a/packages/grafana-toolkit/src/cli/tsconfig.json b/packages/grafana-toolkit/src/cli/tsconfig.json index 475f3aa406f..36f0eda1307 100644 --- a/packages/grafana-toolkit/src/cli/tsconfig.json +++ b/packages/grafana-toolkit/src/cli/tsconfig.json @@ -1,6 +1,6 @@ { - "extends": "../../../tsconfig.json", "compilerOptions": { "module": "commonjs" - } + }, + "extends": "@grafana/tsconfig" } diff --git a/packages/grafana-toolkit/src/cli/utils/execTask.ts b/packages/grafana-toolkit/src/cli/utils/execTask.ts index 3ae891e65bb..03d0a885b07 100644 --- a/packages/grafana-toolkit/src/cli/utils/execTask.ts +++ b/packages/grafana-toolkit/src/cli/utils/execTask.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import { Task } from '../tasks/task'; import chalk from 'chalk'; diff --git a/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts b/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts index 6ca36c2dd7e..ff6cfb0b132 100644 --- a/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts +++ b/packages/grafana-toolkit/src/cli/utils/githubClient.test.ts @@ -97,7 +97,7 @@ describe('GithubClient', () => { describe('when the credentials are not defined', () => { it('should throw an error', () => { expect(() => { - // tslint:disable-next-line + // eslint-disable-next-line new GithubClient({ required: true }); }).toThrow(/operation needs a GITHUB_USERNAME and GITHUB_ACCESS_TOKEN environment variables/); }); diff --git a/packages/grafana-toolkit/src/cli/utils/useSpinner.ts b/packages/grafana-toolkit/src/cli/utils/useSpinner.ts index 8deeca514d5..9aabb9dafa4 100644 --- a/packages/grafana-toolkit/src/cli/utils/useSpinner.ts +++ b/packages/grafana-toolkit/src/cli/utils/useSpinner.ts @@ -10,7 +10,7 @@ export const useSpinner = (spinnerLabel: string, fn: FnToSpin, killP await fn(options); spinner.succeed(); } catch (e) { - console.trace(e); + console.trace(e); // eslint-disable-line no-console spinner.fail(e.message || e); if (killProcess) { process.exit(1); diff --git a/packages/grafana-toolkit/src/config/eslint.plugin.json b/packages/grafana-toolkit/src/config/eslint.plugin.json new file mode 100644 index 00000000000..99f31820386 --- /dev/null +++ b/packages/grafana-toolkit/src/config/eslint.plugin.json @@ -0,0 +1,3 @@ +{ + "extends": ["@grafana/eslint-config"] +} diff --git a/packages/grafana-toolkit/src/config/mocks/webpack/overrides/webpack.config.js b/packages/grafana-toolkit/src/config/mocks/webpack/overrides/webpack.config.js index 1b6c117c3f8..e96ceeed1a9 100644 --- a/packages/grafana-toolkit/src/config/mocks/webpack/overrides/webpack.config.js +++ b/packages/grafana-toolkit/src/config/mocks/webpack/overrides/webpack.config.js @@ -1,5 +1,5 @@ 'use strict'; -const {cloneDeep} = require('lodash'); +const { cloneDeep } = require('lodash'); const overrideWebpackConfig = (originalConfig, options) => { const config = cloneDeep(originalConfig); diff --git a/packages/grafana-toolkit/src/config/mocks/webpack/overridesNamedExport/webpack.config.js b/packages/grafana-toolkit/src/config/mocks/webpack/overridesNamedExport/webpack.config.js index d0d0e40db9c..d2e086e5f00 100644 --- a/packages/grafana-toolkit/src/config/mocks/webpack/overridesNamedExport/webpack.config.js +++ b/packages/grafana-toolkit/src/config/mocks/webpack/overridesNamedExport/webpack.config.js @@ -1,5 +1,5 @@ 'use strict'; -const {cloneDeep} = require('lodash'); +const { cloneDeep } = require('lodash'); module.exports.getWebpackConfig = (originalConfig, options) => { const config = cloneDeep(originalConfig); diff --git a/packages/grafana-toolkit/src/config/prettier.plugin.rc.js b/packages/grafana-toolkit/src/config/prettier.plugin.rc.js index 263dbd3b276..c14684b0835 100644 --- a/packages/grafana-toolkit/src/config/prettier.plugin.rc.js +++ b/packages/grafana-toolkit/src/config/prettier.plugin.rc.js @@ -1,3 +1,3 @@ module.exports = { - ...require("./node_modules/@grafana/toolkit/src/config/prettier.plugin.config.json"), + ...require('@grafana/toolkit/src/config/prettier.plugin.config.json'), }; diff --git a/packages/grafana-toolkit/src/config/tsconfig.plugin.json b/packages/grafana-toolkit/src/config/tsconfig.plugin.json index 0e565014b3f..039e0c35482 100644 --- a/packages/grafana-toolkit/src/config/tsconfig.plugin.json +++ b/packages/grafana-toolkit/src/config/tsconfig.plugin.json @@ -1,30 +1,6 @@ { "compilerOptions": { - "moduleResolution": "node", - "target": "es5", - "lib": ["es6", "dom"], - "module": "esnext", - "strict": true, - "alwaysStrict": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitUseStrict": false, - "noUnusedLocals": true, - "strictNullChecks": true, - "skipLibCheck": true, - "removeComments": false, - "jsx": "react", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "importHelpers": true, - "noEmitHelpers": true, - "inlineSourceMap": false, - "sourceMap": true, - "emitDecoratorMetadata": false, - "experimentalDecorators": true, - "downlevelIteration": true, - "pretty": true - } + "alwaysStrict": true + }, + "extends": "@grafana/tsconfig" } diff --git a/packages/grafana-toolkit/src/config/tsconfig.plugin.local.json b/packages/grafana-toolkit/src/config/tsconfig.plugin.local.json index 211e352ef5e..7453b650656 100644 --- a/packages/grafana-toolkit/src/config/tsconfig.plugin.local.json +++ b/packages/grafana-toolkit/src/config/tsconfig.plugin.local.json @@ -1,9 +1,9 @@ { - "extends": "./node_modules/@grafana/toolkit/src/config/tsconfig.plugin.json", - "include": ["src", "types"], "compilerOptions": { "rootDir": "./src", "baseUrl": "./src", "typeRoots": ["./node_modules/@types"] - } + }, + "extends": "@grafana/toolkit/src/config/tsconfig.plugin.json", + "include": ["src", "types"] } diff --git a/packages/grafana-toolkit/src/config/tslint.plugin.json b/packages/grafana-toolkit/src/config/tslint.plugin.json deleted file mode 100644 index 8c2d6608f52..00000000000 --- a/packages/grafana-toolkit/src/config/tslint.plugin.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "extends": ["tslint-config-prettier"], - "rules": { - "array-type": [true, "array-simple"], - "arrow-return-shorthand": true, - "ban": [true, { "name": "Array", "message": "tsstyle#array-constructor" }], - "ban-types": [ - true, - ["Object", "Use {} instead."], - ["String", "Use 'string' instead."], - ["Number", "Use 'number' instead."], - ["Boolean", "Use 'boolean' instead."] - ], - "interface-name": [true, "never-prefix"], - "no-string-throw": true, - "no-unused-expression": true, - "no-unused-variable": false, - "no-use-before-declare": false, - "no-duplicate-variable": true, - "curly": true, - "class-name": true, - "semicolon": [true, "always", "ignore-bound-class-methods"], - "triple-equals": [true, "allow-null-check"], - "comment-format": [false, "check-space"], - "eofline": true, - "forin": false, - "indent": [true, "spaces", 2], - "jsdoc-format": true, - "label-position": true, - "max-line-length": [true, 150], - "member-access": [true, "no-public"], - "new-parens": true, - "no-angle-bracket-type-assertion": true, - "no-arg": true, - "no-bitwise": false, - "no-conditional-assignment": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": true, - "no-namespace": [true, "allow-declarations"], - "no-reference": true, - "no-shadowed-variable": false, - "no-string-literal": false, - "no-switch-case-fall-through": false, - "no-trailing-whitespace": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [true, "check-open-brace", "check-catch", "check-else"], - "only-arrow-functions": [true, "allow-declarations", "allow-named-functions"], - "prefer-const": true, - "radix": true, - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": [ - true, - "check-format", - "ban-keywords", - "allow-leading-underscore", - "allow-trailing-underscore", - "allow-pascal-case" - ], - "use-isnan": true, - "whitespace": [true, "check-branch", "check-decl", "check-type", "check-preblock"] - } -} diff --git a/packages/grafana-toolkit/src/config/webpack.plugin.config.test.ts b/packages/grafana-toolkit/src/config/webpack.plugin.config.test.ts index 197df1d53e6..c2212bf8a51 100644 --- a/packages/grafana-toolkit/src/config/webpack.plugin.config.test.ts +++ b/packages/grafana-toolkit/src/config/webpack.plugin.config.test.ts @@ -3,9 +3,9 @@ import fs from 'fs'; import * as webpackConfig from './webpack.plugin.config'; jest.mock('./webpack/loaders', () => ({ - getFileLoaders: () => [], - getStylesheetEntries: () => [], - getStyleLoaders: () => [], + getFileLoaders: (): Array<{}> => [], + getStylesheetEntries: () => ({}), + getStyleLoaders: (): Array<{}> => [], })); const modulePathsMock = [ diff --git a/packages/grafana-toolkit/src/plugins/e2e/launcher.ts b/packages/grafana-toolkit/src/plugins/e2e/launcher.ts index 92137634bd4..2f671e8411e 100644 --- a/packages/grafana-toolkit/src/plugins/e2e/launcher.ts +++ b/packages/grafana-toolkit/src/plugins/e2e/launcher.ts @@ -14,7 +14,6 @@ export async function runEndToEndTests(outputDirectory: string, results: TestRes verbose: false, moduleDirectories: ['node_modules'], // add the plugin somehow? moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], - setupFiles: [], setupFilesAfterEnv: [ 'expect-puppeteer', // Setup Puppeteer '/' + setupPath + ext, // Loads Chromimum diff --git a/packages/grafana-toolkit/tsconfig.json b/packages/grafana-toolkit/tsconfig.json index c38c2bb2fe1..2ec311265de 100644 --- a/packages/grafana-toolkit/tsconfig.json +++ b/packages/grafana-toolkit/tsconfig.json @@ -1,14 +1,12 @@ { - "extends": "../tsconfig.json", - "include": ["src/**/*.ts", "../../public/app/types/jquery/*.ts"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "module": "commonjs", - "rootDirs": ["."], - "outDir": "dist/src", - "declaration": true, "declarationDir": "dist/src", - "typeRoots": ["./node_modules/@types"], - "esModuleInterop": true - } + "module": "commonjs", + "outDir": "dist/src", + "rootDirs": ["."], + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["dist", "node_modules"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts", "../../public/app/types/jquery/*.ts"] } diff --git a/packages/grafana-toolkit/tslint.json b/packages/grafana-toolkit/tslint.json deleted file mode 100644 index d058db8cd65..00000000000 --- a/packages/grafana-toolkit/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "import-blacklist": [true, ["^@grafana/runtime.*"]], - "no-console": [true, "debug", "info", "time", "timeEnd"] - } -} diff --git a/packages/grafana-ui/.eslintrc b/packages/grafana-ui/.eslintrc new file mode 100644 index 00000000000..bd11a76bc35 --- /dev/null +++ b/packages/grafana-ui/.eslintrc @@ -0,0 +1,6 @@ +{ + "extends": ["@grafana/eslint-config"], + "rules": { + "no-restricted-imports": [2, "^@grafana/runtime.*", "^@grafana/ui.*"] + } +} diff --git a/packages/grafana-ui/.storybook/tsconfig.json b/packages/grafana-ui/.storybook/tsconfig.json index 200f5b97a30..9243161aba5 100644 --- a/packages/grafana-ui/.storybook/tsconfig.json +++ b/packages/grafana-ui/.storybook/tsconfig.json @@ -1,11 +1,10 @@ { - "extends": "../tsconfig.json", - "include": ["../src/**/*.ts", "../src/**/*.tsx"], - "exclude": ["../dist", "../node_modules"], "compilerOptions": { - "noUnusedLocals": false, - "declarationDir": "dist", + "noUnusedLocals": false, "outDir": "compiled" - } + }, + "exclude": ["../dist", "../node_modules"], + "extends": "../tsconfig.json", + "include": ["../src/**/*.ts", "../src/**/*.tsx"] } diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index 7d2079570b3..92ecc1bc585 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -16,7 +16,7 @@ }, "main": "src/index.ts", "scripts": { - "tslint": "tslint -c tslint.json --project tsconfig.json", + "lint": "eslint .storybook/ src/ --ext=.js,.ts,.tsx", "typecheck": "tsc --noEmit", "storybook": "start-storybook -p 9001 -c .storybook", "storybook:build": "build-storybook -o ./dist/storybook -c .storybook", @@ -27,6 +27,7 @@ "dependencies": { "@grafana/data": "6.7.0-pre", "@grafana/slate-react": "0.22.9-grafana", + "@grafana/tsconfig": "^1.0.0-rc1", "@torkelo/react-select": "3.0.8", "@types/react-color": "2.17.0", "@types/react-select": "3.0.8", diff --git a/packages/grafana-ui/src/components/ColorPicker/ColorPickerTrigger.tsx b/packages/grafana-ui/src/components/ColorPicker/ColorPickerTrigger.tsx index 0445fd465e3..684655276d6 100644 --- a/packages/grafana-ui/src/components/ColorPicker/ColorPickerTrigger.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/ColorPickerTrigger.tsx @@ -35,7 +35,7 @@ export const ColorPickerTrigger = forwardRef(function ColorPickerTrigger( float: 'left', zIndex: 0, backgroundImage: - // tslint:disable-next-line:max-line-length + // eslint-disable-next-line max-len 'url(data:image/png,base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)', }} > diff --git a/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts b/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts index 90428e98549..8eed649bbc6 100644 --- a/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts +++ b/packages/grafana-ui/src/themes/_variables.dark.scss.tmpl.ts @@ -1,4 +1,4 @@ -/* tslint:disable:max-line-length */ +/* eslint-disable max-len */ import { GrafanaTheme } from '@grafana/data'; import { renderGeneratedFileBanner } from '../utils/generatedFileBanner'; diff --git a/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts b/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts index 28cba71b8a2..137c5c4ee71 100644 --- a/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts +++ b/packages/grafana-ui/src/themes/_variables.light.scss.tmpl.ts @@ -1,4 +1,4 @@ -/* tslint:disable:max-line-length */ +/* eslint-disable max-len */ import { GrafanaTheme } from '@grafana/data'; import { renderGeneratedFileBanner } from '../utils/generatedFileBanner'; diff --git a/packages/grafana-ui/src/themes/_variables.scss.tmpl.ts b/packages/grafana-ui/src/themes/_variables.scss.tmpl.ts index 8180c4a7666..4dee061e0f4 100644 --- a/packages/grafana-ui/src/themes/_variables.scss.tmpl.ts +++ b/packages/grafana-ui/src/themes/_variables.scss.tmpl.ts @@ -1,4 +1,4 @@ -/* tslint:disable:max-line-length */ +/* eslint-disable max-len */ import { GrafanaThemeCommons } from '@grafana/data'; import { renderGeneratedFileBanner } from '../utils/generatedFileBanner'; diff --git a/packages/grafana-ui/src/utils/typeahead.ts b/packages/grafana-ui/src/utils/typeahead.ts index a71da5a97b5..6842a72296d 100644 --- a/packages/grafana-ui/src/utils/typeahead.ts +++ b/packages/grafana-ui/src/utils/typeahead.ts @@ -3,13 +3,14 @@ import { CompletionItemGroup, CompletionItem, CompletionItemKind } from '../type import { GrafanaTheme } from '@grafana/data'; export const flattenGroupItems = (groupedItems: CompletionItemGroup[]): CompletionItem[] => { - return groupedItems.reduce((all, current) => { + return groupedItems.reduce((all: CompletionItem[], { items, label }) => { const titleItem: CompletionItem = { - label: current.label, + label, kind: CompletionItemKind.GroupTitle, }; - return all.concat(titleItem, current.items); - }, new Array()); + all.push(titleItem, ...items); + return all; + }, []); }; export const calculateLongestLabel = (allItems: CompletionItem[]): string => { diff --git a/packages/grafana-ui/tsconfig.build.json b/packages/grafana-ui/tsconfig.build.json index b63f4dc67b1..6134388bd9d 100644 --- a/packages/grafana-ui/tsconfig.build.json +++ b/packages/grafana-ui/tsconfig.build.json @@ -1,12 +1,4 @@ { - "extends": "./tsconfig.json", - "exclude": [ - "dist", - "node_modules", - "src/utils/storybook", - "**/*.test.ts", - "**/*.test.tsx", - "**/*.story.tsx", - "**/*.tmpl.ts" - ] + "exclude": ["**/*.story.tsx", "**/*.test.ts*", "**/*.tmpl.ts", "dist", "node_modules", "src/utils/storybook"], + "extends": "./tsconfig.json" } diff --git a/packages/grafana-ui/tsconfig.json b/packages/grafana-ui/tsconfig.json index 883bbe99ab1..c688a5e1b1c 100644 --- a/packages/grafana-ui/tsconfig.json +++ b/packages/grafana-ui/tsconfig.json @@ -1,15 +1,15 @@ { - "extends": "../tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "rootDirs": [".", "stories"], - "typeRoots": ["./node_modules/@types", "types"], - "baseUrl": "./node_modules/@types", + "baseUrl": "node_modules/@types", + "declarationDir": "dist", + "outDir": "compiled", "paths": { "@grafana/slate-react": ["slate-react"] }, - "declarationDir": "dist", - "outDir": "compiled" - } + "rootDirs": [".", "stories"], + "typeRoots": ["node_modules/@types"] + }, + "exclude": ["dist", "node_modules"], + "extends": "@grafana/tsconfig", + "include": ["src/**/*.ts*"] } diff --git a/packages/grafana-ui/tslint.json b/packages/grafana-ui/tslint.json deleted file mode 100644 index 1033e1962fc..00000000000 --- a/packages/grafana-ui/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tslint.json", - "rules": { - "import-blacklist": [true, "moment", ["^@grafana/ui.*"], ["^@grafana/runtime.*"]] - } -} diff --git a/packages/tsconfig.json b/packages/tsconfig.json deleted file mode 100644 index a82659b1e37..00000000000 --- a/packages/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "module": "esnext", - "declaration": true, - "strict": true, - "alwaysStrict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "skipLibCheck": true, // Temp workaround for Duplicate identifier tsc errors, - "removeComments": false - } -} diff --git a/public/app/core/components/code_editor/theme-grafana-dark.js b/public/app/core/components/code_editor/theme-grafana-dark.js index 33d4a84b527..f5325438eb4 100644 --- a/public/app/core/components/code_editor/theme-grafana-dark.js +++ b/public/app/core/components/code_editor/theme-grafana-dark.js @@ -1,11 +1,14 @@ -/* jshint ignore:start */ - -ace.define("ace/theme/grafana-dark",["require","exports","module","ace/lib/dom"], function(acequire, exports, module) { - "use strict"; +ace.define('ace/theme/grafana-dark', ['require', 'exports', 'module', 'ace/lib/dom'], function( + acequire, + exports, + module +) { + 'use strict'; exports.isDark = true; - exports.cssClass = "gf-code-dark"; - exports.cssText = ".gf-code-dark .ace_gutter {\ + exports.cssClass = 'gf-code-dark'; + exports.cssText = + '.gf-code-dark .ace_gutter {\ background: #2f3129;\ color: #8f908a\ }\ @@ -107,10 +110,8 @@ ace.define("ace/theme/grafana-dark",["require","exports","module","ace/lib/dom"] }\ .gf-code-dark .ace_indent-guide {\ background: url(data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaaccayaaaczgbynaaaaekleqvqimwpq0fd0zxbzd/wpaajvaoxesgneaaaaaelftksuqmcc) right repeat-y\ - }"; + }'; - var dom = acequire("../lib/dom"); + var dom = acequire('../lib/dom'); dom.importCssString(exports.cssText, exports.cssClass); }); - -/* jshint ignore:end */ diff --git a/public/app/core/components/query_part/query_part_editor.ts b/public/app/core/components/query_part/query_part_editor.ts index e3eda424149..372452a6adb 100644 --- a/public/app/core/components/query_part/query_part_editor.ts +++ b/public/app/core/components/query_part/query_part_editor.ts @@ -35,7 +35,6 @@ export function queryPartEditorDirective(templateSrv: any) { $scope.partActions = []; function clickFuncParam(this: any, paramIndex: number) { - /*jshint validthis:true */ const $link = $(this); const $input = $link.next(); @@ -55,7 +54,6 @@ export function queryPartEditorDirective(templateSrv: any) { } function inputBlur(this: any, paramIndex: number) { - /*jshint validthis:true */ const $input = $(this); const $link = $input.prev(); const newValue = $input.val(); @@ -74,14 +72,12 @@ export function queryPartEditorDirective(templateSrv: any) { } function inputKeyPress(this: any, paramIndex: number, e: any) { - /*jshint validthis:true */ if (e.which === 13) { inputBlur.call(this, paramIndex); } } function inputKeyDown(this: any) { - /*jshint validthis:true */ this.style.width = (3 + this.value.length) * 8 + 'px'; } diff --git a/public/app/core/components/sql_part/sql_part_editor.ts b/public/app/core/components/sql_part/sql_part_editor.ts index 2793f575c28..4ceaa50bcc4 100644 --- a/public/app/core/components/sql_part/sql_part_editor.ts +++ b/public/app/core/components/sql_part/sql_part_editor.ts @@ -35,7 +35,6 @@ export function sqlPartEditorDirective(templateSrv: any) { $scope.partActions = []; function clickFuncParam(this: any, paramIndex: number) { - /*jshint validthis:true */ const $link = $(this); const $input = $link.next(); @@ -61,7 +60,6 @@ export function sqlPartEditorDirective(templateSrv: any) { } function switchToLink($input: JQuery, paramIndex: number) { - /*jshint validthis:true */ const $link = $input.prev(); const newValue = $input.val(); @@ -79,14 +77,12 @@ export function sqlPartEditorDirective(templateSrv: any) { } function inputKeyPress(this: any, paramIndex: number, e: any) { - /*jshint validthis:true */ if (e.which === 13) { switchToLink($(this), paramIndex); } } function inputKeyDown(this: any) { - /*jshint validthis:true */ this.style.width = (3 + this.value.length) * 8 + 'px'; } diff --git a/public/app/core/services/analytics.ts b/public/app/core/services/analytics.ts index 3214bb4b611..2b59e983b05 100644 --- a/public/app/core/services/analytics.ts +++ b/public/app/core/services/analytics.ts @@ -15,7 +15,7 @@ export class Analytics { }); const ga = ((window as any).ga = (window as any).ga || - //tslint:disable-next-line:only-arrow-functions + // this had the equivalent of `eslint-disable-next-line prefer-arrow/prefer-arrow-functions` function() { (ga.q = ga.q || []).push(arguments); }); diff --git a/public/app/core/services/echo/Echo.ts b/public/app/core/services/echo/Echo.ts index 637ae8986d3..3db751f5420 100644 --- a/public/app/core/services/echo/Echo.ts +++ b/public/app/core/services/echo/Echo.ts @@ -32,7 +32,7 @@ export class Echo implements EchoSrv { logDebug = (...msg: any) => { if (this.config.debug) { - // tslint:disable-next-line + // eslint-disable-next-line // console.debug('ECHO:', ...msg); } }; diff --git a/public/app/core/services/ng_react.ts b/public/app/core/services/ng_react.ts index 3307eefc2e1..f3ad853da38 100644 --- a/public/app/core/services/ng_react.ts +++ b/public/app/core/services/ng_react.ts @@ -54,7 +54,7 @@ function applied(fn: any, scope: any) { if (fn.wrappedInApply) { return fn; } - //tslint:disable-next-line:only-arrow-functions + // this had the equivalent of `eslint-disable-next-line prefer-arrow/prefer-arrow-functions` const wrapped: any = function() { const args = arguments; const phase = scope.$root.$$phase; diff --git a/public/app/features/dashboard/services/DashboardLoaderSrv.ts b/public/app/features/dashboard/services/DashboardLoaderSrv.ts index ea3db8dff51..fcae0302de9 100644 --- a/public/app/features/dashboard/services/DashboardLoaderSrv.ts +++ b/public/app/features/dashboard/services/DashboardLoaderSrv.ts @@ -1,6 +1,5 @@ -/* tslint:disable:import-blacklist */ import angular from 'angular'; -import moment from 'moment'; +import moment from 'moment'; // eslint-disable-line no-restricted-imports import _ from 'lodash'; import $ from 'jquery'; import kbn from 'app/core/utils/kbn'; @@ -108,7 +107,6 @@ export class DashboardLoaderSrv { datasourceSrv: this.datasourceSrv, }; - /*jshint -W054 */ const scriptFunc = new Function( 'ARGS', 'kbn', diff --git a/public/app/features/explore/AdHocFilterField.test.tsx b/public/app/features/explore/AdHocFilterField.test.tsx index 8dbfe1fe858..39959528484 100644 --- a/public/app/features/explore/AdHocFilterField.test.tsx +++ b/public/app/features/explore/AdHocFilterField.test.tsx @@ -171,6 +171,8 @@ describe('AdHocFilterField', () => { describe('when called with an empty pairs array', () => { describe('and called with keys', () => { it('then it should return correct pairs', async () => { + // @todo remove lint disable when possible: https://github.com/typescript-eslint/typescript-eslint/issues/902 + /* eslint-disable @typescript-eslint/no-inferrable-types */ const { instance } = setup(); const pairs: KeyValuePair[] = []; const index = 0; @@ -179,6 +181,7 @@ describe('AdHocFilterField', () => { const value: undefined = undefined; const values: undefined = undefined; const operator: undefined = undefined; + /* eslint-enable @typescript-eslint/no-inferrable-types */ const result = instance.updatePairs(pairs, index, { key, keys, value, values, operator }); diff --git a/public/app/features/plugins/plugin_loader.ts b/public/app/features/plugins/plugin_loader.ts index 92274271407..cba7bad9106 100644 --- a/public/app/features/plugins/plugin_loader.ts +++ b/public/app/features/plugins/plugin_loader.ts @@ -1,8 +1,7 @@ import _ from 'lodash'; import * as sdk from 'app/plugins/sdk'; import kbn from 'app/core/utils/kbn'; -// tslint:disable:import-blacklist -import moment from 'moment'; +import moment from 'moment'; // eslint-disable-line no-restricted-imports import angular from 'angular'; import jquery from 'jquery'; diff --git a/public/app/features/templating/interval_variable.ts b/public/app/features/templating/interval_variable.ts index c49670e4b22..a367b0f46e0 100644 --- a/public/app/features/templating/interval_variable.ts +++ b/public/app/features/templating/interval_variable.ts @@ -20,8 +20,8 @@ export class IntervalVariable implements IntervalVariableModel, VariableActions label: string; hide: VariableHide; skipUrlSync: boolean; - auto_count: number; // tslint:disable-line variable-name - auto_min: string; // tslint:disable-line variable-name + auto_count: number; // eslint-disable-line camelcase + auto_min: string; // eslint-disable-line camelcase options: VariableOption[]; auto: boolean; query: string; diff --git a/public/app/plugins/datasource/cloudwatch/components/QueryEditor.test.tsx b/public/app/plugins/datasource/cloudwatch/components/QueryEditor.test.tsx index cb411da9625..79c61a28e2a 100644 --- a/public/app/plugins/datasource/cloudwatch/components/QueryEditor.test.tsx +++ b/public/app/plugins/datasource/cloudwatch/components/QueryEditor.test.tsx @@ -42,7 +42,7 @@ const setup = () => { namespace: 'ec2', metricName: 'CPUUtilization', dimensions: { somekey: 'somevalue' }, - statistics: new Array(), + statistics: [], period: '', expression: '', alias: '', diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/editor/kusto/kusto.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/editor/kusto/kusto.ts index 172aa5ee077..41c353359c9 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/editor/kusto/kusto.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/editor/kusto/kusto.ts @@ -1,4 +1,4 @@ -/* tslint:disable:max-line-length */ +/* eslint-disable max-len */ export const operatorTokens = [ { text: '!between', hint: 'Matches the input that is outside the inclusive range.' }, { text: 'as', hint: "Binds a name to the operator's input tabular expression." }, diff --git a/public/app/plugins/datasource/graphite/func_editor.ts b/public/app/plugins/datasource/graphite/func_editor.ts index c2e0e5777bf..ff81a538826 100644 --- a/public/app/plugins/datasource/graphite/func_editor.ts +++ b/public/app/plugins/datasource/graphite/func_editor.ts @@ -39,8 +39,6 @@ export function graphiteFuncEditor($compile: any, templateSrv: TemplateSrv) { }; function clickFuncParam(this: any, paramIndex: any) { - /*jshint validthis:true */ - const $link = $(this); const $comma = $link.prev('.comma'); const $input = $link.next(); @@ -85,7 +83,6 @@ export function graphiteFuncEditor($compile: any, templateSrv: TemplateSrv) { } function switchToLink(inputElem: HTMLElement, paramIndex: any) { - /*jshint validthis:true */ const $input = $(inputElem); clearTimeout(cancelBlur); @@ -119,7 +116,6 @@ export function graphiteFuncEditor($compile: any, templateSrv: TemplateSrv) { // this = input element function inputBlur(this: any, paramIndex: any) { - /*jshint validthis:true */ const inputElem = this; // happens long before the click event on the typeahead options // need to have long delay because the blur @@ -129,14 +125,12 @@ export function graphiteFuncEditor($compile: any, templateSrv: TemplateSrv) { } function inputKeyPress(this: any, paramIndex: any, e: any) { - /*jshint validthis:true */ if (e.which === 13) { $(this).blur(); } } function inputKeyDown(this: any) { - /*jshint validthis:true */ this.style.width = (3 + this.value.length) * 8 + 'px'; } diff --git a/public/app/plugins/datasource/graphite/lexer.ts b/public/app/plugins/datasource/graphite/lexer.ts index cb1c5ef725c..26b209e8346 100644 --- a/public/app/plugins/datasource/graphite/lexer.ts +++ b/public/app/plugins/datasource/graphite/lexer.ts @@ -1043,7 +1043,6 @@ export class Lexer { } const readUnicodeEscapeSequence = _.bind(function(this: any) { - /*jshint validthis:true */ index += 1; if (this.peek(index) !== 'u') { @@ -1071,7 +1070,6 @@ export class Lexer { }, this); const getIdentifierStart = _.bind(function(this: any) { - /*jshint validthis:true */ const chr = this.peek(index); const code = chr.charCodeAt(0); @@ -1102,7 +1100,6 @@ export class Lexer { }, this); const getIdentifierPart = _.bind(function(this: any) { - /*jshint validthis:true */ const chr = this.peek(index); const code = chr.charCodeAt(0); @@ -1415,7 +1412,6 @@ export class Lexer { * world"; */ scanStringLiteral() { - /*jshint loopfunc:true */ const quote = this.peek(); // String must start with a quote. diff --git a/public/app/plugins/datasource/postgres/mode-sql.js b/public/app/plugins/datasource/postgres/mode-sql.js index 20e3d493458..6435ef25ce2 100644 --- a/public/app/plugins/datasource/postgres/mode-sql.js +++ b/public/app/plugins/datasource/postgres/mode-sql.js @@ -1,103 +1,114 @@ -// jshint ignore: start -// jscs: disable +ace.define( + 'ace/mode/sql_highlight_rules', + ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], + function(require, exports, module) { + 'use strict'; -ace.define("ace/mode/sql_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { -"use strict"; + var oop = require('../lib/oop'); + var TextHighlightRules = require('./text_highlight_rules').TextHighlightRules; -var oop = require("../lib/oop"); -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + var SqlHighlightRules = function() { + var keywords = + 'select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|' + + 'when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|' + + 'foreign|not|references|default|null|inner|cross|natural|database|drop|grant'; -var SqlHighlightRules = function() { + var builtinConstants = 'true|false'; - var keywords = ( - "select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|" + - "when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|" + - "foreign|not|references|default|null|inner|cross|natural|database|drop|grant" - ); + var builtinFunctions = + 'avg|count|first|last|max|min|sum|upper|lower|substring|char_length|round|rank|now|' + 'coalesce'; - var builtinConstants = ( - "true|false" - ); + var dataTypes = + 'int|int2|int4|int8|numeric|decimal|date|varchar|char|bigint|float|bool|bytea|text|timestamp|' + + 'time|money|real|integer'; - var builtinFunctions = ( - "avg|count|first|last|max|min|sum|upper|lower|substring|char_length|round|rank|now|" + - "coalesce" - ); + var keywordMapper = this.createKeywordMapper( + { + 'support.function': builtinFunctions, + keyword: keywords, + 'constant.language': builtinConstants, + 'storage.type': dataTypes, + }, + 'identifier', + true + ); - var dataTypes = ( - "int|int2|int4|int8|numeric|decimal|date|varchar|char|bigint|float|bool|bytea|text|timestamp|" + - "time|money|real|integer" - ); - - var keywordMapper = this.createKeywordMapper({ - "support.function": builtinFunctions, - "keyword": keywords, - "constant.language": builtinConstants, - "storage.type": dataTypes - }, "identifier", true); - - this.$rules = { - "start" : [ { - token : "comment", - regex : "--.*$" - }, { - token : "comment", - start : "/\\*", - end : "\\*/" - }, { - token : "string", // " string - regex : '".*?"' - }, { - token : "string", // ' string - regex : "'.*?'" - }, { - token : "constant.numeric", // float - regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" - }, { - token : keywordMapper, - regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" - }, { - token : "keyword.operator", - regex : "\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=" - }, { - token : "paren.lparen", - regex : "[\\(]" - }, { - token : "paren.rparen", - regex : "[\\)]" - }, { - token : "text", - regex : "\\s+" - } ] + this.$rules = { + start: [ + { + token: 'comment', + regex: '--.*$', + }, + { + token: 'comment', + start: '/\\*', + end: '\\*/', + }, + { + token: 'string', // " string + regex: '".*?"', + }, + { + token: 'string', // ' string + regex: "'.*?'", + }, + { + token: 'constant.numeric', // float + regex: '[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b', + }, + { + token: keywordMapper, + regex: '[a-zA-Z_$][a-zA-Z0-9_$]*\\b', + }, + { + token: 'keyword.operator', + regex: '\\+|\\-|\\/|\\/\\/|%|<@>|@>|<@|&|\\^|~|<|>|<=|=>|==|!=|<>|=', + }, + { + token: 'paren.lparen', + regex: '[\\(]', + }, + { + token: 'paren.rparen', + regex: '[\\)]', + }, + { + token: 'text', + regex: '\\s+', + }, + ], + }; + this.normalizeRules(); }; - this.normalizeRules(); -}; -oop.inherits(SqlHighlightRules, TextHighlightRules); + oop.inherits(SqlHighlightRules, TextHighlightRules); -exports.SqlHighlightRules = SqlHighlightRules; -}); + exports.SqlHighlightRules = SqlHighlightRules; + } +); -ace.define("ace/mode/sql",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sql_highlight_rules"], function(require, exports, module) { -"use strict"; +ace.define( + 'ace/mode/sql', + ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/sql_highlight_rules'], + function(require, exports, module) { + 'use strict'; -var oop = require("../lib/oop"); -var TextMode = require("./text").Mode; -var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; + var oop = require('../lib/oop'); + var TextMode = require('./text').Mode; + var SqlHighlightRules = require('./sql_highlight_rules').SqlHighlightRules; -var Mode = function() { - this.HighlightRules = SqlHighlightRules; - this.$behaviour = this.$defaultBehaviour; -}; -oop.inherits(Mode, TextMode); + var Mode = function() { + this.HighlightRules = SqlHighlightRules; + this.$behaviour = this.$defaultBehaviour; + }; + oop.inherits(Mode, TextMode); -(function() { + (function() { + this.lineCommentStart = '--'; - this.lineCommentStart = "--"; + this.$id = 'ace/mode/sql'; + }.call(Mode.prototype)); - this.$id = "ace/mode/sql"; -}).call(Mode.prototype); - -exports.Mode = Mode; - -}); + exports.Mode = Mode; + } +); diff --git a/public/app/plugins/panel/graph/jquery.flot.events.ts b/public/app/plugins/panel/graph/jquery.flot.events.ts index 6778d5c4f25..0fabcb1da12 100644 --- a/public/app/plugins/panel/graph/jquery.flot.events.ts +++ b/public/app/plugins/panel/graph/jquery.flot.events.ts @@ -616,7 +616,6 @@ export class EventMarkers { /** @ngInject */ export function init(this: any, plot: any) { - /*jshint validthis:true */ const that = this; const eventMarkers = new EventMarkers(plot); diff --git a/public/e2e-tests/tsconfig.json b/public/e2e-tests/tsconfig.json index 16a454e8e62..f1cce18f82a 100644 --- a/public/e2e-tests/tsconfig.json +++ b/public/e2e-tests/tsconfig.json @@ -1,7 +1,7 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { "types": ["cypress"] }, + "extends": "../../tsconfig.json", "include": ["**/*.ts", "../../packages/grafana-e2e/cypress/support/index.d.ts"] } diff --git a/public/test/mocks/dashboard-mock.js b/public/test/mocks/dashboard-mock.js index 9b61108728e..928c89203ff 100644 --- a/public/test/mocks/dashboard-mock.js +++ b/public/test/mocks/dashboard-mock.js @@ -1,26 +1,25 @@ -define([], - function() { +define([], function() { 'use strict'; return { create: function() { return { - title: "", + title: '', tags: [], - style: "dark", + style: 'dark', timezone: 'browser', editable: true, failover: false, panel_hints: true, rows: [], - pulldowns: [ { type: 'templating' }, { type: 'annotations' } ], - nav: [ { type: 'timepicker' } ], - time: {from: 'now-6h', to: 'now'}, + pulldowns: [{ type: 'templating' }, { type: 'annotations' }], + nav: [{ type: 'timepicker' }], + time: { from: 'now-6h', to: 'now' }, templating: { - list: [] + list: [], }, refresh: '10s', }; - } + }, }; }); diff --git a/scripts/cli/tsconfig.json b/scripts/cli/tsconfig.json index babab880588..bee56f77ed8 100644 --- a/scripts/cli/tsconfig.json +++ b/scripts/cli/tsconfig.json @@ -1,6 +1,6 @@ { - "extends": "../../tsconfig.json", "compilerOptions": { "module": "commonjs" - } + }, + "extends": "../../tsconfig.json" } diff --git a/scripts/grunt/default_task.js b/scripts/grunt/default_task.js index 7201bea842b..c5433edcb19 100644 --- a/scripts/grunt/default_task.js +++ b/scripts/grunt/default_task.js @@ -11,7 +11,7 @@ module.exports = function(grunt) { // prettier-ignore grunt.registerTask('test', [ 'sasslint', - 'tslint', + 'eslint', 'typecheck', 'exec:jest', 'no-only-tests', @@ -19,9 +19,9 @@ module.exports = function(grunt) { ]); // prettier-ignore - grunt.registerTask('tslint', [ - 'newer:exec:tslintPackages', - 'newer:exec:tslintRoot' + grunt.registerTask('eslint', [ + 'newer:exec:eslintPackages', + 'newer:exec:eslintRoot' ]); // prettier-ignore diff --git a/scripts/grunt/options/exec.js b/scripts/grunt/options/exec.js index 0acb2cd661c..527f6721b0e 100644 --- a/scripts/grunt/options/exec.js +++ b/scripts/grunt/options/exec.js @@ -2,24 +2,19 @@ module.exports = function(config, grunt) { 'use strict'; return { - tslintPackages: { - command: 'yarn workspaces run tslint', - src: ['packages/**/*.ts*'], + eslintPackages: { + command: 'yarn packages:lint', }, - tslintRoot: { - command: 'yarn run tslint', - src: ['public/app/**/*.ts*'], + eslintRoot: { + command: 'yarn lint', }, typecheckPackages: { - command: 'yarn workspaces run typecheck', - src: ['packages/**/*.ts*'], + command: 'yarn packages:typecheck', }, typecheckRoot: { - command: 'yarn run typecheck', - src: ['public/app/**/*.ts*'], + command: 'yarn typecheck', }, - jest: 'yarn run jest-ci', - webpack: - 'node ./node_modules/webpack/bin/webpack.js --config scripts/webpack/webpack.prod.js', + jest: 'yarn jest-ci', + webpack: 'node ./node_modules/webpack/bin/webpack.js --config scripts/webpack/webpack.prod.js', }; }; diff --git a/scripts/webpack/webpack.dev.js b/scripts/webpack/webpack.dev.js index 56bf53ad06d..3489a88ba60 100644 --- a/scripts/webpack/webpack.dev.js +++ b/scripts/webpack/webpack.dev.js @@ -69,10 +69,10 @@ module.exports = (env = {}) => }, }, { - loader: 'tslint-loader', + loader: 'eslint-loader', options: { - emitErrors: true, - typeCheck: false, + emitError: true, + emitWarning: true, }, }, ], diff --git a/scripts/webpack/webpack.prod.js b/scripts/webpack/webpack.prod.js index 035895e6add..8630974777b 100644 --- a/scripts/webpack/webpack.prod.js +++ b/scripts/webpack/webpack.prod.js @@ -62,11 +62,11 @@ module.exports = merge(common, { }, }, { - loader: 'tslint-loader', + loader: 'eslint-loader', options: { - emitErrors: true, - typeCheck: false, - }, + emitError: true, + emitWarning: true, + } }, ], }, diff --git a/tsconfig.json b/tsconfig.json index 7b2c2a8f0c4..6882432e18c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,46 +1,15 @@ { "compilerOptions": { - "moduleResolution": "node", + "baseUrl": "public/", "outDir": "public/dist", - "target": "es5", - "lib": ["es2019", "dom"], - "rootDirs": ["public/"], - "jsx": "react", - "module": "esnext", - "declaration": false, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "importHelpers": true, - "noEmitHelpers": true, - "removeComments": false, - "inlineSourceMap": false, - "sourceMap": true, - "noEmitOnError": false, - "emitDecoratorMetadata": false, - "experimentalDecorators": true, - "strictNullChecks": false, - "noImplicitReturns": true, - "noImplicitThis": true, - "noImplicitUseStrict": false, - "noImplicitAny": true, - "downlevelIteration": true, - "noUnusedLocals": true, - "baseUrl": "public", - "pretty": true, - "typeRoots": ["node_modules/@types", "public/app/types"], "paths": { - "app": ["app"], - "sass": ["sass"], - "@grafana/slate-react": ["../node_modules/@types/slate-react"] + "@grafana/slate-react": ["../node_modules/@types/slate-react"], + "app": ["app/"], + "sass": ["sass/"] }, - "skipLibCheck": true + "rootDirs": ["public/"], + "typeRoots": ["node_modules/@types", "public/app/types"] }, - "include": [ - "public/app/**/*.ts", - "public/app/**/*.tsx", - "public/test/**/*.ts", - "public/vendor/**/*.ts", - "public/e2e-test/**/*.ts" - ] + "extends": "@grafana/tsconfig/base.json", + "include": ["public/app/**/*.ts*", "public/e2e-test/**/*.ts", "public/test/**/*.ts", "public/vendor/**/*.ts"] } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 472d74b1b3c..00000000000 --- a/tslint.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "rules": { - "array-type": [true, "array-simple"], - "arrow-return-shorthand": true, - "ban": [ - true, - { "name": "Array", "message": "tsstyle#array-constructor" } - // { "name": "moment", "message": "Use 'dateTime' instead." } - ], - "ban-types": [ - true, - ["Object", "Use {} instead."], - ["String", "Use 'string' instead."], - ["Number", "Use 'number' instead."], - ["Boolean", "Use 'boolean' instead."], - ["Moment", "Use 'DateTime' instead."] - ], - "interface-name": [true, "never-prefix"], - "no-string-throw": true, - "no-unused-expression": true, - "no-unused-variable": false, - "no-use-before-declare": false, - "no-duplicate-variable": true, - "curly": true, - "class-name": true, - "semicolon": [true, "always", "ignore-bound-class-methods"], - "triple-equals": [true, "allow-null-check"], - "comment-format": [false, "check-space"], - "eofline": true, - "forin": false, - "indent": [true, "spaces", 2], - "jsdoc-format": true, - "label-position": true, - "max-line-length": [true, 150], - "member-access": [true, "no-public"], - "new-parens": true, - "no-angle-bracket-type-assertion": true, - "no-arg": true, - "no-bitwise": false, - "no-conditional-assignment": true, - "no-console": [true, "debug", "info", "time", "timeEnd", "trace"], - "no-construct": true, - "no-debugger": true, - "no-empty": false, - "no-eval": true, - "no-inferrable-types": true, - "no-namespace": [true, "allow-declarations"], - "no-reference": true, - "no-shadowed-variable": false, - "no-string-literal": false, - "no-switch-case-fall-through": false, - "no-trailing-whitespace": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [true, "check-open-brace", "check-catch", "check-else"], - "only-arrow-functions": [true, "allow-declarations", "allow-named-functions"], - "prefer-const": true, - "radix": true, - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "variable-name": [ - true, - "check-format", - "ban-keywords", - "allow-leading-underscore", - "allow-trailing-underscore", - "allow-pascal-case" - ], - "use-isnan": true, - "whitespace": [true, "check-branch", "check-decl", "check-type", "check-preblock"], - "import-blacklist": [true, "moment"] - } -} diff --git a/yarn.lock b/yarn.lock index a67f3353d55..081950a698d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2701,6 +2701,11 @@ unique-filename "^1.1.1" which "^1.3.1" +"@grafana/eslint-config@^1.0.0-rc1": + version "1.0.0-rc1" + resolved "https://registry.yarnpkg.com/@grafana/eslint-config/-/eslint-config-1.0.0-rc1.tgz#3b0a1abddfea900a57abc9526ad31abb1da2d42c" + integrity sha512-xmcJR6mUYw1llq3m8gT2kE7xoq6yLMUgNf2Mf1yZvDCx2cXFSyaLlGs1dqjFWjJDbV46GdhYRAyRbyGR+J9QKg== + "@grafana/slate-react@0.22.9-grafana": version "0.22.9-grafana" resolved "https://registry.yarnpkg.com/@grafana/slate-react/-/slate-react-0.22.9-grafana.tgz#07f35f0ffc018f616b9f82fa6e5ba65fae75c6a0" @@ -2723,6 +2728,11 @@ tiny-invariant "^1.0.1" tiny-warning "^0.0.3" +"@grafana/tsconfig@^1.0.0-rc1": + version "1.0.0-rc1" + resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-1.0.0-rc1.tgz#d07ea16755a50cae21000113f30546b61647a200" + integrity sha512-nucKPGyzlSKYSiJk5RA8GzMdVWhdYNdF+Hh65AXxjD9PlY69JKr5wANj8bVdQboag6dgg0BFKqgKPyY+YtV4Iw== + "@icons/material@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" @@ -4689,6 +4699,11 @@ "@types/cheerio" "*" "@types/react" "*" +"@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/eslint@*": version "6.1.2" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-6.1.2.tgz#297ece0f3815f93d699b18bdade5e6bee747284f" @@ -4894,6 +4909,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + "@types/lodash@4.14.123": version "4.14.123" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" @@ -5421,6 +5441,49 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@2.19.0": + version "2.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.19.0.tgz#bf743448a4633e4b52bee0c40148ba072ab3adbd" + integrity sha512-u7IcQ9qwsB6U806LupZmINRnQjC+RJyv36sV/ugaFWMHTbFm/hlLTRx3gGYJgHisxcGSTnf+I/fPDieRMhPSQQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.19.0" + eslint-utils "^1.4.3" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.19.0": + version "2.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.19.0.tgz#d5ca732f22c009e515ba09fcceb5f2127d841568" + integrity sha512-zwpg6zEOPbhB3+GaQfufzlMUOO6GXCNZq6skk+b2ZkZAIoBhVoanWK255BS1g5x9bMwHpLhX0Rpn5Fc3NdCZdg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.19.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@2.19.0": + version "2.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.19.0.tgz#912160d9425395d09857dcd5382352bc98be11ae" + integrity sha512-s0jZoxAWjHnuidbbN7aA+BFVXn4TCcxEVGPV8lWMxZglSs3NRnFFAlL+aIENNmzB2/1jUJuySi6GiM6uACPmpg== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.19.0" + "@typescript-eslint/typescript-estree" "2.19.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.19.0": + version "2.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.19.0.tgz#6bd7310b9827e04756fe712909f26956aac4b196" + integrity sha512-n6/Xa37k0jQdwpUszffi19AlNbVCR0sdvCs3DmSKMD7wBttKY31lhD2fug5kMD91B2qW4mQldaTEc1PEzvGu8w== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -5819,6 +5882,16 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -6157,6 +6230,15 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + array-tree-filter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" @@ -7277,11 +7359,6 @@ buffer@^5.1.0: base64-js "^1.0.2" ieee754 "^1.1.4" -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-modules@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -8088,7 +8165,7 @@ command-line-usage@5.0.5: table-layout "^0.4.3" typical "^2.6.1" -commander@2, commander@^2.12.1, commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@^2.9.0: +commander@2, commander@^2.14.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, 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== @@ -8137,6 +8214,11 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +comment-parser@^0.7.0, comment-parser@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.2.tgz#baf6d99b42038678b81096f15b630d18142f4b8a" + integrity sha512-4Rjb1FnxtOcv9qsfuaNuVsmmVn4ooVoBHzYfyKteiXwIU84PClyGA5jASoFMwPV93+FPh9spwueXauxFJZkGAg== + common-tags@1.8.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -9707,6 +9789,13 @@ doctrine@^1.2.2: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -10350,6 +10439,88 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-config-prettier@6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz#7b15e303bf9c956875c948f6b21500e48ded6a7f" + integrity sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg== + dependencies: + get-stdin "^6.0.0" + +eslint-config-prettier@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9" + integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ== + dependencies: + get-stdin "^6.0.0" + +eslint-loader@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-3.0.3.tgz#e018e3d2722381d982b1201adb56819c73b480ca" + integrity sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw== + dependencies: + fs-extra "^8.1.0" + loader-fs-cache "^1.0.2" + loader-utils "^1.2.3" + object-hash "^2.0.1" + schema-utils "^2.6.1" + +eslint-plugin-jsdoc@18.4.1: + version "18.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-18.4.1.tgz#f59089394ca64cd1d932812c2c84e03b3f868524" + integrity sha512-JyGUby6EPpyjfGBpTy3VRfG8yfJOjFc+l6GbusHVRludgrHsJpR105bm9IBv2s0mI6AxC8/r+Ec7kBubmDugTg== + dependencies: + comment-parser "^0.7.0" + debug "^4.1.1" + jsdoctypeparser "^6.0.0" + lodash "^4.17.15" + object.entries-ponyfill "^1.0.1" + regextras "^0.6.1" + semver "^6.3.0" + spdx-expression-parse "^3.0.0" + +eslint-plugin-jsdoc@21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-21.0.0.tgz#36bc215c5d22b320312a633dda6dfe81c34393af" + integrity sha512-CdLGe2oyw5YAX9rxq9bVz7H2PK+r8PVwdGuvYGMBstpbVD/66yUAgRFQRsJwAsRKLmReo58Lw1jFdNcxdOc4eg== + dependencies: + comment-parser "^0.7.2" + debug "^4.1.1" + jsdoctypeparser "^6.1.0" + lodash "^4.17.15" + regextras "^0.7.0" + semver "^6.3.0" + spdx-expression-parse "^3.0.0" + +eslint-plugin-prettier@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" + integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-prettier@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" + integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-react@7.18.3: + version "7.18.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" + integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.14.2" + string.prototype.matchall "^4.0.2" + eslint-scope@^4.0.0, eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -10358,6 +10529,112 @@ eslint-scope@^4.0.0, eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + 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== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@6.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" + integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.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.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +eslint@6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.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.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + eslint@^2.7.0: version "2.13.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.13.1.tgz#e4cc8fa0f009fb829aaae23855a29360be1f6c11" @@ -10405,6 +10682,15 @@ espree@^3.1.6: acorn "^5.5.0" acorn-jsx "^3.0.0" +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + dependencies: + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" + esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -10427,6 +10713,13 @@ espurify@^1.6.0: dependencies: core-js "^2.0.0" +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -10439,7 +10732,7 @@ esrever@^0.2.0: resolved "https://registry.yarnpkg.com/esrever/-/esrever-0.2.0.tgz#96e9d28f4f1b1a76784cd5d490eaae010e7407b8" integrity sha1-lunSj08bGnZ4TNXUkOquAQ50B7g= -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -10755,6 +11048,16 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-diff@^1.1.2: + 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" @@ -10788,7 +11091,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -10915,6 +11218,13 @@ file-entry-cache@^1.1.1: flat-cache "^1.2.1" object-assign "^4.0.1" +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== + dependencies: + flat-cache "^2.0.1" + file-loader@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" @@ -11009,6 +11319,15 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -11116,6 +11435,15 @@ flat-cache@^1.2.1: rimraf "~2.6.2" write "^0.2.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== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flatbuffers@1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.11.0.tgz#90a47e584dd7851ad7a913f5a0ee99c1d76ce59f" @@ -11126,6 +11454,11 @@ flatstr@^1.0.4: resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -11435,6 +11768,11 @@ function.prototype.name@^1.1.0, function.prototype.name@^1.1.1: functions-have-names "^1.1.1" is-callable "^1.1.4" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + functions-have-names@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea" @@ -11744,6 +12082,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -11823,6 +12173,13 @@ globals@^11.1.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.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" + globals@^9.2.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -12729,7 +13086,7 @@ ignore@^3.1.2, ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -ignore@^4.0.3: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== @@ -12785,7 +13142,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.1.0: +import-fresh@^3.0.0, import-fresh@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -13564,6 +13921,11 @@ is-string@^1.0.4: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -14208,6 +14570,11 @@ jscodeshift@^0.7.0: temp "^0.8.1" write-file-atomic "^2.3.0" +jsdoctypeparser@^6.0.0, jsdoctypeparser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz#acfb936c26300d98f1405cb03e20b06748e512a8" + integrity sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA== + jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -14270,6 +14637,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -14367,6 +14739,14 @@ jstransformer@1.0.0: is-promise "^2.0.0" promise "^7.0.1" +jsx-ast-utils@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" + integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== + dependencies: + array-includes "^3.0.3" + object.assign "^4.1.0" + kew@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" @@ -14867,6 +15247,14 @@ load-json-file@^5.3.0: strip-bom "^3.0.0" type-fest "^0.3.0" +loader-fs-cache@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz#54cedf6b727e1779fd8f01205f05f6e88706f086" + integrity sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + loader-runner@^2.3.0, loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -16700,6 +17088,11 @@ object-hash@^1.1.8: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== +object-hash@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.1.tgz#cef18a0c940cc60aa27965ecf49b782cbf101d96" + integrity sha512-HgcGMooY4JC2PBt9sdUdJ6PMzpin+YtY3r/7wg0uTifP+HJWW8rammseSEHuyt0UeShI183UGssCJqm1bJR7QA== + object-inspect@^1.6.0, object-inspect@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -16737,6 +17130,11 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.entries-ponyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz#29abdf77cbfbd26566dd1aa24e9d88f65433d256" + integrity sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY= + object.entries@^1.0.4, object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" @@ -16747,6 +17145,16 @@ object.entries@^1.0.4, object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.entries@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" + integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + "object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" @@ -16757,6 +17165,16 @@ object.entries@^1.0.4, object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -16790,6 +17208,16 @@ object.values@^1.0.4, object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -16905,6 +17333,18 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + ora@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" @@ -17503,6 +17943,13 @@ pixelmatch@^5.0.2: dependencies: pngjs "^3.4.0" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -18432,6 +18879,13 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@1.19.1, prettier@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" @@ -18520,7 +18974,7 @@ progress@^1.1.8: resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= -progress@^2.0.1, progress@^2.0.3: +progress@^2.0.0, progress@^2.0.1, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -20000,6 +20454,16 @@ 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: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + regexpu-core@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" @@ -20012,6 +20476,16 @@ regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +regextras@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.6.1.tgz#9689641bbb338e0ff7001a5c507c6a2008df7b36" + integrity sha512-EzIHww9xV2Kpqx+corS/I7OBmf2rZ0pKKJPsw5Dc+l6Zq1TslDmtRIP9maVn3UH+72MIXmn8zzDgP07ihQogUA== + +regextras@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.0.tgz#2298bef8cfb92b1b7e3b9b12aa8f69547b7d71e4" + integrity sha512-ds+fL+Vhl918gbAUb0k2gVKbTZLsg84Re3DI6p85Et0U0tYME3hyW4nMK8Px4dtDaBA2qNjvG5uWyW7eK5gfmw== + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -20365,6 +20839,13 @@ resolve@^1.12.0: dependencies: path-parse "^1.0.6" +resolve@^1.14.2: + version "1.15.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" + integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + dependencies: + path-parse "^1.0.6" + resolve@~1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" @@ -20450,7 +20931,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, 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" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -20903,7 +21384,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.1.1, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -21258,6 +21739,15 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -21824,7 +22314,7 @@ string-width@^4.0.0, string-width@^4.1.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.2" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== @@ -22015,6 +22505,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + strip-json-comments@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" @@ -22218,6 +22713,16 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tapable@^1.0.0, tapable@^1.1.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -22831,7 +23336,7 @@ ts-pnp@^1.1.2: resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.4.tgz#ae27126960ebaefb874c6d7fa4729729ab200d90" integrity sha512-1J/vefLC+BWSo+qe8OnJQfWTYRS6ingxjwqmHMqaMxXMj7kFtKLgAaYW3JeX3mktjgUL+etlU8/B4VUAUI9QGw== -tslib@1.10.0, tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.10.0, tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== @@ -22841,56 +23346,7 @@ tslib@1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -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-loader@3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/tslint-loader/-/tslint-loader-3.5.4.tgz#052af7f0772434451ea1b247bb55407f878a4c40" - integrity sha512-jBHNNppXut6SgZ7CsTBh+6oMwVum9n8azbmcYSeMlsABhWWoHwjq631vIFXef3VSd75cCdX3rc6kstsB7rSVVw== - dependencies: - loader-utils "^1.0.2" - mkdirp "^0.5.1" - object-assign "^4.1.1" - rimraf "^2.4.4" - semver "^5.3.0" - -tslint-react@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.1.0.tgz#7153b724a8cfbea52423d0ffa469e8eba3bcc834" - integrity sha512-Y7CbFn09X7Mpg6rc7t/WPbmjx9xPI8p1RsQyiGCLWgDR6sh3+IBSlT+bEkc0PSZcWwClOkqq2wPsID8Vep6szQ== - 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.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.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== @@ -23474,7 +23930,7 @@ uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -v8-compile-cache@^2.0.2: +v8-compile-cache@^2.0.2, v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== @@ -24015,6 +24471,11 @@ wolfy87-eventemitter@~5.1.0: resolved "https://registry.yarnpkg.com/wolfy87-eventemitter/-/wolfy87-eventemitter-5.1.0.tgz#35c1ac0dd1ac0c15e35d981508fc22084a13a011" integrity sha1-NcGsDdGsDBXjXZgVCPwiCEoToBE= +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== + wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -24132,6 +24593,13 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" +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" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"