From fef54fae4bd70a8116dae2d74d58a5988cf6178c Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Fri, 6 Mar 2020 15:12:35 -0500 Subject: [PATCH] feat(linter): improve support for mixed linters when using IDEs (#2620) --- .prettierignore | 1 + package.json | 4 +- .../src/schematics/application/application.ts | 3 + .../angular/src/schematics/library/library.ts | 5 +- packages/workspace/migrations.json | 19 ++- .../{update-9-0-0.ts => update-9-1-0.ts} | 1 - .../update-9-1-0/update-lint-config.spec.ts | 120 ++++++++++++++++++ .../update-9-1-0/update-lint-config.ts | 56 ++++++++ .../src/schematics/library/library.spec.ts | 5 +- .../workspace/files/package.json__tmpl__ | 2 +- packages/workspace/src/utils/lint.ts | 10 ++ packages/workspace/src/utils/versions.ts | 2 +- yarn.lock | 110 ++++++++-------- 13 files changed, 276 insertions(+), 62 deletions(-) rename packages/workspace/src/migrations/update-9-1-0/{update-9-0-0.ts => update-9-1-0.ts} (99%) create mode 100644 packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts create mode 100644 packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts diff --git a/.prettierignore b/.prettierignore index 9420570be8..afc3674f98 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,7 @@ tmp node_modules /package.json packages/workspace/src/schematics/**/files/**/*.json +packages/workspace/src/core/dep-graph/vendor.js packages/web/src/schematics/**/files/**/*.json packages/node/src/schematics/**/files/**/*.json packages/express/src/schematics/**/files/**/*.json diff --git a/package.json b/package.json index b9c05e2d25..5198e86b5c 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "cz-customizable": "^6.2.0", "document-register-element": "^1.13.1", "dotenv": "6.2.0", - "eslint": "6.1.0", + "eslint": "6.8.0", "eslint-config-prettier": "6.0.0", "eslint-plugin-import": "^2.20.1", "eslint-plugin-jsx-a11y": "^6.2.3", @@ -223,7 +223,7 @@ "tsconfig-paths-webpack-plugin": "^3.2.0", "tsickle": "^0.37.0", "tslib": "^1.9.3", - "tslint": "5.11.0", + "tslint": "6.0.0", "typescript": "~3.7.4", "url-loader": "^3.0.0", "verdaccio": "^4.4.2", diff --git a/packages/angular/src/schematics/application/application.ts b/packages/angular/src/schematics/application/application.ts index ff407bbf18..4a148c7120 100644 --- a/packages/angular/src/schematics/application/application.ts +++ b/packages/angular/src/schematics/application/application.ts @@ -442,6 +442,9 @@ function updateLinting(options: NormalizedSchema): Rule { }), updateJsonInTree(`${options.appProjectRoot}/tslint.json`, json => { json.extends = `${offsetFromRoot(options.appProjectRoot)}tslint.json`; + json.linterOptions = { + exclude: ['!**/*'] + }; return json; }) ]); diff --git a/packages/angular/src/schematics/library/library.ts b/packages/angular/src/schematics/library/library.ts index 12bf261f0b..81c4a46590 100644 --- a/packages/angular/src/schematics/library/library.ts +++ b/packages/angular/src/schematics/library/library.ts @@ -379,7 +379,10 @@ function updateProject(options: NormalizedSchema): Rule { updateJsonInTree(`${options.projectRoot}/tslint.json`, json => { return { ...json, - extends: `${offsetFromRoot(options.projectRoot)}tslint.json` + extends: `${offsetFromRoot(options.projectRoot)}tslint.json`, + linterOptions: { + exclude: ['!**/*'] + } }; }), updateJsonInTree(`/nx.json`, json => { diff --git a/packages/workspace/migrations.json b/packages/workspace/migrations.json index 545a0b1fc6..ac2fa4fb17 100644 --- a/packages/workspace/migrations.json +++ b/packages/workspace/migrations.json @@ -57,8 +57,13 @@ }, "update-9-1-0": { "version": "9.1.0-beta.1", - "description": "Update prettier to 1.19.1 with support for typescript 3.7", - "factory": "./src/migrations/update-9-0-0/update-9-0-0" + "description": "Update prettier to 1.19.1 with support for typescript 3.7; Update eslint and tslint", + "factory": "./src/migrations/update-9-1-0/update-9-1-0" + }, + "update-lint-config-9-1-0": { + "version": "9.1.0-beta.1", + "description": "Update eslint and tslint config to provide better IDE support", + "factory": "./src/migrations/update-9-1-0/update-lint-config" } }, "packageJsonUpdates": { @@ -396,11 +401,17 @@ } } }, - "9.0.0": { - "version": "9.0.0-beta.1", + "9.1.0": { + "version": "9.1.0-beta.1", "packages": { + "eslint": { + "version": "6.8.0" + }, "prettier": { "version": "1.19.1" + }, + "tslint": { + "version": "6.0.0" } } } diff --git a/packages/workspace/src/migrations/update-9-1-0/update-9-0-0.ts b/packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts similarity index 99% rename from packages/workspace/src/migrations/update-9-1-0/update-9-0-0.ts rename to packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts index 8db16013f2..dfa4d0f016 100644 --- a/packages/workspace/src/migrations/update-9-1-0/update-9-0-0.ts +++ b/packages/workspace/src/migrations/update-9-1-0/update-9-1-0.ts @@ -6,7 +6,6 @@ const updatePackages = updatePackagesInPackageJson( join(__dirname, '../../../', 'migrations.json'), '9.1.0' ); - export default function() { return chain([updatePackages]); } diff --git a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts new file mode 100644 index 0000000000..b1c07810bb --- /dev/null +++ b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.spec.ts @@ -0,0 +1,120 @@ +import { chain, Tree } from '@angular-devkit/schematics'; +import { readJsonInTree, updateJsonInTree } from '@nrwl/workspace'; +import { createEmptyWorkspace } from '@nrwl/workspace/testing'; +import { callRule, runMigration } from '../../utils/testing'; +import { updateWorkspace } from '@nrwl/workspace/src/utils/workspace'; + +describe('Update 9.1.0', () => { + let tree: Tree; + + beforeEach(async () => { + tree = Tree.empty(); + tree = createEmptyWorkspace(tree); + }); + + it('should update tslint.json', async () => { + tree = await callRule( + chain([ + updateWorkspace(workspace => { + workspace.projects.add({ + name: 'proj1', + root: 'proj1', + architect: { + lint: { + builder: '@angular-devkit/build-angular:tslint' + } + } + }); + workspace.projects.add({ + name: 'proj2', + root: 'proj2', + architect: { + lint: { + builder: '@angular-devkit/build-angular:tslint' + } + } + }); + }), + updateJsonInTree('proj1/tslint.json', () => ({ + rules: {} + })), + updateJsonInTree('proj2/tslint.json', () => ({ + rules: {}, + linterOptions: { + exclude: ['whatever'] + } + })) + ]), + tree + ); + + const result = await runMigration('update-lint-config-9-1-0', {}, tree); + + expect(readJsonInTree(result, 'proj1/tslint.json')).toEqual({ + rules: {}, + linterOptions: { + exclude: ['!**/*'] + } + }); + + expect(readJsonInTree(result, 'proj2/tslint.json')).toEqual({ + rules: {}, + linterOptions: { + exclude: ['!**/*', 'whatever'] + } + }); + }); + + it('should update .eslintrc', async () => { + tree = await callRule( + chain([ + updateWorkspace(workspace => { + workspace.projects.add({ + name: 'proj1', + root: 'proj1', + architect: { + lint: { + builder: '@nrwl/linter:lint', + options: { + config: 'proj1/.eslintrc' + } + } + } + }); + workspace.projects.add({ + name: 'proj2', + root: 'proj2', + architect: { + lint: { + builder: '@nrwl/linter:lint', + options: { + config: 'proj2/.eslintrc' + } + } + } + }); + }), + updateJsonInTree('proj1/.eslintrc', () => ({ + rules: {} + })), + updateJsonInTree('proj2/.eslintrc', () => ({ + rules: {}, + ignorePatterns: ['whatever'] + })) + ]), + tree + ); + + const result = await runMigration('update-lint-config-9-1-0', {}, tree); + + expect(readJsonInTree(result, 'proj1/.eslintrc')).toEqual({ + rules: {}, + ignorePatterns: ['!**/*'] + }); + + expect(readJsonInTree(result, 'proj2/.eslintrc')).toEqual({ + rules: {}, + ignorePatterns: ['!**/*', 'whatever'] + }); + }); +}); diff --git a/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts new file mode 100644 index 0000000000..8badbc7406 --- /dev/null +++ b/packages/workspace/src/migrations/update-9-1-0/update-lint-config.ts @@ -0,0 +1,56 @@ +import { SchematicContext, Tree } from '@angular-devkit/schematics'; +import { readWorkspace, updateJsonInTree } from '@nrwl/workspace'; + +function updateLintConfigurations(host: Tree, context: SchematicContext) { + const workspaceJson = readWorkspace(host); + Object.values(workspaceJson.projects).forEach((config: any) => { + if (!config.architect || !config.architect.lint) return; + if (config.architect.lint.builder === '@nrwl/linter:lint') { + updateJson( + json => { + // Prefix it so that previously ignored files will override the whitelist. + json.ignorePatterns = ['!**/*', ...(json.ignorePatterns || [])]; + return json; + }, + config.architect.lint.options.config, + host, + context + ); + } + if ( + config.architect.lint.builder === '@angular-devkit/build-angular:tslint' + ) { + updateJson( + json => { + json.linterOptions = { + ...json.linterOptions, + // Prefix it so that previously ignored files will override the whitelist. + exclude: [ + '!**/*', + ...((json.linterOptions && json.linterOptions.exclude) || []) + ] + }; + return json; + }, + `${config.root}/tslint.json`, + host, + context + ); + } + }); +} + +function updateJson(visitor, path, host, context) { + try { + if (host.exists(path)) { + // In case tslint.json does not exist we don't want to create it. + updateJsonInTree(path, visitor)(host, context); + } + } catch { + context.logger.warn(`Could not update ${path}`); + } +} + +export default function() { + return updateLintConfigurations; +} diff --git a/packages/workspace/src/schematics/library/library.spec.ts b/packages/workspace/src/schematics/library/library.spec.ts index 6bf70190fe..38a742ffc3 100644 --- a/packages/workspace/src/schematics/library/library.spec.ts +++ b/packages/workspace/src/schematics/library/library.spec.ts @@ -222,7 +222,10 @@ describe('lib', () => { const tslintJson = readJsonInTree(tree, 'libs/my-dir/my-lib/tslint.json'); expect(tslintJson).toEqual({ extends: '../../../tslint.json', - rules: {} + rules: {}, + linterOptions: { + exclude: ['!**/*'] + } }); }); }); diff --git a/packages/workspace/src/schematics/workspace/files/package.json__tmpl__ b/packages/workspace/src/schematics/workspace/files/package.json__tmpl__ index 9337b69646..62df7f9d8d 100644 --- a/packages/workspace/src/schematics/workspace/files/package.json__tmpl__ +++ b/packages/workspace/src/schematics/workspace/files/package.json__tmpl__ @@ -44,7 +44,7 @@ "@types/node": "~8.9.4", "dotenv": "6.2.0", "ts-node": "~7.0.0", - "tslint": "~5.11.0", + "tslint": "~6.0.0", "eslint": "<%= eslintVersion %>", "typescript": "<%= typescriptVersion %>", "prettier": "<%= prettierVersion %>" diff --git a/packages/workspace/src/utils/lint.ts b/packages/workspace/src/utils/lint.ts index 989c777cd9..8baf26ddd3 100644 --- a/packages/workspace/src/utils/lint.ts +++ b/packages/workspace/src/utils/lint.ts @@ -80,6 +80,10 @@ export function addLintFiles( join(projectRoot as any, `tslint.json`), JSON.stringify({ extends: `${offsetFromRoot(projectRoot)}tslint.json`, + // Include project files to be linted since the global one excludes all files. + linterOptions: { + exclude: ['!**/*'] + }, rules: {} }) ); @@ -134,6 +138,8 @@ export function addLintFiles( rules: {} }; } + // Include all project files to be linted (since they are turned off in the root eslintrc file). + configJson.ignorePatterns = ['!**/*']; host.create( join(projectRoot as any, `.eslintrc`), JSON.stringify(configJson) @@ -149,6 +155,9 @@ export function addLintFiles( const globalTsLint = ` { "rulesDirectory": ["node_modules/@nrwl/workspace/src/tslint"], + "linterOptions": { + "exclude": ["**/*"] + }, "rules": { "arrow-return-shorthand": true, "callable-types": true, @@ -220,6 +229,7 @@ const globalESLint = ` "sourceType": "module", "project": "./tsconfig.json" }, + "ignorePatterns": ["**/*"], "plugins": ["@typescript-eslint", "@nrwl/nx"], "extends": [ 'eslint:recommended', diff --git a/packages/workspace/src/utils/versions.ts b/packages/workspace/src/utils/versions.ts index 914cb54698..f8405683b8 100644 --- a/packages/workspace/src/utils/versions.ts +++ b/packages/workspace/src/utils/versions.ts @@ -4,5 +4,5 @@ export const angularCliVersion = '9.0.1'; export const typescriptVersion = '~3.7.4'; export const prettierVersion = '1.19.1'; export const typescriptESLintVersion = '2.19.2'; -export const eslintVersion = '6.1.0'; +export const eslintVersion = '6.8.0'; export const eslintConfigPrettierVersion = '6.0.0'; diff --git a/yarn.lock b/yarn.lock index 2d9ebab05d..f84d0b30b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5126,10 +5126,10 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== acorn-walk@^6.0.1: version "6.2.0" @@ -9629,11 +9629,6 @@ diff-sequences@^25.1.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw== -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -10366,13 +10361,6 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== - dependencies: - eslint-visitor-keys "^1.0.0" - eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" @@ -10380,15 +10368,15 @@ eslint-utils@^1.4.3: dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.1.0: 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.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" - integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== +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" @@ -10397,19 +10385,19 @@ eslint@6.1.0: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.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 "^11.7.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.4.1" + inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" @@ -10418,7 +10406,7 @@ eslint@6.1.0: minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" + optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" @@ -10428,13 +10416,13 @@ eslint@6.1.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" - integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== +espree@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.0.tgz#349fef01a202bbab047748300deb37fa44da79d7" + integrity sha512-Xs8airJ7RQolnDIbLtRutmfvSsAe0xqMMAantCN/GMoqf81TFbeI1T7Jpd56qYu1uuh32dOG5W/X9uO+ghPXzA== dependencies: - acorn "^7.0.0" - acorn-jsx "^5.0.2" + acorn "^7.1.0" + acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^3.1.3: @@ -10782,7 +10770,7 @@ fast-json-stable-stringify@2.0.0, fast-json-stable-stringify@2.x, fast-json-stab 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= @@ -11647,11 +11635,18 @@ global@^4.3.2, global@^4.4.0: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.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.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -12606,7 +12601,7 @@ inquirer@7.0.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^6.3.1, inquirer@^6.4.1: +inquirer@^6.3.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -14118,7 +14113,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@3.13.1, js-yaml@^3.13.1, js-yaml@^3.9.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -16653,7 +16648,7 @@ optional@0.1.4: resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3" integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw== -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -16665,6 +16660,18 @@ optionator@^0.8.1, optionator@^0.8.2: 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@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" @@ -21764,7 +21771,7 @@ tsickle@^0.37.0: mkdirp "^0.5.1" source-map "^0.7.3" -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.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== @@ -21774,30 +21781,31 @@ tslib@^1.10.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== -tslint@5.11.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" - integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0= +tslint@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.0.0.tgz#1c0148beac4779924216302f192cdaa153618310" + integrity sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" - js-yaml "^3.7.0" + 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.27.2" + tslib "^1.10.0" + tsutils "^2.29.0" tsscmp@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA== -tsutils@^2.27.2: +tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== @@ -21855,7 +21863,7 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.0: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== @@ -22814,7 +22822,7 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -word-wrap@^1.0.3, word-wrap@^1.2.3: +word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==