From 2289da63da67a96b0d06af4b1a06bac722d24874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Thu, 12 Dec 2019 22:55:56 +0700 Subject: [PATCH 01/18] chore: switch from Travis CI to GitHub Actions --- .github/workflows/main.yml | 127 +++++++++++++++++++++++++++++++++++++ .travis.yml | 36 ----------- 2 files changed, 127 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/main.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..566955fd --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,127 @@ +name: CI/CD +on: [push, pull_request] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build project + run: yarn build + + - name: Upload build artifact + uses: actions/upload-artifact@v1 + with: + name: lib + path: lib + + test: + runs-on: ${{ matrix.os }} + needs: build + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + # - windows-latest # to be uncommented when we drop multi-process mode + node: + - '8' + - '10' + - '12' + packages: + - webpack@^5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4 + - webpack@^4.0.0 ts-loader@^5.0.0 vue-loader@^15.2.4 + - webpack@^3.10.0 ts-loader@^3.4.0 vue-loader@^13.5.0 + - webpack@^2.7.0 ts-loader@^3.4.0 vue-loader@^13.5.0 + + steps: + - uses: actions/checkout@v1 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-node-${{ matrix.node }}-yarn- + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Replace dependencies + run: yarn add ${{ matrix.packages }} -D + + - name: Download build artifact + uses: actions/download-artifact@v1 + with: + name: lib + + - name: Run unit tests + run: yarn test:unit + + - name: Run integration tests + run: yarn test:integration + + release: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + needs: [build, test] + if: github.event_name == 'pull_request' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta') + steps: + - uses: actions/checkout@v1 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 12 + + - name: Get yarn cache + id: yarn-cache + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.yarn-cache.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Download build artifact + uses: actions/download-artifact@v1 + with: + name: lib + + - name: Release + run: yarn exec semantic-release diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index bd9b779a..00000000 --- a/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -os: - - linux - - osx - -language: node_js -node_js: - - 12 - - 10 - - 8 - -install: - - yarn install --frozen-lockfile - - yarn build - - yarn add $WEBPACK $TSLOADER $VUELOADER -D - -script: - - yarn test - -env: - - WEBPACK=webpack@^5.0.0-alpha.5 TSLOADER=ts-loader@^5.0.0 VUELOADER=vue-loader@^15.2.4 - - WEBPACK=webpack@^4.0.0 TSLOADER=ts-loader@^5.0.0 VUELOADER=vue-loader@^15.2.4 - - WEBPACK=webpack@^3.10.0 TSLOADER=ts-loader@^3.4.0 VUELOADER=vue-loader@^13.5.0 - - WEBPACK=webpack@^2.7.0 TSLOADER=ts-loader@^3.4.0 VUELOADER=vue-loader@^13.5.0 - -jobs: - include: - - stage: release - node_js: 12 - script: skip - deploy: - provider: script - skip_cleanup: true - script: - - yarn exec semantic-release - on: - all_branches: true From 92bf08a96683de71a1eff8f918f35ca105470a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sat, 14 Dec 2019 09:52:52 +0700 Subject: [PATCH 02/18] chore: trigger release on push event --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 566955fd..cca98354 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -95,7 +95,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} needs: [build, test] - if: github.event_name == 'pull_request' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta') + if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta') steps: - uses: actions/checkout@v1 From de9597efce410c659516cf26fd46adf13d0b12e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sat, 14 Dec 2019 11:12:18 +0700 Subject: [PATCH 03/18] chore: update GitHub token in the release job --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cca98354..fc50df2f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -92,7 +92,7 @@ jobs: release: runs-on: ubuntu-latest env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.GH_PERSONAL_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} needs: [build, test] if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/beta') From e015a32d7cd7c39e539a078f142f8ad42261954b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sat, 14 Dec 2019 18:51:45 +0700 Subject: [PATCH 04/18] docs: change badge from Travis CI to GitHub Actions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2da86cb9..eb81c03b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![npm version](https://img.shields.io/npm/v/fork-ts-checker-webpack-plugin.svg)](https://www.npmjs.com/package/fork-ts-checker-webpack-plugin) [![npm beta version](https://img.shields.io/npm/v/fork-ts-checker-webpack-plugin/beta.svg)](https://www.npmjs.com/package/fork-ts-checker-webpack-plugin) -[![build status](https://travis-ci.org/TypeStrong/fork-ts-checker-webpack-plugin.svg?branch=master)](https://travis-ci.org/TypeStrong/fork-ts-checker-webpack-plugin) +[![build status](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/workflows/CI/CD/badge.svg?branch=master&event=push)](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/actions?query=branch%3Amaster+event%3Apush) [![downloads](http://img.shields.io/npm/dm/fork-ts-checker-webpack-plugin.svg)](https://npmjs.org/package/fork-ts-checker-webpack-plugin) [![commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier) From 6423d3d3f8fc7bff09ec971e09d84347fc040990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 10 Dec 2019 16:49:51 +0700 Subject: [PATCH 05/18] feat: re-design `NormalizedMessage` and `Formatter` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch from class based `NormalizedMessage` to plain object `Issue` to improve code quality. All added files are 100% covered by tests. BREAKING CHANGE 🧨 Removed `colors` option from the plugin settings, BREAKING CHANGE 🧨 Changed type from NormalizedType to Issue which is used by plugin hooks and formatters, BREAKING CHANGE 🧨 Formatter will not receive second argument `useColors` - it should be handled automatically by the formatter (for example by using `chalk`) --- .github/workflows/main.yml | 2 +- README.md | 7 +- package.json | 6 +- src/ApiIncrementalChecker.ts | 68 +- src/FilesRegister.ts | 9 +- src/FilesWatcher.ts | 2 +- src/IncrementalChecker.ts | 82 +- src/IncrementalCheckerInterface.ts | 26 +- src/Message.ts | 6 +- src/NormalizedMessage.ts | 185 --- src/NormalizedMessageFactories.ts | 97 -- src/cluster.ts | 16 +- src/createEslinter.ts | 31 +- src/formatter/CodeframeFormatter.ts | 78 ++ src/formatter/DefaultFormatter.ts | 35 + src/formatter/Formatter.ts | 5 + src/formatter/FormatterFactory.ts | 36 + src/formatter/InternalFormatter.ts | 34 + src/formatter/RawFormatter.ts | 13 + src/formatter/codeframeFormatter.ts | 72 -- src/formatter/defaultFormatter.ts | 41 - src/formatter/index.ts | 6 + src/index.ts | 147 +-- src/issue/Issue.ts | 87 ++ src/issue/IssueOrigin.ts | 31 + src/issue/IssueSeverity.ts | 26 + src/issue/eslint/EsLintIssueFactory.ts | 68 ++ src/issue/eslint/FileAwareEsLintMessage.ts | 12 + src/issue/eslint/index.ts | 2 + src/issue/index.ts | 8 + src/issue/internal/InternalIssueFactory.ts | 16 + src/issue/internal/index.ts | 1 + src/issue/tslint/TsLintIssueFactory.ts | 32 + src/issue/tslint/index.ts | 1 + .../typescript/TypeScriptIssueFactory.ts | 72 ++ src/issue/typescript/index.ts | 1 + src/linterConfigHelpers.ts | 12 +- src/service.ts | 30 +- test/unit/NormalizedMessage.spec.js | 226 ---- test/unit/codeframeFormatter.spec.js | 110 -- test/unit/defaultFormatter.spec.js | 45 - .../unit/formatter/CodeframeFormatter.spec.js | 99 ++ test/unit/formatter/DefaultFormatter.spec.js | 54 + test/unit/formatter/FormatterFactory.spec.js | 92 ++ test/unit/formatter/InternalFormatter.spec.js | 64 + test/unit/formatter/RawFormatter.spec.js | 36 + test/unit/formatter/__mocks__/chalk.js | 107 ++ test/unit/issue/Issue.spec.js | 363 ++++++ test/unit/issue/IssueOrigin.spec.js | 58 + test/unit/issue/IssueSeverity.spec.js | 40 + .../__snapshots__/IssueOrigin.spec.js.snap | 10 + .../__snapshots__/IssueSeverity.spec.js.snap | 8 + .../issue/eslint/EsLintIssueFactory.spec.js | 71 ++ .../EsLintIssueFactory.spec.js.snap | 33 + .../internal/InternalIssueFactory.spec.js | 31 + .../InternalIssueFactory.spec.js.snap | 31 + .../issue/tslint/TsLintIssueFactory.spec.js | 49 + .../TsLintIssueFactory.spec.js.snap | 48 + .../typescript/TypeScriptIssueFactory.spec.js | 85 ++ .../TypeScriptIssueFactory.spec.js.snap | 94 ++ yarn.lock | 1056 +++++++++++++---- 61 files changed, 2944 insertions(+), 1269 deletions(-) delete mode 100644 src/NormalizedMessage.ts delete mode 100644 src/NormalizedMessageFactories.ts create mode 100644 src/formatter/CodeframeFormatter.ts create mode 100644 src/formatter/DefaultFormatter.ts create mode 100644 src/formatter/Formatter.ts create mode 100644 src/formatter/FormatterFactory.ts create mode 100644 src/formatter/InternalFormatter.ts create mode 100644 src/formatter/RawFormatter.ts delete mode 100644 src/formatter/codeframeFormatter.ts delete mode 100644 src/formatter/defaultFormatter.ts create mode 100644 src/formatter/index.ts create mode 100644 src/issue/Issue.ts create mode 100644 src/issue/IssueOrigin.ts create mode 100644 src/issue/IssueSeverity.ts create mode 100644 src/issue/eslint/EsLintIssueFactory.ts create mode 100644 src/issue/eslint/FileAwareEsLintMessage.ts create mode 100644 src/issue/eslint/index.ts create mode 100644 src/issue/index.ts create mode 100644 src/issue/internal/InternalIssueFactory.ts create mode 100644 src/issue/internal/index.ts create mode 100644 src/issue/tslint/TsLintIssueFactory.ts create mode 100644 src/issue/tslint/index.ts create mode 100644 src/issue/typescript/TypeScriptIssueFactory.ts create mode 100644 src/issue/typescript/index.ts delete mode 100644 test/unit/NormalizedMessage.spec.js delete mode 100644 test/unit/codeframeFormatter.spec.js delete mode 100644 test/unit/defaultFormatter.spec.js create mode 100644 test/unit/formatter/CodeframeFormatter.spec.js create mode 100644 test/unit/formatter/DefaultFormatter.spec.js create mode 100644 test/unit/formatter/FormatterFactory.spec.js create mode 100644 test/unit/formatter/InternalFormatter.spec.js create mode 100644 test/unit/formatter/RawFormatter.spec.js create mode 100644 test/unit/formatter/__mocks__/chalk.js create mode 100644 test/unit/issue/Issue.spec.js create mode 100644 test/unit/issue/IssueOrigin.spec.js create mode 100644 test/unit/issue/IssueSeverity.spec.js create mode 100644 test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap create mode 100644 test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap create mode 100644 test/unit/issue/eslint/EsLintIssueFactory.spec.js create mode 100644 test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap create mode 100644 test/unit/issue/internal/InternalIssueFactory.spec.js create mode 100644 test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap create mode 100644 test/unit/issue/tslint/TsLintIssueFactory.spec.js create mode 100644 test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap create mode 100644 test/unit/issue/typescript/TypeScriptIssueFactory.spec.js create mode 100644 test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fc50df2f..44c2fe4f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -48,7 +48,7 @@ jobs: - '10' - '12' packages: - - webpack@^5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4 + - webpack@5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4 - webpack@^4.0.0 ts-loader@^5.0.0 vue-loader@^15.2.4 - webpack@^3.10.0 ts-loader@^3.4.0 vue-loader@^13.5.0 - webpack@^2.7.0 ts-loader@^3.4.0 vue-loader@^13.5.0 diff --git a/README.md b/README.md index eb81c03b..579c8f41 100644 --- a/README.md +++ b/README.md @@ -178,15 +178,12 @@ new ForkTsCheckerWebpackPlugin({ }); ``` -- **colors** `boolean`: - If `false`, disables built-in colors in logger messages. Default: `true`. - - **logger** `object`: Logger instance. It should be object that implements method: `error`, `warn`, `info`. Default: `console`. -- **formatter** `'default' | 'codeframe' | ((message: NormalizedMessage, useColors: boolean) => string)`: +- **formatter** `'default' | 'codeframe' | (diagnostic: Diagnostic) => string)`: Formatter for diagnostics and lints. By default uses `default` formatter. You can also pass your own formatter as a function - (see `src/NormalizedMessage.js` and `src/formatter/` for api reference). + (see `src/diagnostic/` and `src/formatter/` for API reference). - **formatterOptions** `object`: Options passed to formatters (currently only `codeframe` - see [available options](https://www.npmjs.com/package/babel-code-frame#options)) diff --git a/package.json b/package.json index b911f9b5..54114741 100644 --- a/package.json +++ b/package.json @@ -45,12 +45,12 @@ "test:unit": "jest unit", "test:watch": "jest unit --watch", "watch": "tsc --version && tsc --project \"./src\" --watch", - "precommit": "lint-staged && yarn build", + "precommit": "lint-staged && yarn build && yarn test:unit", "commit": "./node_modules/.bin/git-cz" }, "husky": { "hooks": { - "pre-commit": "lint-staged && yarn build", + "pre-commit": "lint-staged && yarn build && yarn test:unit", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, @@ -146,7 +146,7 @@ "vue-class-component": "^6.1.1", "vue-loader": "^15.2.4", "vue-template-compiler": "^2.5.16", - "webpack": "^5.0.0-alpha.5" + "webpack": "^4.0.0" }, "engines": { "node": ">=6.11.5", diff --git a/src/ApiIncrementalChecker.ts b/src/ApiIncrementalChecker.ts index d9fc113d..b865ddf3 100644 --- a/src/ApiIncrementalChecker.ts +++ b/src/ApiIncrementalChecker.ts @@ -1,11 +1,12 @@ // tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone // tslint:disable-next-line:no-implicit-dependencies -import { Linter, LintResult, RuleFailure } from 'tslint'; // Imported for types alone +import * as tslint from 'tslint'; // Imported for types alone // tslint:disable-next-line:no-implicit-dependencies -import * as eslinttypes from 'eslint'; // Imported for types alone -import * as minimatch from 'minimatch'; +import * as eslint from 'eslint'; // Imported for types alone import * as path from 'path'; +import * as minimatch from 'minimatch'; + import { IncrementalCheckerInterface, ApiIncrementalCheckerParams @@ -16,10 +17,14 @@ import { loadLinterConfig, makeGetLinterConfig } from './linterConfigHelpers'; -import { NormalizedMessage } from './NormalizedMessage'; import { CompilerHost } from './CompilerHost'; import { fileExistsSync } from './FsHelper'; import { createEslinter } from './createEslinter'; +import { + createIssuesFromTsDiagnostics, + createIssuesFromTsLintRuleFailures, + createIssuesFromEsLintReports +} from './issue'; export class ApiIncrementalChecker implements IncrementalCheckerInterface { private linterConfig?: ConfigurationFile; @@ -28,25 +33,16 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { protected readonly tsIncrementalCompiler: CompilerHost; private linterExclusions: minimatch.IMinimatch[] = []; - private currentLintErrors = new Map(); - private currentEsLintErrors = new Map< - string, - eslinttypes.CLIEngine.LintReport - >(); + private currentLintErrors = new Map(); + private currentEsLintErrors = new Map(); private lastUpdatedFiles: string[] = []; private lastRemovedFiles: string[] = []; private readonly hasFixedConfig: boolean; private readonly context: string; - private readonly createNormalizedMessageFromDiagnostic: ( - diagnostic: ts.Diagnostic - ) => NormalizedMessage; private readonly linterConfigFile: string | boolean; private readonly linterAutoFix: boolean; - private readonly createNormalizedMessageFromRuleFailure: ( - ruleFailure: RuleFailure - ) => NormalizedMessage; private readonly eslinter: ReturnType | undefined; constructor({ @@ -54,10 +50,8 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { context, programConfigFile, compilerOptions, - createNormalizedMessageFromDiagnostic, linterConfigFile, linterAutoFix, - createNormalizedMessageFromRuleFailure, eslinter, vue, checkSyntacticErrors = false, @@ -65,10 +59,8 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { resolveTypeReferenceDirective }: ApiIncrementalCheckerParams) { this.context = context; - this.createNormalizedMessageFromDiagnostic = createNormalizedMessageFromDiagnostic; this.linterConfigFile = linterConfigFile; this.linterAutoFix = linterAutoFix; - this.createNormalizedMessageFromRuleFailure = createNormalizedMessageFromRuleFailure; this.eslinter = eslinter; this.hasFixedConfig = typeof this.linterConfigFile === 'string'; @@ -112,14 +104,14 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { this.context ); - private createLinter(program: ts.Program): Linter { + private createLinter(program: ts.Program): tslint.Linter { // tslint:disable-next-line:no-implicit-dependencies - const tslint = require('tslint'); + const { Linter } = require('tslint'); - return new tslint.Linter({ fix: this.linterAutoFix }, program); + return new Linter({ fix: this.linterAutoFix }, program); } - public hasLinter(): boolean { + public hasTsLinter(): boolean { return !!this.linterConfigFile; } @@ -138,17 +130,15 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { // do nothing } - public async getDiagnostics(_cancellationToken: CancellationToken) { - const diagnostics = await this.tsIncrementalCompiler.processChanges(); - this.lastUpdatedFiles = diagnostics.updatedFiles; - this.lastRemovedFiles = diagnostics.removedFiles; + public async getTypeScriptIssues(_cancellationToken: CancellationToken) { + const tsDiagnostics = await this.tsIncrementalCompiler.processChanges(); + this.lastUpdatedFiles = tsDiagnostics.updatedFiles; + this.lastRemovedFiles = tsDiagnostics.removedFiles; - return NormalizedMessage.deduplicate( - diagnostics.results.map(this.createNormalizedMessageFromDiagnostic) - ); + return createIssuesFromTsDiagnostics(tsDiagnostics.results); } - public getLints(_cancellationToken: CancellationToken) { + public async getTsLintIssues(_cancellationToken: CancellationToken) { for (const updatedFile of this.lastUpdatedFiles) { if (this.isFileExcluded(updatedFile)) { continue; @@ -191,12 +181,10 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { allLints.push(...value.failures); } - return NormalizedMessage.deduplicate( - allLints.map(this.createNormalizedMessageFromRuleFailure) - ); + return createIssuesFromTsLintRuleFailures(allLints); } - public getEsLints(cancellationToken: CancellationToken) { + public async getEsLintIssues(cancellationToken: CancellationToken) { for (const removedFile of this.lastRemovedFiles) { this.currentEsLintErrors.delete(removedFile); } @@ -207,14 +195,16 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { continue; } - const lints = this.eslinter!.getLints(updatedFile); - if (lints !== undefined) { - this.currentEsLintErrors.set(updatedFile, lints); + const report = this.eslinter!.getReport(updatedFile); + + if (report !== undefined) { + this.currentEsLintErrors.set(updatedFile, report); } else if (this.currentEsLintErrors.has(updatedFile)) { this.currentEsLintErrors.delete(updatedFile); } } - return this.eslinter!.getFormattedLints(this.currentEsLintErrors.values()); + const reports = Array.from(this.currentEsLintErrors.values()); + return createIssuesFromEsLintReports(reports); } } diff --git a/src/FilesRegister.ts b/src/FilesRegister.ts index b7ec4b66..7545a3a9 100644 --- a/src/FilesRegister.ts +++ b/src/FilesRegister.ts @@ -1,14 +1,15 @@ // tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone // tslint:disable-next-line:no-implicit-dependencies -import { RuleFailure } from 'tslint'; // import for types alone -import { CLIEngine } from 'eslint'; // import for types alone +import * as tslint from 'tslint'; // import for types alone +// tslint:disable-next-line:no-implicit-dependencies +import * as eslint from 'eslint'; // import for types alone export interface DataShape { source?: ts.SourceFile; linted: boolean; - tslints: RuleFailure[]; - eslints: CLIEngine.LintReport[]; + tslints: tslint.RuleFailure[]; + eslints: eslint.CLIEngine.LintReport[]; } export class FilesRegister { diff --git a/src/FilesWatcher.ts b/src/FilesWatcher.ts index ea1f6348..eae906e3 100644 --- a/src/FilesWatcher.ts +++ b/src/FilesWatcher.ts @@ -1,5 +1,5 @@ -import * as chokidar from 'chokidar'; import * as path from 'path'; +import * as chokidar from 'chokidar'; export class FilesWatcher { private watchers: chokidar.FSWatcher[]; diff --git a/src/IncrementalChecker.ts b/src/IncrementalChecker.ts index d552f7b7..f572c722 100644 --- a/src/IncrementalChecker.ts +++ b/src/IncrementalChecker.ts @@ -3,9 +3,11 @@ import * as path from 'path'; // tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone; actual requires take place in methods below // tslint:disable-next-line:no-implicit-dependencies -import { Linter, RuleFailure } from 'tslint'; // Imported for types alone; actual requires take place in methods below +import * as tslint from 'tslint'; // Imported for types alone; actual requires take place in methods below // tslint:disable-next-line:no-implicit-dependencies -import * as eslinttypes from 'eslint'; +import * as eslint from 'eslint'; +import * as minimatch from 'minimatch'; + import { FilesRegister } from './FilesRegister'; import { FilesWatcher } from './FilesWatcher'; import { @@ -14,14 +16,12 @@ import { makeGetLinterConfig } from './linterConfigHelpers'; import { WorkSet } from './WorkSet'; -import { NormalizedMessage } from './NormalizedMessage'; import { CancellationToken } from './CancellationToken'; import { ResolveModuleName, ResolveTypeReferenceDirective, makeResolutionFunctions } from './resolution'; -import * as minimatch from 'minimatch'; import { VueProgram } from './VueProgram'; import { throwIfIsInvalidSourceFileError } from './FsHelper'; import { @@ -30,6 +30,12 @@ import { } from './IncrementalCheckerInterface'; import { createEslinter } from './createEslinter'; import { VueOptions } from './types/vue-options'; +import { + Issue, + createIssuesFromEsLintReports, + createIssuesFromTsDiagnostics, + createIssuesFromTsLintRuleFailures +} from './issue'; export class IncrementalChecker implements IncrementalCheckerInterface { // it's shared between compilations @@ -42,7 +48,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { eslints: [] })); - private linter?: Linter; + private linter?: tslint.Linter; private linterConfig?: ConfigurationFile; // Use empty array of exclusions in general to avoid having @@ -59,14 +65,8 @@ export class IncrementalChecker implements IncrementalCheckerInterface { private readonly context: string; private readonly programConfigFile: string; private readonly compilerOptions: object; - private readonly createNormalizedMessageFromDiagnostic: ( - diagnostic: ts.Diagnostic - ) => NormalizedMessage; private readonly linterConfigFile: string | boolean; private readonly linterAutoFix: boolean; - private readonly createNormalizedMessageFromRuleFailure: ( - ruleFailure: RuleFailure - ) => NormalizedMessage; private readonly eslinter: ReturnType | undefined; private readonly watchPaths: string[]; private readonly workNumber: number; @@ -83,10 +83,8 @@ export class IncrementalChecker implements IncrementalCheckerInterface { context, programConfigFile, compilerOptions, - createNormalizedMessageFromDiagnostic, linterConfigFile, linterAutoFix, - createNormalizedMessageFromRuleFailure, eslinter, watchPaths, workNumber = 0, @@ -100,10 +98,8 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.context = context; this.programConfigFile = programConfigFile; this.compilerOptions = compilerOptions; - this.createNormalizedMessageFromDiagnostic = createNormalizedMessageFromDiagnostic; this.linterConfigFile = linterConfigFile; this.linterAutoFix = linterAutoFix; - this.createNormalizedMessageFromRuleFailure = createNormalizedMessageFromRuleFailure; this.eslinter = eslinter; this.watchPaths = watchPaths; this.workNumber = workNumber; @@ -234,7 +230,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { return new tslint.Linter({ fix: this.linterAutoFix }, program); } - public hasLinter(): boolean { + public hasTsLinter(): boolean { return !!this.linter; } @@ -337,12 +333,14 @@ export class IncrementalChecker implements IncrementalCheckerInterface { ); } - public getDiagnostics(cancellationToken: CancellationToken) { + public async getTypeScriptIssues( + cancellationToken: CancellationToken + ): Promise { const { program } = this; if (!program) { throw new Error('Invoked called before program initialized'); } - const diagnostics: ts.Diagnostic[] = []; + const tsDiagnostics: ts.Diagnostic[] = []; // select files to check (it's semantic check - we have to include all files :/) const filesToCheck = program.getSourceFiles(); @@ -359,7 +357,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { cancellationToken.throwIfCancellationRequested(); } - const diagnosticsToRegister: ReadonlyArray = this + const tsDiagnosticsToRegister: ReadonlyArray = this .checkSyntacticErrors ? program .getSemanticDiagnostics(sourceFile, cancellationToken) @@ -368,18 +366,15 @@ export class IncrementalChecker implements IncrementalCheckerInterface { ) : program.getSemanticDiagnostics(sourceFile, cancellationToken); - diagnostics.push(...diagnosticsToRegister); + tsDiagnostics.push(...tsDiagnosticsToRegister); }); - // normalize and deduplicate diagnostics - return Promise.resolve( - NormalizedMessage.deduplicate( - diagnostics.map(this.createNormalizedMessageFromDiagnostic) - ) - ); + return createIssuesFromTsDiagnostics(tsDiagnostics); } - public getLints(cancellationToken: CancellationToken) { + public async getTsLintIssues( + cancellationToken: CancellationToken + ): Promise { const { linter } = this; if (!linter) { throw new Error('Cannot get lints - checker has no linter.'); @@ -439,19 +434,18 @@ export class IncrementalChecker implements IncrementalCheckerInterface { // get all lints const lints = this.files .keys() - .reduce( + .reduce( (innerLints, filePath) => innerLints.concat(this.files.getData(filePath).tslints), - [] as RuleFailure[] + [] ); - // normalize and deduplicate lints - return NormalizedMessage.deduplicate( - lints.map(this.createNormalizedMessageFromRuleFailure) - ); + return createIssuesFromTsLintRuleFailures(lints); } - public getEsLints(cancellationToken: CancellationToken) { + public async getEsLintIssues( + cancellationToken: CancellationToken + ): Promise { // select files to lint const filesToLint = this.files .keys() @@ -469,16 +463,13 @@ export class IncrementalChecker implements IncrementalCheckerInterface { ); // lint given work set - const currentEsLintErrors = new Map< - string, - eslinttypes.CLIEngine.LintReport - >(); + const currentEsLintErrors = new Map(); workSet.forEach(fileName => { cancellationToken.throwIfCancellationRequested(); - const lints = this.eslinter!.getLints(fileName); - if (lints !== undefined) { - currentEsLintErrors.set(fileName, lints); + const report = this.eslinter!.getReport(fileName); + if (report !== undefined) { + currentEsLintErrors.set(fileName, report); } }); @@ -497,15 +488,14 @@ export class IncrementalChecker implements IncrementalCheckerInterface { }); }); - // get all lints - const allEsLintReports = this.files + const reports = this.files .keys() - .reduce( + .reduce( (innerLints, filePath) => innerLints.concat(this.files.getData(filePath).eslints), - [] as eslinttypes.CLIEngine.LintReport[] + [] ); - return this.eslinter!.getFormattedLints(allEsLintReports); + return createIssuesFromEsLintReports(reports); } } diff --git a/src/IncrementalCheckerInterface.ts b/src/IncrementalCheckerInterface.ts index 88aa620e..1d81413c 100644 --- a/src/IncrementalCheckerInterface.ts +++ b/src/IncrementalCheckerInterface.ts @@ -1,27 +1,21 @@ // tslint:disable-next-line:no-implicit-dependencies -import * as ts from 'typescript'; // import for types alone -// tslint:disable-next-line:no-implicit-dependencies -import { RuleFailure } from 'tslint'; // import for types alone +import * as ts from 'typescript'; // imported for types alone + import { CancellationToken } from './CancellationToken'; -import { NormalizedMessage } from './NormalizedMessage'; import { ResolveTypeReferenceDirective, ResolveModuleName } from './resolution'; import { createEslinter } from './createEslinter'; +import { Issue } from './issue'; import { VueOptions } from './types/vue-options'; export interface IncrementalCheckerInterface { nextIteration(): void; - getDiagnostics( - cancellationToken: CancellationToken - ): Promise; - - hasLinter(): boolean; - - getLints(cancellationToken: CancellationToken): NormalizedMessage[]; - + hasTsLinter(): boolean; hasEsLinter(): boolean; - getEsLints(cancellationToken: CancellationToken): NormalizedMessage[]; + getTypeScriptIssues(cancellationToken: CancellationToken): Promise; + getTsLintIssues(cancellationToken: CancellationToken): Promise; + getEsLintIssues(cancellationToken: CancellationToken): Promise; } export interface ApiIncrementalCheckerParams { @@ -29,14 +23,8 @@ export interface ApiIncrementalCheckerParams { context: string; programConfigFile: string; compilerOptions: ts.CompilerOptions; - createNormalizedMessageFromDiagnostic: ( - diagnostic: ts.Diagnostic - ) => NormalizedMessage; linterConfigFile: string | boolean; linterAutoFix: boolean; - createNormalizedMessageFromRuleFailure: ( - ruleFailure: RuleFailure - ) => NormalizedMessage; eslinter: ReturnType | undefined; checkSyntacticErrors: boolean; resolveModuleName: ResolveModuleName | undefined; diff --git a/src/Message.ts b/src/Message.ts index c81a4566..80992233 100644 --- a/src/Message.ts +++ b/src/Message.ts @@ -1,6 +1,6 @@ -import { NormalizedMessage } from './NormalizedMessage'; +import { Issue } from './issue'; export interface Message { - diagnostics: NormalizedMessage[]; - lints: NormalizedMessage[]; + diagnostics: Issue[]; + lints: Issue[]; } diff --git a/src/NormalizedMessage.ts b/src/NormalizedMessage.ts deleted file mode 100644 index df6844c8..00000000 --- a/src/NormalizedMessage.ts +++ /dev/null @@ -1,185 +0,0 @@ -export type ErrorType = 'diagnostic' | 'lint'; -export type Severity = 'error' | 'warning'; - -interface NormalizedMessageJson { - type: ErrorType; - code: string | number; - severity: Severity; - content: string; - file?: string; - line?: number; - character?: number; - stack?: string; -} - -export class NormalizedMessage { - public static readonly TYPE_DIAGNOSTIC: ErrorType = 'diagnostic'; - public static readonly TYPE_LINT: ErrorType = 'lint'; - - // severity types - public static readonly SEVERITY_ERROR: Severity = 'error'; - public static readonly SEVERITY_WARNING: Severity = 'warning'; - - public static readonly ERROR_CODE_INTERNAL = 'INTERNAL_ERROR'; - - public readonly type: ErrorType; - public readonly code: string | number; - public readonly severity: Severity; - public readonly content: string; - public readonly file?: string; - public readonly line?: number; - public readonly character?: number; - public readonly stack?: string; - - constructor(data: NormalizedMessageJson) { - this.type = data.type; - this.code = data.code; - this.severity = data.severity; - this.content = data.content; - this.file = data.file; - this.line = data.line; - this.character = data.character; - this.stack = data.stack; - } - - public static createFromJSON(json: NormalizedMessageJson) { - return new NormalizedMessage(json); - } - - public static compare( - messageA: NormalizedMessage, - messageB: NormalizedMessage - ) { - if (!(messageA instanceof NormalizedMessage)) { - return -1; - } - if (!(messageB instanceof NormalizedMessage)) { - return 1; - } - - return ( - NormalizedMessage.compareTypes(messageA.type, messageB.type) || - NormalizedMessage.compareOptionalStrings(messageA.file, messageB.file) || - NormalizedMessage.compareSeverities( - messageA.severity, - messageB.severity - ) || - NormalizedMessage.compareNumbers(messageA.line, messageB.line) || - NormalizedMessage.compareNumbers( - messageA.character, - messageB.character - ) || - // code can be string (lint failure) or number (typescript error) - should the following line cater for this in some way? - NormalizedMessage.compareOptionalStrings( - messageA.code as string, - messageB.code as string - ) || - NormalizedMessage.compareOptionalStrings( - messageA.content, - messageB.content - ) || - NormalizedMessage.compareOptionalStrings( - messageA.stack, - messageB.stack - ) || - 0 /* EqualTo */ - ); - } - - public static equals( - messageA: NormalizedMessage, - messageB: NormalizedMessage - ) { - return this.compare(messageA, messageB) === 0; - } - - public static deduplicate(messages: NormalizedMessage[]) { - return messages.sort(NormalizedMessage.compare).filter((message, index) => { - return ( - index === 0 || !NormalizedMessage.equals(message, messages[index - 1]) - ); - }); - } - - public static compareTypes(typeA: ErrorType, typeB: ErrorType) { - const priorities = [typeA, typeB].map(type => { - return [ - NormalizedMessage.TYPE_LINT /* 0 */, - NormalizedMessage.TYPE_DIAGNOSTIC /* 1 */ - ].indexOf(type); - }); - - return priorities[0] - priorities[1]; - } - - public static compareSeverities(severityA: Severity, severityB: Severity) { - const priorities = [severityA, severityB].map(type => { - return [ - NormalizedMessage.SEVERITY_WARNING /* 0 */, - NormalizedMessage.SEVERITY_ERROR /* 1 */ - ].indexOf(type); - }); - - return priorities[0] - priorities[1]; - } - - public static compareOptionalStrings(stringA?: string, stringB?: string) { - if (stringA === stringB) { - return 0; - } - if (stringA === undefined || stringA === null) { - return -1; - } - if (stringB === undefined || stringB === null) { - return 1; - } - - return stringA.toString().localeCompare(stringB.toString()); - } - - public static compareNumbers(numberA?: number, numberB?: number) { - if (numberA === numberB) { - return 0; - } - if (numberA === undefined || numberA === null) { - return -1; - } - if (numberB === undefined || numberB === null) { - return 1; - } - return numberA - numberB; - } - - public toJSON() { - return { - type: this.type, - code: this.code, - severity: this.severity, - content: this.content, - file: this.file, - line: this.line, - character: this.character, - stack: this.stack - } as NormalizedMessageJson; - } - - public isDiagnosticType() { - return NormalizedMessage.TYPE_DIAGNOSTIC === this.type; - } - - public isLintType() { - return NormalizedMessage.TYPE_LINT === this.type; - } - - public getFormattedCode() { - return this.isDiagnosticType() ? 'TS' + this.code : this.code; - } - - public isErrorSeverity() { - return this.severity === NormalizedMessage.SEVERITY_ERROR; - } - - public isWarningSeverity() { - return this.severity === NormalizedMessage.SEVERITY_WARNING; - } -} diff --git a/src/NormalizedMessageFactories.ts b/src/NormalizedMessageFactories.ts deleted file mode 100644 index cb98ffb2..00000000 --- a/src/NormalizedMessageFactories.ts +++ /dev/null @@ -1,97 +0,0 @@ -// tslint:disable-next-line:no-implicit-dependencies -import * as ts from 'typescript'; // import for types alone -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // import for types alone -import { NormalizedMessage, Severity } from './NormalizedMessage'; -import * as eslint from 'eslint'; // import for types alone - -export const makeCreateNormalizedMessageFromDiagnostic = ( - typescript: typeof ts -) => { - const createNormalizedMessageFromDiagnostic = (diagnostic: ts.Diagnostic) => { - let file: string | undefined; - let line: number | undefined; - let character: number | undefined; - if (diagnostic.file) { - file = diagnostic.file.fileName; - if (diagnostic.start === undefined) { - throw new Error('Expected diagnostics to have start'); - } - const position = diagnostic.file.getLineAndCharacterOfPosition( - diagnostic.start - ); - line = position.line + 1; - character = position.character + 1; - } - - return new NormalizedMessage({ - type: NormalizedMessage.TYPE_DIAGNOSTIC, - code: diagnostic.code, - severity: typescript.DiagnosticCategory[ - diagnostic.category - ].toLowerCase() as Severity, - content: typescript.flattenDiagnosticMessageText( - diagnostic.messageText, - '\n' - ), - file, - line, - character - }); - }; - - return createNormalizedMessageFromDiagnostic; -}; - -export const makeCreateNormalizedMessageFromRuleFailure = () => { - const createNormalizedMessageFromRuleFailure = (lint: tslint.RuleFailure) => { - const position = lint.getStartPosition().getLineAndCharacter(); - - return new NormalizedMessage({ - type: NormalizedMessage.TYPE_LINT, - code: lint.getRuleName(), - severity: lint.getRuleSeverity() as Severity, - content: lint.getFailure(), - file: lint.getFileName(), - line: position.line + 1, - character: position.character + 1 - }); - }; - return createNormalizedMessageFromRuleFailure; -}; - -export const makeCreateNormalizedMessageFromEsLintFailure = () => { - const createNormalizedMessageFromEsLintFailure = ( - lint: eslint.Linter.LintMessage, - filePath: string - ) => { - return new NormalizedMessage({ - type: NormalizedMessage.TYPE_LINT, - code: lint.ruleId!, - severity: - lint.severity === 1 - ? NormalizedMessage.SEVERITY_WARNING - : NormalizedMessage.SEVERITY_ERROR, - content: lint.message, - file: filePath, - line: lint.line, - character: lint.column - }); - }; - return createNormalizedMessageFromEsLintFailure; -}; - -export const makeCreateNormalizedMessageFromInternalError = () => { - const createNormalizedMessageFromInternalError = (error: any) => { - return new NormalizedMessage({ - type: NormalizedMessage.TYPE_DIAGNOSTIC, - severity: NormalizedMessage.SEVERITY_ERROR, - code: NormalizedMessage.ERROR_CODE_INTERNAL, - content: - typeof error.message === 'string' ? error.message : error.toString(), - stack: typeof error.stack === 'string' ? error.stack : undefined, - file: '[internal]' - }); - }; - return createNormalizedMessageFromInternalError; -}; diff --git a/src/cluster.ts b/src/cluster.ts index 46c2f1cf..94d6ed94 100644 --- a/src/cluster.ts +++ b/src/cluster.ts @@ -1,11 +1,11 @@ +import * as process from 'process'; import * as childProcess from 'child_process'; import * as path from 'path'; -import * as process from 'process'; import { RpcProvider } from 'worker-rpc'; -import { NormalizedMessage } from './NormalizedMessage'; import { Message } from './Message'; import { RunPayload, RunResult, RUN } from './RpcTypes'; +import { deduplicateAndSortIssues } from './issue'; // fork workers... const division = parseInt(process.env.WORK_DIVISION || '', 10); @@ -65,18 +65,14 @@ parentRpc.registerRpcHandler(RUN, async message => { const merged: Message = workerResults.reduce( (innerMerged: Message, innerResult: Message) => ({ - diagnostics: innerMerged.diagnostics.concat( - innerResult.diagnostics.map(NormalizedMessage.createFromJSON) - ), - lints: innerMerged.lints.concat( - innerResult.lints.map(NormalizedMessage.createFromJSON) - ) + diagnostics: innerMerged.diagnostics.concat(innerResult.diagnostics), + lints: innerMerged.lints.concat(innerResult.lints) }), { diagnostics: [], lints: [] } ); - merged.diagnostics = NormalizedMessage.deduplicate(merged.diagnostics); - merged.lints = NormalizedMessage.deduplicate(merged.lints); + merged.diagnostics = deduplicateAndSortIssues(merged.diagnostics); + merged.lints = deduplicateAndSortIssues(merged.lints); return merged; }); diff --git a/src/createEslinter.ts b/src/createEslinter.ts index 099b3176..889fb5a6 100644 --- a/src/createEslinter.ts +++ b/src/createEslinter.ts @@ -1,19 +1,17 @@ // tslint:disable-next-line:no-implicit-dependencies import * as eslinttypes from 'eslint'; // import for types alone -import { NormalizedMessage } from './NormalizedMessage'; -import { throwIfIsInvalidSourceFileError } from './FsHelper'; -import { makeCreateNormalizedMessageFromEsLintFailure } from './NormalizedMessageFactories'; import * as path from 'path'; +import { throwIfIsInvalidSourceFileError } from './FsHelper'; + export function createEslinter(eslintOptions: object) { // tslint:disable-next-line:no-implicit-dependencies const eslint: typeof eslinttypes = require('eslint'); // See https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine const eslinter = new eslint.CLIEngine(eslintOptions); - const createNormalizedMessageFromEsLintFailure = makeCreateNormalizedMessageFromEsLintFailure(); - function getLintsForFile(filepath: string) { + function getReport(filepath: string) { try { if ( eslinter.isPathIgnored(filepath) || @@ -24,31 +22,12 @@ export function createEslinter(eslintOptions: object) { return undefined; } - const lints = eslinter.executeOnFiles([filepath]); - return lints; + return eslinter.executeOnFiles([filepath]); } catch (e) { throwIfIsInvalidSourceFileError(filepath, e); } return undefined; } - function getFormattedLints( - lintReports: - | IterableIterator - | eslinttypes.CLIEngine.LintReport[] - ) { - const allEsLints = []; - for (const value of lintReports) { - for (const lint of value.results) { - allEsLints.push( - ...lint.messages.map(message => - createNormalizedMessageFromEsLintFailure(message, lint.filePath) - ) - ); - } - } - return NormalizedMessage.deduplicate(allEsLints); - } - - return { getLints: getLintsForFile, getFormattedLints }; + return { getReport }; } diff --git a/src/formatter/CodeframeFormatter.ts b/src/formatter/CodeframeFormatter.ts new file mode 100644 index 00000000..64b3d7f6 --- /dev/null +++ b/src/formatter/CodeframeFormatter.ts @@ -0,0 +1,78 @@ +import * as os from 'os'; +import * as fs from 'fs'; +import chalk from 'chalk'; + +import { fileExistsSync } from '../FsHelper'; +import { IssueSeverity, IssueOrigin } from '../issue'; +import { Formatter } from './Formatter'; +import { createInternalFormatter } from './InternalFormatter'; +const codeFrame = require('babel-code-frame'); + +interface CodeFrameFormatterOptions { + /** Syntax highlight the code as JavaScript for terminals. default: false */ + highlightCode?: boolean; + /** The number of lines to show above the error. default: 2 */ + linesBelow?: number; + /** The number of lines to show below the error. default: 3 */ + linesAbove?: number; + /** + * Forcibly syntax highlight the code as JavaScript (for non-terminals); + * overrides highlightCode. + * default: false + */ + forceColor?: boolean; +} + +function createCodeframeFormatter( + options?: CodeFrameFormatterOptions +): Formatter { + return function codeframeFormatter(issue) { + const color = { + message: + issue.severity === IssueSeverity.WARNING + ? chalk.bold.yellow + : chalk.bold.red, + position: chalk.dim + }; + + if (issue.origin === IssueOrigin.INTERNAL) { + return createInternalFormatter()(issue); + } + + const file = issue.file; + const source = + file && fileExistsSync(file) && fs.readFileSync(file, 'utf-8'); + let frame = ''; + + if (source) { + frame = codeFrame( + source, + issue.line!, // Assertion: `codeFrame` allows passing undefined, typings are incorrect + issue.character!, + { + highlightCode: true, + ...(options || {}) + } + ) + .split('\n') + .map((line: string) => ' ' + line) + .join(os.EOL); + } + + const lines = [ + color.message( + `${issue.severity.toUpperCase()} in ${issue.file}(${issue.line},${ + issue.character + }):` + ), + color.position(`${issue.line}:${issue.character} ${issue.message}`) + ]; + if (frame) { + lines.push(frame); + } + + return lines.join(os.EOL); + }; +} + +export { createCodeframeFormatter, CodeFrameFormatterOptions }; diff --git a/src/formatter/DefaultFormatter.ts b/src/formatter/DefaultFormatter.ts new file mode 100644 index 00000000..c1f91771 --- /dev/null +++ b/src/formatter/DefaultFormatter.ts @@ -0,0 +1,35 @@ +import * as os from 'os'; +import chalk from 'chalk'; + +import { IssueSeverity, IssueOrigin } from '../issue'; +import { Formatter } from './Formatter'; +import { createInternalFormatter } from './InternalFormatter'; + +function createDefaultFormatter(): Formatter { + return function defaultFormatter(issue) { + const color = { + message: + issue.severity === IssueSeverity.WARNING + ? chalk.bold.yellow + : chalk.bold.red, + position: chalk.bold.cyan, + code: chalk.grey + }; + + if (issue.origin === IssueOrigin.INTERNAL) { + return createInternalFormatter()(issue); + } + + const code = + issue.origin === IssueOrigin.TYPESCRIPT ? `TS${issue.code}` : issue.code; + + return [ + color.message(`${issue.severity.toUpperCase()} in `) + + color.position(`${issue.file}(${issue.line},${issue.character})`) + + color.message(':'), + color.code(code + ': ') + issue.message + ].join(os.EOL); + }; +} + +export { createDefaultFormatter }; diff --git a/src/formatter/Formatter.ts b/src/formatter/Formatter.ts new file mode 100644 index 00000000..322be4ad --- /dev/null +++ b/src/formatter/Formatter.ts @@ -0,0 +1,5 @@ +import { Issue } from '../issue'; + +type Formatter = (issue: Issue) => string; + +export { Formatter }; diff --git a/src/formatter/FormatterFactory.ts b/src/formatter/FormatterFactory.ts new file mode 100644 index 00000000..5608a793 --- /dev/null +++ b/src/formatter/FormatterFactory.ts @@ -0,0 +1,36 @@ +import { Formatter } from './Formatter'; +import { + CodeFrameFormatterOptions, + createCodeframeFormatter +} from './CodeframeFormatter'; +import { createDefaultFormatter } from './DefaultFormatter'; + +type FormatterType = undefined | 'default' | 'codeframe' | Formatter; +type FormatterOptions = CodeFrameFormatterOptions; + +function createFormatter( + type?: FormatterType, + options?: FormatterOptions +): Formatter { + if (typeof type === 'function') { + return type; + } + + switch (type) { + case 'codeframe': + return createCodeframeFormatter(options); + + case 'default': + case undefined: + return createDefaultFormatter(); + + default: + throw new Error( + 'Unknown "' + + type + + '" formatter. Available types are: default, codeframe.' + ); + } +} + +export { createFormatter, FormatterType, FormatterOptions }; diff --git a/src/formatter/InternalFormatter.ts b/src/formatter/InternalFormatter.ts new file mode 100644 index 00000000..b1b0518f --- /dev/null +++ b/src/formatter/InternalFormatter.ts @@ -0,0 +1,34 @@ +import chalk from 'chalk'; +import * as os from 'os'; + +import { IssueOrigin } from '../issue'; +import { Formatter } from './Formatter'; + +/** + * TODO: maybe we should not treat internal errors as issues + */ +function createInternalFormatter(): Formatter { + return function internalFormatter(issue) { + const color = { + message: chalk.bold.red, + stack: chalk.grey + }; + + if (issue.origin === IssueOrigin.INTERNAL) { + const lines = [ + `${color.message('INTERNAL ' + issue.severity.toUpperCase())}: ${ + issue.message + }` + ]; + if (issue.stack) { + lines.push('stack trace:', color.stack(issue.stack)); + } + + return lines.join(os.EOL); + } else { + throw new Error(`Not supported "${issue.origin}" issue origin.`); + } + }; +} + +export { createInternalFormatter }; diff --git a/src/formatter/RawFormatter.ts b/src/formatter/RawFormatter.ts new file mode 100644 index 00000000..720f8386 --- /dev/null +++ b/src/formatter/RawFormatter.ts @@ -0,0 +1,13 @@ +import { Formatter } from './Formatter'; +import { IssueOrigin } from '../issue'; + +function createRawFormatter(): Formatter { + return function rawFormatter(issue) { + const code = + issue.origin === IssueOrigin.TYPESCRIPT ? `TS${issue.code}` : issue.code; + + return `${issue.severity.toUpperCase()} ${code}: ${issue.message}`; + }; +} + +export { createRawFormatter }; diff --git a/src/formatter/codeframeFormatter.ts b/src/formatter/codeframeFormatter.ts deleted file mode 100644 index 44530213..00000000 --- a/src/formatter/codeframeFormatter.ts +++ /dev/null @@ -1,72 +0,0 @@ -import * as os from 'os'; -import codeFrame = require('babel-code-frame'); -import chalk from 'chalk'; -import * as fs from 'fs'; -import { NormalizedMessage } from '../NormalizedMessage'; -import { fileExistsSync } from '../FsHelper'; - -/** - * Create new code frame formatter. - * - * @param options Options for babel-code-frame - see https://www.npmjs.com/package/babel-code-frame - * @returns {codeframeFormatter} - */ -export function createCodeframeFormatter(options: any) { - return function codeframeFormatter( - message: NormalizedMessage, - useColors: boolean - ) { - const colors = new chalk.constructor({ enabled: useColors }); - const messageColor = message.isWarningSeverity() - ? colors.bold.yellow - : colors.bold.red; - const positionColor = colors.dim; - - if (message.code === NormalizedMessage.ERROR_CODE_INTERNAL) { - return ( - messageColor( - `INTERNAL ${message.severity.toUpperCase()}(${message.line},${ - message.character - }) ` - ) + - message.content + - (message.stack - ? os.EOL + 'stack trace:' + os.EOL + colors.gray(message.stack) - : '') - ); - } - - const file = message.file; - const source = - file && fileExistsSync(file) && fs.readFileSync(file, 'utf-8'); - let frame = ''; - - if (source) { - frame = codeFrame( - source, - message.line!, // Assertion: `codeFrame` allows passing undefined, typings are incorrect - message.character!, - { - ...(options || {}), - highlightCode: useColors - } - ) - .split('\n') - .map(str => ' ' + str) - .join(os.EOL); - } - - return ( - messageColor( - message.severity.toUpperCase() + - ' in ' + - `${message.file}(${message.line},${message.character}):` - ) + - os.EOL + - positionColor(message.line + ':' + message.character) + - ' ' + - message.content + - (frame ? os.EOL + frame : '') - ); - }; -} diff --git a/src/formatter/defaultFormatter.ts b/src/formatter/defaultFormatter.ts deleted file mode 100644 index f6ce1de6..00000000 --- a/src/formatter/defaultFormatter.ts +++ /dev/null @@ -1,41 +0,0 @@ -import chalk from 'chalk'; -import * as os from 'os'; -import { NormalizedMessage } from '../NormalizedMessage'; - -/** - * Creates new default formatter. - * - * @returns {defaultFormatter} - */ -export function createDefaultFormatter() { - return function defaultFormatter( - message: NormalizedMessage, - useColors: boolean - ) { - const colors = new chalk.constructor({ enabled: useColors }); - const messageColor = message.isWarningSeverity() - ? colors.bold.yellow - : colors.bold.red; - const fileAndNumberColor = colors.bold.cyan; - const codeColor = colors.grey; - - if (message.code === NormalizedMessage.ERROR_CODE_INTERNAL) { - return ( - messageColor(`INTERNAL ${message.severity.toUpperCase()}: `) + - message.content + - (message.stack - ? os.EOL + 'stack trace:' + os.EOL + colors.gray(message.stack) - : '') - ); - } - - return [ - messageColor(`${message.severity.toUpperCase()} in `) + - fileAndNumberColor( - `${message.file}(${message.line},${message.character})` - ) + - messageColor(':'), - codeColor(message.getFormattedCode() + ': ') + message.content - ].join(os.EOL); - }; -} diff --git a/src/formatter/index.ts b/src/formatter/index.ts new file mode 100644 index 00000000..b997b5e1 --- /dev/null +++ b/src/formatter/index.ts @@ -0,0 +1,6 @@ +export * from './Formatter'; +export * from './DefaultFormatter'; +export * from './CodeframeFormatter'; +export * from './FormatterFactory'; +export * from './InternalFormatter'; +export * from './RawFormatter'; diff --git a/src/index.ts b/src/index.ts index b1c9f8e2..2d1389d5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,38 +1,38 @@ import * as path from 'path'; import * as process from 'process'; import * as childProcess from 'child_process'; -import { RpcProvider } from 'worker-rpc'; -import * as semver from 'semver'; -import chalk, { Chalk } from 'chalk'; -import * as micromatch from 'micromatch'; import * as os from 'os'; // tslint:disable-next-line:no-implicit-dependencies import * as webpack from 'webpack'; // tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; +import * as semver from 'semver'; +import * as micromatch from 'micromatch'; +import chalk from 'chalk'; +import { RpcProvider } from 'worker-rpc'; + import { CancellationToken } from './CancellationToken'; -import { NormalizedMessage } from './NormalizedMessage'; -import { createDefaultFormatter } from './formatter/defaultFormatter'; -import { createCodeframeFormatter } from './formatter/codeframeFormatter'; +import { + Formatter, + createFormatter, + createRawFormatter, + FormatterType, + FormatterOptions +} from './formatter'; import { fileExistsSync } from './FsHelper'; import { Message } from './Message'; - import { + ForkTsCheckerHooks, getForkTsCheckerWebpackPluginHooks, - legacyHookMap, - ForkTsCheckerHooks + legacyHookMap } from './hooks'; -import { RunPayload, RunResult, RUN } from './RpcTypes'; +import { RUN, RunPayload, RunResult } from './RpcTypes'; +import { Issue, IssueSeverity } from './issue'; import { VueOptions } from './types/vue-options'; const checkerPluginName = 'fork-ts-checker-webpack-plugin'; namespace ForkTsCheckerWebpackPlugin { - export type Formatter = ( - message: NormalizedMessage, - useColors: boolean - ) => string; - export interface Logger { error(message?: any): void; warn(message?: any): void; @@ -54,10 +54,9 @@ namespace ForkTsCheckerWebpackPlugin { ignoreLints: string[]; ignoreLintWarnings: boolean; reportFiles: string[]; - colors: boolean; logger: Logger; - formatter: 'default' | 'codeframe' | Formatter; - formatterOptions: any; + formatter: FormatterType; + formatterOptions: FormatterOptions; silent: boolean; checkSyntacticErrors: boolean; memoryLimit: number; @@ -114,9 +113,8 @@ class ForkTsCheckerWebpackPlugin { private checkSyntacticErrors: boolean; private workersNumber: number; private memoryLimit: number; - private useColors: boolean; - private colors: Chalk; - private formatter: ForkTsCheckerWebpackPlugin.Formatter; + private formatter: Formatter; + private rawFormatter: Formatter; private useTypescriptIncrementalApi: boolean; private resolveModuleNameModule: string | undefined; private resolveTypeReferenceDirectiveModule: string | undefined; @@ -133,8 +131,8 @@ class ForkTsCheckerWebpackPlugin { private isWatching: boolean = false; private checkDone: boolean = false; private compilationDone: boolean = false; - private diagnostics: NormalizedMessage[] = []; - private lints: NormalizedMessage[] = []; + private diagnostics: Issue[] = []; + private lints: Issue[] = []; private emitCallback: () => void; private doneCallback: () => void; @@ -175,15 +173,11 @@ class ForkTsCheckerWebpackPlugin { this.workersNumber = options.workers || ForkTsCheckerWebpackPlugin.ONE_CPU; this.memoryLimit = options.memoryLimit || ForkTsCheckerWebpackPlugin.DEFAULT_MEMORY_LIMIT; - this.useColors = options.colors !== false; // default true - this.colors = new chalk.constructor({ enabled: this.useColors }); - this.formatter = - options.formatter && typeof options.formatter === 'function' - ? options.formatter - : ForkTsCheckerWebpackPlugin.createFormatter( - (options.formatter as 'default' | 'codeframe') || 'default', - options.formatterOptions || {} - ); + this.formatter = createFormatter( + options.formatter, + options.formatterOptions + ); + this.rawFormatter = createRawFormatter(); this.emitCallback = this.createNoopEmitCallback(); this.doneCallback = this.createDoneCallback(); @@ -329,19 +323,6 @@ class ForkTsCheckerWebpackPlugin { } } - private static createFormatter(type: 'default' | 'codeframe', options: any) { - switch (type) { - case 'default': - return createDefaultFormatter(); - case 'codeframe': - return createCodeframeFormatter(options); - default: - throw new Error( - 'Unknown "' + type + '" formatter. Available are: default, codeframe.' - ); - } - } - public apply(compiler: any) { this.compiler = compiler; @@ -501,7 +482,7 @@ class ForkTsCheckerWebpackPlugin { } catch (error) { if (!this.silent && this.logger) { this.logger.error( - this.colors.red( + chalk.red( 'Cannot start checker service: ' + (error ? error.toString() : 'Unknown error') ) @@ -553,7 +534,7 @@ class ForkTsCheckerWebpackPlugin { } catch (error) { if (!this.silent && this.logger) { this.logger.error( - this.colors.red( + chalk.red( 'Cannot start checker service: ' + (error ? error.toString() : 'Unknown error') ) @@ -739,13 +720,13 @@ class ForkTsCheckerWebpackPlugin { ); this.logger.info( 'Using ' + - this.colors.bold( + chalk.bold( this.workersNumber === 1 ? '1 worker' : this.workersNumber + ' workers' ) + ' with ' + - this.colors.bold(this.memoryLimit + 'MB') + + chalk.bold(this.memoryLimit + 'MB') + ' memory limit' ); @@ -753,7 +734,7 @@ class ForkTsCheckerWebpackPlugin { this.logger.info( 'Watching:' + (this.watchPaths.length > 1 ? '\n' : ' ') + - this.watchPaths.map(wpath => this.colors.grey(wpath)).join('\n') + this.watchPaths.map(wpath => chalk.grey(wpath)).join('\n') ); } } @@ -796,10 +777,8 @@ class ForkTsCheckerWebpackPlugin { this.checkDone = true; this.elapsed = process.hrtime(this.started); - this.diagnostics = message.diagnostics.map( - NormalizedMessage.createFromJSON - ); - this.lints = message.lints.map(NormalizedMessage.createFromJSON); + this.diagnostics = message.diagnostics; + this.lints = message.lints; if (this.ignoreDiagnostics.length) { this.diagnostics = this.diagnostics.filter( @@ -817,11 +796,11 @@ class ForkTsCheckerWebpackPlugin { } if (this.reportFiles.length) { - const reportFilesPredicate = (diagnostic: NormalizedMessage): boolean => { - if (diagnostic.file) { + const reportFilesPredicate = (issue: Issue): boolean => { + if (issue.file) { const relativeFileName = path.relative( this.compiler.options.context, - diagnostic.file + issue.file ); const matchResult = micromatch([relativeFileName], this.reportFiles); @@ -875,7 +854,7 @@ class ForkTsCheckerWebpackPlugin { } if (!this.silent && this.logger) { this.logger.error( - this.colors.red( + chalk.red( 'Type checking and linting aborted - probably out of memory. ' + 'Check `memoryLimit` option in ForkTsCheckerWebpackPlugin configuration.' ) @@ -909,24 +888,19 @@ class ForkTsCheckerWebpackPlugin { ); } - this.diagnostics.concat(this.lints).forEach(message => { + this.diagnostics.concat(this.lints).forEach(issue => { // webpack message format const formatted = { - rawMessage: - message.severity.toUpperCase() + - ' ' + - message.getFormattedCode() + - ': ' + - message.content, - message: this.formatter(message, this.useColors), + rawMessage: this.rawFormatter(issue), + message: this.formatter(issue), location: { - line: message.line, - character: message.character + line: issue.line, + character: issue.character }, - file: message.file + file: issue.file }; - if (message.isWarningSeverity()) { + if (issue.severity === IssueSeverity.WARNING) { if (!this.ignoreLintWarnings) { compilation.warnings.push(formatted); } @@ -944,17 +918,14 @@ class ForkTsCheckerWebpackPlugin { return function noopEmitCallback() {}; } - private printLoggerMessage( - message: NormalizedMessage, - formattedMessage: string - ): void { - if (message.isWarningSeverity()) { + private printLoggerMessage(issue: Issue, formattedIssue: string): void { + if (issue.severity === IssueSeverity.WARNING) { if (this.ignoreLintWarnings) { return; } - this.logger.warn(formattedMessage); + this.logger.warn(formattedIssue); } else { - this.logger.error(formattedMessage); + this.logger.error(formattedIssue); } } @@ -985,31 +956,29 @@ class ForkTsCheckerWebpackPlugin { if (!this.silent && this.logger) { if (this.diagnostics.length || this.lints.length) { - (this.lints || []).concat(this.diagnostics).forEach(message => { - const formattedMessage = this.formatter(message, this.useColors); + (this.lints || []).concat(this.diagnostics).forEach(diagnostic => { + const formattedDiagnostic = this.formatter(diagnostic); - this.printLoggerMessage(message, formattedMessage); + this.printLoggerMessage(diagnostic, formattedDiagnostic); }); } if (!this.diagnostics.length) { - this.logger.info(this.colors.green('No type errors found')); + this.logger.info(chalk.green('No type errors found')); } if (this.tslint && !this.lints.length) { - this.logger.info(this.colors.green('No lint errors found')); + this.logger.info(chalk.green('No lint errors found')); } this.logger.info( 'Version: typescript ' + - this.colors.bold(this.typescriptVersion) + + chalk.bold(this.typescriptVersion) + (this.eslint - ? ', eslint ' + this.colors.bold(this.eslintVersion as string) + ? ', eslint ' + chalk.bold(this.eslintVersion as string) : this.tslint - ? ', tslint ' + this.colors.bold(this.tslintVersion as string) + ? ', tslint ' + chalk.bold(this.tslintVersion as string) : '') ); this.logger.info( - 'Time: ' + - this.colors.bold(Math.round(elapsed / 1e6).toString()) + - 'ms' + 'Time: ' + chalk.bold(Math.round(elapsed / 1e6).toString()) + 'ms' ); } }; diff --git a/src/issue/Issue.ts b/src/issue/Issue.ts new file mode 100644 index 00000000..d15bca7c --- /dev/null +++ b/src/issue/Issue.ts @@ -0,0 +1,87 @@ +import { + IssueSeverity, + compareIssueSeverities, + isIssueSeverity +} from './IssueSeverity'; +import { IssueOrigin, compareIssueOrigins, isIssueOrigin } from './IssueOrigin'; + +interface Issue { + origin: IssueOrigin; + severity: IssueSeverity; + code: string; + message: string; + file?: string; + line?: number; + character?: number; + stack?: string; +} + +function isIssue(value: unknown): value is Issue { + return ( + !!value && + typeof value === 'object' && + isIssueOrigin((value as Issue).origin) && + isIssueSeverity((value as Issue).severity) && + !!(value as Issue).code && + !!(value as Issue).message + ); +} + +function compareOptionalStrings(stringA?: string, stringB?: string) { + if (stringA === stringB) { + return 0; + } + + if (stringA === undefined || stringA === null) { + return -1; + } + if (stringB === undefined || stringB === null) { + return 1; + } + + return stringA.toString().localeCompare(stringB.toString()); +} + +function compareNumbers(numberA?: number, numberB?: number) { + if (numberA === numberB) { + return 0; + } + + if (numberA === undefined || numberA === null) { + return -1; + } + if (numberB === undefined || numberB === null) { + return 1; + } + + return Math.sign(numberA - numberB); +} + +function compareIssues(issueA: Issue, issueB: Issue) { + return ( + compareIssueOrigins(issueA.origin, issueB.origin) || + compareOptionalStrings(issueA.file, issueB.file) || + compareIssueSeverities(issueA.severity, issueB.severity) || + compareNumbers(issueA.line, issueB.line) || + compareNumbers(issueA.character, issueB.character) || + compareOptionalStrings(issueA.code, issueB.code) || + compareOptionalStrings(issueA.message, issueB.message) || + compareOptionalStrings(issueA.stack, issueB.stack) || + 0 /* EqualTo */ + ); +} + +function equalsIssues(issueA: Issue, issueB: Issue) { + return compareIssues(issueA, issueB) === 0; +} + +function deduplicateAndSortIssues(issues: Issue[]) { + const sortedIssues = issues.filter(isIssue).sort(compareIssues); + + return sortedIssues.filter( + (issue, index) => + index === 0 || !equalsIssues(issue, sortedIssues[index - 1]) + ); +} + +export { Issue, isIssue, deduplicateAndSortIssues }; diff --git a/src/issue/IssueOrigin.ts b/src/issue/IssueOrigin.ts new file mode 100644 index 00000000..2b9fec72 --- /dev/null +++ b/src/issue/IssueOrigin.ts @@ -0,0 +1,31 @@ +const IssueOrigin = { + TYPESCRIPT: 'typescript', + TSLINT: 'tslint', + ESLINT: 'eslint', + INTERNAL: 'internal' +} as const; +type IssueOrigin = typeof IssueOrigin[keyof typeof IssueOrigin]; + +function isIssueOrigin(value: unknown): value is IssueOrigin { + return [ + IssueOrigin.TYPESCRIPT, + IssueOrigin.TSLINT, + IssueOrigin.ESLINT, + IssueOrigin.INTERNAL + ].includes(value as IssueOrigin); +} + +function compareIssueOrigins(originA: IssueOrigin, originB: IssueOrigin) { + const [priorityA, priorityB] = [originA, originB].map(origin => + [ + IssueOrigin.TSLINT /* 0 */, + IssueOrigin.ESLINT /* 1 */, + IssueOrigin.TYPESCRIPT /* 2 */, + IssueOrigin.INTERNAL /* 3 */ + ].indexOf(origin) + ); + + return Math.sign(priorityB - priorityA); +} + +export { IssueOrigin, isIssueOrigin, compareIssueOrigins }; diff --git a/src/issue/IssueSeverity.ts b/src/issue/IssueSeverity.ts new file mode 100644 index 00000000..bc0973f1 --- /dev/null +++ b/src/issue/IssueSeverity.ts @@ -0,0 +1,26 @@ +const IssueSeverity = { + ERROR: 'error', + WARNING: 'warning' +} as const; +type IssueSeverity = typeof IssueSeverity[keyof typeof IssueSeverity]; + +function isIssueSeverity(value: unknown): value is IssueSeverity { + return [IssueSeverity.ERROR, IssueSeverity.WARNING].includes( + value as IssueSeverity + ); +} + +function compareIssueSeverities( + severityA: IssueSeverity, + severityB: IssueSeverity +) { + const [priorityA, priorityB] = [severityA, severityB].map(severity => + [IssueSeverity.WARNING /* 0 */, IssueSeverity.ERROR /* 1 */].indexOf( + severity + ) + ); + + return Math.sign(priorityB - priorityA); +} + +export { IssueSeverity, isIssueSeverity, compareIssueSeverities }; diff --git a/src/issue/eslint/EsLintIssueFactory.ts b/src/issue/eslint/EsLintIssueFactory.ts new file mode 100644 index 00000000..52cd0905 --- /dev/null +++ b/src/issue/eslint/EsLintIssueFactory.ts @@ -0,0 +1,68 @@ +// tslint:disable-next-line:no-implicit-dependencies +import * as eslint from 'eslint'; // import for types alone +import { FileAwareEsLintMessage } from './FileAwareEsLintMessage'; +import { deduplicateAndSortIssues, Issue } from '../Issue'; +import { IssueOrigin } from '../IssueOrigin'; +import { IssueSeverity } from '../IssueSeverity'; + +function createIssueFromEsLintMessage(message: FileAwareEsLintMessage): Issue { + return { + origin: IssueOrigin.ESLINT, + code: message.ruleId ? String(message.ruleId) : '[unknown]', + severity: + message.severity === 1 ? IssueSeverity.WARNING : IssueSeverity.ERROR, + message: message.message, + file: message.filePath, + line: message.line, + character: message.column + }; +} + +function createFileAwareEsLintMessagesFromEsLintResult( + result: eslint.CLIEngine.LintResult +): FileAwareEsLintMessage[] { + return result.messages.map(message => ({ + ...message, + filePath: result.filePath + })); +} + +function createFileAwareEsLintMessagesFromEsLintReport( + report: eslint.CLIEngine.LintReport +): FileAwareEsLintMessage[] { + return report.results.reduce( + (messages, result) => [ + ...messages, + ...createFileAwareEsLintMessagesFromEsLintResult(result) + ], + [] + ); +} + +function createFileAwareEsLintMessagesFromEsLintReports( + reports: eslint.CLIEngine.LintReport[] +): FileAwareEsLintMessage[] { + return reports.reduce( + (messages, report) => [ + ...messages, + ...createFileAwareEsLintMessagesFromEsLintReport(report) + ], + [] + ); +} + +function createIssuesFromEsLintMessages( + messages: FileAwareEsLintMessage[] +): Issue[] { + return deduplicateAndSortIssues(messages.map(createIssueFromEsLintMessage)); +} + +function createIssuesFromEsLintReports( + reports: eslint.CLIEngine.LintReport[] +): Issue[] { + return createIssuesFromEsLintMessages( + createFileAwareEsLintMessagesFromEsLintReports(reports) + ); +} + +export { createIssuesFromEsLintReports }; diff --git a/src/issue/eslint/FileAwareEsLintMessage.ts b/src/issue/eslint/FileAwareEsLintMessage.ts new file mode 100644 index 00000000..63003751 --- /dev/null +++ b/src/issue/eslint/FileAwareEsLintMessage.ts @@ -0,0 +1,12 @@ +// tslint:disable-next-line:no-implicit-dependencies +import * as eslint from 'eslint'; + +/** + * We need to define custom interface because of eslint architecture which + * groups lint messages per file + */ +interface FileAwareEsLintMessage extends eslint.Linter.LintMessage { + filePath?: string; +} + +export { FileAwareEsLintMessage }; diff --git a/src/issue/eslint/index.ts b/src/issue/eslint/index.ts new file mode 100644 index 00000000..a2b99197 --- /dev/null +++ b/src/issue/eslint/index.ts @@ -0,0 +1,2 @@ +export * from './FileAwareEsLintMessage'; +export * from './EsLintIssueFactory'; diff --git a/src/issue/index.ts b/src/issue/index.ts new file mode 100644 index 00000000..dbfebb24 --- /dev/null +++ b/src/issue/index.ts @@ -0,0 +1,8 @@ +export * from './Issue'; +export * from './IssueOrigin'; +export * from './IssueSeverity'; + +export * from './typescript'; +export * from './eslint'; +export * from './tslint'; +export * from './internal'; diff --git a/src/issue/internal/InternalIssueFactory.ts b/src/issue/internal/InternalIssueFactory.ts new file mode 100644 index 00000000..79f055bd --- /dev/null +++ b/src/issue/internal/InternalIssueFactory.ts @@ -0,0 +1,16 @@ +import { Issue } from '../Issue'; +import { IssueOrigin } from '../IssueOrigin'; +import { IssueSeverity } from '../IssueSeverity'; + +function createIssueFromInternalError(error: any): Issue { + return { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: + typeof error.message === 'string' ? error.message : error.toString(), + stack: typeof error.stack === 'string' ? error.stack : undefined + }; +} + +export { createIssueFromInternalError }; diff --git a/src/issue/internal/index.ts b/src/issue/internal/index.ts new file mode 100644 index 00000000..bb225ce3 --- /dev/null +++ b/src/issue/internal/index.ts @@ -0,0 +1 @@ +export * from './InternalIssueFactory'; diff --git a/src/issue/tslint/TsLintIssueFactory.ts b/src/issue/tslint/TsLintIssueFactory.ts new file mode 100644 index 00000000..8895ebf5 --- /dev/null +++ b/src/issue/tslint/TsLintIssueFactory.ts @@ -0,0 +1,32 @@ +// tslint:disable-next-line:no-implicit-dependencies +import * as tslint from 'tslint'; // import for types alone +import { deduplicateAndSortIssues, Issue } from '../Issue'; +import { IssueOrigin } from '../IssueOrigin'; +import { IssueSeverity } from '../IssueSeverity'; + +function createIssueFromTsLintRuleFailure(failure: tslint.RuleFailure): Issue { + const position = failure.getStartPosition().getLineAndCharacter(); + + return { + origin: IssueOrigin.TSLINT, + code: failure.getRuleName(), + severity: + failure.getRuleSeverity() === 'warning' + ? IssueSeverity.WARNING + : IssueSeverity.ERROR, + message: failure.getFailure(), + file: failure.getFileName(), + line: position.line + 1, + character: position.character + 1 + }; +} + +function createIssuesFromTsLintRuleFailures( + failures: tslint.RuleFailure[] +): Issue[] { + return deduplicateAndSortIssues( + failures.map(createIssueFromTsLintRuleFailure) + ); +} + +export { createIssueFromTsLintRuleFailure, createIssuesFromTsLintRuleFailures }; diff --git a/src/issue/tslint/index.ts b/src/issue/tslint/index.ts new file mode 100644 index 00000000..9398a17b --- /dev/null +++ b/src/issue/tslint/index.ts @@ -0,0 +1 @@ +export * from './TsLintIssueFactory'; diff --git a/src/issue/typescript/TypeScriptIssueFactory.ts b/src/issue/typescript/TypeScriptIssueFactory.ts new file mode 100644 index 00000000..317faf09 --- /dev/null +++ b/src/issue/typescript/TypeScriptIssueFactory.ts @@ -0,0 +1,72 @@ +// tslint:disable-next-line:no-implicit-dependencies +import * as ts from 'typescript'; // import for types alone +import { deduplicateAndSortIssues, Issue } from '../Issue'; +import { IssueOrigin } from '../IssueOrigin'; +import { IssueSeverity } from '../IssueSeverity'; + +/** + * Based on the TypeScript source - not used directly from the `typescript` + * package as there is an option to pass a custom TypeScript instance. + */ +function flattenDiagnosticMessageText( + messageText: string | ts.DiagnosticMessageChain +) { + if (typeof messageText === 'string') { + return messageText; + } else { + let diagnosticChain: ts.DiagnosticMessageChain | undefined = messageText; + let flattenMessageText = ''; + let indent = 0; + + while (diagnosticChain) { + if (indent) { + flattenMessageText += '\n'; + for (let i = 0; i < indent; i++) { + flattenMessageText += ' '; + } + } + + flattenMessageText += diagnosticChain.messageText; + indent++; + diagnosticChain = diagnosticChain.next; + } + + return flattenMessageText; + } +} + +function createIssueFromTsDiagnostic(diagnostic: ts.Diagnostic): Issue { + let file: string | undefined; + let line: number | undefined; + let character: number | undefined; + + if (diagnostic.file) { + file = diagnostic.file.fileName; + + if (diagnostic.start) { + const position = diagnostic.file.getLineAndCharacterOfPosition( + diagnostic.start + ); + line = position.line + 1; + character = position.character + 1; + } + } + + return { + origin: IssueOrigin.TYPESCRIPT, + code: String(diagnostic.code), + // we don't handle Suggestion and Message diagnostics + severity: + diagnostic.category === 0 ? IssueSeverity.WARNING : IssueSeverity.ERROR, + message: flattenDiagnosticMessageText(diagnostic.messageText), + file, + line, + character + }; +} + +function createIssuesFromTsDiagnostics(diagnostic: ts.Diagnostic[]): Issue[] { + return deduplicateAndSortIssues(diagnostic.map(createIssueFromTsDiagnostic)); +} + +export { createIssueFromTsDiagnostic, createIssuesFromTsDiagnostics }; diff --git a/src/issue/typescript/index.ts b/src/issue/typescript/index.ts new file mode 100644 index 00000000..1de7d0a9 --- /dev/null +++ b/src/issue/typescript/index.ts @@ -0,0 +1 @@ +export * from './TypeScriptIssueFactory'; diff --git a/src/linterConfigHelpers.ts b/src/linterConfigHelpers.ts index 9ef5a890..942c8c21 100644 --- a/src/linterConfigHelpers.ts +++ b/src/linterConfigHelpers.ts @@ -1,12 +1,14 @@ import * as path from 'path'; -// tslint:disable-next-line:no-implicit-dependencies -import { Configuration } from 'tslint'; import * as minimatch from 'minimatch'; +// tslint:disable-next-line:no-implicit-dependencies +import * as tslint from 'tslint'; // imported for types alone + import { fileExistsSync } from './FsHelper'; // Need some augmentation here - linterOptions.exclude is not (yet) part of the official // types for tslint. -export interface ConfigurationFile extends Configuration.IConfigurationFile { +export interface ConfigurationFile + extends tslint.Configuration.IConfigurationFile { linterOptions?: { typeCheck?: boolean; exclude?: string[]; @@ -15,9 +17,9 @@ export interface ConfigurationFile extends Configuration.IConfigurationFile { export function loadLinterConfig(configFile: string): ConfigurationFile { // tslint:disable-next-line:no-implicit-dependencies - const tslint = require('tslint'); + const { Configuration } = require('tslint'); - return tslint.Configuration.loadConfigurationFromPath( + return Configuration.loadConfigurationFromPath( configFile ) as ConfigurationFile; } diff --git a/src/service.ts b/src/service.ts index a0f04d67..d23ab45f 100644 --- a/src/service.ts +++ b/src/service.ts @@ -4,22 +4,17 @@ import * as ts from 'typescript'; // import for types alone import { IncrementalChecker } from './IncrementalChecker'; import { CancellationToken } from './CancellationToken'; -import { NormalizedMessage } from './NormalizedMessage'; import { IncrementalCheckerInterface, ApiIncrementalCheckerParams, IncrementalCheckerParams } from './IncrementalCheckerInterface'; import { ApiIncrementalChecker } from './ApiIncrementalChecker'; -import { - makeCreateNormalizedMessageFromDiagnostic, - makeCreateNormalizedMessageFromRuleFailure, - makeCreateNormalizedMessageFromInternalError -} from './NormalizedMessageFactories'; import { RpcProvider } from 'worker-rpc'; import { RunPayload, RunResult, RUN } from './RpcTypes'; import { TypeScriptPatchConfig, patchTypescript } from './patchTypescript'; import { createEslinter } from './createEslinter'; +import { createIssueFromInternalError, Issue } from './issue'; const rpc = new RpcProvider(message => { try { @@ -44,13 +39,6 @@ const patchConfig: TypeScriptPatchConfig = { patchTypescript(typescript, patchConfig); -// message factories -export const createNormalizedMessageFromDiagnostic = makeCreateNormalizedMessageFromDiagnostic( - typescript -); -export const createNormalizedMessageFromRuleFailure = makeCreateNormalizedMessageFromRuleFailure(); -export const createNormalizedMessageFromInternalError = makeCreateNormalizedMessageFromInternalError(); - const resolveModuleName = process.env.RESOLVE_MODULE_NAME ? require(process.env.RESOLVE_MODULE_NAME!).resolveModuleName : undefined; @@ -73,11 +61,9 @@ function createChecker( context: process.env.CONTEXT!, programConfigFile: process.env.TSCONFIG!, compilerOptions: JSON.parse(process.env.COMPILER_OPTIONS!), - createNormalizedMessageFromDiagnostic, linterConfigFile: process.env.TSLINT === 'true' ? true : process.env.TSLINT! || false, linterAutoFix: process.env.TSLINTAUTOFIX === 'true', - createNormalizedMessageFromRuleFailure, eslinter, checkSyntacticErrors: process.env.CHECK_SYNTACTIC_ERRORS === 'true', resolveModuleName, @@ -105,24 +91,24 @@ function createChecker( const checker = createChecker(process.env.USE_INCREMENTAL_API === 'true'); async function run(cancellationToken: CancellationToken) { - let diagnostics: NormalizedMessage[] = []; - let lints: NormalizedMessage[] = []; + const diagnostics: Issue[] = []; + const lints: Issue[] = []; try { checker.nextIteration(); - diagnostics = await checker.getDiagnostics(cancellationToken); + diagnostics.push(...(await checker.getTypeScriptIssues(cancellationToken))); if (checker.hasEsLinter()) { - lints = checker.getEsLints(cancellationToken); - } else if (checker.hasLinter()) { - lints = checker.getLints(cancellationToken); + lints.push(...(await checker.getEsLintIssues(cancellationToken))); + } else if (checker.hasTsLinter()) { + lints.push(...(await checker.getTsLintIssues(cancellationToken))); } } catch (error) { if (error instanceof typescript.OperationCanceledException) { return undefined; } - diagnostics.push(createNormalizedMessageFromInternalError(error)); + diagnostics.push(createIssueFromInternalError(error)); } if (cancellationToken.isCancellationRequested()) { diff --git a/test/unit/NormalizedMessage.spec.js b/test/unit/NormalizedMessage.spec.js deleted file mode 100644 index c9cadb23..00000000 --- a/test/unit/NormalizedMessage.spec.js +++ /dev/null @@ -1,226 +0,0 @@ -var NormalizedMessage = require('../../lib/NormalizedMessage') - .NormalizedMessage; - -describe('[UNIT] NormalizedMessage', () => { - var diagnosticMessage; - var lintMessage; - - beforeEach(() => { - diagnosticMessage = new NormalizedMessage({ - type: 'diagnostic', - code: 123, - severity: 'error', - content: 'foo', - file: '/foo/bar.ts', - line: 532, - character: 12 - }); - - lintMessage = new NormalizedMessage({ - type: 'lint', - code: 321, - severity: 'warning', - content: 'bar', - file: '/bar/foo.tsx', - line: 890, - character: 11 - }); - }); - - it('should create new message', () => { - expect(diagnosticMessage.type).toBe('diagnostic'); - expect(diagnosticMessage.code).toBe(123); - expect(diagnosticMessage.severity).toBe('error'); - expect(diagnosticMessage.content).toBe('foo'); - expect(diagnosticMessage.file).toBe('/foo/bar.ts'); - expect(diagnosticMessage.line).toBe(532); - expect(diagnosticMessage.character).toBe(12); - }); - - it('should serialize and create from json', () => { - var json = diagnosticMessage.toJSON(); - - expect(typeof json).toBe('object'); - - var jsonMessage = NormalizedMessage.createFromJSON(json); - - expect(jsonMessage).toBeInstanceOf(NormalizedMessage); - expect(jsonMessage.type).toBe(diagnosticMessage.type); - expect(jsonMessage.code).toBe(diagnosticMessage.code); - expect(jsonMessage.severity).toBe(diagnosticMessage.severity); - expect(jsonMessage.content).toBe(diagnosticMessage.content); - expect(jsonMessage.file).toBe(diagnosticMessage.file); - expect(jsonMessage.line).toBe(diagnosticMessage.line); - expect(jsonMessage.character).toBe(diagnosticMessage.character); - }); - - it('should check type', () => { - expect(diagnosticMessage.isDiagnosticType()).toBe(true); - expect(diagnosticMessage.isLintType()).toBe(false); - expect(lintMessage.isDiagnosticType()).toBe(false); - expect(lintMessage.isLintType()).toBe(true); - }); - - it('should return formatted code', () => { - expect(diagnosticMessage.getFormattedCode()).toBe( - 'TS' + diagnosticMessage.code - ); - expect(lintMessage.getFormattedCode()).toBe(lintMessage.code); - }); - - it('should check severity', () => { - expect(diagnosticMessage.isErrorSeverity()).toBe(true); - expect(diagnosticMessage.isWarningSeverity()).toBe(false); - expect(lintMessage.isErrorSeverity()).toBe(false); - expect(lintMessage.isWarningSeverity()).toBe(true); - }); - - it('should compare numbers in asc', () => { - expect(NormalizedMessage.compareNumbers(123, 126)).toBeLessThan(0); - expect(NormalizedMessage.compareNumbers(-123, 126)).toBeLessThan(0); - expect(NormalizedMessage.compareNumbers(-126, -123)).toBeLessThan(0); - expect(NormalizedMessage.compareNumbers(132, 42)).toBeGreaterThan(0); - expect(NormalizedMessage.compareNumbers(132, -42)).toBeGreaterThan(0); - expect(NormalizedMessage.compareNumbers(-42, -132)).toBeGreaterThan(0); - expect(NormalizedMessage.compareNumbers(15, 15)).toBe(0); - expect(NormalizedMessage.compareNumbers(0, 0)).toBe(0); - expect(NormalizedMessage.compareNumbers(-15, -15)).toBe(0); - }); - - it('should compare strings in asc', () => { - expect(NormalizedMessage.compareOptionalStrings('abc', 'xyz')).toBeLessThan( - 0 - ); - expect( - NormalizedMessage.compareOptionalStrings(undefined, 'xyz') - ).toBeLessThan(0); - expect(NormalizedMessage.compareOptionalStrings(null, 'xyz')).toBeLessThan( - 0 - ); - expect( - NormalizedMessage.compareOptionalStrings('xyz', 'abc') - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compareOptionalStrings('xyz', undefined) - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compareOptionalStrings('xyz', null) - ).toBeGreaterThan(0); - expect(NormalizedMessage.compareOptionalStrings('xyz', 'xyz')).toBe(0); - expect(NormalizedMessage.compareOptionalStrings(undefined, undefined)).toBe( - 0 - ); - expect(NormalizedMessage.compareOptionalStrings(null, null)).toBe(0); - }); - - it('should compare severities in asc', () => { - expect( - NormalizedMessage.compareSeverities('warning', 'error') - ).toBeLessThan(0); - expect( - NormalizedMessage.compareSeverities('unknown', 'warning') - ).toBeLessThan(0); - expect( - NormalizedMessage.compareSeverities('error', 'warning') - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compareSeverities('warning', 'unknown') - ).toBeGreaterThan(0); - expect(NormalizedMessage.compareSeverities('error', 'error')).toBe(0); - expect(NormalizedMessage.compareSeverities('warning', 'warning')).toBe(0); - expect(NormalizedMessage.compareSeverities('unknown', 'unknown')).toBe(0); - expect( - NormalizedMessage.compareSeverities('unknown', 'another_unknown') - ).toBe(0); - }); - - it('should compare types in asc', () => { - expect(NormalizedMessage.compareTypes('lint', 'diagnostic')).toBeLessThan( - 0 - ); - expect(NormalizedMessage.compareTypes('unknown', 'lint')).toBeLessThan(0); - expect( - NormalizedMessage.compareTypes('diagnostic', 'lint') - ).toBeGreaterThan(0); - expect(NormalizedMessage.compareTypes('lint', 'unknown')).toBeGreaterThan( - 0 - ); - expect(NormalizedMessage.compareTypes('diagnostic', 'diagnostic')).toBe(0); - expect(NormalizedMessage.compareTypes('lint', 'lint')).toBe(0); - expect(NormalizedMessage.compareTypes('unknown', 'unknown')).toBe(0); - expect(NormalizedMessage.compareTypes('unknown', 'another_unknown')).toBe( - 0 - ); - }); - - it('should compare messages', () => { - var messageA = diagnosticMessage; - function buildMessage(diff) { - return NormalizedMessage.createFromJSON({ - ...messageA.toJSON(), - ...diff - }); - } - - expect(NormalizedMessage.compare(messageA, undefined)).toBeGreaterThan(0); - expect(NormalizedMessage.compare(undefined, messageA)).toBeLessThan(0); - expect(NormalizedMessage.compare(messageA, {})).toBeGreaterThan(0); - expect(NormalizedMessage.compare({}, messageA)).toBeLessThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ type: 'lint' })) - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ file: '/goo/bar.ts' })) - ).toBeLessThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ severity: 'notice' })) - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ line: 400 })) - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ character: 200 })) - ).toBeLessThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ code: 100 })) - ).toBeGreaterThan(0); - expect( - NormalizedMessage.compare(messageA, buildMessage({ content: 'bar' })) - ).toBeGreaterThan(0); - }); - - it('should check if messages are equal', () => { - var messageA = diagnosticMessage; - var messageB = NormalizedMessage.createFromJSON(diagnosticMessage.toJSON()); - var messageC = lintMessage; - var messageD = NormalizedMessage.createFromJSON(lintMessage.toJSON()); - - expect(NormalizedMessage.equals(messageA, messageB)).toBe(true); - expect(NormalizedMessage.equals(messageA, messageC)).toBe(false); - expect(NormalizedMessage.equals(messageA, messageD)).toBe(false); - expect(NormalizedMessage.equals(messageB, messageC)).toBe(false); - expect(NormalizedMessage.equals(messageB, messageD)).toBe(false); - expect(NormalizedMessage.equals(messageC, messageD)).toBe(true); - }); - - it('should deduplicate list of messages', () => { - var messageA = diagnosticMessage; - var messageB = NormalizedMessage.createFromJSON(diagnosticMessage.toJSON()); - var messageC = lintMessage; - var messageD = NormalizedMessage.createFromJSON(lintMessage.toJSON()); - - var messages = [ - messageA, - messageC, - messageD, - messageD, - messageB, - messageC, - messageA - ]; - var unique = NormalizedMessage.deduplicate(messages); - - expect(Array.isArray(unique)).toBe(true); - expect(unique).toEqual([messageC, messageA]); - }); -}); diff --git a/test/unit/codeframeFormatter.spec.js b/test/unit/codeframeFormatter.spec.js deleted file mode 100644 index 667945d7..00000000 --- a/test/unit/codeframeFormatter.spec.js +++ /dev/null @@ -1,110 +0,0 @@ -var os = require('os'); -var mockFs = require('mock-fs'); -var NormalizedMessage = require('../../lib/NormalizedMessage') - .NormalizedMessage; -var createCodeframeFormatter = require('../../lib/formatter/codeframeFormatter') - .createCodeframeFormatter; - -describe('[UNIT] formatter/codeframeFormatter', () => { - beforeEach(() => { - mockFs({ - some: { - 'file.ts': [ - 'class SomeClass {', - ' private someProperty: boolean;', - ' constructor() {', - " console.log('anything special');", - ' }', - '}' - ].join('\n') - } - }); - }); - - afterEach(() => { - mockFs.restore(); - }); - - it('should format normalized diagnostic message', () => { - var message = new NormalizedMessage({ - type: NormalizedMessage.TYPE_DIAGNOSTIC, - code: 123, - severity: NormalizedMessage.SEVERITY_ERROR, - content: 'Some diagnostic content', - file: 'some/file.ts', - line: 1, - character: 7 - }); - var formatter = createCodeframeFormatter({ - linesAbove: 1, - linesBelow: 1 - }); - var formattedMessage = formatter(message, false); - - expect(formattedMessage).toBe( - 'ERROR in some/file.ts(1,7):' + - os.EOL + - '1:7 Some diagnostic content' + - os.EOL + - ' > 1 | class SomeClass {' + - os.EOL + - ' | ^' + - os.EOL + - ' 2 | private someProperty: boolean;' - ); - }); - - it('should format normalized lint message', () => { - var message = new NormalizedMessage({ - type: NormalizedMessage.TYPE_LINT, - code: 'some-lint-rule', - severity: NormalizedMessage.SEVERITY_WARNING, - content: 'Some lint content', - file: 'some/file.ts', - line: 2, - character: 11 - }); - var formatter = createCodeframeFormatter({ - linesAbove: 1, - linesBelow: 1 - }); - var formattedMessage = formatter(message, false); - - expect(formattedMessage).toBe( - 'WARNING in some/file.ts(2,11):' + - os.EOL + - '2:11 Some lint content' + - os.EOL + - ' 1 | class SomeClass {' + - os.EOL + - ' > 2 | private someProperty: boolean;' + - os.EOL + - ' | ^' + - os.EOL + - ' 3 | constructor() {' - ); - }); - - it('should format normalized message without file', () => { - var message = new NormalizedMessage({ - type: NormalizedMessage.TYPE_LINT, - code: 'some-lint-rule', - severity: NormalizedMessage.SEVERITY_WARNING, - content: 'Some lint content', - file: 'some/unknown-file.ts', - line: 2, - character: 11 - }); - var formatter = createCodeframeFormatter({ - linesAbove: 1, - linesBelow: 1 - }); - var formattedMessage = formatter(message, false); - - expect(formattedMessage).toBe( - 'WARNING in some/unknown-file.ts(2,11):' + - os.EOL + - '2:11 Some lint content' - ); - }); -}); diff --git a/test/unit/defaultFormatter.spec.js b/test/unit/defaultFormatter.spec.js deleted file mode 100644 index dc0526ed..00000000 --- a/test/unit/defaultFormatter.spec.js +++ /dev/null @@ -1,45 +0,0 @@ -var os = require('os'); -var NormalizedMessage = require('../../lib/NormalizedMessage') - .NormalizedMessage; -var createDefaultFormatter = require('../../lib/formatter/defaultFormatter') - .createDefaultFormatter; - -describe('[UNIT] formatter/defaultFormatter', () => { - it('should format normalized diagnostic message', () => { - var message = new NormalizedMessage({ - type: NormalizedMessage.TYPE_DIAGNOSTIC, - code: 123, - severity: NormalizedMessage.SEVERITY_ERROR, - content: 'Some diagnostic content', - file: '/some/file.ts', - line: 1, - character: 5 - }); - var formatter = createDefaultFormatter(); - var formattedMessage = formatter(message, false); - - expect(formattedMessage).toBe( - 'ERROR in /some/file.ts(1,5):' + os.EOL + 'TS123: Some diagnostic content' - ); - }); - - it('should format normalized lint message', () => { - var message = new NormalizedMessage({ - type: NormalizedMessage.TYPE_LINT, - code: 'some-lint-rule', - severity: NormalizedMessage.SEVERITY_WARNING, - content: 'Some lint content', - file: '/some/file.ts', - line: 2, - character: 6 - }); - var formatter = createDefaultFormatter(); - var formattedMessage = formatter(message, false); - - expect(formattedMessage).toBe( - 'WARNING in /some/file.ts(2,6):' + - os.EOL + - 'some-lint-rule: Some lint content' - ); - }); -}); diff --git a/test/unit/formatter/CodeframeFormatter.spec.js b/test/unit/formatter/CodeframeFormatter.spec.js new file mode 100644 index 00000000..7f41956d --- /dev/null +++ b/test/unit/formatter/CodeframeFormatter.spec.js @@ -0,0 +1,99 @@ +const os = require('os'); +const mockFs = require('mock-fs'); +const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); +const { + createCodeframeFormatter +} = require('../../../lib/formatter/CodeframeFormatter'); + +describe('[UNIT] formatter/CodeframeFormatter', () => { + beforeEach(() => { + mockFs({ + src: { + 'index.ts': [ + 'const y: number = "1";', + 'const x = 1;', + '', + 'function z() {', + ' console.log(y);', + '}' + ].join('\n') + } + }); + }); + + afterEach(() => { + mockFs.restore(); + }); + + it.each([ + [ + { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '2322', + message: `Type '"1"' is not assignable to type 'number'.`, + file: 'src/index.ts', + line: 1, + character: 7 + }, + [ + `ERROR in src/index.ts(1,7):`, + `1:7 Type '"1"' is not assignable to type 'number'.`, + ' > 1 | const y: number = "1";', + ' | ^', + ' 2 | const x = 1;' + ].join(os.EOL) + ], + [ + { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '2322', + message: `Type '"1"' is not assignable to type 'number'.`, + file: 'src/not-existing.ts', + line: 1, + character: 7 + }, + [ + `ERROR in src/not-existing.ts(1,7):`, + `1:7 Type '"1"' is not assignable to type 'number'.` + ].join(os.EOL) + ], + [ + { + origin: IssueOrigin.ESLINT, + severity: IssueSeverity.WARNING, + code: 'no-unused-vars', + message: `'x' is assigned a value but never used.`, + file: 'src/index.ts', + line: 2, + character: 7 + }, + [ + `WARNING in src/index.ts(2,7):`, + `2:7 'x' is assigned a value but never used.`, + ' 1 | const y: number = "1";', + ' > 2 | const x = 1;', + ' | ^', + ' 3 | ' + ].join(os.EOL) + ], + [ + { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: `Stack overflow - out of memory` + }, + 'INTERNAL ERROR: Stack overflow - out of memory' + ] + ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + const formatter = createCodeframeFormatter({ + linesAbove: 1, + linesBelow: 1 + }); + const formatted = formatter(issue); + + expect(formatted).toEqual(expectedFormatted); + }); +}); diff --git a/test/unit/formatter/DefaultFormatter.spec.js b/test/unit/formatter/DefaultFormatter.spec.js new file mode 100644 index 00000000..22024a51 --- /dev/null +++ b/test/unit/formatter/DefaultFormatter.spec.js @@ -0,0 +1,54 @@ +const os = require('os'); +const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); +const { + createDefaultFormatter +} = require('../../../lib/formatter/DefaultFormatter'); + +describe('[UNIT] formatter/DefaultFormatter', () => { + it.each([ + [ + { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '2322', + message: `Type '"1"' is not assignable to type 'number'.`, + file: 'src/index.ts', + line: 1, + character: 7 + }, + [ + `ERROR in src/index.ts(1,7):`, + `TS2322: Type '"1"' is not assignable to type 'number'.` + ].join(os.EOL) + ], + [ + { + origin: IssueOrigin.ESLINT, + severity: IssueSeverity.WARNING, + code: 'no-unused-vars', + message: `'x' is assigned a value but never used.`, + file: 'src/index.ts', + line: 2, + character: 10 + }, + [ + `WARNING in src/index.ts(2,10):`, + `no-unused-vars: 'x' is assigned a value but never used.` + ].join(os.EOL) + ], + [ + { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: `Stack overflow - out of memory` + }, + 'INTERNAL ERROR: Stack overflow - out of memory' + ] + ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + const formatter = createDefaultFormatter(); + const formatted = formatter(issue); + + expect(formatted).toEqual(expectedFormatted); + }); +}); diff --git a/test/unit/formatter/FormatterFactory.spec.js b/test/unit/formatter/FormatterFactory.spec.js new file mode 100644 index 00000000..49291008 --- /dev/null +++ b/test/unit/formatter/FormatterFactory.spec.js @@ -0,0 +1,92 @@ +const os = require('os'); +const mockFs = require('mock-fs'); +const { createFormatter } = require('../../../lib/formatter'); +const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); + +describe('[UNIT] formatter/FormatterFactory', () => { + beforeEach(() => { + mockFs({ + some: { + 'file.ts': [ + 'class SomeClass {', + ' private someProperty: boolean;', + ' constructor() {', + " console.log('anything special');", + ' }', + '}' + ].join('\n') + } + }); + }); + + afterEach(() => { + mockFs.restore(); + }); + + const issue = { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: 123, + message: 'Some issue content', + file: 'some/file.ts', + line: 1, + character: 7 + }; + + it.each(['default', undefined])('creates default formatter', type => { + const formatter = createFormatter(type); + const formattedMessage = formatter(issue); + + expect(formattedMessage).toEqual( + ['ERROR in some/file.ts(1,7):', 'TS123: Some issue content'].join(os.EOL) + ); + }); + + it('creates codeframe formatter', () => { + const formatter = createFormatter('codeframe'); + const formattedMessage = formatter(issue); + + expect(formattedMessage).toEqual( + [ + 'ERROR in some/file.ts(1,7):', + '1:7 Some issue content', + ' > 1 | class SomeClass {', + ' | ^', + ' 2 | private someProperty: boolean;', + ' 3 | constructor() {', + " 4 | console.log('anything special');" + ].join(os.EOL) + ); + }); + + it('creates codeframe formatter with custom options', () => { + const formatter = createFormatter('codeframe', { + linesAbove: 1, + linesBelow: 1 + }); + const formattedMessage = formatter(issue); + + expect(formattedMessage).toEqual( + [ + 'ERROR in some/file.ts(1,7):', + '1:7 Some issue content', + ' > 1 | class SomeClass {', + ' | ^', + ' 2 | private someProperty: boolean;' + ].join(os.EOL) + ); + }); + + it('forwards already created formatter', () => { + const formatter = createFormatter(issue => issue.message); + const formattedMessage = formatter(issue); + + expect(formattedMessage).toEqual('Some issue content'); + }); + + it('throws an error on unknown formatter type', () => { + expect(() => createFormatter('unknown-type')).toThrowError( + `Unknown "unknown-type" formatter. Available types are: default, codeframe.` + ); + }); +}); diff --git a/test/unit/formatter/InternalFormatter.spec.js b/test/unit/formatter/InternalFormatter.spec.js new file mode 100644 index 00000000..1911f698 --- /dev/null +++ b/test/unit/formatter/InternalFormatter.spec.js @@ -0,0 +1,64 @@ +const { IssueSeverity, IssueOrigin } = require('../../../lib/issue'); +const { createInternalFormatter } = require('../../../lib/formatter'); + +describe('[UNIT] formatter/InternalFormatter', () => { + it.each([ + [ + { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: `Stack overflow - out of memory` + }, + 'INTERNAL ERROR: Stack overflow - out of memory' + ], + [ + { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: `Stack overflow - out of memory`, + stack: [ + `Security context: 0x35903c44a49 `, + `1: walkFunctionDeclaration [/node_modules/webpack/lib/Parser.js:~443] [pc=0xa07a14ec8ee] (this=0x59f67991119 ,statement=0x3507a80af661 )`, + `2: walkStatement [/node_modules/webpack/lib/Parser.js:~348] [pc=0xa07a06dfc10] (this=0x59f6799111...`, + ``, + `FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory`, + `Abort trap: 6` + ].join('\n') + }, + [ + 'INTERNAL ERROR: Stack overflow - out of memory', + 'stack trace:', + `Security context: 0x35903c44a49 `, + `1: walkFunctionDeclaration [/node_modules/webpack/lib/Parser.js:~443] [pc=0xa07a14ec8ee] (this=0x59f67991119 ,statement=0x3507a80af661 )`, + `2: walkStatement [/node_modules/webpack/lib/Parser.js:~348] [pc=0xa07a06dfc10] (this=0x59f6799111...`, + ``, + `FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory`, + `Abort trap: 6` + ].join('\n') + ] + ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + const formatter = createInternalFormatter(); + const formatted = formatter(issue); + + expect(formatted).toEqual(expectedFormatted); + }); + + it('throws an error on non-internal issue format', () => { + const formatter = createInternalFormatter(); + const issue = { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '2322', + message: `Type '"1"' is not assignable to type 'number'.`, + file: 'src/index.ts', + line: 1, + character: 7 + }; + + expect(() => formatter(issue)).toThrowError( + `Not supported "${IssueOrigin.TYPESCRIPT}" issue origin.` + ); + }); +}); diff --git a/test/unit/formatter/RawFormatter.spec.js b/test/unit/formatter/RawFormatter.spec.js new file mode 100644 index 00000000..01c97a8a --- /dev/null +++ b/test/unit/formatter/RawFormatter.spec.js @@ -0,0 +1,36 @@ +const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); +const { createRawFormatter } = require('../../../lib/formatter'); + +describe('[UNIT] formatter/RawFormatter', () => { + it.each([ + [ + { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '2322', + message: `Type '"1"' is not assignable to type 'number'.`, + file: 'src/index.ts', + line: 1, + character: 7 + }, + `ERROR TS2322: Type '"1"' is not assignable to type 'number'.` + ], + [ + { + origin: IssueOrigin.ESLINT, + severity: IssueSeverity.WARNING, + code: 'no-unused-vars', + message: `'x' is assigned a value but never used.`, + file: 'src/index.ts', + line: 2, + character: 10 + }, + `WARNING no-unused-vars: 'x' is assigned a value but never used.` + ] + ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + const formatter = createRawFormatter(); + const formatted = formatter(issue); + + expect(formatted).toEqual(expectedFormatted); + }); +}); diff --git a/test/unit/formatter/__mocks__/chalk.js b/test/unit/formatter/__mocks__/chalk.js new file mode 100644 index 00000000..fe974613 --- /dev/null +++ b/test/unit/formatter/__mocks__/chalk.js @@ -0,0 +1,107 @@ +function style(...strings) { + // by-pass styling + return strings.join(' '); +} + +const modifiers = [ + 'reset', + 'bold', + 'dim', + 'italic', + 'underline', + 'inverse', + 'hidden', + 'strikethrough', + 'visible' +]; +const colors = [ + 'black', + 'red', + 'green', + 'yellow', + 'blue', + 'magenta', + 'cyan', + 'white', + 'blackBright', + 'gray', + 'grey', + 'redBright', + 'greenBright', + 'yellowBright', + 'blueBright', + 'magentaBright', + 'cyanBright', + 'whiteBright' +]; +const bgColors = [ + 'bgBlack', + 'bgRed', + 'bgGreen', + 'bgYellow', + 'bgBlue', + 'bgMagenta', + 'bgCyan', + 'bgWhite', + 'bgBlackBright', + 'bgGray', + 'bgGrey', + 'bgRedBright', + 'bgGreenBright', + 'bgYellowBright', + 'bgBlueBright', + 'bgMagentaBright', + 'bgCyanBright', + 'bgWhiteBright' +]; +const models = [ + 'rgb', + 'hex', + 'keyword', + 'hsl', + 'hsv', + 'hwb', + 'ansi', + 'ansi256' +]; + +const styleMethods = [...modifiers, ...colors, ...bgColors]; +const modelMethods = models; + +// register all style methods as a chain methods +styleMethods.forEach(method => { + style[method] = style; +}); +// register all model methods as a chain methods +modelMethods.forEach(method => { + style[method] = () => style; +}); + +// chalk constructor +function Chalk() { + // chalk API + this.supportsColor = { + level: 0, + hasBasic: false, + has256: false, + has16m: false + }; + + // register all style methods as a chalk API + styleMethods.forEach(method => { + this[method] = style; + }); + // register all model methods as a chalk API + modelMethods.forEach(method => { + this[method] = () => style; + }); +} + +// default chalk instance +const chalk = new Chalk(); +chalk.stderr = new Chalk(); +chalk.Instance = Chalk; + +// mimic chalk export style +chalk.default = chalk; +module.exports = chalk; diff --git a/test/unit/issue/Issue.spec.js b/test/unit/issue/Issue.spec.js new file mode 100644 index 00000000..154b9224 --- /dev/null +++ b/test/unit/issue/Issue.spec.js @@ -0,0 +1,363 @@ +const { IssueSeverity } = require('../../../lib/issue/IssueSeverity'); +const { IssueOrigin } = require('../../../lib/issue/IssueOrigin'); +const { + isIssue, + deduplicateAndSortIssues +} = require('../../../lib/issue/Issue'); + +function omit(object, keys) { + const omittedObject = Object.assign({}, object); + keys.forEach(key => delete omittedObject[key]); + + return omittedObject; +} + +describe('[UNIT] issue/Issue', () => { + const BASIC_INTERNAL_ISSUE = { + origin: IssueOrigin.INTERNAL, + severity: IssueSeverity.ERROR, + code: 'INTERNAL', + message: 'Out of memory' + }; + const BASIC_TYPESCRIPT_ISSUE = { + origin: IssueOrigin.TYPESCRIPT, + severity: IssueSeverity.ERROR, + code: '4221', + message: 'Cannot assign string to the number type' + }; + const BASIC_ESLINT_ISSUE = { + origin: IssueOrigin.ESLINT, + severity: IssueSeverity.ERROR, + code: 'white-space', + message: 'Missing space between function brackets' + }; + const BASIC_TSLINT_ISSUE = { + origin: IssueOrigin.TSLINT, + severity: IssueSeverity.WARNING, + code: 'white-space', + message: 'Missing space between function brackets' + }; + + it.each([ + BASIC_INTERNAL_ISSUE, + BASIC_TYPESCRIPT_ISSUE, + BASIC_ESLINT_ISSUE, + BASIC_TSLINT_ISSUE + ])("checks if '%p' is a Issue", issue => { + expect(isIssue(issue)).toEqual(true); + }); + + it.each([ + null, + undefined, + '', + 'test', + 1, + {}, + new Date(), + true, + false, + omit(BASIC_INTERNAL_ISSUE, ['origin']), + omit(BASIC_TYPESCRIPT_ISSUE, ['severity']), + omit(BASIC_ESLINT_ISSUE, ['code']), + omit(BASIC_TSLINT_ISSUE, ['message']), + omit(BASIC_TYPESCRIPT_ISSUE, ['origin', 'message']) + ])("checks if '%p' isn't a Issue", issue => { + expect(isIssue(issue)).toEqual(false); + }); + + it.each([ + [ + // compare origin + [ + BASIC_ESLINT_ISSUE, + BASIC_TYPESCRIPT_ISSUE, + BASIC_ESLINT_ISSUE, + BASIC_INTERNAL_ISSUE, + BASIC_TSLINT_ISSUE, + BASIC_INTERNAL_ISSUE, + BASIC_ESLINT_ISSUE + ], + [ + BASIC_INTERNAL_ISSUE, + BASIC_TYPESCRIPT_ISSUE, + BASIC_ESLINT_ISSUE, + BASIC_TSLINT_ISSUE + ] + ], + [ + // compare file + [ + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/index.ts' + }, + BASIC_INTERNAL_ISSUE, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/different.ts' + }, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/another.ts' + }, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/different.ts' + } + ], + [ + BASIC_INTERNAL_ISSUE, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/another.ts' + }, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/different.ts' + }, + { + ...BASIC_INTERNAL_ISSUE, + file: 'src/index.ts' + } + ] + ], + [ + // compare severity + [ + { + ...BASIC_ESLINT_ISSUE, + severity: IssueSeverity.WARNING + }, + { + ...BASIC_ESLINT_ISSUE, + severity: IssueSeverity.ERROR + }, + { + ...BASIC_ESLINT_ISSUE, + severity: IssueSeverity.WARNING + } + ], + [ + { + ...BASIC_ESLINT_ISSUE, + severity: IssueSeverity.ERROR + }, + { + ...BASIC_ESLINT_ISSUE, + severity: IssueSeverity.WARNING + } + ] + ], + [ + // compare line + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 15 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 5 + }, + BASIC_TYPESCRIPT_ISSUE, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10 + } + ], + [ + BASIC_TYPESCRIPT_ISSUE, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 5 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 15 + } + ] + ], + [ + // compare character + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 3 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 6 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 1 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 6 + } + ], + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 1 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 3 + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + line: 10, + character: 6 + } + ] + ], + [ + // compare code + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '1500' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '1000' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '2000' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '1000' + } + ], + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '1000' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '1500' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + code: '2000' + } + ] + ], + [ + // compare message + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'B' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'C' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'A' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'B' + } + ], + [ + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'A' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'B' + }, + { + ...BASIC_TYPESCRIPT_ISSUE, + message: 'C' + } + ] + ], + [ + // stack + [ + { + ...BASIC_INTERNAL_ISSUE, + stack: 'A' + }, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'C' + }, + BASIC_INTERNAL_ISSUE, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'A' + }, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'B' + } + ], + [ + BASIC_INTERNAL_ISSUE, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'A' + }, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'B' + }, + { + ...BASIC_INTERNAL_ISSUE, + stack: 'C' + } + ] + ], + [ + // empty + [], + [] + ], + [ + [ + BASIC_ESLINT_ISSUE, + omit(BASIC_ESLINT_ISSUE, ['message']), + BASIC_ESLINT_ISSUE + ], + [BASIC_ESLINT_ISSUE] + ], + [[omit(BASIC_ESLINT_ISSUE, ['message'])], []] + ])('deduplicates issues %p to %p', (issues, deduplicatedIssues) => { + expect(deduplicateAndSortIssues(issues)).toEqual(deduplicatedIssues); + }); +}); diff --git a/test/unit/issue/IssueOrigin.spec.js b/test/unit/issue/IssueOrigin.spec.js new file mode 100644 index 00000000..510e226c --- /dev/null +++ b/test/unit/issue/IssueOrigin.spec.js @@ -0,0 +1,58 @@ +const { + IssueOrigin, + isIssueOrigin, + compareIssueOrigins +} = require('../../../lib/issue/IssueOrigin'); + +describe('[UNIT] issue/IssueOrigin', () => { + it('defines issue origin enum', () => { + expect(IssueOrigin).toMatchSnapshot(); + }); + + it.each([ + IssueOrigin.INTERNAL, + IssueOrigin.TYPESCRIPT, + IssueOrigin.ESLINT, + IssueOrigin.TSLINT + ])("checks if '%p' is a IssueOrigin", origin => { + expect(isIssueOrigin(origin)).toEqual(true); + }); + + it.each([null, undefined, '', 'test', 1, {}, new Date(), true, false])( + "checks if '%p' isn't a IssueOrigin", + origin => { + expect(isIssueOrigin(origin)).toEqual(false); + } + ); + + it.each([ + // INTERNAL + [IssueOrigin.INTERNAL, IssueOrigin.INTERNAL, 0], + [IssueOrigin.INTERNAL, IssueOrigin.TYPESCRIPT, -1], + [IssueOrigin.INTERNAL, IssueOrigin.ESLINT, -1], + [IssueOrigin.INTERNAL, IssueOrigin.TSLINT, -1], + + // TYPESCRIPT + [IssueOrigin.TYPESCRIPT, IssueOrigin.INTERNAL, 1], + [IssueOrigin.TYPESCRIPT, IssueOrigin.TYPESCRIPT, 0], + [IssueOrigin.TYPESCRIPT, IssueOrigin.ESLINT, -1], + [IssueOrigin.TYPESCRIPT, IssueOrigin.TSLINT, -1], + + // ESLINT + [IssueOrigin.ESLINT, IssueOrigin.INTERNAL, 1], + [IssueOrigin.ESLINT, IssueOrigin.TYPESCRIPT, 1], + [IssueOrigin.ESLINT, IssueOrigin.ESLINT, 0], + [IssueOrigin.ESLINT, IssueOrigin.TSLINT, -1], + + // TSLINT + [IssueOrigin.TSLINT, IssueOrigin.INTERNAL, 1], + [IssueOrigin.TSLINT, IssueOrigin.TYPESCRIPT, 1], + [IssueOrigin.TSLINT, IssueOrigin.ESLINT, 1], + [IssueOrigin.TSLINT, IssueOrigin.TSLINT, 0] + ])( + "compares issue origin '%p' with '%p' and returns '%p'", + (originA, originB, result) => { + expect(compareIssueOrigins(originA, originB)).toEqual(result); + } + ); +}); diff --git a/test/unit/issue/IssueSeverity.spec.js b/test/unit/issue/IssueSeverity.spec.js new file mode 100644 index 00000000..78f3f799 --- /dev/null +++ b/test/unit/issue/IssueSeverity.spec.js @@ -0,0 +1,40 @@ +const { + IssueSeverity, + isIssueSeverity, + compareIssueSeverities +} = require('../../../lib/issue/IssueSeverity'); + +describe('[UNIT] issue/IssueSeverity', () => { + it('defines issue severity enum', () => { + expect(IssueSeverity).toMatchSnapshot(); + }); + + it.each([IssueSeverity.ERROR, IssueSeverity.WARNING])( + "checks if '%p' is a IssueSeverity", + severity => { + expect(isIssueSeverity(severity)).toEqual(true); + } + ); + + it.each([null, undefined, '', 'test', 1, {}, new Date(), true, false])( + "checks if '%p' isn't a IssueSeverity", + severity => { + expect(isIssueSeverity(severity)).toEqual(false); + } + ); + + it.each([ + // ERROR + [IssueSeverity.ERROR, IssueSeverity.ERROR, 0], + [IssueSeverity.ERROR, IssueSeverity.WARNING, -1], + + // WARNING + [IssueSeverity.WARNING, IssueSeverity.ERROR, 1], + [IssueSeverity.WARNING, IssueSeverity.WARNING, 0] + ])( + "compares issue severity '%p' with '%p' and returns '%p'", + (severityA, severityB, result) => { + expect(compareIssueSeverities(severityA, severityB)).toEqual(result); + } + ); +}); diff --git a/test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap b/test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap new file mode 100644 index 00000000..a6b704e5 --- /dev/null +++ b/test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap @@ -0,0 +1,10 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/IssueOrigin defines issue origin enum 1`] = ` +Object { + "ESLINT": "eslint", + "INTERNAL": "internal", + "TSLINT": "tslint", + "TYPESCRIPT": "typescript", +} +`; diff --git a/test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap b/test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap new file mode 100644 index 00000000..bbdaf90d --- /dev/null +++ b/test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap @@ -0,0 +1,8 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/IssueSeverity defines issue severity enum 1`] = ` +Object { + "ERROR": "error", + "WARNING": "warning", +} +`; diff --git a/test/unit/issue/eslint/EsLintIssueFactory.spec.js b/test/unit/issue/eslint/EsLintIssueFactory.spec.js new file mode 100644 index 00000000..8da2c0eb --- /dev/null +++ b/test/unit/issue/eslint/EsLintIssueFactory.spec.js @@ -0,0 +1,71 @@ +const { + createIssuesFromEsLintReports +} = require('../../../../lib/issue/eslint/EsLintIssueFactory'); + +describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { + const ES_LINT_MESSAGE_ERROR = { + column: 0, + line: 13, + endColumn: 5, + endLine: 13, + ruleId: 'no-unused-vars', + message: `'y' is assigned a value but never used.`, + nodeType: '', + severity: 0 + }; + const ES_LINT_MESSAGE_WARNING = { + column: 10, + line: 15, + message: `'y' is assigned a value but never used.`, + nodeType: '', + severity: 1 + }; + const ES_LINT_RESULT_INDEX = { + filePath: 'src/index.ts', + messages: [ES_LINT_MESSAGE_ERROR], + errorCount: 1, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; + const ES_LINT_RESULT_ANOTHER = { + filePath: 'src/another.ts', + messages: [ES_LINT_MESSAGE_WARNING], + errorCount: 0, + warningCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; + const ES_LINT_RESULT_ADDITIONAL = { + filePath: 'src/additional.ts', + messages: [ES_LINT_MESSAGE_ERROR], + errorCount: 1, + warningCount: 0, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; + const ES_LINT_REPORT_A = { + results: [ES_LINT_RESULT_INDEX, ES_LINT_RESULT_ANOTHER], + errorCount: 1, + warningCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; + const ES_LINT_REPORT_B = { + results: [ES_LINT_RESULT_ADDITIONAL], + errorCount: 1, + warningCount: 1, + fixableErrorCount: 0, + fixableWarningCount: 0 + }; + const ES_LINT_REPORTS = [ES_LINT_REPORT_A, ES_LINT_REPORT_B]; + + it.each([[ES_LINT_REPORTS]])( + 'creates Issues from EsLint Reports: %p', + reports => { + const issues = createIssuesFromEsLintReports(reports); + + expect(issues).toMatchSnapshot(); + } + ); +}); diff --git a/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap b/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap new file mode 100644 index 00000000..a8d6717e --- /dev/null +++ b/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/eslint/EsLintIssueFactory creates Issues from EsLint Reports: [[Object], [Object]] 1`] = ` +Array [ + Object { + "character": 0, + "code": "no-unused-vars", + "file": "src/additional.ts", + "line": 13, + "message": "'y' is assigned a value but never used.", + "origin": "eslint", + "severity": "error", + }, + Object { + "character": 10, + "code": "[unknown]", + "file": "src/another.ts", + "line": 15, + "message": "'y' is assigned a value but never used.", + "origin": "eslint", + "severity": "warning", + }, + Object { + "character": 0, + "code": "no-unused-vars", + "file": "src/index.ts", + "line": 13, + "message": "'y' is assigned a value but never used.", + "origin": "eslint", + "severity": "error", + }, +] +`; diff --git a/test/unit/issue/internal/InternalIssueFactory.spec.js b/test/unit/issue/internal/InternalIssueFactory.spec.js new file mode 100644 index 00000000..f4603c39 --- /dev/null +++ b/test/unit/issue/internal/InternalIssueFactory.spec.js @@ -0,0 +1,31 @@ +const { + createIssueFromInternalError +} = require('../../../../lib/issue/internal/InternalIssueFactory'); + +describe('[UNIT] issue/internal/InternalIssueFactory', () => { + const ERROR_WITH_MESSAGE_AND_STACK = { + message: 'Stack overflow - out of memory', + stack: [ + `Security context: 0x35903c44a49 `, + `1: walkFunctionDeclaration [/node_modules/webpack/lib/Parser.js:~443] [pc=0xa07a14ec8ee] (this=0x59f67991119 ,statement=0x3507a80af661 )`, + `2: walkStatement [/node_modules/webpack/lib/Parser.js:~348] [pc=0xa07a06dfc10] (this=0x59f6799111...`, + ``, + `FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory`, + `Abort trap: 6` + ].join('\n') + }; + const ERROR_WITHOUT_MESSAGE_AND_STACK = { + toString() { + return 'Error: Stack overflow - out of memory'; + } + }; + + it.each([[ERROR_WITH_MESSAGE_AND_STACK], [ERROR_WITHOUT_MESSAGE_AND_STACK]])( + 'creates Issue from Internal Error: %p', + error => { + const issue = createIssueFromInternalError(error); + + expect(issue).toMatchSnapshot(); + } + ); +}); diff --git a/test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap b/test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap new file mode 100644 index 00000000..a146c701 --- /dev/null +++ b/test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/internal/InternalIssueFactory creates Issue from Internal Error: {"message": "Stack overflow - out of memory", "stack": "Security context: 0x35903c44a49 +1: walkFunctionDeclaration [/node_modules/webpack/lib/Parser.js:~443] [pc=0xa07a14ec8ee] (this=0x59f67991119 ,statement=0x3507a80af661 ) +2: walkStatement [/node_modules/webpack/lib/Parser.js:~348] [pc=0xa07a06dfc10] (this=0x59f6799111... + +FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory +Abort trap: 6"} 1`] = ` +Object { + "code": "INTERNAL", + "message": "Stack overflow - out of memory", + "origin": "internal", + "severity": "error", + "stack": "Security context: 0x35903c44a49 +1: walkFunctionDeclaration [/node_modules/webpack/lib/Parser.js:~443] [pc=0xa07a14ec8ee] (this=0x59f67991119 ,statement=0x3507a80af661 ) +2: walkStatement [/node_modules/webpack/lib/Parser.js:~348] [pc=0xa07a06dfc10] (this=0x59f6799111... + +FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory +Abort trap: 6", +} +`; + +exports[`[UNIT] issue/internal/InternalIssueFactory creates Issue from Internal Error: {"toString": [Function toString]} 1`] = ` +Object { + "code": "INTERNAL", + "message": "Error: Stack overflow - out of memory", + "origin": "internal", + "severity": "error", + "stack": undefined, +} +`; diff --git a/test/unit/issue/tslint/TsLintIssueFactory.spec.js b/test/unit/issue/tslint/TsLintIssueFactory.spec.js new file mode 100644 index 00000000..a25f8412 --- /dev/null +++ b/test/unit/issue/tslint/TsLintIssueFactory.spec.js @@ -0,0 +1,49 @@ +const { + createIssueFromTsLintRuleFailure, + createIssuesFromTsLintRuleFailures +} = require('../../../../lib/issue/tslint/TsLintIssueFactory'); + +describe('[UNIT] issue/tslint/TsLintIssueFactory', () => { + const TS_LINT_RULE_FAILURE_WARNING = { + getRuleName: () => 'no-unused-vars', + getRuleSeverity: () => 'warning', + getFailure: () => `'x' is assigned a value but never used.`, + getFileName: () => 'src/test.ts', + getStartPosition: () => ({ + getLineAndCharacter: () => ({ + line: 2, + character: 2 + }) + }) + }; + const TS_LINT_RULE_FAILURE_ERROR = { + getRuleName: () => 'no-unused-vars', + getRuleSeverity: () => 'error', + getFailure: () => `'y' is assigned a value but never used.`, + getFileName: () => 'src/index.ts', + getStartPosition: () => ({ + getLineAndCharacter: () => ({ + line: 10, + character: 14 + }) + }) + }; + + it.each([[TS_LINT_RULE_FAILURE_WARNING], [TS_LINT_RULE_FAILURE_ERROR]])( + 'creates Issue from TsLint RuleFailure: %p', + ruleFailure => { + const issue = createIssueFromTsLintRuleFailure(ruleFailure); + + expect(issue).toMatchSnapshot(); + } + ); + + it.each([[[TS_LINT_RULE_FAILURE_WARNING, TS_LINT_RULE_FAILURE_ERROR]]])( + 'creates Issues from TsLint RuleFailures: %p', + ruleFailures => { + const issues = createIssuesFromTsLintRuleFailures(ruleFailures); + + expect(issues).toMatchSnapshot(); + } + ); +}); diff --git a/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap b/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap new file mode 100644 index 00000000..d29fcd0c --- /dev/null +++ b/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap @@ -0,0 +1,48 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issue from TsLint RuleFailure: {"getFailure": [Function getFailure], "getFileName": [Function getFileName], "getRuleName": [Function getRuleName], "getRuleSeverity": [Function getRuleSeverity], "getStartPosition": [Function getStartPosition]} 1`] = ` +Object { + "character": 3, + "code": "no-unused-vars", + "file": "src/test.ts", + "line": 3, + "message": "'x' is assigned a value but never used.", + "origin": "tslint", + "severity": "warning", +} +`; + +exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issue from TsLint RuleFailure: {"getFailure": [Function getFailure], "getFileName": [Function getFileName], "getRuleName": [Function getRuleName], "getRuleSeverity": [Function getRuleSeverity], "getStartPosition": [Function getStartPosition]} 2`] = ` +Object { + "character": 15, + "code": "no-unused-vars", + "file": "src/index.ts", + "line": 11, + "message": "'y' is assigned a value but never used.", + "origin": "tslint", + "severity": "error", +} +`; + +exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issues from TsLint RuleFailures: [[Object], [Object]] 1`] = ` +Array [ + Object { + "character": 15, + "code": "no-unused-vars", + "file": "src/index.ts", + "line": 11, + "message": "'y' is assigned a value but never used.", + "origin": "tslint", + "severity": "error", + }, + Object { + "character": 3, + "code": "no-unused-vars", + "file": "src/test.ts", + "line": 3, + "message": "'x' is assigned a value but never used.", + "origin": "tslint", + "severity": "warning", + }, +] +`; diff --git a/test/unit/issue/typescript/TypeScriptIssueFactory.spec.js b/test/unit/issue/typescript/TypeScriptIssueFactory.spec.js new file mode 100644 index 00000000..12dbd738 --- /dev/null +++ b/test/unit/issue/typescript/TypeScriptIssueFactory.spec.js @@ -0,0 +1,85 @@ +const { + createIssueFromTsDiagnostic, + createIssuesFromTsDiagnostics +} = require('../../../../lib/issue/typescript'); + +describe('[UNIT] issue/typescript/TypeScriptIssueFactory', () => { + const TS_DIAGNOSTIC_WARNING = { + start: 100, + code: '4221', + category: 1, + messageText: 'Cannot assign string to the number type', + file: { + fileName: 'src/test.ts', + getLineAndCharacterOfPosition: () => ({ + line: 2, + character: 2 + }) + } + }; + const TS_DIAGNOSTIC_ERROR = { + start: 12, + code: '1221', + category: 0, + messageText: 'Cannot assign object to the string type', + file: { + fileName: 'src/index.ts', + getLineAndCharacterOfPosition: () => ({ + line: 5, + character: 10 + }) + } + }; + const TS_DIAGNOSTIC_WITHOUT_FILE = { + start: 12, + code: '1221', + category: 0, + messageText: 'Cannot assign object to the string type' + }; + const TS_DIAGNOSTIC_MESSAGE_CHAIN = { + start: 12, + code: '1221', + category: 0, + messageText: { + messageText: 'Cannot assign object to the string type', + category: 0, + code: '1221', + next: { + messageText: 'Another ident message', + category: 0, + code: '1221', + next: { + messageText: 'The most ident message', + category: 0, + code: '1221' + } + } + } + }; + + it.each([ + [TS_DIAGNOSTIC_WARNING], + [TS_DIAGNOSTIC_ERROR], + [TS_DIAGNOSTIC_WITHOUT_FILE], + [TS_DIAGNOSTIC_MESSAGE_CHAIN] + ])('creates Issue from TsDiagnostic: %p', tsDiagnostic => { + const issue = createIssueFromTsDiagnostic(tsDiagnostic); + + expect(issue).toMatchSnapshot(); + }); + + it.each([ + [ + [ + TS_DIAGNOSTIC_WARNING, + TS_DIAGNOSTIC_ERROR, + TS_DIAGNOSTIC_WITHOUT_FILE, + TS_DIAGNOSTIC_MESSAGE_CHAIN + ] + ] + ])('creates Issues from TsDiagnostics: %p', tsDiagnostics => { + const issues = createIssuesFromTsDiagnostics(tsDiagnostics); + + expect(issues).toMatchSnapshot(); + }); +}); diff --git a/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap b/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap new file mode 100644 index 00000000..df60d4ef --- /dev/null +++ b/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap @@ -0,0 +1,94 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "file": [Object], "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` +Object { + "character": 11, + "code": "1221", + "file": "src/index.ts", + "line": 6, + "message": "Cannot assign object to the string type", + "origin": "typescript", + "severity": "warning", +} +`; + +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` +Object { + "character": undefined, + "code": "1221", + "file": undefined, + "line": undefined, + "message": "Cannot assign object to the string type", + "origin": "typescript", + "severity": "warning", +} +`; + +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "messageText": [Object], "start": 12} 1`] = ` +Object { + "character": undefined, + "code": "1221", + "file": undefined, + "line": undefined, + "message": "Cannot assign object to the string type + Another ident message + The most ident message", + "origin": "typescript", + "severity": "warning", +} +`; + +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 1, "code": "4221", "file": [Object], "messageText": "Cannot assign string to the number type", "start": 100} 1`] = ` +Object { + "character": 3, + "code": "4221", + "file": "src/test.ts", + "line": 3, + "message": "Cannot assign string to the number type", + "origin": "typescript", + "severity": "error", +} +`; + +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issues from TsDiagnostics: [[Object], [Object], [Object], [Object]] 1`] = ` +Array [ + Object { + "character": undefined, + "code": "1221", + "file": undefined, + "line": undefined, + "message": "Cannot assign object to the string type", + "origin": "typescript", + "severity": "warning", + }, + Object { + "character": undefined, + "code": "1221", + "file": undefined, + "line": undefined, + "message": "Cannot assign object to the string type + Another ident message + The most ident message", + "origin": "typescript", + "severity": "warning", + }, + Object { + "character": 11, + "code": "1221", + "file": "src/index.ts", + "line": 6, + "message": "Cannot assign object to the string type", + "origin": "typescript", + "severity": "warning", + }, + Object { + "character": 3, + "code": "4221", + "file": "src/test.ts", + "line": 3, + "message": "Cannot assign string to the number type", + "origin": "typescript", + "severity": "error", + }, +] +`; diff --git a/yarn.lock b/yarn.lock index 7e572fc8..58e8cf15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1418,150 +1418,150 @@ source-map "^0.7.3" vue-template-es2015-compiler "^1.6.0" -"@webassemblyjs/ast@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.3.tgz#63a741bd715a6b6783f2ea5c6ab707516aa215eb" - integrity sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ== - dependencies: - "@webassemblyjs/helper-module-context" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/wast-parser" "1.8.3" - -"@webassemblyjs/floating-point-hex-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz#f198a2d203b3c50846a064f5addd6a133ef9bc0e" - integrity sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA== - -"@webassemblyjs/helper-api-error@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz#3b708f6926accd64dcbaa7ba5b63db5660ff4f66" - integrity sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ== - -"@webassemblyjs/helper-buffer@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz#f3150a23ffaba68621e1f094c8a14bebfd53dd48" - integrity sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q== - -"@webassemblyjs/helper-code-frame@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz#f43ac605789b519d95784ef350fd2968aebdd3ef" - integrity sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg== - dependencies: - "@webassemblyjs/wast-printer" "1.8.3" - -"@webassemblyjs/helper-fsm@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz#46aaa03f41082a916850ebcb97e9fc198ef36a9c" - integrity sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA== - -"@webassemblyjs/helper-module-context@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz#150da405d90c8ea81ae0b0e1965b7b64e585634f" - integrity sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ== - dependencies: - "@webassemblyjs/ast" "1.8.3" +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" mamacro "^0.0.3" -"@webassemblyjs/helper-wasm-bytecode@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz#12f55bbafbbc7ddf9d8059a072cb7b0c17987901" - integrity sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw== +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== -"@webassemblyjs/helper-wasm-section@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz#9e79456d9719e116f4f8998ee62ab54ba69a6cf3" - integrity sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg== +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-buffer" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/wasm-gen" "1.8.3" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" -"@webassemblyjs/ieee754@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz#0a89355b1f6c9d08d0605c2acbc2a6fe3141f5b4" - integrity sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg== +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.3.tgz#b7fd9d7c039e34e375c4473bd4dc89ce8228b920" - integrity sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg== +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.3.tgz#75712db52cfdda868731569ddfe11046f1f1e7a2" - integrity sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg== - -"@webassemblyjs/wasm-edit@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz#23c3c6206b096f9f6aa49623a5310a102ef0fb87" - integrity sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-buffer" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/helper-wasm-section" "1.8.3" - "@webassemblyjs/wasm-gen" "1.8.3" - "@webassemblyjs/wasm-opt" "1.8.3" - "@webassemblyjs/wasm-parser" "1.8.3" - "@webassemblyjs/wast-printer" "1.8.3" - -"@webassemblyjs/wasm-gen@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz#1a433b8ab97e074e6ac2e25fcbc8cb6125400813" - integrity sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/ieee754" "1.8.3" - "@webassemblyjs/leb128" "1.8.3" - "@webassemblyjs/utf8" "1.8.3" - -"@webassemblyjs/wasm-opt@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz#54754bcf88f88e92b909416a91125301cc81419c" - integrity sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-buffer" "1.8.3" - "@webassemblyjs/wasm-gen" "1.8.3" - "@webassemblyjs/wasm-parser" "1.8.3" - -"@webassemblyjs/wasm-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz#d12ed19d1b8e8667a7bee040d2245aaaf215340b" - integrity sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-api-error" "1.8.3" - "@webassemblyjs/helper-wasm-bytecode" "1.8.3" - "@webassemblyjs/ieee754" "1.8.3" - "@webassemblyjs/leb128" "1.8.3" - "@webassemblyjs/utf8" "1.8.3" - -"@webassemblyjs/wast-parser@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz#44aa123e145503e995045dc3e5e2770069da117b" - integrity sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/floating-point-hex-parser" "1.8.3" - "@webassemblyjs/helper-api-error" "1.8.3" - "@webassemblyjs/helper-code-frame" "1.8.3" - "@webassemblyjs/helper-fsm" "1.8.3" +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz#b1177780b266b1305f2eeba87c4d6aa732352060" - integrity sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q== +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/wast-parser" "1.8.3" + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -1595,10 +1595,6 @@ abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - acorn-globals@^4.1.0: version "4.3.2" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" @@ -1621,7 +1617,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.0.5: +acorn@^6.0.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== @@ -1631,6 +1627,11 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== +acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + agent-base@4, agent-base@^4.1.0, agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -1669,6 +1670,11 @@ ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" +ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + ajv@^6.1.0: version "6.6.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.2.tgz#caceccf474bf3fc3ce3b147443711a24063cc30d" @@ -1688,6 +1694,16 @@ ajv@^6.10.0, ajv@^6.5.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -1876,6 +1892,15 @@ asap@^2.0.0: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1888,6 +1913,14 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1897,6 +1930,11 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" @@ -2026,6 +2064,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2066,6 +2109,11 @@ bin-links@^1.1.2: graceful-fs "^4.1.11" write-file-atomic "^2.3.0" +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" @@ -2087,6 +2135,16 @@ bluebird@^3.5.0, bluebird@^3.5.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + bottleneck@^2.0.1: version "2.18.0" resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.18.0.tgz#41fa63ae185b65435d789d1700334bc48222dacf" @@ -2113,7 +2171,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.0, braces@^2.3.1: +braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -2136,6 +2194,11 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -2152,6 +2215,65 @@ browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" @@ -2184,10 +2306,29 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -2241,6 +2382,27 @@ cacache@^11.0.1, cacache@^11.0.2, cacache@^11.2.0: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2394,6 +2556,25 @@ chokidar@*, chokidar@^3.3.0: optionalDependencies: fsevents "~2.1.1" +chokidar@^2.0.2: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" @@ -2408,9 +2589,10 @@ chownr@~1.0.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= -chrome-trace-event@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== dependencies: tslib "^1.9.0" @@ -2430,6 +2612,14 @@ cidr-regex@^2.0.10: dependencies: ip-regex "^2.1.0" +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" @@ -2612,6 +2802,11 @@ commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" +commander@^2.20.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== + commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -2681,6 +2876,11 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -2692,6 +2892,11 @@ consolidate@^0.15.1: dependencies: bluebird "^3.1.1" +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + conventional-changelog-angular@^1.3.3: version "1.6.6" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" @@ -2863,6 +3068,14 @@ cosmiconfig@^5.0.7: js-yaml "^3.9.0" parse-json "^4.0.0" +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -2870,6 +3083,29 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -2889,6 +3125,23 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -3174,6 +3427,14 @@ deprecation@^1.0.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-1.0.1.tgz#2df79b79005752180816b7b6e079cbd80490d711" integrity sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + detect-indent@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -3206,6 +3467,15 @@ diff@3.5.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^2.0.0, dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -3225,6 +3495,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -3298,6 +3573,19 @@ elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -3532,6 +3820,14 @@ events@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" @@ -3729,12 +4025,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-cache-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" +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" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" - make-dir "^1.0.0" + make-dir "^2.0.0" pkg-dir "^3.0.0" find-npm-prefix@^1.0.2: @@ -4068,7 +4365,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -4263,14 +4560,39 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + hash-sum@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + he@1.2.0, he@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hook-std@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-1.2.0.tgz#b37d533ea5f40068fe368cb4d022ee1992588c27" @@ -4313,6 +4635,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" @@ -4359,6 +4686,11 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" @@ -4425,6 +4757,11 @@ indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4438,7 +4775,12 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -4536,6 +4878,13 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -4808,7 +5157,7 @@ isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5640,12 +5989,12 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-3.0.0.tgz#c86f303af2dacbd27eabd2ea3aaa957291562e23" - integrity sha512-BlinBEAJYOUubaKH9hMxshD1FltYLTd3FA4DoxEh/82C0Rc4cmcqI61bEUj0/osbmW9FCTXTpMAO/jHZDZC5Fw== +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" dependencies: @@ -5875,7 +6224,7 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^2.1.0: +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -5985,6 +6334,15 @@ math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + meant@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" @@ -6006,7 +6364,7 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" dependencies: @@ -6102,6 +6460,14 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.39.0: version "1.39.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.39.0.tgz#f95a20275742f7d2ad0429acfe40f4233543780e" @@ -6135,6 +6501,16 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + "minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6358,6 +6734,11 @@ neo-async@^2.5.0, neo-async@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" +neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + nerf-dart@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" @@ -6419,6 +6800,35 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -6921,6 +7331,11 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7089,6 +7504,11 @@ pacote@^8.1.6: unique-filename "^1.1.0" which "^1.3.0" +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + parallel-transform@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" @@ -7103,6 +7523,18 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-github-url@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" @@ -7125,6 +7557,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -7158,6 +7595,17 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7532,6 +7980,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" @@ -7593,6 +8046,18 @@ psl@^1.1.24, psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -7615,7 +8080,12 @@ pumpify@^1.3.3: inherits "^2.0.3" pump "^2.0.0" -punycode@^1.4.1: +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= @@ -7654,6 +8124,16 @@ query-string@^6.1.0: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" @@ -7664,6 +8144,21 @@ qw@~1.0.1: resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -7763,7 +8258,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -7795,6 +8290,15 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -8101,13 +8605,21 @@ rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6 dependencies: glob "^7.1.3" -rimraf@^2.6.1: +rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + rsvp@^4.8.4: version "4.8.4" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" @@ -8147,7 +8659,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.1.2: +safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -8270,9 +8782,10 @@ semver@~5.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -serialize-javascript@^1.4.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -8288,6 +8801,19 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + sha@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" @@ -8454,7 +8980,7 @@ sorted-union-stream@~2.1.3: from2 "^1.3.0" stream-iterate "^1.1.0" -source-list-map@^2.0.0, source-list-map@^2.0.1: +source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8477,9 +9003,10 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.6: - version "0.5.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" +source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -8622,6 +9149,14 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + stream-combiner2@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" @@ -8637,6 +9172,17 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + stream-iterate@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" @@ -8695,6 +9241,13 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string_decoder@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -8833,10 +9386,15 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" +tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -8878,26 +9436,29 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser-webpack-plugin@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.2.1.tgz#7545da9ae5f4f9ae6a0ac961eb46f5e7c845cc26" +terser-webpack-plugin@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: - cacache "^11.0.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" schema-utils "^1.0.0" - serialize-javascript "^1.4.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" - terser "^3.8.1" - webpack-sources "^1.1.0" - worker-farm "^1.5.2" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" -terser@^3.8.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-3.14.1.tgz#cc4764014af570bc79c79742358bd46926018a32" +terser@^4.1.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.2.tgz#448fffad0245f4c8a277ce89788b458bfd7706e8" + integrity sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ== dependencies: - commander "~2.17.1" + commander "^2.20.0" source-map "~0.6.1" - source-map-support "~0.5.6" + source-map-support "~0.5.12" test-exclude@^5.2.2: version "5.2.2" @@ -8939,6 +9500,13 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" @@ -8955,6 +9523,11 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -9084,6 +9657,11 @@ tsutils@^3.7.0: dependencies: tslib "^1.8.1" +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -9225,6 +9803,11 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" @@ -9269,6 +9852,14 @@ url-template@^2.0.8: resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -9292,6 +9883,20 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" @@ -9324,6 +9929,11 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + vue-class-component@^6.1.1: version "6.3.2" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-6.3.2.tgz#e6037e84d1df2af3bde4f455e50ca1b9eec02be6" @@ -9378,10 +9988,12 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -watchpack@2.0.0-beta.2: - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.0-beta.2.tgz#357ed627767dd16ed80500f49c5d4029b49248cb" +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: + chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" @@ -9397,50 +10009,42 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-sources@2.0.0-beta.1: - version "2.0.0-beta.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.0.0-beta.1.tgz#7502135a42b18e5c6e88f85d706729fef1f9aee9" - integrity sha512-crzDTpRrXVAc5E/PSs3CP4bieKaFUqcKh1fLkul5BGyh9zI/FRK0QCfD4ufmReeEgbWTP7lhmkuSASQeM/dnwQ== - dependencies: - source-list-map "^2.0.1" - source-map "~0.6.1" - -webpack-sources@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^5.0.0-alpha.5: - version "5.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.0.0-alpha.11.tgz#ebca9d79dce46165ddacdc99ff0b5b0388f4e62b" - integrity sha512-ZKCTHaNy7BBkczezC3fdaOGSP/IPzsXplM2xlsppvt9Jo9gtovKsWEFzvl4pCANBI5msmDYYUT7X/8YsVp4MMg== - dependencies: - "@webassemblyjs/ast" "1.8.3" - "@webassemblyjs/helper-module-context" "1.8.3" - "@webassemblyjs/wasm-edit" "1.8.3" - "@webassemblyjs/wasm-parser" "1.8.3" - acorn "^6.0.5" - acorn-dynamic-import "^4.0.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" +webpack@^4.0.0: + version "4.41.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" + integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" - events "^3.0.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "3.0.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.2.1" - watchpack "2.0.0-beta.2" - webpack-sources "2.0.0-beta.1" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" @@ -9515,12 +10119,19 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -worker-farm@^1.5.2, worker-farm@^1.6.0: +worker-farm@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" dependencies: errno "~0.1.7" +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + worker-rpc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.0.tgz#5f1258dca3d617cd18ca86587f8a05ac0eebd834" @@ -9589,6 +10200,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" From a033017bac7ccc33de28678fdd5afd9f65bfc0a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Mon, 16 Dec 2019 14:11:17 +0700 Subject: [PATCH 06/18] docs: update README.md to reflect API changes --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 579c8f41..0a1eeae2 100644 --- a/README.md +++ b/README.md @@ -181,9 +181,9 @@ new ForkTsCheckerWebpackPlugin({ - **logger** `object`: Logger instance. It should be object that implements method: `error`, `warn`, `info`. Default: `console`. -- **formatter** `'default' | 'codeframe' | (diagnostic: Diagnostic) => string)`: - Formatter for diagnostics and lints. By default uses `default` formatter. You can also pass your own formatter as a function - (see `src/diagnostic/` and `src/formatter/` for API reference). +- **formatter** `'default' | 'codeframe' | (issue: Issue) => string)`: + Formatter for issues and lints. By default uses `default` formatter. You can also pass your own formatter as a function + (see `src/issue/` and `src/formatter/` for API reference). - **formatterOptions** `object`: Options passed to formatters (currently only `codeframe` - see [available options](https://www.npmjs.com/package/babel-code-frame#options)) From e345adc295acbc3355af1a273472eb568bb386dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 17 Dec 2019 13:36:31 +0700 Subject: [PATCH 07/18] feat: drop support for multi-process mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We drop multi-process mode to simplify code-base and focus more on optimizing single-process mode. BREAKING CHANGE: 🧨 Dropped support for multi-process mode (removed `workers` option from plugin configuration, `workersNumber` argument from serviceStart hook and pre-computed consts: ONE_CPU, ALL_CPUS, ONE_CPU_FREE, TWO_CPUS_FREE) --- .github/workflows/main.yml | 2 +- README.md | 21 +---- src/IncrementalChecker.ts | 37 +-------- src/IncrementalCheckerInterface.ts | 2 - src/WorkSet.ts | 26 ------ src/cluster.ts | 92 ---------------------- src/hooks.ts | 1 - src/index.ts | 47 +---------- src/service.ts | 4 +- test/integration/incrementalApi.spec.ts | 8 -- test/integration/nonIncrementalApi.spec.ts | 32 -------- test/unit/WorkSet.spec.js | 46 ----------- 12 files changed, 12 insertions(+), 306 deletions(-) delete mode 100644 src/WorkSet.ts delete mode 100644 src/cluster.ts delete mode 100644 test/unit/WorkSet.spec.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 44c2fe4f..205b6ced 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -42,7 +42,7 @@ jobs: os: - ubuntu-latest - macos-latest - # - windows-latest # to be uncommented when we drop multi-process mode + - windows-latest node: - '8' - '10' diff --git a/README.md b/README.md index 0a1eeae2..45e18caf 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ add `CheckerPlugin` and delegate checker to the separate process. The problem wi it was a lot slower than [ts-loader](https://github.com/TypeStrong/ts-loader) on an incremental build (~20s vs ~3s). Secondly, we used [tslint](https://palantir.github.io/tslint) and we wanted to run this, along with type checker, in a separate process. This is why this plugin was created. To provide better performance, the plugin reuses Abstract Syntax Trees between compilations and shares -these trees with TSLint. It can be scaled with a multi-process mode to utilize maximum CPU power. +these trees with TSLint. ## Modules resolution @@ -197,20 +197,12 @@ new ForkTsCheckerWebpackPlugin({ - **memoryLimit** `number`: Memory limit for service process in MB. If service exits with allocation failed error, increase this number. Default: `2048`. -- **workers** `number`: - You can split type checking to a few workers to speed-up increment build. **Be careful** - if you don't want to increase build time, you - should keep free 1 core for _build_ and 1 core for a _system_ _(for example system with 4 CPUs should use max 2 workers)_. Second thing - - node doesn't share memory between workers - keep in mind that memory usage will increase. Be aware that in some scenarios increasing workers - number **can increase checking time**. Default: `ForkTsCheckerWebpackPlugin.ONE_CPU`. - - **vue** `boolean | { enabled: boolean, compiler: string }`: If `true` or `enabled: true`, the linter and compiler will process VueJs single-file-component (.vue) files. See the [Vue section](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin#vue) further down for information on how to correctly setup your project. - **useTypescriptIncrementalApi** `boolean`: - If true, the plugin will use incremental compilation API introduced in TypeScript 2.7. In this mode you can only have 1 - worker, but if the changes in your code are small (like you normally have when you work in 'watch' mode), the compilation - may be much faster, even compared to multi-threaded compilation. Defaults to `true` when working with TypeScript 3+ and `false` when below 3. The default can be overridden by directly specifying a value. + If true, the plugin will use incremental compilation API introduced in TypeScript 2.7. Defaults to `true` when working with TypeScript 3+ and `false` when below 3. The default can be overridden by directly specifying a value. - **measureCompilationTime** `boolean`: If true, the plugin will measure the time spent inside the compilation code. This may be useful to compare modes, @@ -263,13 +255,6 @@ new ForkTsCheckerWebpackPlugin({ -### Pre-computed consts: - -- `ForkTsCheckerWebpackPlugin.ONE_CPU` - always use one CPU -- `ForkTsCheckerWebpackPlugin.ALL_CPUS` - always use all CPUs (will increase build time) -- `ForkTsCheckerWebpackPlugin.ONE_CPU_FREE` - leave only one CPU for build (probably will increase build time) -- `ForkTsCheckerWebpackPlugin.TWO_CPUS_FREE` - **recommended** - leave two CPUs free (one for build, one for system) - ## Different behaviour in watch mode If you turn on [webpacks watch mode](https://webpack.js.org/configuration/watch/#watch) the `fork-ts-checker-notifier-webpack-plugin` will take care of logging type errors, _not_ webpack itself. That means if you set `silent: true` you won't see type errors in your console in watch mode. @@ -295,7 +280,7 @@ This plugin provides some custom webpack hooks (all are sync): | `fork-ts-checker-cancel` | `cancel` | Cancellation has been requested | `cancellationToken` | | `fork-ts-checker-waiting` | `waiting` | Waiting for results | `hasTsLint` | | `fork-ts-checker-service-before-start` | `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | -| `fork-ts-checker-service-start` | `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `watchPaths`, `workersNumber`, `memoryLimit` | +| `fork-ts-checker-service-start` | `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `watchPaths`, `memoryLimit` | | `fork-ts-checker-service-start-error` | `serviceStartError` | Cannot start service | `error` | | `fork-ts-checker-service-out-of-memory` | `serviceOutOfMemory` | Service is out of memory | - | | `fork-ts-checker-receive` | `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | diff --git a/src/IncrementalChecker.ts b/src/IncrementalChecker.ts index f572c722..63f1c0de 100644 --- a/src/IncrementalChecker.ts +++ b/src/IncrementalChecker.ts @@ -15,7 +15,6 @@ import { loadLinterConfig, makeGetLinterConfig } from './linterConfigHelpers'; -import { WorkSet } from './WorkSet'; import { CancellationToken } from './CancellationToken'; import { ResolveModuleName, @@ -69,8 +68,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { private readonly linterAutoFix: boolean; private readonly eslinter: ReturnType | undefined; private readonly watchPaths: string[]; - private readonly workNumber: number; - private readonly workDivision: number; private readonly vue: VueOptions; private readonly checkSyntacticErrors: boolean; private readonly resolveModuleName: ResolveModuleName | undefined; @@ -87,8 +84,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { linterAutoFix, eslinter, watchPaths, - workNumber = 0, - workDivision = 1, vue, checkSyntacticErrors = false, resolveModuleName, @@ -102,8 +97,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.linterAutoFix = linterAutoFix; this.eslinter = eslinter; this.watchPaths = watchPaths; - this.workNumber = workNumber; - this.workDivision = workDivision; this.vue = vue; this.checkSyntacticErrors = checkSyntacticErrors; this.resolveModuleName = resolveModuleName; @@ -344,15 +337,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { // select files to check (it's semantic check - we have to include all files :/) const filesToCheck = program.getSourceFiles(); - // calculate subset of work to do - const workSet = new WorkSet( - filesToCheck, - this.workNumber, - this.workDivision - ); - - // check given work set - workSet.forEach(sourceFile => { + filesToCheck.forEach(sourceFile => { if (cancellationToken) { cancellationToken.throwIfCancellationRequested(); } @@ -389,15 +374,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { !IncrementalChecker.isFileExcluded(filePath, this.linterExclusions) ); - // calculate subset of work to do - const workSet = new WorkSet( - filesToLint, - this.workNumber, - this.workDivision - ); - - // lint given work set - workSet.forEach(fileName => { + filesToLint.forEach(fileName => { cancellationToken.throwIfCancellationRequested(); const config = this.hasFixedConfig ? this.linterConfig @@ -455,16 +432,8 @@ export class IncrementalChecker implements IncrementalCheckerInterface { !IncrementalChecker.isFileExcluded(filePath, this.linterExclusions) ); - // calculate subset of work to do - const workSet = new WorkSet( - filesToLint, - this.workNumber, - this.workDivision - ); - - // lint given work set const currentEsLintErrors = new Map(); - workSet.forEach(fileName => { + filesToLint.forEach(fileName => { cancellationToken.throwIfCancellationRequested(); const report = this.eslinter!.getReport(fileName); diff --git a/src/IncrementalCheckerInterface.ts b/src/IncrementalCheckerInterface.ts index 1d81413c..e18d2370 100644 --- a/src/IncrementalCheckerInterface.ts +++ b/src/IncrementalCheckerInterface.ts @@ -34,6 +34,4 @@ export interface ApiIncrementalCheckerParams { export interface IncrementalCheckerParams extends ApiIncrementalCheckerParams { watchPaths: string[]; - workNumber: number; - workDivision: number; } diff --git a/src/WorkSet.ts b/src/WorkSet.ts deleted file mode 100644 index 76934e47..00000000 --- a/src/WorkSet.ts +++ /dev/null @@ -1,26 +0,0 @@ -export class WorkSet { - private workSize: number; - private workBegin: number; - private workEnd: number; - - constructor( - private workDomain: ReadonlyArray, - private workNumber: number, - private workDivision: number - ) { - this.workSize = Math.floor(this.workDomain.length / this.workDivision); - this.workBegin = this.workNumber * this.workSize; - this.workEnd = this.workBegin + this.workSize; - - // be sure that we will process all work for odd workSize. - if (this.workNumber === this.workDivision - 1) { - this.workEnd = this.workDomain.length; - } - } - - public forEach(callback: (workDomainItem: T, index: number) => void) { - for (let i = this.workBegin; i < this.workEnd; ++i) { - callback(this.workDomain[i], i); - } - } -} diff --git a/src/cluster.ts b/src/cluster.ts deleted file mode 100644 index 94d6ed94..00000000 --- a/src/cluster.ts +++ /dev/null @@ -1,92 +0,0 @@ -import * as process from 'process'; -import * as childProcess from 'child_process'; -import * as path from 'path'; -import { RpcProvider } from 'worker-rpc'; - -import { Message } from './Message'; -import { RunPayload, RunResult, RUN } from './RpcTypes'; -import { deduplicateAndSortIssues } from './issue'; - -// fork workers... -const division = parseInt(process.env.WORK_DIVISION || '', 10); -const workers: childProcess.ChildProcess[] = []; - -for (let num = 0; num < division; num++) { - workers.push( - childProcess.fork(path.resolve(__dirname, './service.js'), [], { - execArgv: ['--max-old-space-size=' + process.env.MEMORY_LIMIT], - env: { ...process.env, WORK_NUMBER: num.toString() }, - stdio: ['inherit', 'inherit', 'inherit', 'ipc'] - }) - ); -} - -// communication with parent process -const parentRpc = new RpcProvider(message => { - try { - process.send!(message); - } catch (e) { - // channel closed... - process.exit(); - } -}); -process.on('message', message => parentRpc.dispatch(message)); - -// communication with worker processes -const workerRpcs = workers.map(worker => { - const rpc = new RpcProvider(message => { - try { - worker.send(message); - } catch (e) { - // channel closed - something went wrong - close cluster... - process.exit(); - } - }); - worker.on('message', message => rpc.dispatch(message)); - return rpc; -}); - -parentRpc.registerRpcHandler(RUN, async message => { - const workerResults = await Promise.all( - workerRpcs.map(workerRpc => - workerRpc.rpc(RUN, message) - ) - ); - - function workerFinished( - workerResult: (Message | undefined)[] - ): workerResult is Message[] { - return workerResult.every(result => typeof result !== 'undefined'); - } - - if (!workerFinished(workerResults)) { - return undefined; - } - - const merged: Message = workerResults.reduce( - (innerMerged: Message, innerResult: Message) => ({ - diagnostics: innerMerged.diagnostics.concat(innerResult.diagnostics), - lints: innerMerged.lints.concat(innerResult.lints) - }), - { diagnostics: [], lints: [] } - ); - - merged.diagnostics = deduplicateAndSortIssues(merged.diagnostics); - merged.lints = deduplicateAndSortIssues(merged.lints); - - return merged; -}); - -process.on('SIGINT', () => { - process.exit(); -}); - -process.on('exit', () => { - workers.forEach(worker => { - try { - worker.kill(); - } catch (e) { - // do nothing... - } - }); -}); diff --git a/src/hooks.ts b/src/hooks.ts index 3948f2fa..abb693f5 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -42,7 +42,6 @@ function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap { 'tsconfigPath', 'tslintPath', 'watchPaths', - 'workersNumber', 'memoryLimit' ]), receive: new SyncHook(['diagnostics', 'lints']), diff --git a/src/index.ts b/src/index.ts index 2d1389d5..469510cc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,6 @@ import * as path from 'path'; import * as process from 'process'; import * as childProcess from 'child_process'; -import * as os from 'os'; // tslint:disable-next-line:no-implicit-dependencies import * as webpack from 'webpack'; // tslint:disable-next-line:no-implicit-dependencies @@ -60,7 +59,6 @@ namespace ForkTsCheckerWebpackPlugin { silent: boolean; checkSyntacticErrors: boolean; memoryLimit: number; - workers: number; vue: boolean | Partial; useTypescriptIncrementalApi: boolean; measureCompilationTime: boolean; @@ -78,16 +76,6 @@ namespace ForkTsCheckerWebpackPlugin { */ class ForkTsCheckerWebpackPlugin { public static readonly DEFAULT_MEMORY_LIMIT = 2048; - public static readonly ONE_CPU = 1; - public static readonly ALL_CPUS = os.cpus && os.cpus() ? os.cpus().length : 1; - public static readonly ONE_CPU_FREE = Math.max( - 1, - ForkTsCheckerWebpackPlugin.ALL_CPUS - 1 - ); - public static readonly TWO_CPUS_FREE = Math.max( - 1, - ForkTsCheckerWebpackPlugin.ALL_CPUS - 2 - ); public static getCompilerHooks( compiler: any @@ -111,7 +99,6 @@ class ForkTsCheckerWebpackPlugin { private silent: boolean; private async: boolean; private checkSyntacticErrors: boolean; - private workersNumber: number; private memoryLimit: number; private formatter: Formatter; private rawFormatter: Formatter; @@ -170,7 +157,6 @@ class ForkTsCheckerWebpackPlugin { this.resolveModuleNameModule = options.resolveModuleNameModule; this.resolveTypeReferenceDirectiveModule = options.resolveTypeReferenceDirectiveModule; - this.workersNumber = options.workers || ForkTsCheckerWebpackPlugin.ONE_CPU; this.memoryLimit = options.memoryLimit || ForkTsCheckerWebpackPlugin.DEFAULT_MEMORY_LIMIT; this.formatter = createFormatter( @@ -337,13 +323,6 @@ class ForkTsCheckerWebpackPlugin { const tsconfigOk = fileExistsSync(this.tsconfigPath); const tslintOk = !this.tslintPath || fileExistsSync(this.tslintPath); - if (this.useTypescriptIncrementalApi && this.workersNumber !== 1) { - throw new Error( - 'Using typescript incremental compilation API ' + - 'is currently only allowed with a single worker.' - ); - } - // validate logger if (this.logger) { if (!this.logger.error || !this.logger.warn || !this.logger.info) { @@ -650,7 +629,6 @@ class ForkTsCheckerWebpackPlugin { ESLINT: String(this.eslint), ESLINT_OPTIONS: JSON.stringify(this.eslintOptions), WATCH: this.isWatching ? this.watchPaths.join('|') : '', - WORK_DIVISION: String(Math.max(1, this.workersNumber)), MEMORY_LIMIT: String(this.memoryLimit), CHECK_SYNTACTIC_ERRORS: String(this.checkSyntacticErrors), USE_INCREMENTAL_API: String(this.useTypescriptIncrementalApi === true), @@ -670,17 +648,13 @@ class ForkTsCheckerWebpackPlugin { } this.service = childProcess.fork( - path.resolve( - __dirname, - this.workersNumber > 1 ? './cluster.js' : './service.js' - ), + path.resolve(__dirname, './service.js'), [], { env, - execArgv: (this.workersNumber > 1 - ? [] - : ['--max-old-space-size=' + this.memoryLimit] - ).concat(this.nodeArgs), + execArgv: ['--max-old-space-size=' + this.memoryLimit].concat( + this.nodeArgs + ), stdio: ['inherit', 'inherit', 'inherit', 'ipc'] } ); @@ -697,7 +671,6 @@ class ForkTsCheckerWebpackPlugin { this.tsconfigPath, this.tslintPath, this.watchPaths, - this.workersNumber, this.memoryLimit ); } else { @@ -707,7 +680,6 @@ class ForkTsCheckerWebpackPlugin { this.tsconfigPath, this.tslintPath, this.watchPaths, - this.workersNumber, this.memoryLimit ); } @@ -718,17 +690,6 @@ class ForkTsCheckerWebpackPlugin { (this.tslint ? ' and linting' : '') + ' service...' ); - this.logger.info( - 'Using ' + - chalk.bold( - this.workersNumber === 1 - ? '1 worker' - : this.workersNumber + ' workers' - ) + - ' with ' + - chalk.bold(this.memoryLimit + 'MB') + - ' memory limit' - ); if (this.watchPaths.length && this.isWatching) { this.logger.info( diff --git a/src/service.ts b/src/service.ts index d23ab45f..ab76c064 100644 --- a/src/service.ts +++ b/src/service.ts @@ -79,9 +79,7 @@ function createChecker( {}, apiIncrementalCheckerParams, { - watchPaths: process.env.WATCH === '' ? [] : process.env.WATCH!.split('|'), - workNumber: parseInt(process.env.WORK_NUMBER!, 10) || 0, - workDivision: parseInt(process.env.WORK_DIVISION!, 10) || 1 + watchPaths: process.env.WATCH === '' ? [] : process.env.WATCH!.split('|') } ); diff --git a/test/integration/incrementalApi.spec.ts b/test/integration/incrementalApi.spec.ts index e14d7400..5b37cb72 100644 --- a/test/integration/incrementalApi.spec.ts +++ b/test/integration/incrementalApi.spec.ts @@ -31,14 +31,6 @@ describe('[INTEGRATION] specific tests for useTypescriptIncrementalApi: true', ( }); } - it('should not allow multiple workers with incremental API', () => { - expect(() => { - createCompiler({ - pluginOptions: { workers: 5 } - }); - }).toThrowError(); - }); - it('should not fix linting by default', callback => { const fileName = 'lintingError2'; const { compiler } = helpers.testLintAutoFixTest({ diff --git a/test/integration/nonIncrementalApi.spec.ts b/test/integration/nonIncrementalApi.spec.ts index 0cd2c62d..3383dc9c 100644 --- a/test/integration/nonIncrementalApi.spec.ts +++ b/test/integration/nonIncrementalApi.spec.ts @@ -1,7 +1,6 @@ // tslint:disable:no-implicit-dependencies import path from 'path'; import * as helpers from './helpers'; -import webpack from 'webpack'; describe('[INTEGRATION] specific tests for useTypescriptIncrementalApi: false', () => { let plugin: helpers.ForkTsCheckerWebpackPlugin; @@ -29,37 +28,6 @@ describe('[INTEGRATION] specific tests for useTypescriptIncrementalApi: false', }); }); - it('should find the same errors on multi-process mode', async () => { - const compilerA = createCompiler({ - pluginOptions: { - workers: 1, - tslint: true - } - }); - const compilerB = createCompiler({ - pluginOptions: { - workers: 4, - tslint: true - } - }); - - const [a, b] = await Promise.all([ - new Promise(resolve => - compilerA.run((error, stats) => { - resolve(stats.compilation); - }) - ), - new Promise(resolve => - compilerB.run((error, stats) => { - resolve(stats.compilation); - }) - ) - ]); - - expect(a.errors).toEqual(b.errors); - expect(a.warnings).toEqual(b.warnings); - }); - it('should only show errors matching paths specified in reportFiles when provided', callback => { const compiler = createCompiler({ pluginOptions: { diff --git a/test/unit/WorkSet.spec.js b/test/unit/WorkSet.spec.js deleted file mode 100644 index bf85f918..00000000 --- a/test/unit/WorkSet.spec.js +++ /dev/null @@ -1,46 +0,0 @@ -var WorkSet = require('../../lib/WorkSet').WorkSet; - -describe('[UNIT] WorkSet', () => { - function testForDomainAndDivision(domain, divisions) { - divisions.forEach(function(division) { - var toProcess = []; - - for (var i = 0; i < division; ++i) { - var set = new WorkSet(domain, i, division); - set.forEach(function(work) { - toProcess.push(work); - }); - } - - expect(toProcess).toEqual(domain); - }); - } - - it('should split work and cover odd work domain', () => { - var domain = [0, 10, 20, 30, 40, 50, 60, 70, 80]; - var divisions = [1, 2, 3, 4, domain.length, 1000]; - - testForDomainAndDivision(domain, divisions); - }); - - it('should split work and cover even work domain', () => { - var domain = [0, 100, 200, 300, 400, 500, 600, 700, 800, 900]; - var divisions = [1, 2, 3, 4, domain.length, 1000]; - - testForDomainAndDivision(domain, divisions); - }); - - it('should split work and cover empty work domain', () => { - var domain = []; - var divisions = [1, 2, 3, 4, 1000]; - - testForDomainAndDivision(domain, divisions); - }); - - it('should split work and cover single work domain', () => { - var domain = [5]; - var divisions = [1, 2, 3, 4, 1000]; - - testForDomainAndDivision(domain, divisions); - }); -}); From aceda066623c26ad4f0d6214dc4d1a11ea0f0f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 17 Dec 2019 13:58:05 +0700 Subject: [PATCH 08/18] test: fix tests to pass on the Windows environment --- test/unit/formatter/InternalFormatter.spec.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/unit/formatter/InternalFormatter.spec.js b/test/unit/formatter/InternalFormatter.spec.js index 1911f698..99923736 100644 --- a/test/unit/formatter/InternalFormatter.spec.js +++ b/test/unit/formatter/InternalFormatter.spec.js @@ -1,5 +1,6 @@ const { IssueSeverity, IssueOrigin } = require('../../../lib/issue'); const { createInternalFormatter } = require('../../../lib/formatter'); +const os = require('os'); describe('[UNIT] formatter/InternalFormatter', () => { it.each([ @@ -25,7 +26,7 @@ describe('[UNIT] formatter/InternalFormatter', () => { ``, `FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory`, `Abort trap: 6` - ].join('\n') + ].join(os.EOL) }, [ 'INTERNAL ERROR: Stack overflow - out of memory', @@ -36,7 +37,7 @@ describe('[UNIT] formatter/InternalFormatter', () => { ``, `FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory`, `Abort trap: 6` - ].join('\n') + ].join(os.EOL) ] ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { const formatter = createInternalFormatter(); From 1a9697b8778826f5999bb76ac3fca6624e9b8ac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 17 Dec 2019 18:36:02 +0700 Subject: [PATCH 09/18] docs: update README.md with note about VueJs support --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 45e18caf..62df5ca6 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,7 @@ new ForkTsCheckerWebpackPlugin({ - **useTypescriptIncrementalApi** `boolean`: If true, the plugin will use incremental compilation API introduced in TypeScript 2.7. Defaults to `true` when working with TypeScript 3+ and `false` when below 3. The default can be overridden by directly specifying a value. + Don't use it together with VueJs enabled - it's not supported yet. - **measureCompilationTime** `boolean`: If true, the plugin will measure the time spent inside the compilation code. This may be useful to compare modes, From ac91b7be18eb3ddd7b09da259254f8fc641de19d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 17 Dec 2019 13:55:28 +0700 Subject: [PATCH 10/18] feat: drop `watch` paths option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We drop watch paths option to simplify code-base and to switch to TypeScript API watcher BREAKING CHANGE: 🧨 Dropped support for `watch` paths option (removed `watch` option from the plugin-configuration and `watchPaths` argument from serviceStart hook) --- README.md | 25 ++--- src/ApiIncrementalChecker.ts | 4 +- src/FilesWatcher.ts | 69 ------------- src/IncrementalChecker.ts | 42 ++------ src/IncrementalCheckerInterface.ts | 6 +- src/VueProgram.ts | 19 ++-- src/hooks.ts | 7 +- src/index.ts | 17 ---- src/service.ts | 19 +--- test/integration/general.spec.ts | 36 ------- test/unit/FilesWatcher.spec.js | 155 ----------------------------- 11 files changed, 33 insertions(+), 366 deletions(-) delete mode 100644 src/FilesWatcher.ts delete mode 100644 test/unit/FilesWatcher.spec.js diff --git a/README.md b/README.md index 62df5ca6..517c951b 100644 --- a/README.md +++ b/README.md @@ -152,9 +152,6 @@ It helps to distinguish lints from TypeScript's diagnostics. - **tslintAutoFix** `boolean`: Passes on `--fix` flag while running `tslint` to auto fix linting errors. Default: false. -- **watch** `string | string[]`: - Directories or files to watch by service. Not necessary but improves performance (reduces number of `fs.stat` calls). Not applicable when `useTypescriptIncrementalApi` is `true`, in which case watching is handled automatically. - - **async** `boolean`: True by default - `async: false` can block webpack's emit to wait for type checker/linter and to add errors to the webpack's compilation. We recommend to set this to `false` in projects where type checking is faster than webpack's build - it's better for integration with other plugins. Another scenario where you might want to set this to `false` is if you use the `overlay` functionality of `webpack-dev-server`. @@ -276,17 +273,17 @@ We hope this will be resolved in future; the issue can be tracked [here](https:/ This plugin provides some custom webpack hooks (all are sync): -| Event name | Hook Access Key | Description | Params | -| --------------------------------------- | -------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | -| `fork-ts-checker-cancel` | `cancel` | Cancellation has been requested | `cancellationToken` | -| `fork-ts-checker-waiting` | `waiting` | Waiting for results | `hasTsLint` | -| `fork-ts-checker-service-before-start` | `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | -| `fork-ts-checker-service-start` | `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `watchPaths`, `memoryLimit` | -| `fork-ts-checker-service-start-error` | `serviceStartError` | Cannot start service | `error` | -| `fork-ts-checker-service-out-of-memory` | `serviceOutOfMemory` | Service is out of memory | - | -| `fork-ts-checker-receive` | `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | -| `fork-ts-checker-emit` | `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | -| `fork-ts-checker-done` | `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | +| Event name | Hook Access Key | Description | Params | +| --------------------------------------- | -------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | +| `fork-ts-checker-cancel` | `cancel` | Cancellation has been requested | `cancellationToken` | +| `fork-ts-checker-waiting` | `waiting` | Waiting for results | `hasTsLint` | +| `fork-ts-checker-service-before-start` | `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | +| `fork-ts-checker-service-start` | `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `memoryLimit` | +| `fork-ts-checker-service-start-error` | `serviceStartError` | Cannot start service | `error` | +| `fork-ts-checker-service-out-of-memory` | `serviceOutOfMemory` | Service is out of memory | - | +| `fork-ts-checker-receive` | `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | +| `fork-ts-checker-emit` | `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | +| `fork-ts-checker-done` | `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | The **Event name** is there for backward compatibility with webpack 2/3. Regardless of the version of webpack (2, 3 or 4) you are using, we will always access plugin hooks with **Hook Access Keys** as diff --git a/src/ApiIncrementalChecker.ts b/src/ApiIncrementalChecker.ts index b865ddf3..b0aa1e3f 100644 --- a/src/ApiIncrementalChecker.ts +++ b/src/ApiIncrementalChecker.ts @@ -9,7 +9,7 @@ import * as minimatch from 'minimatch'; import { IncrementalCheckerInterface, - ApiIncrementalCheckerParams + IncrementalCheckerParams } from './IncrementalCheckerInterface'; import { CancellationToken } from './CancellationToken'; import { @@ -57,7 +57,7 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { checkSyntacticErrors = false, resolveModuleName, resolveTypeReferenceDirective - }: ApiIncrementalCheckerParams) { + }: IncrementalCheckerParams) { this.context = context; this.linterConfigFile = linterConfigFile; this.linterAutoFix = linterAutoFix; diff --git a/src/FilesWatcher.ts b/src/FilesWatcher.ts deleted file mode 100644 index eae906e3..00000000 --- a/src/FilesWatcher.ts +++ /dev/null @@ -1,69 +0,0 @@ -import * as path from 'path'; -import * as chokidar from 'chokidar'; - -export class FilesWatcher { - private watchers: chokidar.FSWatcher[]; - private listeners: { [eventName: string]: Function[] }; - constructor(private watchPaths: string[], private watchExtensions: string[]) { - this.watchExtensions = watchExtensions; - this.watchers = []; - this.listeners = {}; - } - - public isFileSupported(filePath: string) { - return this.watchExtensions.indexOf(path.extname(filePath)) !== -1; - } - - public watch() { - if (this.isWatching()) { - throw new Error('Cannot watch again - already watching.'); - } - - this.watchers = this.watchPaths.map((watchPath: string) => { - return chokidar - .watch(watchPath, { persistent: true, alwaysStat: true }) - .on('change', (filePath: string, stats: any) => { - if (this.isFileSupported(filePath)) { - (this.listeners['change'] || []).forEach(changeListener => { - changeListener(filePath, stats); - }); - } - }) - .on('unlink', (filePath: string) => { - if (this.isFileSupported(filePath)) { - (this.listeners['unlink'] || []).forEach(unlinkListener => { - unlinkListener(filePath); - }); - } - }); - }); - } - - public isWatchingFile(filePath: string) { - return ( - this.isWatching() && - this.isFileSupported(filePath) && - this.watchPaths.some(watchPath => filePath.startsWith(watchPath)) - ); - } - - public isWatching() { - return this.watchers.length > 0; - } - - public on(event: string, listener: Function) { - if (!this.listeners[event]) { - this.listeners[event] = []; - } - - this.listeners[event].push(listener); - } - - public off(event: string, listener: Function) { - if (this.listeners[event]) { - this.listeners[event] = this.listeners[event].filter( - oldListener => oldListener !== listener - ); - } - } -} diff --git a/src/IncrementalChecker.ts b/src/IncrementalChecker.ts index 63f1c0de..8783c6b1 100644 --- a/src/IncrementalChecker.ts +++ b/src/IncrementalChecker.ts @@ -9,7 +9,6 @@ import * as eslint from 'eslint'; import * as minimatch from 'minimatch'; import { FilesRegister } from './FilesRegister'; -import { FilesWatcher } from './FilesWatcher'; import { ConfigurationFile, loadLinterConfig, @@ -56,7 +55,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { protected program?: ts.Program; protected programConfig?: ts.ParsedCommandLine; - private watcher?: FilesWatcher; private readonly hasFixedConfig: boolean; @@ -67,7 +65,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { private readonly linterConfigFile: string | boolean; private readonly linterAutoFix: boolean; private readonly eslinter: ReturnType | undefined; - private readonly watchPaths: string[]; private readonly vue: VueOptions; private readonly checkSyntacticErrors: boolean; private readonly resolveModuleName: ResolveModuleName | undefined; @@ -83,7 +80,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { linterConfigFile, linterAutoFix, eslinter, - watchPaths, vue, checkSyntacticErrors = false, resolveModuleName, @@ -96,7 +92,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.linterConfigFile = linterConfigFile; this.linterAutoFix = linterAutoFix; this.eslinter = eslinter; - this.watchPaths = watchPaths; this.vue = vue; this.checkSyntacticErrors = checkSyntacticErrors; this.resolveModuleName = resolveModuleName; @@ -142,7 +137,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { typescript: typeof ts, programConfig: ts.ParsedCommandLine, files: FilesRegister, - watcher: FilesWatcher, oldProgram: ts.Program, userResolveModuleName: ResolveModuleName | undefined, userResolveTypeReferenceDirective: ResolveTypeReferenceDirective | undefined @@ -186,16 +180,13 @@ export class IncrementalChecker implements IncrementalCheckerInterface { }; host.getSourceFile = (filePath, languageVersion, onError) => { - // first check if watcher is watching file - if not - check it's mtime - if (!watcher.isWatchingFile(filePath)) { - try { - const stats = fs.statSync(filePath); - - files.setMtime(filePath, stats.mtime.valueOf()); - } catch (e) { - // probably file does not exists - files.remove(filePath); - } + try { + const stats = fs.statSync(filePath); + + files.setMtime(filePath, stats.mtime.valueOf()); + } catch (e) { + // probably file does not exists + files.remove(filePath); } // get source file only if there is no source in files register @@ -242,23 +233,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { } public nextIteration() { - if (!this.watcher) { - const watchExtensions = this.vue.enabled - ? ['.ts', '.tsx', '.vue'] - : ['.ts', '.tsx']; - this.watcher = new FilesWatcher(this.watchPaths, watchExtensions); - - // connect watcher with register - this.watcher.on('change', (filePath: string, stats: fs.Stats) => { - this.files.setMtime(filePath, stats.mtime.valueOf()); - }); - this.watcher.on('unlink', (filePath: string) => { - this.files.remove(filePath); - }); - - this.watcher.watch(); - } - if (!this.linterConfig && this.hasFixedConfig) { this.linterConfig = loadLinterConfig(this.linterConfigFile as string); @@ -298,7 +272,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.programConfig, path.dirname(this.programConfigFile), this.files, - this.watcher!, this.program!, this.resolveModuleName, this.resolveTypeReferenceDirective, @@ -319,7 +292,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.typescript, this.programConfig, this.files, - this.watcher!, this.program!, this.resolveModuleName, this.resolveTypeReferenceDirective diff --git a/src/IncrementalCheckerInterface.ts b/src/IncrementalCheckerInterface.ts index e18d2370..f3929db5 100644 --- a/src/IncrementalCheckerInterface.ts +++ b/src/IncrementalCheckerInterface.ts @@ -18,7 +18,7 @@ export interface IncrementalCheckerInterface { getEsLintIssues(cancellationToken: CancellationToken): Promise; } -export interface ApiIncrementalCheckerParams { +export interface IncrementalCheckerParams { typescript: typeof ts; context: string; programConfigFile: string; @@ -31,7 +31,3 @@ export interface ApiIncrementalCheckerParams { resolveTypeReferenceDirective: ResolveTypeReferenceDirective | undefined; vue: VueOptions; } - -export interface IncrementalCheckerParams extends ApiIncrementalCheckerParams { - watchPaths: string[]; -} diff --git a/src/VueProgram.ts b/src/VueProgram.ts index d4c56b38..9a678d59 100644 --- a/src/VueProgram.ts +++ b/src/VueProgram.ts @@ -3,7 +3,6 @@ import * as path from 'path'; // tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone import { FilesRegister } from './FilesRegister'; -import { FilesWatcher } from './FilesWatcher'; import { ResolveModuleName, ResolveTypeReferenceDirective, @@ -125,7 +124,6 @@ export class VueProgram { programConfig: ts.ParsedCommandLine, basedir: string, files: FilesRegister, - watcher: FilesWatcher, oldProgram: ts.Program, userResolveModuleName: ResolveModuleName | undefined, userResolveTypeReferenceDirective: @@ -173,16 +171,13 @@ export class VueProgram { // We need a host that can parse Vue SFCs (single file components). host.getSourceFile = (filePath, languageVersion, onError) => { - // first check if watcher is watching file - if not - check it's mtime - if (!watcher.isWatchingFile(filePath)) { - try { - const stats = fs.statSync(filePath); - - files.setMtime(filePath, stats.mtime.valueOf()); - } catch (e) { - // probably file does not exists - files.remove(filePath); - } + try { + const stats = fs.statSync(filePath); + + files.setMtime(filePath, stats.mtime.valueOf()); + } catch (e) { + // probably file does not exists + files.remove(filePath); } // get source file only if there is no source in files register diff --git a/src/hooks.ts b/src/hooks.ts index abb693f5..c29274f7 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -38,12 +38,7 @@ function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap { cancel: new SyncHook(['cancellationToken']), serviceStartError: new SyncHook(['error']), waiting: new SyncHook(['hasTsLint']), - serviceStart: new SyncHook([ - 'tsconfigPath', - 'tslintPath', - 'watchPaths', - 'memoryLimit' - ]), + serviceStart: new SyncHook(['tsconfigPath', 'tslintPath', 'memoryLimit']), receive: new SyncHook(['diagnostics', 'lints']), serviceOutOfMemory: new SyncHook([]), emit: new SyncHook(['diagnostics', 'lints', 'elapsed']), diff --git a/src/index.ts b/src/index.ts index 469510cc..285322ae 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,7 +47,6 @@ namespace ForkTsCheckerWebpackPlugin { eslint: boolean; /** Options to supply to eslint https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine */ eslintOptions: object; - watch: string | string[]; async: boolean; ignoreDiagnostics: number[]; ignoreLints: string[]; @@ -90,7 +89,6 @@ class ForkTsCheckerWebpackPlugin { private eslint: boolean = false; private eslintOptions: object = {}; private tslintAutoFix: boolean = false; - private watch: string[]; private ignoreDiagnostics: number[]; private ignoreLints: string[]; private ignoreLintWarnings: boolean; @@ -108,7 +106,6 @@ class ForkTsCheckerWebpackPlugin { private tsconfigPath: string | undefined = undefined; private tslintPath: string | undefined = undefined; - private watchPaths: string[] = []; private compiler: any = undefined; private started: [number, number] | undefined = undefined; @@ -144,8 +141,6 @@ class ForkTsCheckerWebpackPlugin { options = options || ({} as ForkTsCheckerWebpackPlugin.Options); this.options = { ...options }; - this.watch = - typeof options.watch === 'string' ? [options.watch] : options.watch || []; this.ignoreDiagnostics = options.ignoreDiagnostics || []; this.ignoreLints = options.ignoreLints || []; this.ignoreLintWarnings = options.ignoreLintWarnings === true; @@ -317,7 +312,6 @@ class ForkTsCheckerWebpackPlugin { typeof this.tslint === 'string' ? this.computeContextPath(this.tslint as string) : undefined; - this.watchPaths = this.watch.map(this.computeContextPath.bind(this)); // validate config const tsconfigOk = fileExistsSync(this.tsconfigPath); @@ -628,7 +622,6 @@ class ForkTsCheckerWebpackPlugin { TSLINTAUTOFIX: String(this.tslintAutoFix), ESLINT: String(this.eslint), ESLINT_OPTIONS: JSON.stringify(this.eslintOptions), - WATCH: this.isWatching ? this.watchPaths.join('|') : '', MEMORY_LIMIT: String(this.memoryLimit), CHECK_SYNTACTIC_ERRORS: String(this.checkSyntacticErrors), USE_INCREMENTAL_API: String(this.useTypescriptIncrementalApi === true), @@ -670,7 +663,6 @@ class ForkTsCheckerWebpackPlugin { forkTsCheckerHooks.serviceStart.call( this.tsconfigPath, this.tslintPath, - this.watchPaths, this.memoryLimit ); } else { @@ -679,7 +671,6 @@ class ForkTsCheckerWebpackPlugin { legacyHookMap.serviceStart, this.tsconfigPath, this.tslintPath, - this.watchPaths, this.memoryLimit ); } @@ -690,14 +681,6 @@ class ForkTsCheckerWebpackPlugin { (this.tslint ? ' and linting' : '') + ' service...' ); - - if (this.watchPaths.length && this.isWatching) { - this.logger.info( - 'Watching:' + - (this.watchPaths.length > 1 ? '\n' : ' ') + - this.watchPaths.map(wpath => chalk.grey(wpath)).join('\n') - ); - } } this.service.on('exit', (code: string | number, signal: string) => diff --git a/src/service.ts b/src/service.ts index ab76c064..e6f98f18 100644 --- a/src/service.ts +++ b/src/service.ts @@ -6,7 +6,6 @@ import { IncrementalChecker } from './IncrementalChecker'; import { CancellationToken } from './CancellationToken'; import { IncrementalCheckerInterface, - ApiIncrementalCheckerParams, IncrementalCheckerParams } from './IncrementalCheckerInterface'; import { ApiIncrementalChecker } from './ApiIncrementalChecker'; @@ -56,7 +55,7 @@ const eslinter = function createChecker( useIncrementalApi: boolean ): IncrementalCheckerInterface { - const apiIncrementalCheckerParams: ApiIncrementalCheckerParams = { + const incrementalCheckerParams: IncrementalCheckerParams = { typescript, context: process.env.CONTEXT!, programConfigFile: process.env.TSCONFIG!, @@ -71,19 +70,9 @@ function createChecker( vue: JSON.parse(process.env.VUE!) }; - if (useIncrementalApi) { - return new ApiIncrementalChecker(apiIncrementalCheckerParams); - } - - const incrementalCheckerParams: IncrementalCheckerParams = Object.assign( - {}, - apiIncrementalCheckerParams, - { - watchPaths: process.env.WATCH === '' ? [] : process.env.WATCH!.split('|') - } - ); - - return new IncrementalChecker(incrementalCheckerParams); + return useIncrementalApi + ? new ApiIncrementalChecker(incrementalCheckerParams) + : new IncrementalChecker(incrementalCheckerParams); } const checker = createChecker(process.env.USE_INCREMENTAL_API === 'true'); diff --git a/test/integration/general.spec.ts b/test/integration/general.spec.ts index 03b6b050..8046182a 100644 --- a/test/integration/general.spec.ts +++ b/test/integration/general.spec.ts @@ -55,21 +55,6 @@ describe.each([[true], [false]])( expect(plugin['logger']).toBe(console); }); - it('should set watch to empty array by default', () => { - const plugin = new ForkTsCheckerWebpackPlugin({}); - - expect(plugin['watch']).toEqual([]); - }); - - it('should set watch to one element array for string', () => { - const plugin = new ForkTsCheckerWebpackPlugin({ - useTypescriptIncrementalApi: false, - watch: '/test' - }); - - expect(plugin['watch']).toEqual(['/test']); - }); - it('should find lint warnings', callback => { const fileName = 'lintingError2'; const { compiler } = helpers.testLintAutoFixTest({ @@ -559,26 +544,5 @@ describe.each([[true], [false]])( callback(); }); }); - - /** - * regression test for #300 - */ - it('should work when `path` is set with relative paths', callback => { - const compiler = createCompiler({ - pluginOptions: { - tsconfig: 'tsconfig-semantic-error-only.json', - watch: ['./test1', './test2'] - } - }); - - compiler.run((err, stats) => { - expect(stats.compilation.errors).toEqual([ - expect.objectContaining({ - message: expect.stringContaining('TS2322') - }) - ]); - callback(); - }); - }); } ); diff --git a/test/unit/FilesWatcher.spec.js b/test/unit/FilesWatcher.spec.js deleted file mode 100644 index abd7d7ae..00000000 --- a/test/unit/FilesWatcher.spec.js +++ /dev/null @@ -1,155 +0,0 @@ -var mockRequire = require('mock-require'); - -describe('[UNIT] FilesWatcher', () => { - var FilesWatcher; - var watcher; - var watchStub; - var watcherStub; - - beforeEach(() => { - jest.resetModules(); - - watcherStub = { - on: jest.fn(function() { - return this; - }) - }; - watchStub = jest.fn(function() { - return watcherStub; - }); - - jest.setMock('chokidar', { watch: watchStub }); - FilesWatcher = require('../../lib/FilesWatcher').FilesWatcher; - - watcher = new FilesWatcher(['/test', '/bar'], ['.ext1', '.ext2']); - }); - - afterEach(() => { - mockRequire.stopAll(); - }); - - it('should check if file is supported', () => { - expect(watcher.isFileSupported('/foo.ext1')).toBe(true); - expect(watcher.isFileSupported('/foo.ext2')).toBe(true); - expect(watcher.isFileSupported('/foo.txt')).toBe(false); - expect(watcher.isFileSupported('/foo.ext1.txt')).toBe(false); - }); - - it('should check if is watching file', () => { - expect(watcher.isWatchingFile('/test/a.ext1')).toBe(false); - expect(watcher.isWatchingFile('/test/a.txt')).toBe(false); - expect(watcher.isWatchingFile('/test')).toBe(false); - expect(watcher.isWatchingFile('/foo/a.ext1')).toBe(false); - - watcher.watch(); - - expect(watcher.isWatchingFile('/test/a.ext1')).toBe(true); - expect(watcher.isWatchingFile('/test/a.txt')).toBe(false); - expect(watcher.isWatchingFile('/test')).toBe(false); - expect(watcher.isWatchingFile('/foo/a.ext1')).toBe(false); - }); - - it('should check if watcher is watching', () => { - expect(watcher.isWatching()).toBe(false); - watcher.watch(); - expect(watcher.isWatching()).toBe(true); - expect(function() { - watcher.watch(); - }).toThrowError(Error); - }); - - it('should add and remove listeners', () => { - var listenerA = function() {}; - var listenerB = function() {}; - - expect(typeof watcher.listeners).toBe('object'); - watcher.on('event', listenerA); - watcher.on('event', listenerB); - expect(Array.isArray(watcher.listeners['event'])).toBe(true); - expect(watcher.listeners['event']).toEqual([listenerA, listenerB]); - - watcher.off('event', listenerA); - expect(watcher.listeners['event']).toEqual([listenerB]); - - expect(function() { - watcher.off('event', listenerA); - }).not.toThrowError(); - expect(watcher.listeners['event']).toEqual([listenerB]); - - watcher.off('event', listenerB); - expect(watcher.listeners['event']).toEqual([]); - - expect(watcher.listeners['foo']).toBeUndefined(); - expect(function() { - watcher.off('foo', listenerA); - }).not.toThrowError(); - - expect(watcher.listeners['foo']).toBeUndefined(); - }); - - it('should watch filesystem using chokidar', () => { - expect(watchStub).not.toHaveBeenCalled(); - - var changeListenerA = jest.fn(); - var changeListenerB = jest.fn(); - var unlinkListenerA = jest.fn(); - var unlinkListenerB = jest.fn(); - - watcher.watch(); - - expect(watcherStub.on.mock.calls[0][0]).toBe('change'); - expect(watcherStub.on.mock.calls[1][0]).toBe('unlink'); - - var triggerChange = watcherStub.on.mock.calls[0][1]; - var triggerUnlink = watcherStub.on.mock.calls[1][1]; - - expect(typeof triggerChange).toBe('function'); - expect(typeof triggerUnlink).toBe('function'); - - expect(function() { - triggerChange('/test/test.ext1', {}); - }).not.toThrowError(); - expect(function() { - triggerUnlink('/test/test.ext1', {}); - }).not.toThrowError(); - - watcher.on('change', changeListenerA); - watcher.on('change', changeListenerB); - watcher.on('unlink', unlinkListenerA); - watcher.on('unlink', unlinkListenerB); - - expect(watchStub).toHaveBeenCalled(); - expect(watchStub.mock.calls[0][0]).toBe('/test'); - expect(watchStub.mock.calls[1][0]).toBe('/bar'); - - // manually trigger change listeners - triggerChange('/test/test.txt', {}); - expect(changeListenerA).not.toHaveBeenCalled(); - expect(changeListenerB).not.toHaveBeenCalled(); - - triggerChange('/test/test.ext1', {}); - expect(changeListenerB).toHaveBeenCalled(); - expect(changeListenerB).toHaveBeenCalled(); - - // manually trigger unlink listeners - triggerUnlink('/test/test.txt'); - expect(unlinkListenerA).not.toHaveBeenCalled(); - expect(unlinkListenerB).not.toHaveBeenCalled(); - - triggerUnlink('/test/test.ext1'); - expect(unlinkListenerA).toHaveBeenCalled(); - expect(unlinkListenerB).toHaveBeenCalled(); - - // check if off is working properly - watcher.off('change', changeListenerA); - watcher.off('unlink', unlinkListenerB); - - triggerChange('/test/test.ext1', {}); - triggerUnlink('/test/test.ext1'); - - expect(changeListenerA).toHaveBeenCalledTimes(1); - expect(changeListenerB).toHaveBeenCalledTimes(2); - expect(unlinkListenerA).toHaveBeenCalledTimes(2); - expect(unlinkListenerB).toHaveBeenCalledTimes(1); - }); -}); From 612aa567024c7063b5638efcda0acb3879dc6569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Wed, 18 Dec 2019 10:48:41 +0700 Subject: [PATCH 11/18] chore: update rimraf to prevent windows CI errors --- package.json | 2 +- yarn.lock | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 54114741..9291ac6b 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "mock-require": "^3.0.2", "nativescript-vue-template-compiler": "^2.4.0", "prettier": "^1.14.3", - "rimraf": "^2.5.4", + "rimraf": "^3.0.0", "semantic-release": "^16.0.0-beta.18", "ts-loader": "^5.0.0", "tslint": "^5.11.0", diff --git a/yarn.lock b/yarn.lock index 58e8cf15..f586db52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8612,6 +8612,13 @@ rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" From a7dd2a2fc1a94e367f54fce4a47a7304e6dfd20b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Thu, 19 Dec 2019 14:27:56 +0700 Subject: [PATCH 12/18] refactor: remove chokidar as a dependency as it's not used --- package.json | 2 -- yarn.lock | 96 ++-------------------------------------------------- 2 files changed, 2 insertions(+), 96 deletions(-) diff --git a/package.json b/package.json index 9291ac6b..446c02af 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,6 @@ "dependencies": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", - "chokidar": "^3.3.0", "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", @@ -108,7 +107,6 @@ "@babel/preset-typescript": "^7.3.3", "@commitlint/config-conventional": "^7.5.0", "@types/babel-code-frame": "^6.20.1", - "@types/chokidar": "^2.1.3", "@types/eslint": "^4.16.6", "@types/jest": "^24.0.11", "@types/lodash": "^4.14.134", diff --git a/yarn.lock b/yarn.lock index f586db52..25b7126b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1229,13 +1229,6 @@ version "2.3.0" resolved "https://registry.yarnpkg.com/@types/braces/-/braces-2.3.0.tgz#d00ec0a76562b2acb6f29330be33a093e33ed25c" -"@types/chokidar@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@types/chokidar/-/chokidar-2.1.3.tgz#123ab795dba6d89be04bf076e6aecaf8620db674" - integrity sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w== - dependencies: - chokidar "*" - "@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" @@ -1784,14 +1777,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" @@ -2114,11 +2099,6 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -2187,13 +2167,6 @@ braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -2541,21 +2514,6 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" -chokidar@*, chokidar@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - chokidar@^2.0.2: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4018,13 +3976,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - 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" @@ -4184,11 +4135,6 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -fsevents@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - fstream@^1.0.0, fstream@^1.0.2: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" @@ -4332,13 +4278,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -4885,13 +4824,6 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -5015,7 +4947,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -5042,11 +4974,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -6918,7 +6845,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -7611,11 +7538,6 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.1.tgz#ecdfbea7704adb5fe6fb47f9866c4c0e15e905c5" - integrity sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA== - pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -8299,13 +8221,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -9555,13 +9470,6 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" From 157aa022b4ad5992c4e47ce4e1e7571757ee8315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Tue, 17 Dec 2019 23:18:47 +0700 Subject: [PATCH 13/18] feat: drop support for webpack 1 and 3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We drop support for webpack < 4.0 to simplify our codebase and prepare for further refactoring. BREAKING CHANGE: 🧨 Dropped support for webpack 2.0 and webpack 3.0 --- .github/workflows/main.yml | 7 +- README.md | 33 +- package.json | 1 - src/hooks.ts | 13 - src/index.ts | 351 +-- src/tsconfig.json | 2 +- test/integration/general.spec.ts | 153 +- test/integration/helpers/createCompiler.ts | 4 +- test/integration/helpers/createVueCompiler.ts | 2 +- test/integration/helpers/index.ts | 1 - test/integration/helpers/webpackVersion.ts | 11 - yarn.lock | 2312 +---------------- 12 files changed, 241 insertions(+), 2649 deletions(-) delete mode 100644 test/integration/helpers/webpackVersion.ts diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 205b6ced..d0426574 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -50,8 +50,6 @@ jobs: packages: - webpack@5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4 - webpack@^4.0.0 ts-loader@^5.0.0 vue-loader@^15.2.4 - - webpack@^3.10.0 ts-loader@^3.4.0 vue-loader@^13.5.0 - - webpack@^2.7.0 ts-loader@^3.4.0 vue-loader@^13.5.0 steps: - uses: actions/checkout@v1 @@ -117,6 +115,9 @@ jobs: - name: Install dependencies run: yarn install --frozen-lockfile + + - name: Install semantic-release + run: yarn global add semantic-release@16.0.0-beta.18 - name: Download build artifact uses: actions/download-artifact@v1 @@ -124,4 +125,4 @@ jobs: name: lib - name: Release - run: yarn exec semantic-release + run: semantic-release diff --git a/README.md b/README.md index 517c951b..48a26f70 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ ## Installation -This plugin requires minimum **webpack 2.3**, **TypeScript 2.1** and optionally **ESLint 6.0.0** or **TSLint 4.0** +This plugin requires minimum **webpack 4.0**, **TypeScript 2.1** and optionally **ESLint 6.0.0** or **TSLint 4.0** + +If you depend on **webpack 2.0** or **webpack 3.0**, please use [older version](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v3.1.1) of the plugin. ```sh # with npm @@ -273,26 +275,21 @@ We hope this will be resolved in future; the issue can be tracked [here](https:/ This plugin provides some custom webpack hooks (all are sync): -| Event name | Hook Access Key | Description | Params | -| --------------------------------------- | -------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | -| `fork-ts-checker-cancel` | `cancel` | Cancellation has been requested | `cancellationToken` | -| `fork-ts-checker-waiting` | `waiting` | Waiting for results | `hasTsLint` | -| `fork-ts-checker-service-before-start` | `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | -| `fork-ts-checker-service-start` | `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `memoryLimit` | -| `fork-ts-checker-service-start-error` | `serviceStartError` | Cannot start service | `error` | -| `fork-ts-checker-service-out-of-memory` | `serviceOutOfMemory` | Service is out of memory | - | -| `fork-ts-checker-receive` | `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | -| `fork-ts-checker-emit` | `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | -| `fork-ts-checker-done` | `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | - -The **Event name** is there for backward compatibility with webpack 2/3. Regardless -of the version of webpack (2, 3 or 4) you are using, we will always access plugin hooks with **Hook Access Keys** as -described below. +| Hook Access Key | Description | Params | +| -------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | +| `cancel` | Cancellation has been requested | `cancellationToken` | +| `waiting` | Waiting for results | `hasTsLint` | +| `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | +| `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `memoryLimit` | +| `serviceStartError` | Cannot start service | `error` | +| `serviceOutOfMemory` | Service is out of memory | - | +| `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | +| `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | +| `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | ### Accessing plugin hooks -All plugin hooks are compatible with both [webpack](https://webpack.js.org) version -4 and version 2. To access plugin hooks and tap into the event, we need to use +To access plugin hooks and tap into the event, we need to use the `getCompilerHooks` static method. When we call this method with a [webpack compiler instance](https://webpack.js.org/api/node/), it returns the series of [tapable](https://github.com/webpack/tapable) hooks where you can pass in your callbacks. diff --git a/package.json b/package.json index 446c02af..d1d6766d 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,6 @@ "nativescript-vue-template-compiler": "^2.4.0", "prettier": "^1.14.3", "rimraf": "^3.0.0", - "semantic-release": "^16.0.0-beta.18", "ts-loader": "^5.0.0", "tslint": "^5.11.0", "tslint-config-prettier": "^1.16.0", diff --git a/src/hooks.ts b/src/hooks.ts index c29274f7..41e723a6 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -16,22 +16,9 @@ type ForkTsCheckerHookMap = Record< ForkTsCheckerHooks, SyncHook | AsyncSeriesHook >; -type ForkTsCheckerLegacyHookMap = Record; const compilerHookMap = new WeakMap(); -export const legacyHookMap: ForkTsCheckerLegacyHookMap = { - serviceBeforeStart: 'fork-ts-checker-service-before-start', - cancel: 'fork-ts-checker-cancel', - serviceStartError: 'fork-ts-checker-service-start-error', - waiting: 'fork-ts-checker-waiting', - serviceStart: 'fork-ts-checker-service-start', - receive: 'fork-ts-checker-receive', - serviceOutOfMemory: 'fork-ts-checker-service-out-of-memory', - emit: 'fork-ts-checker-emit', - done: 'fork-ts-checker-done' -}; - function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap { return { serviceBeforeStart: new AsyncSeriesHook([]), diff --git a/src/index.ts b/src/index.ts index 285322ae..7a6772f2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,8 +22,7 @@ import { fileExistsSync } from './FsHelper'; import { Message } from './Message'; import { ForkTsCheckerHooks, - getForkTsCheckerWebpackPluginHooks, - legacyHookMap + getForkTsCheckerWebpackPluginHooks } from './hooks'; import { RUN, RunPayload, RunResult } from './RpcTypes'; import { Issue, IssueSeverity } from './issue'; @@ -369,25 +368,21 @@ class ForkTsCheckerWebpackPlugin { } private pluginStart() { - const run = (_compiler: webpack.Compiler, callback: () => void) => { + const run = ( + compilation: webpack.compilation.Compilation, + callback: () => void + ) => { this.isWatching = false; callback(); }; - const watchRun = (_compiler: webpack.Compiler, callback: () => void) => { + const watchRun = (compiler: webpack.Compiler, callback: () => void) => { this.isWatching = true; callback(); }; - if ('hooks' in this.compiler) { - // webpack 4+ - this.compiler.hooks.run.tapAsync(checkerPluginName, run); - this.compiler.hooks.watchRun.tapAsync(checkerPluginName, watchRun); - } else { - // webpack 2 / 3 - this.compiler.plugin('run', run); - this.compiler.plugin('watch-run', watchRun); - } + this.compiler.hooks.run.tapAsync(checkerPluginName, run); + this.compiler.hooks.watchRun.tapAsync(checkerPluginName, watchRun); } private pluginStop() { @@ -395,21 +390,14 @@ class ForkTsCheckerWebpackPlugin { this.killService(); }; - const done = (_stats: webpack.Stats) => { + const done = () => { if (!this.isWatching) { this.killService(); } }; - if ('hooks' in this.compiler) { - // webpack 4+ - this.compiler.hooks.watchClose.tap(checkerPluginName, watchClose); - this.compiler.hooks.done.tap(checkerPluginName, done); - } else { - // webpack 2 / 3 - this.compiler.plugin('watch-close', watchClose); - this.compiler.plugin('done', done); - } + this.compiler.hooks.watchClose.tap(checkerPluginName, watchClose); + this.compiler.hooks.done.tap(checkerPluginName, done); process.on('exit', () => { this.killService(); @@ -417,112 +405,53 @@ class ForkTsCheckerWebpackPlugin { } private pluginCompile() { - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - this.compiler.hooks.compile.tap(checkerPluginName, () => { - this.compilationDone = false; - forkTsCheckerHooks.serviceBeforeStart.callAsync(() => { - if (this.cancellationToken) { - // request cancellation if there is not finished job - this.cancellationToken.requestCancellation(); - forkTsCheckerHooks.cancel.call(this.cancellationToken); - } - this.checkDone = false; - - this.started = process.hrtime(); + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + this.compiler.hooks.compile.tap(checkerPluginName, () => { + this.compilationDone = false; + forkTsCheckerHooks.serviceBeforeStart.callAsync(() => { + if (this.cancellationToken) { + // request cancellation if there is not finished job + this.cancellationToken.requestCancellation(); + forkTsCheckerHooks.cancel.call(this.cancellationToken); + } + this.checkDone = false; - // create new token for current job - this.cancellationToken = new CancellationToken(this.typescript); - if (!this.service || !this.service.connected) { - this.spawnService(); - } + this.started = process.hrtime(); - try { - if (this.measureTime) { - this.startAt = this.performance.now(); - } - this.serviceRpc!.rpc( - RUN, - this.cancellationToken.toJSON() - ).then(result => { - if (result) { - this.handleServiceMessage(result); - } - }); - } catch (error) { - if (!this.silent && this.logger) { - this.logger.error( - chalk.red( - 'Cannot start checker service: ' + - (error ? error.toString() : 'Unknown error') - ) - ); - } + // create new token for current job + this.cancellationToken = new CancellationToken(this.typescript); + if (!this.service || !this.service.connected) { + this.spawnService(); + } - forkTsCheckerHooks.serviceStartError.call(error); + try { + if (this.measureTime) { + this.startAt = this.performance.now(); } - }); - }); - } else { - // webpack 2 / 3 - this.compiler.plugin('compile', () => { - this.compilationDone = false; - this.compiler.applyPluginsAsync( - legacyHookMap.serviceBeforeStart, - () => { - if (this.cancellationToken) { - // request cancellation if there is not finished job - this.cancellationToken.requestCancellation(); - this.compiler.applyPlugins( - legacyHookMap.cancel, - this.cancellationToken - ); + this.serviceRpc!.rpc( + RUN, + this.cancellationToken.toJSON() + ).then(result => { + if (result) { + this.handleServiceMessage(result); } - this.checkDone = false; - - this.started = process.hrtime(); - - // create new token for current job - this.cancellationToken = new CancellationToken( - this.typescript, - undefined, - undefined + }); + } catch (error) { + if (!this.silent && this.logger) { + this.logger.error( + chalk.red( + 'Cannot start checker service: ' + + (error ? error.toString() : 'Unknown error') + ) ); - if (!this.service || !this.service.connected) { - this.spawnService(); - } - - try { - this.serviceRpc!.rpc( - RUN, - this.cancellationToken.toJSON() - ).then(result => { - if (result) { - this.handleServiceMessage(result); - } - }); - } catch (error) { - if (!this.silent && this.logger) { - this.logger.error( - chalk.red( - 'Cannot start checker service: ' + - (error ? error.toString() : 'Unknown error') - ) - ); - } - - this.compiler.applyPlugins( - legacyHookMap.serviceStartError, - error - ); - } } - ); + + forkTsCheckerHooks.serviceStartError.call(error); + } }); - } + }); } private pluginEmit() { @@ -541,74 +470,35 @@ class ForkTsCheckerWebpackPlugin { this.compilationDone = true; }; - if ('hooks' in this.compiler) { - // webpack 4+ - this.compiler.hooks.emit.tapAsync(checkerPluginName, emit); - } else { - // webpack 2 / 3 - this.compiler.plugin('emit', emit); - } + this.compiler.hooks.emit.tapAsync(checkerPluginName, emit); } private pluginDone() { - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - this.compiler.hooks.done.tap( - checkerPluginName, - (_stats: webpack.Stats) => { - if (!this.isWatching || !this.async) { - return; - } - - if (this.checkDone) { - this.doneCallback(); - } else { - if (this.compiler) { - forkTsCheckerHooks.waiting.call(this.tslint !== undefined); - } - if (!this.silent && this.logger) { - this.logger.info( - this.tslint - ? 'Type checking and linting in progress...' - : 'Type checking in progress...' - ); - } - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + this.compiler.hooks.done.tap(checkerPluginName, (_stats: webpack.Stats) => { + if (!this.isWatching || !this.async) { + return; + } - this.compilationDone = true; - } - ); - } else { - // webpack 2 / 3 - this.compiler.plugin('done', () => { - if (!this.isWatching || !this.async) { - return; + if (this.checkDone) { + this.doneCallback(); + } else { + if (this.compiler) { + forkTsCheckerHooks.waiting.call(this.tslint !== undefined); } - - if (this.checkDone) { - this.doneCallback(); - } else { - if (this.compiler) { - this.compiler.applyPlugins( - legacyHookMap.waiting, - this.tslint !== undefined - ); - } - if (!this.silent && this.logger) { - this.logger.info( - this.tslint - ? 'Type checking and linting in progress...' - : 'Type checking in progress...' - ); - } + if (!this.silent && this.logger) { + this.logger.info( + this.tslint + ? 'Type checking and linting in progress...' + : 'Type checking in progress...' + ); } + } - this.compilationDone = true; - }); - } + this.compilationDone = true; + }); } private spawnService() { @@ -655,25 +545,14 @@ class ForkTsCheckerWebpackPlugin { this.serviceRpc = new RpcProvider(message => this.service!.send(message)); this.service.on('message', message => this.serviceRpc!.dispatch(message)); - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - forkTsCheckerHooks.serviceStart.call( - this.tsconfigPath, - this.tslintPath, - this.memoryLimit - ); - } else { - // webpack 2 / 3 - this.compiler.applyPlugins( - legacyHookMap.serviceStart, - this.tsconfigPath, - this.tslintPath, - this.memoryLimit - ); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + forkTsCheckerHooks.serviceStart.call( + this.tsconfigPath, + this.tslintPath, + this.memoryLimit + ); if (!this.silent && this.logger) { this.logger.info( @@ -759,20 +638,10 @@ class ForkTsCheckerWebpackPlugin { this.lints = this.lints.filter(reportFilesPredicate); } - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - forkTsCheckerHooks.receive.call(this.diagnostics, this.lints); - } else { - // webpack 2 / 3 - this.compiler.applyPlugins( - legacyHookMap.receive, - this.diagnostics, - this.lints - ); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + forkTsCheckerHooks.receive.call(this.diagnostics, this.lints); if (this.compilationDone) { this.isWatching && this.async ? this.doneCallback() : this.emitCallback(); @@ -785,16 +654,10 @@ class ForkTsCheckerWebpackPlugin { } // probably out of memory :/ if (this.compiler) { - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - forkTsCheckerHooks.serviceOutOfMemory.call(); - } else { - // webpack 2 / 3 - this.compiler.applyPlugins(legacyHookMap.serviceOutOfMemory); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + forkTsCheckerHooks.serviceOutOfMemory.call(); } if (!this.silent && this.logger) { this.logger.error( @@ -816,21 +679,10 @@ class ForkTsCheckerWebpackPlugin { } const elapsed = Math.round(this.elapsed[0] * 1e9 + this.elapsed[1]); - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - forkTsCheckerHooks.emit.call(this.diagnostics, this.lints, elapsed); - } else { - // webpack 2 / 3 - this.compiler.applyPlugins( - legacyHookMap.emit, - this.diagnostics, - this.lints, - elapsed - ); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + forkTsCheckerHooks.emit.call(this.diagnostics, this.lints, elapsed); this.diagnostics.concat(this.lints).forEach(issue => { // webpack message format @@ -881,21 +733,10 @@ class ForkTsCheckerWebpackPlugin { const elapsed = Math.round(this.elapsed[0] * 1e9 + this.elapsed[1]); if (this.compiler) { - if ('hooks' in this.compiler) { - // webpack 4+ - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - this.compiler - ); - forkTsCheckerHooks.done.call(this.diagnostics, this.lints, elapsed); - } else { - // webpack 2 / 3 - this.compiler.applyPlugins( - legacyHookMap.done, - this.diagnostics, - this.lints, - elapsed - ); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + this.compiler + ); + forkTsCheckerHooks.done.call(this.diagnostics, this.lints, elapsed); } if (!this.silent && this.logger) { diff --git a/src/tsconfig.json b/src/tsconfig.json index 661074d9..dbb85751 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -3,7 +3,7 @@ "target": "es6", "noImplicitReturns": true, "noUnusedLocals": true, - "noUnusedParameters": true, + "noUnusedParameters": false, "skipLibCheck": true, "suppressImplicitAnyIndexErrors": true, "strict": true, diff --git a/test/integration/general.spec.ts b/test/integration/general.spec.ts index 8046182a..f8a93ae0 100644 --- a/test/integration/general.spec.ts +++ b/test/integration/general.spec.ts @@ -282,20 +282,13 @@ describe.each([[true], [false]])( it('should block emit on build mode', callback => { const compiler = createCompiler(); - if ('hooks' in compiler) { - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - compiler - ); - forkTsCheckerHooks.emit.tap('should block emit on build mode', () => { - expect(true).toBe(true); - callback(); - }); - } else { - (compiler as any).plugin('fork-ts-checker-emit', () => { - expect(true).toBe(true); - callback(); - }); - } + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + compiler + ); + forkTsCheckerHooks.emit.tap('should block emit on build mode', () => { + expect(true).toBe(true); + callback(); + }); compiler.run(() => { /**/ @@ -308,27 +301,15 @@ describe.each([[true], [false]])( /**/ }); - if ('hooks' in compiler) { - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - compiler - ); - forkTsCheckerHooks.done.tap( - 'should not block emit on watch mode', - () => { - watching.close(() => { - expect(true).toBe(true); - callback(); - }); - } - ); - } else { - (compiler as any).plugin('fork-ts-checker-done', () => { - watching.close(() => { - expect(true).toBe(true); - callback(); - }); + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + compiler + ); + forkTsCheckerHooks.done.tap('should not block emit on watch mode', () => { + watching.close(() => { + expect(true).toBe(true); + callback(); }); - } + }); }); it('should block emit if async flag is false', callback => { @@ -337,27 +318,18 @@ describe.each([[true], [false]])( /**/ }); - if ('hooks' in compiler) { - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - compiler - ); - forkTsCheckerHooks.emit.tap( - 'should block emit if async flag is false', - () => { - watching.close(() => { - expect(true).toBe(true); - callback(); - }); - } - ); - } else { - (compiler as any).plugin('fork-ts-checker-emit', () => { + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + compiler + ); + forkTsCheckerHooks.emit.tap( + 'should block emit if async flag is false', + () => { watching.close(() => { expect(true).toBe(true); callback(); }); - }); - } + } + ); }); it('kills the service when the watch is done', done => { @@ -366,27 +338,18 @@ describe.each([[true], [false]])( /**/ }); - if ('hooks' in compiler) { - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - compiler - ); - forkTsCheckerHooks.done.tap( - 'kills the service when the watch is done', - () => { - watching.close(() => { - expect(killServiceWasCalled()).toBe(true); - done(); - }); - } - ); - } else { - (compiler as any).plugin('fork-ts-checker-done', () => { + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + compiler + ); + forkTsCheckerHooks.done.tap( + 'kills the service when the watch is done', + () => { watching.close(() => { expect(killServiceWasCalled()).toBe(true); done(); }); - }); - } + } + ); }); it('should throw error if config container wrong tsconfig.json path', () => { @@ -419,45 +382,27 @@ describe.each([[true], [false]])( const compiler = createCompiler(); let delayed = false; - if ('hooks' in compiler) { - const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( - compiler - ); - forkTsCheckerHooks.serviceBeforeStart.tapAsync( - 'should allow delaying service-start', - (cb: () => void) => { - setTimeout(() => { - delayed = true; - - cb(); - }, 0); - } - ); - - forkTsCheckerHooks.serviceBeforeStart.tap( - 'should allow delaying service-start', - () => { - expect(delayed).toBe(true); - callback(); - } - ); - } else { - (compiler as any).plugin( - 'fork-ts-checker-service-before-start', - (cb: Function) => { - setTimeout(() => { - delayed = true; - - cb(); - }, 0); - } - ); + const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( + compiler + ); + forkTsCheckerHooks.serviceBeforeStart.tapAsync( + 'should allow delaying service-start', + (cb: () => void) => { + setTimeout(() => { + delayed = true; + + cb(); + }, 0); + } + ); - (compiler as any).plugin('fork-ts-checker-service-start', () => { + forkTsCheckerHooks.serviceBeforeStart.tap( + 'should allow delaying service-start', + () => { expect(delayed).toBe(true); callback(); - }); - } + } + ); compiler.run(() => { /** */ diff --git a/test/integration/helpers/createCompiler.ts b/test/integration/helpers/createCompiler.ts index 8921eecd..d811f66a 100644 --- a/test/integration/helpers/createCompiler.ts +++ b/test/integration/helpers/createCompiler.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import * as fs from 'fs'; import * as copyDir from 'copy-dir'; import * as rimraf from 'rimraf'; -import { ForkTsCheckerWebpackPlugin, webpackMajorVersion } from './'; +import { ForkTsCheckerWebpackPlugin } from './'; if (!beforeAll || !afterAll) { throw new Error('file should not be included outside of jest!'); @@ -132,7 +132,7 @@ export function createCompiler({ : { transpileOnly: true, silent: true }; const compilerConfig = prepareWebpackConfig({ - ...(webpackMajorVersion >= 4 ? { mode: 'development' } : {}), + mode: 'development', context: contextDir, entry: entryPoint, output: { diff --git a/test/integration/helpers/createVueCompiler.ts b/test/integration/helpers/createVueCompiler.ts index 91e97600..65c722bb 100644 --- a/test/integration/helpers/createVueCompiler.ts +++ b/test/integration/helpers/createVueCompiler.ts @@ -2,7 +2,7 @@ // @ts-ignore import { rpcMethods } from './rpc'; import * as path from 'path'; -import { CreateCompilerOptions, createCompiler, webpackMajorVersion } from '.'; +import { CreateCompilerOptions, createCompiler } from '.'; import { RpcProvider } from 'worker-rpc'; let VueLoaderPlugin: any; diff --git a/test/integration/helpers/index.ts b/test/integration/helpers/index.ts index ebaabcbe..a5cde96b 100644 --- a/test/integration/helpers/index.ts +++ b/test/integration/helpers/index.ts @@ -4,7 +4,6 @@ export { createCompiler, CreateCompilerOptions } from './createCompiler'; export { createVueCompiler } from './createVueCompiler'; export { getRpcProvider, rpcMethods } from './rpc'; export { testLintAutoFixTest } from './testLintAutoFixTest'; -export { webpackMajorVersion } from './webpackVersion'; export const expectedErrorCodes = { expectedSyntacticErrorCode: 'TS1005', diff --git a/test/integration/helpers/webpackVersion.ts b/test/integration/helpers/webpackVersion.ts deleted file mode 100644 index c513839b..00000000 --- a/test/integration/helpers/webpackVersion.ts +++ /dev/null @@ -1,11 +0,0 @@ -// tslint:disable:no-implicit-dependencies -function getWebpackMajorVersion() { - // Determine major webpack version from package.json or webpack itself - const rawWebpackVersion = - require('webpack').version || - require('../../../package.json').devDependencies.webpack; - const webpackVersion = rawWebpackVersion.replace(/[^0-9.]/g, ''); - return parseInt(webpackVersion.split('.')[0], 10); -} - -export const webpackMajorVersion = getWebpackMajorVersion(); diff --git a/yarn.lock b/yarn.lock index 25b7126b..86c303a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1051,139 +1051,12 @@ mkdirp "^0.5.1" rimraf "^2.5.2" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@octokit/endpoint@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-4.0.0.tgz#97032a6690ef1cf9576ab1b1582c0ac837e3b5b6" - integrity sha512-b8sptNUekjREtCTJFpOfSIL4SKh65WaakcyxWzRcSPOk5RxkZJ/S8884NGZFxZ+jCB2rDURU66pSHn14cVgWVg== - dependencies: - deepmerge "3.2.0" - is-plain-object "^2.0.4" - universal-user-agent "^2.0.1" - url-template "^2.0.8" - -"@octokit/request@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-3.0.0.tgz#304a279036b2dc89e7fba7cb30c9e6a9b1f4d2df" - integrity sha512-DZqmbm66tq+a9FtcKrn0sjrUpi0UaZ9QPUCxxyk/4CJ2rseTMpAWRf6gCwOSUCzZcx/4XVIsDk+kz5BVdaeenA== - dependencies: - "@octokit/endpoint" "^4.0.0" - deprecation "^1.0.1" - is-plain-object "^2.0.4" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^2.0.1" - -"@octokit/rest@^16.13.1": - version "16.24.3" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.24.3.tgz#5f844be604826b352d9683a133839341db2bed23" - integrity sha512-fBr2ziN4WT9G9sYTfnNVI/0wCb68ZI5isNU48lfWXQDyAy4ftlrh0SkIbhL7aigXUjcY0cX5J46ypyRPH0/U0g== - dependencies: - "@octokit/request" "3.0.0" - atob-lite "^2.0.0" - before-after-hook "^1.4.0" - btoa-lite "^1.0.0" - deprecation "^1.0.1" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^2.0.0" - url-template "^2.0.8" - "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" dependencies: any-observable "^0.3.0" -"@semantic-release/commit-analyzer@^7.0.0-beta.1": - version "7.0.0-beta-.2" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-7.0.0-beta-.2.tgz#5f30919eabee8f876c5f80d270274dca34933f76" - integrity sha512-tburFNeooqb8WrqTfkXroUpvb1jbRP15xugOcWdvnNOlDLHL5D//8BK2Q6TOY+G3RhrL1qaZIuoQ7paqia3x1A== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.0" - debug "^4.0.0" - import-from "^2.1.0" - lodash "^4.17.4" - micromatch "^3.1.10" - -"@semantic-release/error@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" - integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== - -"@semantic-release/github@^5.3.0-beta.6": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-5.3.1.tgz#3c792b3c774af8192d615b5d199bbdd841e8ed0a" - integrity sha512-61ZJprfabi9IQ1n7l0RSyAJN/saJQyPYyxmDBQqZqtZgoo706XkOc+++DiztuEOzSN0RBybE7d33zK4CXNsgWA== - dependencies: - "@octokit/rest" "^16.13.1" - "@semantic-release/error" "^2.2.0" - aggregate-error "^3.0.0" - bottleneck "^2.0.1" - debug "^4.0.0" - dir-glob "^2.0.0" - fs-extra "^7.0.0" - globby "^9.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - issue-parser "^3.0.0" - lodash "^4.17.4" - mime "^2.0.3" - p-filter "^2.0.0" - p-retry "^4.0.0" - parse-github-url "^1.0.1" - url-join "^4.0.0" - -"@semantic-release/npm@^5.2.0-beta.5": - version "5.2.0-beta.6" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-5.2.0-beta.6.tgz#5a92c766440e3225f64bb1fb0ca970b6825f023f" - integrity sha512-O6dSrgot3zpX0UqAQGvaiaqUR3YUYygYtk//iP+3TWyEqGwKYnJQUrk8zWB2r5Ul9VuNvcZT4FieoV5Wv47VrA== - dependencies: - "@semantic-release/error" "^2.2.0" - aggregate-error "^2.0.0" - execa "^1.0.0" - fs-extra "^7.0.0" - lodash "^4.17.4" - nerf-dart "^1.0.0" - normalize-url "^4.0.0" - npm "6.5.0" - rc "^1.2.8" - read-pkg "^4.0.0" - registry-auth-token "^3.3.1" - semver "^5.5.0" - -"@semantic-release/release-notes-generator@^7.1.2": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-7.1.4.tgz#8f4f752c5a8385abdaac1256127cef05988bc2ad" - integrity sha512-pWPouZujddgb6t61t9iA9G3yIfp3TeQ7bPbV1ixYSeP6L7gI1+Du82fY/OHfEwyifpymLUQW0XnIKgKct5IMMw== - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^4.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.0" - debug "^4.0.0" - get-stream "^4.0.0" - import-from "^2.1.0" - into-stream "^4.0.0" - lodash "^4.17.4" - "@types/anymatch@*": version "1.3.0" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff" @@ -1251,7 +1124,7 @@ version "1.2.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" -"@types/glob@*", "@types/glob@^7.1.1": +"@types/glob@*": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== @@ -1313,11 +1186,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.17.tgz#2e7efbfe5253561087812571e5e6a1e4b1d6295b" integrity sha512-7W3kSMa8diVH6s24a8Qrmvwu+vG3ahOC/flMHFdWSdnPYoQI0yPO84h5zOWYXAha2Npn3Pw3SSuQSwBUfaniyQ== -"@types/retry@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - "@types/rimraf@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.2.tgz#7f0fc3cf0ff0ad2a99bb723ae1764f30acaf8b6e" @@ -1566,7 +1434,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -JSONStream@^1.0.4, JSONStream@^1.3.4: +JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== @@ -1579,7 +1447,7 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== -abbrev@1, abbrev@~1.1.1: +abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -1625,36 +1493,6 @@ acorn@^6.2.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== -agent-base@4, agent-base@^4.1.0, agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-2.2.0.tgz#f54b464db18cc77c907ae084451f39134707134a" - integrity sha512-E5n+IZkhh22/pFdUvHUU/o9z752lc+7tgHt+FXS/g6BjlbE9249dGmuS/SxIWMPhTljZJkFN+7OXE0+O5+WT8w== - dependencies: - clean-stack "^2.0.0" - indent-string "^3.0.0" - -aggregate-error@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" - integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== - dependencies: - clean-stack "^2.0.0" - indent-string "^3.2.0" - ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1705,13 +1543,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1721,7 +1552,7 @@ ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" -ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== @@ -1755,16 +1586,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= - any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" @@ -1784,21 +1605,11 @@ append-transform@^1.0.0: dependencies: default-require-extensions "^2.0.0" -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2, aproba@~1.2.0: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.1.2 || 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1813,11 +1624,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk= - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1848,7 +1654,7 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -array-union@^1.0.1, array-union@^1.0.2: +array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: @@ -1858,11 +1664,6 @@ array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" -array-uniq@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-2.1.0.tgz#46603d5e28e79bfd02b046fcc1d77c6820bd8e98" - integrity sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ== - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1872,11 +1673,6 @@ arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1947,11 +1743,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2074,47 +1865,19 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -before-after-hook@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.4.0.tgz#2b6bf23dca4f32e628fd2747c10a37c74a4b484d" - integrity sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" -bin-links@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.2.tgz#fb74bd54bae6b7befc6c6221f25322ac830d9757" - integrity sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg== - dependencies: - bluebird "^3.5.0" - cmd-shim "^2.0.2" - gentle-fs "^2.0.0" - graceful-fs "^4.1.11" - write-file-atomic "^2.3.0" - binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -bluebird@^3.1.1, bluebird@^3.5.3: +bluebird@^3.1.1: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" -bluebird@^3.5.0, bluebird@^3.5.1: - version "3.5.4" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" - integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== - bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2125,24 +1888,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bottleneck@^2.0.1: - version "2.18.0" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.18.0.tgz#41fa63ae185b65435d789d1700334bc48222dacf" - integrity sha512-U1xiBRaokw4yEguzikOl0VrnZp6uekjpmfrh6rKtr1D+/jFjYCL6J83ZXlGtlBDwVdTmJJ+4Lg5FpB3xmLSiyA== - -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2151,7 +1896,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -2270,11 +2015,6 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2302,59 +2042,6 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.4.tgz#29d381709f41aae0d89c631f1c81aec88cd40b23" - integrity sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw== - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^11.0.1, cacache@^11.0.2, cacache@^11.2.0: - version "11.3.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" - dependencies: - bluebird "^3.5.3" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.3" - graceful-fs "^4.1.15" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cacache@^12.0.2: version "12.0.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" @@ -2391,16 +2078,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-limit@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" - integrity sha1-b9YbA/PaQqLNDsK2DwK9DnGZH+o= - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -2430,7 +2107,7 @@ camelcase-keys@^4.0.0: map-obj "^2.0.0" quick-lru "^1.0.0" -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -2465,19 +2142,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -2502,7 +2166,7 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -2533,20 +2197,11 @@ chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.7" -chownr@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== -chownr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= - chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -2554,22 +2209,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^1.5.0, ci-info@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" -cidr-regex@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" - integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== - dependencies: - ip-regex "^2.1.0" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -2594,47 +2237,12 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-stack@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.1.0.tgz#9e7fec7f3f8340a2ab4f127c80273085e8fbbdd0" - integrity sha512-uQWrpRm+iZZUCAp7ZZJQbd4Za9I3AjR/3YTjmcnAtkauaIm/T5CT6U8zVI6e60T6OANqBFAzuR9/HB3NzuZCRA== - -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= - -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -2659,14 +2267,6 @@ clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" -cmd-shim@^2.0.2, cmd-shim@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2727,28 +2327,10 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -2805,7 +2387,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.5.2: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -2814,32 +2396,12 @@ concat-stream@^1.5.0, concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" - integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= @@ -2863,38 +2425,6 @@ conventional-changelog-angular@^1.3.3: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-angular@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" - integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-writer@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz#916a2b302d0bb5ef18efd236a034c13fb273cde1" - integrity sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA== - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.1" - dateformat "^3.0.0" - handlebars "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" - semver "^5.5.0" - split "^1.0.0" - through2 "^2.0.0" - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz#55a135de1802f6510b6758e0a6aa9e0b28618db3" - integrity sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A== - dependencies: - is-subset "^0.1.1" - modify-values "^1.0.0" - conventional-commits-parser@^2.1.0: version "2.1.7" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" @@ -2908,19 +2438,6 @@ conventional-commits-parser@^2.1.0: through2 "^2.0.0" trim-off-newlines "^1.0.0" -conventional-commits-parser@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz#fe1c49753df3f98edb2285a5e485e11ffa7f2e4c" - integrity sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - trim-off-newlines "^1.0.0" - convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -3007,16 +2524,6 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.0.tgz#45038e4d28a7fe787203aede9c25bca4a08b12c8" - integrity sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.0" - parse-json "^4.0.0" - cosmiconfig@^5.0.7: version "5.0.7" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" @@ -3034,13 +2541,6 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3064,15 +2564,6 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -3100,11 +2591,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -3238,21 +2724,10 @@ date-fns@^1.27.2: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - debug@3.2.6, debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3266,17 +2741,12 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -3285,7 +2755,7 @@ decamelize-keys@^1.0.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3307,11 +2777,6 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deepmerge@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e" - integrity sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow== - default-require-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" @@ -3319,13 +2784,6 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -3380,11 +2838,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -deprecation@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-1.0.1.tgz#2df79b79005752180816b7b6e079cbd80490d711" - integrity sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg== - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -3393,11 +2846,6 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -3408,14 +2856,6 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - diff-sequences@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" @@ -3434,13 +2874,6 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -3472,30 +2905,6 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== - -duplexer2@~0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" @@ -3513,11 +2922,6 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - electron-to-chromium@^1.2.7: version "1.3.102" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz#3ac43a037c8a63bca3dfa189eb3d90f097196787" @@ -3553,13 +2957,6 @@ emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -3574,19 +2971,6 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" -env-ci@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-3.2.0.tgz#982f02a0501ca8c43bf0765c5bd3d83ffb28b23a" - integrity sha512-TFjNiDlXrL8/pfHswdvJGEZzJcq3aBPb8Eka83hlGLwuNw9F9BC9S9ETlkfkItLRT9k5JgpGgeP+rL6/3cEbcw== - dependencies: - execa "^1.0.0" - java-properties "^0.2.9" - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -3620,18 +3004,6 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3746,7 +3118,7 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= -esprima@^4.0.0, esprima@~4.0.0: +esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -3791,19 +3163,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3875,7 +3234,7 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.2, extglob@^2.0.4: +extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== @@ -3903,18 +3262,6 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" -fast-glob@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" - integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3934,7 +3281,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -figgy-pudding@^3.0.0, figgy-pudding@^3.1.0, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: +figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -3985,11 +3332,6 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== - find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -4007,14 +3349,6 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-versions@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.1.0.tgz#10161f29cf3eb4350dec10a29bdde75bff0df32d" - integrity sha512-NCTfNiVzeE/xL+roNDffGuRbrWI6atI18lTJ22vKp7rs2OhYzMK3W1dIdO2TUndH/QMcacM4d1uWwgcZcHK69Q== - dependencies: - array-uniq "^2.1.0" - semver-regex "^2.0.0" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -4073,30 +3407,13 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - -from2@^2.1.0, from2@^2.1.1: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-minipass@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" @@ -4104,16 +3421,7 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: +fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" dependencies: @@ -4135,16 +3443,6 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4175,25 +3473,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -gentle-fs@^2.0.0, gentle-fs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.0.1.tgz#585cfd612bfc5cd52471fdb42537f016a5ce3687" - integrity sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew== - dependencies: - aproba "^1.1.2" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - get-caller-file@^1.0.1, get-caller-file@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -4216,11 +3495,6 @@ get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4247,18 +3521,6 @@ git-cz@^3.0.1: global "^4.3.2" mocha "^6.0.2" -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" - integrity sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo= - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - git-raw-commits@^1.3.0: version "1.3.6" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff" @@ -4278,11 +3540,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - glob@7.1.3, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -4350,43 +3607,12 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - graceful-fs@^4.1.11: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6: +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -4443,11 +3669,6 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4457,7 +3678,7 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -4532,12 +3753,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hook-std@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-1.2.0.tgz#b37d533ea5f40068fe368cb4d022ee1992588c27" - integrity sha512-yntre2dbOAjgQ5yoRykyON0D9T96BfshR8IuiL/r3celeHD8I/76w4qo8m3z99houR4Z678jakV3uXrQdSvW/w== - -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0, hosted-git-info@^2.7.1: +hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -4552,19 +3768,6 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -4579,21 +3782,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - husky@^1.1.4: version "1.3.1" resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" @@ -4609,7 +3797,7 @@ husky@^1.1.4: run-node "^1.0.0" slash "^2.0.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -4634,11 +3822,6 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== - ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -4646,7 +3829,7 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.3, ignore@^4.0.6: +ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -4664,18 +3847,6 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -4688,7 +3859,7 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -4701,7 +3872,7 @@ infer-owner@^1.0.3: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -4719,28 +3890,14 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - inquirer@^6.2.2: version "6.4.1" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" @@ -4760,14 +3917,6 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -into-stream@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-4.0.0.tgz#ef10ee2ffb6f78af34c93194bbdc36c35f7d8a9d" - integrity sha512-i29KNyE5r0Y/UQzcQ0IbZO1MYJ53Jn0EcFRZPj5FzWKYH17kDFEOwuA+3jroymOI06SW1dEDnly9A1CAreC5dg== - dependencies: - from2 "^2.1.1" - p-is-promise "^2.0.0" - invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4775,26 +3924,11 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.4, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -4845,26 +3979,12 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" dependencies: ci-info "^2.0.0" -is-cidr@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-2.0.7.tgz#0fd4b863c26b2eb2d157ed21060c4f3f8dd356ce" - integrity sha512-YfOm5liUO1RoYfFh+lhiGNYtbLzem7IXzFqvfjXh+zLCEuAiznTBlQ2QcMWxsgYeOFmjzljOxJfmZID4/cRBAQ== - dependencies: - cidr-regex "^2.0.10" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -4954,19 +4074,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5015,11 +4122,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -5031,20 +4133,10 @@ is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= - -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= - is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -5080,10 +4172,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5110,17 +4198,6 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -issue-parser@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-3.0.1.tgz#ee8dd677fdb5be64541f81fa5e7267baa271a7ee" - integrity sha512-5wdT3EE8Kq38x/hJD8QZCJ9scGoOZ5QnzwXyClkviSWTS+xOCE6hJ0qco3H5n5jCsFqpbofZCcMWqlXJzF72VQ== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - istanbul-api@^2.1.1: version "2.1.5" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.5.tgz#697b95ec69856c278aacafc0f86ee7392338d5b5" @@ -5211,11 +4288,6 @@ istanbul@^0.4.5: which "^1.1.1" wordwrap "^1.0.0" -java-properties@^0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-0.2.10.tgz#2551560c25fa1ad94d998218178f233ad9b18f60" - integrity sha512-CpKJh9VRNhS+XqZtg1UMejETGEiqwCGDC/uwPEEQwc2nfdbSm73SIE29TplG2gLYuBOOTNDqxzG6A9NtEPLt0w== - jest-changed-files@^24.7.0: version "24.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" @@ -5666,7 +4738,7 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5683,7 +4755,7 @@ 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" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -5701,13 +4773,6 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -5752,25 +4817,6 @@ kleur@^3.0.2: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -5794,48 +4840,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-2.0.2.tgz#4f38c2b37acf2ec156936cef1cbf74636568fc7b" - integrity sha512-9uZ6/LAflVEijksTRq/RX0e+pGA4mr8tND9Cmk2JMg7j2fFUBrs8PpFX2DOAJR/XoxPzz+5h8bkWmtIYLunKAg== - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - lock-verify "^2.0.2" - mkdirp "^0.5.1" - npm-lifecycle "^2.0.3" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^8.1.6" - protoduck "^5.0.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpmhook@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-4.0.1.tgz#63641654de772cbeb96a88527a7fd5456ec3c2d7" - integrity sha512-3qqpfqvBD1712WA6iGe0stkG40WwAeoWcujA6BlC0Be1JArQbqwabnEnZ0CRcD05Tf1fPYJYdCbSfcfedEJCOg== - dependencies: - figgy-pudding "^3.1.0" - npm-registry-fetch "^3.0.0" - -libnpx@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.0.tgz#1bf4a1c9f36081f64935eb014041da10855e3102" - integrity sha512-X28coei8/XRCt15cYStbLBph+KGhFra4VQhRBPuH/HHMkC5dxM8v24RVgUsvODKCrUZ0eTgiTqJp6zbl0sskQQ== - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - lint-staged@^8.0.5: version "8.1.0" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-8.1.0.tgz#dbc3ae2565366d8f20efb9f9799d076da64863f2" @@ -5944,86 +4948,19 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lock-verify@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.1.0.tgz#fff4c918b8db9497af0c5fa7f6d71555de3ceb47" - integrity sha512-vcLpxnGvrqisKvLQ2C2v0/u7LVly17ak2YSgoK4PrdsYBXQIax19vhKiLfvKNFx7FRrpTnitrpzF/uuCMuorIg== - dependencies: - npm-package-arg "^6.1.0" - semver "^5.4.1" - -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== - dependencies: - signal-exit "^3.0.2" - -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= - -lodash.clonedeep@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -6044,40 +4981,20 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - lodash.unescape@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: +lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= - -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= - lodash@4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5, lodash@^4.2.1: version "4.17.13" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== @@ -6122,12 +5039,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.1.2: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" dependencies: @@ -6140,17 +5052,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -macos-release@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.2.0.tgz#ab58d55dd4714f0a05ad4b0e90f4370fef5cdea8" - integrity sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA== - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6159,40 +5060,6 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -"make-fetch-happen@^2.5.0 || 3 || 4", make-fetch-happen@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" - integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ== - dependencies: - agentkeepalive "^3.4.1" - cacache "^11.0.1" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -make-fetch-happen@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz#7b661d2372fc4710ab5cc8e1fa3c290eea69a961" - integrity sha512-FmWY7gC0mL6Z4N86vE14+m719JKE4H0A+pyiOH18B025gF/C113pyfb4gHDDYP5cqnRMHOz06JGdmffC/SES+w== - dependencies: - agentkeepalive "^3.4.1" - cacache "^10.0.4" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.2.4" - makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -6234,23 +5101,6 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -marked-terminal@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-3.2.0.tgz#3fc91d54569332bcf096292af178d82219000474" - integrity sha512-Yr1yVS0BbDG55vx7be1D0mdv+jGs9AW563o/Tt/7FTsId2J0yqhrTeXAqq/Q0DyyXltIn6CSxzesQuFqXgafjQ== - dependencies: - ansi-escapes "^3.1.0" - cardinal "^2.1.1" - chalk "^2.4.1" - cli-table "^0.3.1" - node-emoji "^1.4.1" - supports-hyperlinks "^1.0.1" - -marked@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.6.2.tgz#c574be8b545a8b48641456ca1dbe0e37b6dccc1a" - integrity sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA== - matcher@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" @@ -6270,18 +5120,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -6341,34 +5179,10 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" -merge2@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" - integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== - microevent.ts@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.0.tgz#390748b8a515083e6b63cd5112a3f18c2fe0eba8" -micromatch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba" - integrity sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.0" - define-property "^1.0.0" - extend-shallow "^2.0.1" - extglob "^2.0.2" - fragment-cache "^0.2.1" - kind-of "^6.0.0" - nanomatch "^1.2.5" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -6407,11 +5221,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "~1.39.0" -mime@^2.0.3: - version "2.4.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78" - integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -6467,14 +5276,7 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -minipass@^2.3.3: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^2.3.4, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -6482,29 +5284,13 @@ minipass@^2.3.4, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1, minizlib@^1.2.1: +minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -6533,7 +5319,7 @@ mkdir-p@~0.0.4: resolved "https://registry.yarnpkg.com/mkdir-p/-/mkdir-p-0.0.7.tgz#24c5dbe26da3a99ef158a1eef9a5c2dd9de5683c" integrity sha1-JMXb4m2jqZ7xWKHu+aXC3Z3laDw= -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -6580,11 +5366,6 @@ mock-require@^3.0.2: get-caller-file "^1.0.2" normalize-path "^2.1.1" -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -6601,7 +5382,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1, ms@^2.0.0, ms@^2.1.1: +ms@2.1.1, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -6609,17 +5390,12 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== -nanomatch@^1.2.5, nanomatch@^1.2.9: +nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== @@ -6666,22 +5442,10 @@ neo-async@^2.6.1: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo= - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" -node-emoji@^1.4.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== - dependencies: - lodash.toarray "^4.4.0" - node-environment-flags@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" @@ -6690,38 +5454,6 @@ node-environment-flags@1.0.5: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" - integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA== - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6795,13 +5527,13 @@ node-releases@^1.1.17: dependencies: semver "^5.3.0" -"nopt@2 || 3", nopt@3.x: +nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= @@ -6809,16 +5541,6 @@ nopt@^4.0.1, nopt@~4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -6828,13 +5550,13 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@~2.4.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.2.tgz#6b2abd85774e51f7936f1395e45acb905dc849b2" - integrity sha512-YcMnjqeoUckXTPKZSAsPjUPLxH85XotbpqK3w4RyCwdFQSU5FxxBys8buehkSfg0j9fKvV1hn7O0+8reEgkAiw== +normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" @@ -6863,73 +5585,11 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" -normalize-url@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" - integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== - -npm-audit-report@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.2.tgz#303bc78cd9e4c226415076a4f7e528c89fc77018" - integrity sha512-abeqS5ONyXNaZJPGAf6TOUMNdSe1Y6cpc9MLBRn+CuUoYbfdca6AxOyXVlfIv9OgKX+cacblbG5w7A6ccwoTPw== - dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" - npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= - -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - integrity sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc= - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^2.0.3, npm-lifecycle@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569" - integrity sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.11" - node-gyp "^3.8.0" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== - dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.10, npm-packlist@^1.1.12: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-packlist@^1.1.6: version "1.4.6" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" @@ -6944,77 +5604,12 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" -npm-pick-manifest@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" - integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-3.0.2.tgz#58d568f1b56ef769602fd0aed8c43fa0e0de0f57" - integrity sha512-rEJOFR6PbwOvvhGa2YTNOJQKNuc6RovJ6T50xPU7pS9h/zKPNCJ+VHZY2OFXyZvEi+UQYtHRTp8O/YM3tUD20A== - dependencies: - aproba "^1.1.2 || 2" - make-fetch-happen "^2.5.0 || 3 || 4" - -npm-registry-client@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz#7f1529f91450732e89f8518e0f21459deea3e4c4" - integrity sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg== - dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - safe-buffer "^5.1.1" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - ssri "^5.2.4" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" - -npm-registry-fetch@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-1.1.1.tgz#710bc5947d9ee2c549375072dab6d5d17baf2eb2" - integrity sha512-ev+zxOXsgAqRsR8Rk+ErjgWOlbrXcqGdme94/VNdjDo1q8TSy10Pp8xgDv/ZmMk2jG/KvGtXUNG4GS3+l6xbDw== - dependencies: - bluebird "^3.5.1" - figgy-pudding "^3.0.0" - lru-cache "^4.1.2" - make-fetch-happen "^3.0.0" - npm-package-arg "^6.0.0" - safe-buffer "^5.1.1" - -npm-registry-fetch@^3.0.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz#44d841780e2833f06accb34488f8c7450d1a6856" - integrity sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" - npm-package-arg "^6.1.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= - npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -7023,122 +5618,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npm@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.5.0.tgz#30ed48d4cd4d17d68ee04a5fcf9fa2ca9167d819" - integrity sha512-SPq8zG2Kto+Xrq55E97O14Jla13PmQT5kSnvwBj88BmJZ5Nvw++OmlWfhjkB67pcgP5UEXljEtnGFKZtOgt6MQ== - dependencies: - JSONStream "^1.3.4" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "~1.2.0" - archy "~1.0.0" - bin-links "^1.1.2" - bluebird "^3.5.3" - byte-size "^4.0.3" - cacache "^11.2.0" - call-limit "~1.1.0" - chownr "~1.0.1" - ci-info "^1.6.0" - cli-columns "^3.1.2" - cli-table3 "^0.5.0" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "^1.1.12" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.0.1" - glob "^7.1.3" - graceful-fs "^4.1.15" - has-unicode "~2.0.1" - hosted-git-info "^2.7.1" - iferr "^1.0.2" - inflight "~1.0.6" - inherits "~2.0.3" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^2.0.6" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^2.0.2" - libnpmhook "^4.0.1" - libnpx "^10.2.0" - lock-verify "^2.0.2" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^4.1.3" - meant "~1.0.1" - mississippi "^3.0.0" - mkdirp "~0.5.1" - move-concurrently "^1.0.1" - node-gyp "^3.8.0" - nopt "~4.0.1" - normalize-package-data "~2.4.0" - npm-audit-report "^1.3.1" - npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-lifecycle "^2.1.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^2.1.0" - npm-profile "^3.0.2" - npm-registry-client "^8.6.0" - npm-registry-fetch "^1.1.0" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "^1.5.1" - osenv "^0.1.5" - pacote "^8.1.6" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "^0.12.0" - query-string "^6.1.0" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "~1.0.1" - read-installed "~4.0.3" - read-package-json "^2.0.13" - read-package-tree "^5.2.1" - readable-stream "^2.3.6" - request "^2.88.0" - retry "^0.12.0" - rimraf "~2.6.2" - safe-buffer "^5.1.2" - semver "^5.5.1" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.1" - stringify-package "^1.0.0" - tar "^4.4.8" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "~1.1.0" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.2" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.6.0" - write-file-atomic "^2.3.0" - -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.2, npmlog@~4.1.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -7217,12 +5697,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -7235,11 +5710,6 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== - optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -7268,15 +5738,6 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7286,19 +5747,11 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-name@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -7318,13 +5771,6 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-filter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" - integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== - dependencies: - p-map "^2.0.0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -7370,16 +5816,8 @@ p-map@^2.0.0: p-reduce@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-retry@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.1.0.tgz#9ce7cef2069e84bf590df3b8ec18d740109338d6" - integrity sha512-oepllyG9gX1qH4Sm20YAKxg1GA7L7puhvGnTfimi31P07zSIj7SDV6YtuAx9nbJF51DES+2CIIRkXs8GKqWJxA== - dependencies: - "@types/retry" "^0.12.0" - retry "^0.12.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" @@ -7390,47 +5828,6 @@ p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pacote@^8.1.6: - version "8.1.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-8.1.6.tgz#8e647564d38156367e7a9dc47a79ca1ab278d46e" - integrity sha512-wTOOfpaAQNEQNtPEx92x9Y9kRWVu45v583XT8x2oEV2xRB74+xdqMZIeGW4uFvAyZdmSBtye+wKdyyLaT8pcmw== - dependencies: - bluebird "^3.5.1" - cacache "^11.0.2" - get-stream "^3.0.0" - glob "^7.1.2" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" - minimatch "^3.0.4" - minipass "^2.3.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.10" - npm-pick-manifest "^2.1.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.5.0" - ssri "^6.0.0" - tar "^4.4.3" - unique-filename "^1.1.0" - which "^1.3.0" - pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -7462,11 +5859,6 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-github-url@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" - integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -7503,7 +5895,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -7568,14 +5960,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg= - dependencies: - find-up "^2.0.0" - load-json-file "^4.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" @@ -7863,7 +6247,7 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.0, prepend-http@^1.0.1: +prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" @@ -7916,18 +6300,10 @@ progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - prompts@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" @@ -7936,25 +6312,6 @@ prompts@^2.0.1: kleur "^3.0.2" sisteransi "^1.0.0" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protoduck@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -7980,7 +6337,7 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -pump@^2.0.0, pump@^2.0.1: +pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" dependencies: @@ -8020,11 +6377,6 @@ q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -8037,15 +6389,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.1.0: - version "6.4.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.4.2.tgz#8be1dbd105306aebf86022144f575a29d516b713" - integrity sha512-DfJqAen17LfLA3rQ+H5S4uXphrF+ANU1lT2ijds4V/Tj4gZxA3gx5/tg1bz7kYCmwna7LyJNCYqO7jNRzo3aLw== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8061,11 +6404,6 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8081,7 +6419,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: +rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -8096,50 +6434,6 @@ react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== -read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= - dependencies: - graceful-fs "^4.1.2" - -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.2.tgz#4b6a0ef2d943c1ea36a578214c9a7f6b7424f7a8" - integrity sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -8165,7 +6459,7 @@ read-pkg@3.0.0, read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read-pkg@^4.0.0, read-pkg@^4.0.1: +read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" dependencies: @@ -8173,13 +6467,6 @@ read-pkg@^4.0.0, read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -8192,26 +6479,6 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -8236,13 +6503,6 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= - dependencies: - esprima "~4.0.0" - reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -8322,21 +6582,6 @@ regexpu-core@^4.5.4: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -registry-auth-token@^3.0.1, registry-auth-token@^3.3.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -8390,7 +6635,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.74.0, request@^2.87.0, request@^2.88.0: +request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -8504,17 +6749,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: @@ -8625,61 +6860,10 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -semantic-release@^16.0.0-beta.18: - version "16.0.0-beta.18" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-16.0.0-beta.18.tgz#8df1562c55d5d1e6804d0e9bc4935703f2f20516" - integrity sha512-d27vHo5f5o2hyHNVMFkou4qllXRjuOxUKree5A2xz/Lr3io8ySqc0BDnr4sZxvfhUd85AC8/I0uw49UMQSPtAw== - dependencies: - "@semantic-release/commit-analyzer" "^7.0.0-beta.1" - "@semantic-release/error" "^2.2.0" - "@semantic-release/github" "^5.3.0-beta.6" - "@semantic-release/npm" "^5.2.0-beta.5" - "@semantic-release/release-notes-generator" "^7.1.2" - aggregate-error "^2.0.0" - cosmiconfig "^5.0.1" - debug "^4.0.0" - env-ci "^3.0.0" - execa "^1.0.0" - figures "^2.0.0" - find-versions "^3.0.0" - get-stream "^4.0.0" - git-log-parser "^1.2.0" - hook-std "^1.1.0" - hosted-git-info "^2.7.1" - lodash "^4.17.4" - marked "^0.6.0" - marked-terminal "^3.2.0" - micromatch "3.1.5" - p-each-series "^1.0.0" - p-reduce "^1.0.0" - read-pkg-up "^4.0.0" - resolve-from "^4.0.0" - semver "^5.4.1" - semver-diff "^2.1.0" - signale "^1.2.1" - yargs "^12.0.0" - semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -semver-diff@^2.0.0, semver-diff@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -semver-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" - integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== - -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - "semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" @@ -8694,16 +6878,16 @@ semver@^5.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^5.4.1, semver@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + semver@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" @@ -8736,14 +6920,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -sha@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" - integrity sha1-YDCCL70smCOUn49y7WQR7lzyWq4= - dependencies: - graceful-fs "^4.1.2" - readable-stream "^2.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8764,15 +6940,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - simple-git@^1.85.0: version "1.107.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.107.0.tgz#12cffaf261c14d6f450f7fdb86c21ccee968b383" @@ -8784,11 +6951,6 @@ sisteransi@^1.0.0: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -8806,21 +6968,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slide@^1.1.3, 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" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== - -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - integrity sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY= - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -8851,57 +6998,12 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - integrity sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA== - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - integrity sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o= - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== - dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" dependencies: is-plain-obj "^1.0.0" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8957,11 +7059,6 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk= - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -8984,11 +7081,6 @@ spdx-license-ids@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" -split-on-first@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.0.0.tgz#648af4ce9a28fbcaadd43274455f298b55025fc6" - integrity sha512-mjA57TQtdWztVZ9THAjGNpgbuIrNfsNrGa5IyK94NoPaT4N14M+GI4jD7t4arLjFkYRQWdETC5RxFzLWouoB3A== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9003,20 +7095,6 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ= - dependencies: - through2 "~2.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9036,14 +7114,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.0, ssri@^6.0.1: +ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" dependencies: @@ -9079,14 +7150,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -9105,14 +7168,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -9121,11 +7176,6 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" @@ -9170,11 +7220,6 @@ string_decoder@^1.0.0: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -9190,11 +7235,6 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" -stringify-package@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b" - integrity sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g== - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -9257,7 +7297,7 @@ supports-color@^3.1.0, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.0.0, supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: @@ -9269,14 +7309,6 @@ supports-color@^6.0.0, supports-color@^6.1.0: dependencies: has-flag "^3.0.0" -supports-hyperlinks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" - integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== - dependencies: - has-flag "^2.0.0" - supports-color "^5.0.0" - svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -9317,15 +7349,6 @@ tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -9339,25 +7362,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^4.4.3, tar@^4.4.8: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - terser-webpack-plugin@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -9397,7 +7401,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -9406,22 +7410,17 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: +through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.6: +"through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -9429,11 +7428,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9503,11 +7497,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -traverse@~0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" @@ -9611,16 +7600,6 @@ uglify-js@^3.1.4: commander "~2.17.1" source-map "~0.6.1" -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -9662,7 +7641,7 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" -unique-filename@^1.1.0, unique-filename@^1.1.1, unique-filename@~1.1.0: +unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" dependencies: @@ -9674,25 +7653,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universal-user-agent@^2.0.0, universal-user-agent@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" - integrity sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g== - dependencies: - os-name "^3.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - unixify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" @@ -9700,11 +7660,6 @@ unixify@^1.0.0: dependencies: normalize-path "^2.1.1" -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -9713,32 +7668,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^2.3.0, update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -9750,23 +7684,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-join@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" - integrity sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -9785,11 +7702,6 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= - util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -9817,20 +7729,13 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - vendors@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" @@ -9912,13 +7817,6 @@ watchpack@^1.6.0: graceful-fs "^4.1.2" neo-async "^2.5.0" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10000,7 +7898,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@1.3.1, which@^1.1.1, which@^1.2.10, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1.3.1, which@^1.1.1, which@^1.2.10, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -10012,20 +7910,6 @@ wide-align@1.1.3, wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -10034,12 +7918,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -worker-farm@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" - dependencies: - errno "~0.1.7" - worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -10082,15 +7960,6 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" - integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -10105,11 +7974,6 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -10124,11 +7988,6 @@ xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -10165,13 +8024,6 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - yargs-unparser@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" @@ -10198,25 +8050,7 @@ yargs@13.2.2: y18n "^4.0.0" yargs-parser "^13.0.0" -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^12.0.0, yargs@^12.0.2, yargs@^12.0.5: +yargs@^12.0.2, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== From ba666594596079a529c2239435fa497ae1cbb996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Fri, 20 Dec 2019 10:06:17 +0700 Subject: [PATCH 14/18] chore: use npx for the release job In order to simplify the release job, we want to switch to the `npx semantic-release` command to skip dependencies installation --- .github/workflows/main.yml | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d0426574..6bfb8631 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -102,27 +102,10 @@ jobs: with: node-version: 12 - - name: Get yarn cache - id: yarn-cache - run: echo "::set-output name=dir::$(yarn cache dir)" - - - uses: actions/cache@v1 - with: - path: ${{ steps.yarn-cache.outputs.dir }} - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Install semantic-release - run: yarn global add semantic-release@16.0.0-beta.18 - - name: Download build artifact uses: actions/download-artifact@v1 with: name: lib - name: Release - run: semantic-release + run: npx semantic-release@16.0.0-beta.18 From 1d410d9ff0183404651248be34d73618ec35de1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sun, 22 Dec 2019 16:38:06 +0700 Subject: [PATCH 15/18] feat: drop tslint support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We drop support for the TsLint as it's deprecated and we want to simplify our code-base. BREAKING CHANGE: 🧨 Dropped support for TsLint BREAKING CHANGE: 🧨 Removed "tslint" and "tslintAutoFix" option BREAKING CHANGE: 🧨 Removed "hasTslint" argument for the "waiting" plugin hook BREAKING CHANGE: 🧨 Removed "tslintPath" argument for the "serviceStart" plugin hook --- .eslintignore | 2 + .eslintrc.js | 25 + README.md | 85 +- package.json | 25 +- src/.eslintrc.js | 9 - src/ApiIncrementalChecker.ts | 128 +- src/CancellationToken.ts | 1 - src/CompilerHost.ts | 55 +- src/FilesRegister.ts | 5 - src/FsHelper.ts | 1 + src/IncrementalChecker.ts | 158 +- src/IncrementalCheckerInterface.ts | 5 - src/LinkedList.ts | 4 +- src/VueProgram.ts | 11 +- src/createEslinter.ts | 9 +- src/formatter/CodeframeFormatter.ts | 3 + src/hooks.ts | 5 +- src/index.ts | 164 +- src/issue/IssueOrigin.ts | 9 +- src/issue/eslint/EsLintIssueFactory.ts | 3 +- src/issue/eslint/FileAwareEsLintMessage.ts | 1 - src/issue/index.ts | 1 - src/issue/internal/InternalIssueFactory.ts | 12 +- src/issue/tslint/TsLintIssueFactory.ts | 32 - src/issue/tslint/index.ts | 1 - .../typescript/TypeScriptIssueFactory.ts | 1 - src/linterConfigHelpers.ts | 58 - src/patchTypescript.ts | 39 +- src/resolution.ts | 5 - src/service.ts | 37 +- src/tsconfig.json | 4 +- src/tslint.json | 28 - test/.eslintrc.js | 20 - .../project_hierarchical_tslint/index.ts | 4 - .../project_hierarchical_tslint/lib/func.ts | 1 - .../lib/tslint.json | 12 - .../lib/utils/func.ts | 1 - .../lib/utils/tslint.json | 9 - .../project_hierarchical_tslint/tsconfig.json | 5 - test/fixtures/vue/src/langs/index.ts | 6 +- test/fixtures/vue/tslint.json | 9 - test/integration/general.spec.ts | 146 +- test/integration/helpers/createCompiler.ts | 2 - test/integration/helpers/createVueCompiler.ts | 23 +- test/integration/helpers/index.ts | 1 - test/integration/helpers/rpc.js | 22 +- .../helpers/testLintAutoFixTest.ts | 31 - test/integration/incrementalApi.spec.ts | 15 - .../mocks/ApiIncrementalCheckerWithRpc.js | 53 +- .../mocks/IncrementalCheckerWithError.js | 2 +- .../mocks/IncrementalCheckerWithRpc.js | 16 +- test/integration/nonIncrementalApi.spec.ts | 1 - test/integration/tslint.json | 3 - test/integration/vue.spec.ts | 131 +- ...oken.spec.js => CancellationToken.spec.ts} | 49 +- ...eRegister.spec.js => FileRegister.spec.ts} | 20 +- test/unit/IncrementalChecker.spec.js | 84 -- test/unit/IncrementalChecker.spec.ts | 48 + ...{VueProgram.spec.js => VueProgram.spec.ts} | 53 +- ...ter.spec.js => CodeframeFormatter.spec.ts} | 13 +- ...atter.spec.js => DefaultFormatter.spec.ts} | 11 +- ...ctory.spec.js => FormatterFactory.spec.ts} | 17 +- ...tter.spec.js => InternalFormatter.spec.ts} | 8 +- ...Formatter.spec.js => RawFormatter.spec.ts} | 7 +- test/unit/{index.spec.js => index.spec.ts} | 54 +- .../issue/{Issue.spec.js => Issue.spec.ts} | 37 +- ...ssueOrigin.spec.js => IssueOrigin.spec.ts} | 43 +- ...Severity.spec.js => IssueSeverity.spec.ts} | 6 +- ....spec.js.snap => IssueOrigin.spec.ts.snap} | 1 - ...pec.js.snap => IssueSeverity.spec.ts.snap} | 0 ...ory.spec.js => EsLintIssueFactory.spec.ts} | 30 +- ...s.snap => EsLintIssueFactory.spec.ts.snap} | 2 +- ...y.spec.js => InternalIssueFactory.spec.ts} | 4 +- ...snap => InternalIssueFactory.spec.ts.snap} | 0 .../issue/tslint/TsLintIssueFactory.spec.js | 49 - .../TsLintIssueFactory.spec.js.snap | 48 - ...spec.js => TypeScriptIssueFactory.spec.ts} | 41 +- ...ap => TypeScriptIssueFactory.spec.ts.snap} | 8 +- yarn.lock | 1317 ++++++++++------- 79 files changed, 1340 insertions(+), 2049 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js delete mode 100644 src/.eslintrc.js delete mode 100644 src/issue/tslint/TsLintIssueFactory.ts delete mode 100644 src/issue/tslint/index.ts delete mode 100644 src/linterConfigHelpers.ts delete mode 100644 src/tslint.json delete mode 100644 test/.eslintrc.js delete mode 100644 test/fixtures/project_hierarchical_tslint/index.ts delete mode 100644 test/fixtures/project_hierarchical_tslint/lib/func.ts delete mode 100644 test/fixtures/project_hierarchical_tslint/lib/tslint.json delete mode 100644 test/fixtures/project_hierarchical_tslint/lib/utils/func.ts delete mode 100644 test/fixtures/project_hierarchical_tslint/lib/utils/tslint.json delete mode 100644 test/fixtures/project_hierarchical_tslint/tsconfig.json delete mode 100644 test/fixtures/vue/tslint.json delete mode 100644 test/integration/helpers/testLintAutoFixTest.ts delete mode 100644 test/integration/tslint.json rename test/unit/{CancellationToken.spec.js => CancellationToken.spec.ts} (72%) rename test/unit/{FileRegister.spec.js => FileRegister.spec.ts} (89%) delete mode 100644 test/unit/IncrementalChecker.spec.js create mode 100644 test/unit/IncrementalChecker.spec.ts rename test/unit/{VueProgram.spec.js => VueProgram.spec.ts} (77%) rename test/unit/formatter/{CodeframeFormatter.spec.js => CodeframeFormatter.spec.ts} (87%) rename test/unit/formatter/{DefaultFormatter.spec.js => DefaultFormatter.spec.ts} (81%) rename test/unit/formatter/{FormatterFactory.spec.js => FormatterFactory.spec.ts} (83%) rename test/unit/formatter/{InternalFormatter.spec.js => InternalFormatter.spec.ts} (91%) rename test/unit/formatter/{RawFormatter.spec.js => RawFormatter.spec.ts} (77%) rename test/unit/{index.spec.js => index.spec.ts} (64%) rename test/unit/issue/{Issue.spec.js => Issue.spec.ts} (89%) rename test/unit/issue/{IssueOrigin.spec.js => IssueOrigin.spec.ts} (51%) rename test/unit/issue/{IssueSeverity.spec.js => IssueSeverity.spec.ts} (89%) rename test/unit/issue/__snapshots__/{IssueOrigin.spec.js.snap => IssueOrigin.spec.ts.snap} (90%) rename test/unit/issue/__snapshots__/{IssueSeverity.spec.js.snap => IssueSeverity.spec.ts.snap} (100%) rename test/unit/issue/eslint/{EsLintIssueFactory.spec.js => EsLintIssueFactory.spec.ts} (68%) rename test/unit/issue/eslint/__snapshots__/{EsLintIssueFactory.spec.js.snap => EsLintIssueFactory.spec.ts.snap} (96%) rename test/unit/issue/internal/{InternalIssueFactory.spec.js => InternalIssueFactory.spec.ts} (90%) rename test/unit/issue/internal/__snapshots__/{InternalIssueFactory.spec.js.snap => InternalIssueFactory.spec.ts.snap} (100%) delete mode 100644 test/unit/issue/tslint/TsLintIssueFactory.spec.js delete mode 100644 test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap rename test/unit/issue/typescript/{TypeScriptIssueFactory.spec.js => TypeScriptIssueFactory.spec.ts} (69%) rename test/unit/issue/typescript/__snapshots__/{TypeScriptIssueFactory.spec.js.snap => TypeScriptIssueFactory.spec.ts.snap} (77%) diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..fc84a655 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +/src/types/** +/lib/** diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..bd3a707e --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + extends: [ + 'plugin:node/recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier/@typescript-eslint', + 'plugin:prettier/recommended' + ], + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module' + }, + settings: { + node: { + tryExtensions: ['.js', '.json', '.ts', '.d.ts'] + } + }, + rules: { + 'no-process-exit': 'off', // to investigate if we should throw an error instead of process.exit() + 'node/no-unsupported-features/es-builtins': 'off', + 'node/no-unsupported-features/es-syntax': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-namespace': 'off' // maybe we should consider enabling it in the future + } +}; diff --git a/README.md b/README.md index 48a26f70..3c2f3a81 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ ## Installation -This plugin requires minimum **webpack 4.0**, **TypeScript 2.1** and optionally **ESLint 6.0.0** or **TSLint 4.0** +This plugin requires minimum **webpack 4.0**, **TypeScript 2.1** and optionally **ESLint 6.0.0** -If you depend on **webpack 2.0** or **webpack 3.0**, please use [older version](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v3.1.1) of the plugin. +If you depend on **webpack 2.0**, **webpack 3.0**, or **tslint 4.0**, please use [older version](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v3.1.1) of the plugin. ```sh # with npm @@ -100,17 +100,6 @@ module.exports = { There's a good explanation on setting up TypeScript ESLint support by Robert Cooper [here](https://dev.to/robertcoopercode/using-eslint-and-prettier-in-a-typescript-project-53jb). -## TSLint - -*[TSLint is being replaced by ESLint](https://medium.com/palantir/tslint-in-2019-1a144c2317a9). -https://eslint.org/blog/2019/01/future-typescript-eslint. As a consequence, support for TSLint in fork-ts-checker-webpack-plugin will be deprecated and removed in future versions of the plugin.* - -If you have installed [tslint](https://palantir.github.io/tslint), you can enable it by setting `tslint: true` or -`tslint: './path/to/tslint.json'`. We recommend changing `defaultSeverity` to a `"warning"` in `tslint.json` file. -It helps to distinguish lints from TypeScript's diagnostics. - - - ## Options - **tsconfig** `string`: @@ -126,34 +115,7 @@ It helps to distinguish lints from TypeScript's diagnostics. - **eslintOptions** `object`: - Options that can be used to initialise ESLint. See https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine - -- **tslint** `string | true | undefined`: - - - If `string`, path to _tslint.json_ file to check source files against. - - If `true`, path to `tslint.json` file will be computed with respect to currently checked file, just like TSLint - CLI would do. Suppose you have a project: - - ``` - ./ - tslint.json - - src/ - file.ts - anotherFile.ts - - lib/ - tslint.json - someHelperFile.ts - ``` - - In such a case `src/file.ts` and `src/anotherFile.ts` would be checked against root `tslint.json`, and - `src/lib/someHelperFile.ts` would be checked against `src/lib/tslint.json`. - - Default: `undefined`. - -- **tslintAutoFix** `boolean`: - Passes on `--fix` flag while running `tslint` to auto fix linting errors. Default: false. - + - **async** `boolean`: True by default - `async: false` can block webpack's emit to wait for type checker/linter and to add errors to the webpack's compilation. We recommend to set this to `false` in projects where type checking is faster than webpack's build - it's better for integration with other plugins. Another scenario where you might want to set this to `false` is if you use the `overlay` functionality of `webpack-dev-server`. @@ -162,7 +124,7 @@ It helps to distinguish lints from TypeScript's diagnostics. List of TypeScript diagnostic codes to ignore. - **ignoreLints** `string[]`: - List of tslint rule names to ignore. + List of eslint rule names to ignore. - **ignoreLintWarnings** `boolean`: If true, will ignore all lint warnings. @@ -275,17 +237,17 @@ We hope this will be resolved in future; the issue can be tracked [here](https:/ This plugin provides some custom webpack hooks (all are sync): -| Hook Access Key | Description | Params | -| -------------------- | ------------------------------------------------------------------------------ | ------------------------------------------- | -| `cancel` | Cancellation has been requested | `cancellationToken` | -| `waiting` | Waiting for results | `hasTsLint` | -| `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | -| `serviceStart` | Service will be started | `tsconfigPath`, `tslintPath`, `memoryLimit` | -| `serviceStartError` | Cannot start service | `error` | -| `serviceOutOfMemory` | Service is out of memory | - | -| `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | -| `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | -| `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | +| Hook Access Key | Description | Params | +| -------------------- | ------------------------------------------------------------------------------ | --------------------------------- | +| `cancel` | Cancellation has been requested | `cancellationToken` | +| `waiting` | Waiting for results | - | +| `serviceBeforeStart` | Async plugin that can be used for delaying `fork-ts-checker-service-start` | - | +| `serviceStart` | Service will be started | `tsconfigPath`, `memoryLimit` | +| `serviceStartError` | Cannot start service | `error` | +| `serviceOutOfMemory` | Service is out of memory | - | +| `receive` | Plugin receives diagnostics and lints from service | `diagnostics`, `lints` | +| `emit` | Service will add errors and warnings to webpack compilation ('build' mode) | `diagnostics`, `lints`, `elapsed` | +| `done` | Service finished type checking and webpack finished compilation ('watch' mode) | `diagnostics`, `lints`, `elapsed` | ### Accessing plugin hooks @@ -381,14 +343,12 @@ if ('compilers' in compiler) { ```js new ForkTsCheckerWebpackPlugin({ - tslint: true, vue: true }); ``` Optionally change default [vue-template-compiler](https://github.com/vuejs/vue/tree/dev/packages/vue-template-compiler) to [nativescript-vue-template-compiler](https://github.com/nativescript-vue/nativescript-vue/tree/master/packages/nativescript-vue-template-compiler) if you use [nativescript-vue](https://github.com/nativescript-vue/nativescript-vue) ``` new ForkTsCheckerWebpackPlugin({ - tslint: true, vue: { enabled: true, compiler: 'nativescript-vue-template-compiler' } }); ``` @@ -423,16 +383,7 @@ new ForkTsCheckerWebpackPlugin({ }, ``` -4. Add rules to your `tslint.json` and they will be applied to Vue files. For example, you could apply the Standard JS rules [tslint-config-standard](https://github.com/blakeembrey/tslint-config-standard) like this: - -```json -{ - "defaultSeverity": "error", - "extends": ["tslint-config-standard"] -} -``` - -5. Ensure your `tsconfig.json` includes .vue files: +4. Ensure your `tsconfig.json` includes .vue files: ```js // tsconfig.json @@ -447,7 +398,7 @@ new ForkTsCheckerWebpackPlugin({ } ``` -6. It accepts any wildcard in your TypeScript configuration: +5. It accepts any wildcard in your TypeScript configuration: ```js // tsconfig.json @@ -472,7 +423,7 @@ new ForkTsCheckerWebpackPlugin({ import Hello from '@/components/hello.vue' ``` -7. If you are working in **VSCode**, you can get extensions [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur) and [TSLint Vue](https://marketplace.visualstudio.com/items?itemName=prograhammer.tslint-vue) to complete the developer workflow. +6. If you are working in **VSCode**, you can get the [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur) extension to complete the developer workflow. ## Credits diff --git a/package.json b/package.json index d1d6766d..8502002c 100644 --- a/package.json +++ b/package.json @@ -37,14 +37,10 @@ "types": "lib/index.d.ts", "scripts": { "build": "rimraf lib && tsc --version && tsc --project \"./src\"", - "lint": "tslint --project src/tsconfig.json && eslint ./test", - "lint:fix": "tslint --project src/tsconfig.json --fix && eslint ./test --fix", + "lint": "eslint ./src ./test --ext .ts --ext .js --ignore-pattern '/test/fixtures/**' --ignore-pattern '/test/tmp/**'", "test": "yarn build && yarn test:unit && yarn test:integration", - "test:coverage": "rimraf coverage && jest --coverage && rimraf tmp", - "test:integration": "jest integration && rimraf tmp", "test:unit": "jest unit", - "test:watch": "jest unit --watch", - "watch": "tsc --version && tsc --project \"./src\" --watch", + "test:integration": "jest integration && rimraf tmp", "precommit": "lint-staged && yarn build && yarn test:unit", "commit": "./node_modules/.bin/git-cz" }, @@ -102,9 +98,9 @@ "worker-rpc": "^0.1.0" }, "devDependencies": { - "@babel/core": "^7.7.4", - "@babel/preset-env": "^7.4.4", - "@babel/preset-typescript": "^7.3.3", + "@babel/core": "^7.7.7", + "@babel/preset-env": "^7.7.7", + "@babel/preset-typescript": "^7.7.7", "@commitlint/config-conventional": "^7.5.0", "@types/babel-code-frame": "^6.20.1", "@types/eslint": "^4.16.6", @@ -117,12 +113,15 @@ "@types/rimraf": "^2.0.2", "@types/semver": "^5.5.0", "@types/webpack": "^4.4.19", - "@typescript-eslint/eslint-plugin": "^1.11.0", - "@typescript-eslint/parser": "^1.11.0", + "@typescript-eslint/eslint-plugin": "^2.12.0", + "@typescript-eslint/parser": "^2.12.0", "commitlint": "^7.5.2", "copy-dir": "^0.4.0", "css-loader": "0.28.11", - "eslint": "^6.0.0", + "eslint": "^6.8.0", + "eslint-config-prettier": "^6.7.0", + "eslint-plugin-node": "^10.0.0", + "eslint-plugin-prettier": "^3.1.2", "git-cz": "^3.0.1", "husky": "^1.1.4", "istanbul": "^0.4.5", @@ -135,8 +134,6 @@ "prettier": "^1.14.3", "rimraf": "^3.0.0", "ts-loader": "^5.0.0", - "tslint": "^5.11.0", - "tslint-config-prettier": "^1.16.0", "typescript": "^3.0.1", "unixify": "^1.0.0", "vue": "^2.5.16", diff --git a/src/.eslintrc.js b/src/.eslintrc.js deleted file mode 100644 index 081feb2b..00000000 --- a/src/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname, - sourceType: 'module' - } -}; diff --git a/src/ApiIncrementalChecker.ts b/src/ApiIncrementalChecker.ts index b0aa1e3f..88036185 100644 --- a/src/ApiIncrementalChecker.ts +++ b/src/ApiIncrementalChecker.ts @@ -1,72 +1,38 @@ -// tslint:disable-next-line:no-implicit-dependencies -import * as ts from 'typescript'; // Imported for types alone -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // Imported for types alone -// tslint:disable-next-line:no-implicit-dependencies import * as eslint from 'eslint'; // Imported for types alone -import * as path from 'path'; -import * as minimatch from 'minimatch'; import { IncrementalCheckerInterface, IncrementalCheckerParams } from './IncrementalCheckerInterface'; import { CancellationToken } from './CancellationToken'; -import { - ConfigurationFile, - loadLinterConfig, - makeGetLinterConfig -} from './linterConfigHelpers'; import { CompilerHost } from './CompilerHost'; -import { fileExistsSync } from './FsHelper'; import { createEslinter } from './createEslinter'; import { createIssuesFromTsDiagnostics, - createIssuesFromTsLintRuleFailures, createIssuesFromEsLintReports } from './issue'; export class ApiIncrementalChecker implements IncrementalCheckerInterface { - private linterConfig?: ConfigurationFile; - private linterConfigs: Record = {}; - protected readonly tsIncrementalCompiler: CompilerHost; - private linterExclusions: minimatch.IMinimatch[] = []; - private currentLintErrors = new Map(); private currentEsLintErrors = new Map(); private lastUpdatedFiles: string[] = []; private lastRemovedFiles: string[] = []; - private readonly hasFixedConfig: boolean; - - private readonly context: string; - private readonly linterConfigFile: string | boolean; - private readonly linterAutoFix: boolean; private readonly eslinter: ReturnType | undefined; constructor({ typescript, - context, programConfigFile, compilerOptions, - linterConfigFile, - linterAutoFix, eslinter, vue, checkSyntacticErrors = false, resolveModuleName, resolveTypeReferenceDirective }: IncrementalCheckerParams) { - this.context = context; - this.linterConfigFile = linterConfigFile; - this.linterAutoFix = linterAutoFix; this.eslinter = eslinter; - this.hasFixedConfig = typeof this.linterConfigFile === 'string'; - - this.initLinterConfig(); - this.tsIncrementalCompiler = new CompilerHost( typescript, vue, @@ -78,59 +44,19 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { ); } - private initLinterConfig() { - if (!this.linterConfig && this.hasFixedConfig) { - this.linterConfig = loadLinterConfig(this.linterConfigFile as string); - - if ( - this.linterConfig.linterOptions && - this.linterConfig.linterOptions.exclude - ) { - // Pre-build minimatch patterns to avoid additional overhead later on. - // Note: Resolving the path is required to properly match against the full file paths, - // and also deals with potential cross-platform problems regarding path separators. - this.linterExclusions = this.linterConfig.linterOptions.exclude.map( - pattern => new minimatch.Minimatch(path.resolve(pattern)) - ); - } - } - } - - private getLinterConfig: ( - file: string - ) => ConfigurationFile | undefined = makeGetLinterConfig( - this.linterConfigs, - this.linterExclusions, - this.context - ); - - private createLinter(program: ts.Program): tslint.Linter { - // tslint:disable-next-line:no-implicit-dependencies - const { Linter } = require('tslint'); - - return new Linter({ fix: this.linterAutoFix }, program); - } - - public hasTsLinter(): boolean { - return !!this.linterConfigFile; - } - public hasEsLinter(): boolean { return this.eslinter !== undefined; } public isFileExcluded(filePath: string): boolean { - return ( - filePath.endsWith('.d.ts') || - this.linterExclusions.some(matcher => matcher.match(filePath)) - ); + return filePath.endsWith('.d.ts'); } public nextIteration() { // do nothing } - public async getTypeScriptIssues(_cancellationToken: CancellationToken) { + public async getTypeScriptIssues() { const tsDiagnostics = await this.tsIncrementalCompiler.processChanges(); this.lastUpdatedFiles = tsDiagnostics.updatedFiles; this.lastRemovedFiles = tsDiagnostics.removedFiles; @@ -138,53 +64,11 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { return createIssuesFromTsDiagnostics(tsDiagnostics.results); } - public async getTsLintIssues(_cancellationToken: CancellationToken) { - for (const updatedFile of this.lastUpdatedFiles) { - if (this.isFileExcluded(updatedFile)) { - continue; - } - - try { - const linter = this.createLinter( - this.tsIncrementalCompiler.getProgram() - ); - const config = this.hasFixedConfig - ? this.linterConfig - : this.getLinterConfig(updatedFile); - if (!config) { - continue; - } - // const source = fs.readFileSync(updatedFile, 'utf-8'); - linter.lint(updatedFile, undefined!, config); - const lints = linter.getResult(); - this.currentLintErrors.set(updatedFile, lints); - } catch (e) { - if ( - fileExistsSync(updatedFile) && - // check the error type due to file system lag - !(e instanceof Error) && - !(e.constructor.name === 'FatalError') && - !(e.message && e.message.trim().startsWith('Invalid source file')) - ) { - // it's not because file doesn't exist - throw error - throw e; - } - } - - for (const removedFile of this.lastRemovedFiles) { - this.currentLintErrors.delete(removedFile); - } - } - - const allLints = []; - for (const [, value] of this.currentLintErrors) { - allLints.push(...value.failures); + public async getEsLintIssues(cancellationToken: CancellationToken) { + if (!this.eslinter) { + throw new Error('EsLint is not enabled in the plugin.'); } - return createIssuesFromTsLintRuleFailures(allLints); - } - - public async getEsLintIssues(cancellationToken: CancellationToken) { for (const removedFile of this.lastRemovedFiles) { this.currentEsLintErrors.delete(removedFile); } @@ -195,7 +79,7 @@ export class ApiIncrementalChecker implements IncrementalCheckerInterface { continue; } - const report = this.eslinter!.getReport(updatedFile); + const report = this.eslinter.getReport(updatedFile); if (report !== undefined) { this.currentEsLintErrors.set(updatedFile, report); diff --git a/src/CancellationToken.ts b/src/CancellationToken.ts index 47c17d44..5396bd65 100644 --- a/src/CancellationToken.ts +++ b/src/CancellationToken.ts @@ -2,7 +2,6 @@ import * as crypto from 'crypto'; import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone import { fileExistsSync } from './FsHelper'; diff --git a/src/CompilerHost.ts b/src/CompilerHost.ts index 1c89e8c3..1ddaff55 100644 --- a/src/CompilerHost.ts +++ b/src/CompilerHost.ts @@ -1,5 +1,5 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone + import { LinkedList } from './LinkedList'; import { VueProgram } from './VueProgram'; import { ResolveModuleName, ResolveTypeReferenceDirective } from './resolution'; @@ -25,7 +25,11 @@ export class CompilerHost >; public getProgram(): ts.Program { - return this.program!.getProgram().getProgram(); + if (!this.program) { + throw new Error('Program is not created yet.'); + } + + return this.program.getProgram().getProgram(); } public getAllKnownFiles() { @@ -226,10 +230,12 @@ export class CompilerHost } public setTimeout( + // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (...args: any[]) => void, - _ms: number, + ms: number, + // eslint-disable-next-line @typescript-eslint/no-explicit-any ...args: any[] - ): any { + ) { // There are 2 things we are hacking here: // 1. This method only called from watch program to wait until all files // are written to filesystem (for example, when doing 'save all') @@ -250,18 +256,16 @@ export class CompilerHost // dramatic compilation time increase), so we have to stick with these // hacks for now. this.compilationStarted = true; - return this.typescript.sys.setTimeout!(callback, 1, args); + + return (this.typescript.sys.setTimeout || setTimeout)(callback, 1, args); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any public clearTimeout(timeoutId: any): void { - this.typescript.sys.clearTimeout!(timeoutId); + (this.typescript.sys.clearTimeout || clearTimeout)(timeoutId); } - public onWatchStatusChange( - _diagnostic: ts.Diagnostic, - _newLine: string, - _options: ts.CompilerOptions - ): void { + public onWatchStatusChange(): void { // do nothing } @@ -289,7 +293,7 @@ export class CompilerHost public watchFile( path: string, callback: ts.FileWatcherCallback, - _pollingInterval?: number + pollingInterval?: number ): ts.FileWatcher { const slot: FileWatchDelaySlot = { callback, events: [] }; const node = this.fileWatchers.add(slot); @@ -304,7 +308,7 @@ export class CompilerHost } slot.events.push({ fileName, eventKind }); }, - _pollingInterval + pollingInterval ); return { close: () => { @@ -385,7 +389,13 @@ export class CompilerHost } public realpath(path: string): string { - return this.tsHost.realpath!(path); + if (!this.tsHost.realpath) { + throw new Error( + 'The realpath function is not supported by the CompilerHost.' + ); + } + + return this.tsHost.realpath(path); } public trace(s: string): void { @@ -398,7 +408,7 @@ export class CompilerHost return this.tsHost.useCaseSensitiveFileNames(); } - public onUnRecoverableConfigFileDiagnostic(_diag: ts.Diagnostic) { + public onUnRecoverableConfigFileDiagnostic() { // do nothing } @@ -406,7 +416,10 @@ export class CompilerHost program: ts.EmitAndSemanticDiagnosticsBuilderProgram ): void { // all actual diagnostics happens here - this.tsHost.afterProgramCreate!(program); + if (this.tsHost.afterProgramCreate) { + this.tsHost.afterProgramCreate(program); + } + this.afterCompile(); } @@ -415,19 +428,15 @@ export class CompilerHost // - much slower for some reason, // - writes files anyway (o_O) // - has different way of providing diagnostics. (with this version we can at least reliably get it from afterProgramCreate) - public createDirectory(_path: string): void { + public createDirectory(): void { // pretend everything was ok } - public writeFile( - _path: string, - _data: string, - _writeByteOrderMark?: boolean - ): void { + public writeFile(): void { // pretend everything was ok } - public onCachedDirectoryStructureHostCreate?(_host: any): void { + public onCachedDirectoryStructureHostCreate?(): void { // pretend everything was ok } } diff --git a/src/FilesRegister.ts b/src/FilesRegister.ts index 7545a3a9..a566b566 100644 --- a/src/FilesRegister.ts +++ b/src/FilesRegister.ts @@ -1,14 +1,9 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // import for types alone -// tslint:disable-next-line:no-implicit-dependencies import * as eslint from 'eslint'; // import for types alone export interface DataShape { source?: ts.SourceFile; linted: boolean; - tslints: tslint.RuleFailure[]; eslints: eslint.CLIEngine.LintReport[]; } diff --git a/src/FsHelper.ts b/src/FsHelper.ts index cbd51243..9edb2281 100644 --- a/src/FsHelper.ts +++ b/src/FsHelper.ts @@ -13,6 +13,7 @@ export function fileExistsSync(filePath: fs.PathLike) { return true; } +// eslint-disable-next-line @typescript-eslint/no-explicit-any export function throwIfIsInvalidSourceFileError(filepath: string, error: any) { if ( fileExistsSync(filepath) && diff --git a/src/IncrementalChecker.ts b/src/IncrementalChecker.ts index 8783c6b1..3860e5ee 100644 --- a/src/IncrementalChecker.ts +++ b/src/IncrementalChecker.ts @@ -1,19 +1,9 @@ import * as fs from 'fs'; import * as path from 'path'; -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone; actual requires take place in methods below -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // Imported for types alone; actual requires take place in methods below -// tslint:disable-next-line:no-implicit-dependencies import * as eslint from 'eslint'; -import * as minimatch from 'minimatch'; import { FilesRegister } from './FilesRegister'; -import { - ConfigurationFile, - loadLinterConfig, - makeGetLinterConfig -} from './linterConfigHelpers'; import { CancellationToken } from './CancellationToken'; import { ResolveModuleName, @@ -21,7 +11,6 @@ import { makeResolutionFunctions } from './resolution'; import { VueProgram } from './VueProgram'; -import { throwIfIsInvalidSourceFileError } from './FsHelper'; import { IncrementalCheckerInterface, IncrementalCheckerParams @@ -31,39 +20,23 @@ import { VueOptions } from './types/vue-options'; import { Issue, createIssuesFromEsLintReports, - createIssuesFromTsDiagnostics, - createIssuesFromTsLintRuleFailures + createIssuesFromTsDiagnostics } from './issue'; export class IncrementalChecker implements IncrementalCheckerInterface { - // it's shared between compilations - private linterConfigs: Record = {}; private files = new FilesRegister(() => ({ // data shape source: undefined, linted: false, - tslints: [], eslints: [] })); - private linter?: tslint.Linter; - private linterConfig?: ConfigurationFile; - - // Use empty array of exclusions in general to avoid having - // to check of its existence later on. - private linterExclusions: minimatch.IMinimatch[] = []; - protected program?: ts.Program; protected programConfig?: ts.ParsedCommandLine; - private readonly hasFixedConfig: boolean; - private readonly typescript: typeof ts; - private readonly context: string; private readonly programConfigFile: string; private readonly compilerOptions: object; - private readonly linterConfigFile: string | boolean; - private readonly linterAutoFix: boolean; private readonly eslinter: ReturnType | undefined; private readonly vue: VueOptions; private readonly checkSyntacticErrors: boolean; @@ -74,11 +47,8 @@ export class IncrementalChecker implements IncrementalCheckerInterface { constructor({ typescript, - context, programConfigFile, compilerOptions, - linterConfigFile, - linterAutoFix, eslinter, vue, checkSyntacticErrors = false, @@ -86,18 +56,13 @@ export class IncrementalChecker implements IncrementalCheckerInterface { resolveTypeReferenceDirective }: IncrementalCheckerParams) { this.typescript = typescript; - this.context = context; this.programConfigFile = programConfigFile; this.compilerOptions = compilerOptions; - this.linterConfigFile = linterConfigFile; - this.linterAutoFix = linterAutoFix; this.eslinter = eslinter; this.vue = vue; this.checkSyntacticErrors = checkSyntacticErrors; this.resolveModuleName = resolveModuleName; this.resolveTypeReferenceDirective = resolveTypeReferenceDirective; - - this.hasFixedConfig = typeof this.linterConfigFile === 'string'; } public static loadProgramConfig( @@ -125,19 +90,11 @@ export class IncrementalChecker implements IncrementalCheckerInterface { return parsed; } - private getLinterConfig: ( - file: string - ) => ConfigurationFile | undefined = makeGetLinterConfig( - this.linterConfigs, - this.linterExclusions, - this.context - ); - private static createProgram( typescript: typeof ts, programConfig: ts.ParsedCommandLine, files: FilesRegister, - oldProgram: ts.Program, + oldProgram: ts.Program | undefined, userResolveModuleName: ResolveModuleName | undefined, userResolveTypeReferenceDirective: ResolveTypeReferenceDirective | undefined ) { @@ -207,55 +164,18 @@ export class IncrementalChecker implements IncrementalCheckerInterface { ); } - private createLinter(program: ts.Program) { - // tslint:disable-next-line:no-implicit-dependencies - const tslint = require('tslint'); - - return new tslint.Linter({ fix: this.linterAutoFix }, program); - } - - public hasTsLinter(): boolean { - return !!this.linter; - } - public hasEsLinter(): boolean { return this.eslinter !== undefined; } - public static isFileExcluded( - filePath: string, - linterExclusions: minimatch.IMinimatch[] - ): boolean { - return ( - filePath.endsWith('.d.ts') || - linterExclusions.some(matcher => matcher.match(filePath)) - ); + public static isFileExcluded(filePath: string): boolean { + return filePath.endsWith('.d.ts'); } public nextIteration() { - if (!this.linterConfig && this.hasFixedConfig) { - this.linterConfig = loadLinterConfig(this.linterConfigFile as string); - - if ( - this.linterConfig.linterOptions && - this.linterConfig.linterOptions.exclude - ) { - // Pre-build minimatch patterns to avoid additional overhead later on. - // Note: Resolving the path is required to properly match against the full file paths, - // and also deals with potential cross-platform problems regarding path separators. - this.linterExclusions = this.linterConfig.linterOptions.exclude.map( - pattern => new minimatch.Minimatch(path.resolve(pattern)) - ); - } - } - this.program = this.vue.enabled ? this.loadVueProgram(this.vue) : this.loadDefaultProgram(); - - if (this.linterConfigFile) { - this.linter = this.createLinter(this.program!); - } } private loadVueProgram(vueOptions: VueOptions) { @@ -272,7 +192,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.programConfig, path.dirname(this.programConfigFile), this.files, - this.program!, + this.program, this.resolveModuleName, this.resolveTypeReferenceDirective, vueOptions @@ -292,7 +212,7 @@ export class IncrementalChecker implements IncrementalCheckerInterface { this.typescript, this.programConfig, this.files, - this.program!, + this.program, this.resolveModuleName, this.resolveTypeReferenceDirective ); @@ -329,69 +249,6 @@ export class IncrementalChecker implements IncrementalCheckerInterface { return createIssuesFromTsDiagnostics(tsDiagnostics); } - public async getTsLintIssues( - cancellationToken: CancellationToken - ): Promise { - const { linter } = this; - if (!linter) { - throw new Error('Cannot get lints - checker has no linter.'); - } - - // select files to lint - const filesToLint = this.files - .keys() - .filter( - filePath => - !this.files.getData(filePath).linted && - !IncrementalChecker.isFileExcluded(filePath, this.linterExclusions) - ); - - filesToLint.forEach(fileName => { - cancellationToken.throwIfCancellationRequested(); - const config = this.hasFixedConfig - ? this.linterConfig - : this.getLinterConfig(fileName); - if (!config) { - return; - } - - try { - // Assertion: `.lint` second parameter can be undefined - linter.lint(fileName, undefined!, config); - } catch (e) { - throwIfIsInvalidSourceFileError(fileName, e); - } - }); - - // set lints in files register - linter.getResult().failures.forEach(lint => { - const filePath = lint.getFileName(); - - this.files.mutateData(filePath, data => { - data.linted = true; - data.tslints.push(lint); - }); - }); - - // set all files as linted - this.files.keys().forEach(filePath => { - this.files.mutateData(filePath, data => { - data.linted = true; - }); - }); - - // get all lints - const lints = this.files - .keys() - .reduce( - (innerLints, filePath) => - innerLints.concat(this.files.getData(filePath).tslints), - [] - ); - - return createIssuesFromTsLintRuleFailures(lints); - } - public async getEsLintIssues( cancellationToken: CancellationToken ): Promise { @@ -401,13 +258,14 @@ export class IncrementalChecker implements IncrementalCheckerInterface { .filter( filePath => !this.files.getData(filePath).linted && - !IncrementalChecker.isFileExcluded(filePath, this.linterExclusions) + !IncrementalChecker.isFileExcluded(filePath) ); const currentEsLintErrors = new Map(); filesToLint.forEach(fileName => { cancellationToken.throwIfCancellationRequested(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const report = this.eslinter!.getReport(fileName); if (report !== undefined) { currentEsLintErrors.set(fileName, report); diff --git a/src/IncrementalCheckerInterface.ts b/src/IncrementalCheckerInterface.ts index f3929db5..09f095d2 100644 --- a/src/IncrementalCheckerInterface.ts +++ b/src/IncrementalCheckerInterface.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // imported for types alone import { CancellationToken } from './CancellationToken'; @@ -10,11 +9,9 @@ import { VueOptions } from './types/vue-options'; export interface IncrementalCheckerInterface { nextIteration(): void; - hasTsLinter(): boolean; hasEsLinter(): boolean; getTypeScriptIssues(cancellationToken: CancellationToken): Promise; - getTsLintIssues(cancellationToken: CancellationToken): Promise; getEsLintIssues(cancellationToken: CancellationToken): Promise; } @@ -23,8 +20,6 @@ export interface IncrementalCheckerParams { context: string; programConfigFile: string; compilerOptions: ts.CompilerOptions; - linterConfigFile: string | boolean; - linterAutoFix: boolean; eslinter: ReturnType | undefined; checkSyntacticErrors: boolean; resolveModuleName: ResolveModuleName | undefined; diff --git a/src/LinkedList.ts b/src/LinkedList.ts index e3206e30..356b83f4 100644 --- a/src/LinkedList.ts +++ b/src/LinkedList.ts @@ -2,11 +2,11 @@ export class HeadNode { public next: LinkedListNode | TailNode; constructor() { + // eslint-disable-next-line @typescript-eslint/no-use-before-define this.next = new TailNode(this); } } -// tslint:disable-next-line:max-classes-per-file export class TailNode { public previous: LinkedListNode | HeadNode; @@ -14,7 +14,6 @@ export class TailNode { this.previous = head; } } -// tslint:disable-next-line:max-classes-per-file export class LinkedListNode { public next: LinkedListNode | TailNode | null = null; public previous: LinkedListNode | HeadNode | null = null; @@ -59,7 +58,6 @@ export class LinkedListNode { this.attachAfter(node.previous); } } -// tslint:disable-next-line:max-classes-per-file export class LinkedList { public head: HeadNode; public tail: TailNode; diff --git a/src/VueProgram.ts b/src/VueProgram.ts index 9a678d59..6cce2aaf 100644 --- a/src/VueProgram.ts +++ b/src/VueProgram.ts @@ -1,6 +1,5 @@ import * as fs from 'fs'; import * as path from 'path'; -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone import { FilesRegister } from './FilesRegister'; import { @@ -8,7 +7,6 @@ import { ResolveTypeReferenceDirective, makeResolutionFunctions } from './resolution'; -// tslint:disable-next-line:no-implicit-dependencies import * as vueCompiler from 'vue-template-compiler'; import { VueOptions } from './types/vue-options'; @@ -106,7 +104,8 @@ export class VueProgram { ? options.paths[`${correctWildcard}/*`] : undefined; const substitution = pattern - ? options.paths![`${correctWildcard}/*`][0].replace('*', '') + ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + options.paths![`${correctWildcard}/*`][0].replace('*', '') : 'src'; moduleName = path.resolve(baseUrl, substitution, moduleName.substr(2)); } else if (isRelative) { @@ -124,7 +123,7 @@ export class VueProgram { programConfig: ts.ParsedCommandLine, basedir: string, files: FilesRegister, - oldProgram: ts.Program, + oldProgram: ts.Program | undefined, userResolveModuleName: ResolveModuleName | undefined, userResolveTypeReferenceDirective: | ResolveTypeReferenceDirective @@ -312,7 +311,6 @@ export class VueProgram { // we should let the users install template compiler for vue by themselves. let parser: typeof vueCompiler; try { - // tslint:disable-next-line parser = require(compiler); } catch (err) { throw new Error( @@ -328,7 +326,7 @@ export class VueProgram { if (!script) { return { scriptKind: typescript.ScriptKind.JS, - content: '/* tslint:disable */\nexport default {};\n' + content: 'export default {};\n' }; } @@ -345,7 +343,6 @@ export class VueProgram { // since it will produce incorrect code location. // It's not a large problem since it's handled on webpack side. content: - '/* tslint:disable */\n' + '// @ts-ignore\n' + `export { default } from '${src}';\n` + '// @ts-ignore\n' + diff --git a/src/createEslinter.ts b/src/createEslinter.ts index 889fb5a6..e3a97d39 100644 --- a/src/createEslinter.ts +++ b/src/createEslinter.ts @@ -1,15 +1,14 @@ -// tslint:disable-next-line:no-implicit-dependencies -import * as eslinttypes from 'eslint'; // import for types alone +import * as eslint from 'eslint'; // import for types alone import * as path from 'path'; import { throwIfIsInvalidSourceFileError } from './FsHelper'; export function createEslinter(eslintOptions: object) { - // tslint:disable-next-line:no-implicit-dependencies - const eslint: typeof eslinttypes = require('eslint'); + // eslint-disable-next-line @typescript-eslint/no-var-requires + const { CLIEngine }: typeof eslint = require('eslint'); // See https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine - const eslinter = new eslint.CLIEngine(eslintOptions); + const eslinter = new CLIEngine(eslintOptions); function getReport(filepath: string) { try { diff --git a/src/formatter/CodeframeFormatter.ts b/src/formatter/CodeframeFormatter.ts index 64b3d7f6..6b0bd480 100644 --- a/src/formatter/CodeframeFormatter.ts +++ b/src/formatter/CodeframeFormatter.ts @@ -6,6 +6,7 @@ import { fileExistsSync } from '../FsHelper'; import { IssueSeverity, IssueOrigin } from '../issue'; import { Formatter } from './Formatter'; import { createInternalFormatter } from './InternalFormatter'; +// eslint-disable-next-line @typescript-eslint/no-var-requires const codeFrame = require('babel-code-frame'); interface CodeFrameFormatterOptions { @@ -47,7 +48,9 @@ function createCodeframeFormatter( if (source) { frame = codeFrame( source, + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion issue.line!, // Assertion: `codeFrame` allows passing undefined, typings are incorrect + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion issue.character!, { highlightCode: true, diff --git a/src/hooks.ts b/src/hooks.ts index 41e723a6..42be5669 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as webpack from 'webpack'; import { AsyncSeriesHook, SyncHook } from 'tapable'; @@ -24,8 +23,8 @@ function createForkTsCheckerWebpackPluginHooks(): ForkTsCheckerHookMap { serviceBeforeStart: new AsyncSeriesHook([]), cancel: new SyncHook(['cancellationToken']), serviceStartError: new SyncHook(['error']), - waiting: new SyncHook(['hasTsLint']), - serviceStart: new SyncHook(['tsconfigPath', 'tslintPath', 'memoryLimit']), + waiting: new SyncHook([]), + serviceStart: new SyncHook(['tsconfigPath', 'memoryLimit']), receive: new SyncHook(['diagnostics', 'lints']), serviceOutOfMemory: new SyncHook([]), emit: new SyncHook(['diagnostics', 'lints', 'elapsed']), diff --git a/src/index.ts b/src/index.ts index 7a6772f2..2e7a3432 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,7 @@ import * as path from 'path'; import * as process from 'process'; import * as childProcess from 'child_process'; -// tslint:disable-next-line:no-implicit-dependencies import * as webpack from 'webpack'; -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; import * as semver from 'semver'; import * as micromatch from 'micromatch'; @@ -20,10 +18,7 @@ import { } from './formatter'; import { fileExistsSync } from './FsHelper'; import { Message } from './Message'; -import { - ForkTsCheckerHooks, - getForkTsCheckerWebpackPluginHooks -} from './hooks'; +import { getForkTsCheckerWebpackPluginHooks } from './hooks'; import { RUN, RunPayload, RunResult } from './RpcTypes'; import { Issue, IssueSeverity } from './issue'; import { VueOptions } from './types/vue-options'; @@ -32,8 +27,11 @@ const checkerPluginName = 'fork-ts-checker-webpack-plugin'; namespace ForkTsCheckerWebpackPlugin { export interface Logger { + // eslint-disable-next-line @typescript-eslint/no-explicit-any error(message?: any): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any warn(message?: any): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any info(message?: any): void; } @@ -41,8 +39,6 @@ namespace ForkTsCheckerWebpackPlugin { typescript: string; tsconfig: string; compilerOptions: object; - tslint: string | true | undefined; - tslintAutoFix: boolean; eslint: boolean; /** Options to supply to eslint https://eslint.org/docs/1.0.0/developer-guide/nodejs-api#cliengine */ eslintOptions: object; @@ -67,7 +63,7 @@ namespace ForkTsCheckerWebpackPlugin { /** * ForkTsCheckerWebpackPlugin - * Runs typescript type checker and linter (tslint) on separate process. + * Runs typescript type checker and linter on separate process. * This speed-ups build a lot. * * Options description in README.md @@ -75,19 +71,16 @@ namespace ForkTsCheckerWebpackPlugin { class ForkTsCheckerWebpackPlugin { public static readonly DEFAULT_MEMORY_LIMIT = 2048; - public static getCompilerHooks( - compiler: any - ): Record { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public static getCompilerHooks(compiler: any) { return getForkTsCheckerWebpackPluginHooks(compiler); } public readonly options: Partial; private tsconfig: string; private compilerOptions: object; - private tslint: string | boolean | undefined = false; - private eslint: boolean = false; + private eslint = false; private eslintOptions: object = {}; - private tslintAutoFix: boolean = false; private ignoreDiagnostics: number[]; private ignoreLints: string[]; private ignoreLintWarnings: boolean; @@ -104,16 +97,16 @@ class ForkTsCheckerWebpackPlugin { private resolveTypeReferenceDirectiveModule: string | undefined; private tsconfigPath: string | undefined = undefined; - private tslintPath: string | undefined = undefined; + // eslint-disable-next-line @typescript-eslint/no-explicit-any private compiler: any = undefined; private started: [number, number] | undefined = undefined; private elapsed: [number, number] | undefined = undefined; private cancellationToken: CancellationToken | undefined = undefined; - private isWatching: boolean = false; - private checkDone: boolean = false; - private compilationDone: boolean = false; + private isWatching = false; + private checkDone = false; + private compilationDone = false; private diagnostics: Issue[] = []; private lints: Issue[] = []; @@ -122,7 +115,6 @@ class ForkTsCheckerWebpackPlugin { private typescriptPath: string; private typescript: typeof ts; private typescriptVersion: string; - private tslintVersion: string | undefined; private eslintVersion: string | undefined = undefined; private service?: childProcess.ChildProcess; @@ -131,8 +123,9 @@ class ForkTsCheckerWebpackPlugin { private vue: VueOptions; private measureTime: boolean; + // eslint-disable-next-line @typescript-eslint/no-explicit-any private performance: any; - private startAt: number = 0; + private startAt = 0; protected nodeArgs: string[] = []; @@ -181,14 +174,6 @@ class ForkTsCheckerWebpackPlugin { this.eslint = true; this.eslintVersion = eslintVersion; this.eslintOptions = eslintOptions; - } else { - const { tslint, tslintVersion, tslintAutoFix } = this.validateTslint( - options - ); - - this.tslint = tslint; - this.tslintVersion = tslintVersion; - this.tslintAutoFix = tslintAutoFix; } this.vue = ForkTsCheckerWebpackPlugin.prepareVueOptions(options.vue); @@ -241,35 +226,6 @@ class ForkTsCheckerWebpackPlugin { }; } - private validateTslint(options: Partial) { - const tslint = options.tslint - ? options.tslint === true - ? true - : options.tslint - : undefined; - let tslintAutoFix, tslintVersion; - - try { - tslintAutoFix = options.tslintAutoFix || false; - tslintVersion = tslint - ? // tslint:disable-next-line:no-implicit-dependencies - require('tslint').Linter.VERSION - : undefined; - } catch (_ignored) { - throw new Error( - 'When you use `tslint` option, make sure to install `tslint`.' - ); - } - - if (tslintVersion && semver.lt(tslintVersion, '4.0.0')) { - throw new Error( - `Cannot use current tslint version of ${tslintVersion}, the minimum required version is 4.0.0` - ); - } - - return { tslint, tslintAutoFix, tslintVersion }; - } - private validateEslint(options: Partial) { let eslintVersion: string; const eslintOptions = @@ -303,18 +259,14 @@ class ForkTsCheckerWebpackPlugin { } } + // eslint-disable-next-line @typescript-eslint/no-explicit-any public apply(compiler: any) { this.compiler = compiler; this.tsconfigPath = this.computeContextPath(this.tsconfig); - this.tslintPath = - typeof this.tslint === 'string' - ? this.computeContextPath(this.tslint as string) - : undefined; // validate config const tsconfigOk = fileExistsSync(this.tsconfigPath); - const tslintOk = !this.tslintPath || fileExistsSync(this.tslintPath); // validate logger if (this.logger) { @@ -325,40 +277,24 @@ class ForkTsCheckerWebpackPlugin { } } - if (tsconfigOk && tslintOk) { - this.pluginStart(); - this.pluginStop(); - this.pluginCompile(); - this.pluginEmit(); - this.pluginDone(); - } else { - if (!tsconfigOk) { - throw new Error( - 'Cannot find "' + - this.tsconfigPath + - '" file. Please check webpack and ForkTsCheckerWebpackPlugin configuration. \n' + - 'Possible errors: \n' + - ' - wrong `context` directory in webpack configuration' + - ' (if `tsconfig` is not set or is a relative path in fork plugin configuration)\n' + - ' - wrong `tsconfig` path in fork plugin configuration' + - ' (should be a relative or absolute path)' - ); - } - if (!tslintOk) { - throw new Error( - 'Cannot find "' + - this.tslintPath + - '" file. Please check webpack and ForkTsCheckerWebpackPlugin configuration. \n' + - 'Possible errors: \n' + - ' - wrong `context` directory in webpack configuration' + - ' (if `tslint` is not set or is a relative path in fork plugin configuration)\n' + - ' - wrong `tslint` path in fork plugin configuration' + - ' (should be a relative or absolute path)\n' + - ' - `tslint` path is not set to false in fork plugin configuration' + - ' (if you want to disable tslint support)' - ); - } + if (!tsconfigOk) { + throw new Error( + 'Cannot find "' + + this.tsconfigPath + + '" file. Please check webpack and ForkTsCheckerWebpackPlugin configuration. \n' + + 'Possible errors: \n' + + ' - wrong `context` directory in webpack configuration' + + ' (if `tsconfig` is not set or is a relative path in fork plugin configuration)\n' + + ' - wrong `tsconfig` path in fork plugin configuration' + + ' (should be a relative or absolute path)' + ); } + + this.pluginStart(); + this.pluginStop(); + this.pluginCompile(); + this.pluginEmit(); + this.pluginDone(); } private computeContextPath(filePath: string) { @@ -430,6 +366,7 @@ class ForkTsCheckerWebpackPlugin { if (this.measureTime) { this.startAt = this.performance.now(); } + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.serviceRpc!.rpc( RUN, this.cancellationToken.toJSON() @@ -455,6 +392,7 @@ class ForkTsCheckerWebpackPlugin { } private pluginEmit() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any const emit = (compilation: any, callback: () => void) => { if (this.isWatching && this.async) { callback(); @@ -477,7 +415,7 @@ class ForkTsCheckerWebpackPlugin { const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( this.compiler ); - this.compiler.hooks.done.tap(checkerPluginName, (_stats: webpack.Stats) => { + this.compiler.hooks.done.tap(checkerPluginName, () => { if (!this.isWatching || !this.async) { return; } @@ -486,14 +424,10 @@ class ForkTsCheckerWebpackPlugin { this.doneCallback(); } else { if (this.compiler) { - forkTsCheckerHooks.waiting.call(this.tslint !== undefined); + forkTsCheckerHooks.waiting.call(); } if (!this.silent && this.logger) { - this.logger.info( - this.tslint - ? 'Type checking and linting in progress...' - : 'Type checking in progress...' - ); + this.logger.info('Type checking in progress...'); } } @@ -507,9 +441,7 @@ class ForkTsCheckerWebpackPlugin { TYPESCRIPT_PATH: this.typescriptPath, TSCONFIG: this.tsconfigPath, COMPILER_OPTIONS: JSON.stringify(this.compilerOptions), - TSLINT: this.tslintPath || (this.tslint ? 'true' : ''), CONTEXT: this.compiler.options.context, - TSLINTAUTOFIX: String(this.tslintAutoFix), ESLINT: String(this.eslint), ESLINT_OPTIONS: JSON.stringify(this.eslintOptions), MEMORY_LIMIT: String(this.memoryLimit), @@ -542,24 +474,18 @@ class ForkTsCheckerWebpackPlugin { } ); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.serviceRpc = new RpcProvider(message => this.service!.send(message)); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.service.on('message', message => this.serviceRpc!.dispatch(message)); const forkTsCheckerHooks = ForkTsCheckerWebpackPlugin.getCompilerHooks( this.compiler ); - forkTsCheckerHooks.serviceStart.call( - this.tsconfigPath, - this.tslintPath, - this.memoryLimit - ); + forkTsCheckerHooks.serviceStart.call(this.tsconfigPath, this.memoryLimit); if (!this.silent && this.logger) { - this.logger.info( - 'Starting type checking' + - (this.tslint ? ' and linting' : '') + - ' service...' - ); + this.logger.info('Starting type checking service...'); } this.service.on('exit', (code: string | number, signal: string) => @@ -710,7 +636,8 @@ class ForkTsCheckerWebpackPlugin { } private createNoopEmitCallback() { - // tslint:disable-next-line:no-empty + // this function is empty intentionally + // eslint-disable-next-line @typescript-eslint/no-empty-function return function noopEmitCallback() {}; } @@ -750,16 +677,11 @@ class ForkTsCheckerWebpackPlugin { if (!this.diagnostics.length) { this.logger.info(chalk.green('No type errors found')); } - if (this.tslint && !this.lints.length) { - this.logger.info(chalk.green('No lint errors found')); - } this.logger.info( 'Version: typescript ' + chalk.bold(this.typescriptVersion) + (this.eslint ? ', eslint ' + chalk.bold(this.eslintVersion as string) - : this.tslint - ? ', tslint ' + chalk.bold(this.tslintVersion as string) : '') ); this.logger.info( diff --git a/src/issue/IssueOrigin.ts b/src/issue/IssueOrigin.ts index 2b9fec72..01e81ed9 100644 --- a/src/issue/IssueOrigin.ts +++ b/src/issue/IssueOrigin.ts @@ -1,6 +1,5 @@ const IssueOrigin = { TYPESCRIPT: 'typescript', - TSLINT: 'tslint', ESLINT: 'eslint', INTERNAL: 'internal' } as const; @@ -9,7 +8,6 @@ type IssueOrigin = typeof IssueOrigin[keyof typeof IssueOrigin]; function isIssueOrigin(value: unknown): value is IssueOrigin { return [ IssueOrigin.TYPESCRIPT, - IssueOrigin.TSLINT, IssueOrigin.ESLINT, IssueOrigin.INTERNAL ].includes(value as IssueOrigin); @@ -18,10 +16,9 @@ function isIssueOrigin(value: unknown): value is IssueOrigin { function compareIssueOrigins(originA: IssueOrigin, originB: IssueOrigin) { const [priorityA, priorityB] = [originA, originB].map(origin => [ - IssueOrigin.TSLINT /* 0 */, - IssueOrigin.ESLINT /* 1 */, - IssueOrigin.TYPESCRIPT /* 2 */, - IssueOrigin.INTERNAL /* 3 */ + IssueOrigin.ESLINT /* 0 */, + IssueOrigin.TYPESCRIPT /* 1 */, + IssueOrigin.INTERNAL /* 2 */ ].indexOf(origin) ); diff --git a/src/issue/eslint/EsLintIssueFactory.ts b/src/issue/eslint/EsLintIssueFactory.ts index 52cd0905..96bc6f83 100644 --- a/src/issue/eslint/EsLintIssueFactory.ts +++ b/src/issue/eslint/EsLintIssueFactory.ts @@ -1,5 +1,4 @@ -// tslint:disable-next-line:no-implicit-dependencies -import * as eslint from 'eslint'; // import for types alone +import * as eslint from 'eslint'; import { FileAwareEsLintMessage } from './FileAwareEsLintMessage'; import { deduplicateAndSortIssues, Issue } from '../Issue'; import { IssueOrigin } from '../IssueOrigin'; diff --git a/src/issue/eslint/FileAwareEsLintMessage.ts b/src/issue/eslint/FileAwareEsLintMessage.ts index 63003751..6a9ec6c2 100644 --- a/src/issue/eslint/FileAwareEsLintMessage.ts +++ b/src/issue/eslint/FileAwareEsLintMessage.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as eslint from 'eslint'; /** diff --git a/src/issue/index.ts b/src/issue/index.ts index dbfebb24..071fc54e 100644 --- a/src/issue/index.ts +++ b/src/issue/index.ts @@ -4,5 +4,4 @@ export * from './IssueSeverity'; export * from './typescript'; export * from './eslint'; -export * from './tslint'; export * from './internal'; diff --git a/src/issue/internal/InternalIssueFactory.ts b/src/issue/internal/InternalIssueFactory.ts index 79f055bd..1ecacfe6 100644 --- a/src/issue/internal/InternalIssueFactory.ts +++ b/src/issue/internal/InternalIssueFactory.ts @@ -2,13 +2,21 @@ import { Issue } from '../Issue'; import { IssueOrigin } from '../IssueOrigin'; import { IssueSeverity } from '../IssueSeverity'; -function createIssueFromInternalError(error: any): Issue { +interface ErrorLike { + message?: string; + stack?: string; + toString?: () => string; +} + +function createIssueFromInternalError(error: ErrorLike): Issue { return { origin: IssueOrigin.INTERNAL, severity: IssueSeverity.ERROR, code: 'INTERNAL', message: - typeof error.message === 'string' ? error.message : error.toString(), + typeof error.message === 'string' + ? error.message + : (error.toString && error.toString()) || '', stack: typeof error.stack === 'string' ? error.stack : undefined }; } diff --git a/src/issue/tslint/TsLintIssueFactory.ts b/src/issue/tslint/TsLintIssueFactory.ts deleted file mode 100644 index 8895ebf5..00000000 --- a/src/issue/tslint/TsLintIssueFactory.ts +++ /dev/null @@ -1,32 +0,0 @@ -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // import for types alone -import { deduplicateAndSortIssues, Issue } from '../Issue'; -import { IssueOrigin } from '../IssueOrigin'; -import { IssueSeverity } from '../IssueSeverity'; - -function createIssueFromTsLintRuleFailure(failure: tslint.RuleFailure): Issue { - const position = failure.getStartPosition().getLineAndCharacter(); - - return { - origin: IssueOrigin.TSLINT, - code: failure.getRuleName(), - severity: - failure.getRuleSeverity() === 'warning' - ? IssueSeverity.WARNING - : IssueSeverity.ERROR, - message: failure.getFailure(), - file: failure.getFileName(), - line: position.line + 1, - character: position.character + 1 - }; -} - -function createIssuesFromTsLintRuleFailures( - failures: tslint.RuleFailure[] -): Issue[] { - return deduplicateAndSortIssues( - failures.map(createIssueFromTsLintRuleFailure) - ); -} - -export { createIssueFromTsLintRuleFailure, createIssuesFromTsLintRuleFailures }; diff --git a/src/issue/tslint/index.ts b/src/issue/tslint/index.ts deleted file mode 100644 index 9398a17b..00000000 --- a/src/issue/tslint/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './TsLintIssueFactory'; diff --git a/src/issue/typescript/TypeScriptIssueFactory.ts b/src/issue/typescript/TypeScriptIssueFactory.ts index 317faf09..5af27b0f 100644 --- a/src/issue/typescript/TypeScriptIssueFactory.ts +++ b/src/issue/typescript/TypeScriptIssueFactory.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone import { deduplicateAndSortIssues, Issue } from '../Issue'; import { IssueOrigin } from '../IssueOrigin'; diff --git a/src/linterConfigHelpers.ts b/src/linterConfigHelpers.ts deleted file mode 100644 index 942c8c21..00000000 --- a/src/linterConfigHelpers.ts +++ /dev/null @@ -1,58 +0,0 @@ -import * as path from 'path'; -import * as minimatch from 'minimatch'; -// tslint:disable-next-line:no-implicit-dependencies -import * as tslint from 'tslint'; // imported for types alone - -import { fileExistsSync } from './FsHelper'; - -// Need some augmentation here - linterOptions.exclude is not (yet) part of the official -// types for tslint. -export interface ConfigurationFile - extends tslint.Configuration.IConfigurationFile { - linterOptions?: { - typeCheck?: boolean; - exclude?: string[]; - }; -} - -export function loadLinterConfig(configFile: string): ConfigurationFile { - // tslint:disable-next-line:no-implicit-dependencies - const { Configuration } = require('tslint'); - - return Configuration.loadConfigurationFromPath( - configFile - ) as ConfigurationFile; -} - -export function makeGetLinterConfig( - linterConfigs: Record, - linterExclusions: minimatch.IMinimatch[], - context: string -): (file: string) => ConfigurationFile | undefined { - const getLinterConfig = (file: string): ConfigurationFile | undefined => { - const dirname = path.dirname(file); - if (dirname in linterConfigs) { - return linterConfigs[dirname]; - } - - if (fileExistsSync(path.join(dirname, 'tslint.json'))) { - const config = loadLinterConfig(path.join(dirname, 'tslint.json')); - - if (config.linterOptions && config.linterOptions.exclude) { - linterExclusions.concat( - config.linterOptions.exclude.map( - pattern => new minimatch.Minimatch(path.resolve(pattern)) - ) - ); - } - linterConfigs[dirname] = config; - } else { - if (dirname !== context && dirname !== file) { - linterConfigs[dirname] = getLinterConfig(dirname); - } - } - return linterConfigs[dirname]; - }; - - return getLinterConfig; -} diff --git a/src/patchTypescript.ts b/src/patchTypescript.ts index 6b0868c3..f3b166a6 100644 --- a/src/patchTypescript.ts +++ b/src/patchTypescript.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone export interface TypeScriptPatchConfig { @@ -12,24 +11,6 @@ export interface TypeScriptPatchConfig { skipGetSyntacticDiagnostics: boolean; } -/** - * While it is often possible to pass a wrapped or modified copy of `typescript` or `typescript.sys` as a function argument to override/extend some typescript-internal behavior, - * sometimes the typescript-internal code ignores these passed objects and directly references the internal `typescript` object reference. - * In these situations, the only way of consistently overriding some behavior is to directly replace methods on the `typescript` object. - * - * So beware, this method directly modifies the passed `typescript` object! - * @param typescript TypeScript instance to patch - * @param config - */ -export function patchTypescript( - typescript: typeof ts, - config: TypeScriptPatchConfig -) { - if (config.skipGetSyntacticDiagnostics) { - patchSkipGetSyntacticDiagnostics(typescript); - } -} - /** * Overrides the [`typescript.createEmitAndSemanticDiagnosticsBuilderProgram`](https://github.com/Microsoft/TypeScript/blob/89386ddda7dafc63cb35560e05412487f47cc267/src/compiler/builder.ts#L1176) * method to return a `ts.Program` instance that does not emit syntactic errors, @@ -49,9 +30,11 @@ function patchSkipGetSyntacticDiagnostics(typescript: typeof ts) { typeof ts, 'createEmitAndSemanticDiagnosticsBuilderProgram' > = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any createEmitAndSemanticDiagnosticsBuilderProgram(...args: any[]) { const program = originalCreateEmitAndSemanticDiagnosticsBuilderProgram.apply( typescript, + // eslint-disable-next-line @typescript-eslint/no-explicit-any args as any ); program.getSyntacticDiagnostics = () => []; @@ -62,3 +45,21 @@ function patchSkipGetSyntacticDiagnostics(typescript: typeof ts) { // directly patch the typescript object! Object.assign(typescript, patchedMethods); } + +/** + * While it is often possible to pass a wrapped or modified copy of `typescript` or `typescript.sys` as a function argument to override/extend some typescript-internal behavior, + * sometimes the typescript-internal code ignores these passed objects and directly references the internal `typescript` object reference. + * In these situations, the only way of consistently overriding some behavior is to directly replace methods on the `typescript` object. + * + * So beware, this method directly modifies the passed `typescript` object! + * @param typescript TypeScript instance to patch + * @param config + */ +export function patchTypescript( + typescript: typeof ts, + config: TypeScriptPatchConfig +) { + if (config.skipGetSyntacticDiagnostics) { + patchSkipGetSyntacticDiagnostics(typescript); + } +} diff --git a/src/resolution.ts b/src/resolution.ts index ef67408a..2fe38965 100644 --- a/src/resolution.ts +++ b/src/resolution.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // Imported for types alone export type ResolveModuleName = ( @@ -24,11 +23,9 @@ export function makeResolutionFunctions( resolveModuleName = resolveModuleName || (( - // tslint:disable-next-line:no-shadowed-variable typescript, moduleName, containingFile, - // tslint:disable-next-line:no-shadowed-variable compilerOptions, moduleResolutionHost ) => { @@ -43,11 +40,9 @@ export function makeResolutionFunctions( resolveTypeReferenceDirective = resolveTypeReferenceDirective || (( - // tslint:disable-next-line:no-shadowed-variable typescript, typeDirectiveName, containingFile, - // tslint:disable-next-line:no-shadowed-variable compilerOptions, moduleResolutionHost ) => { diff --git a/src/service.ts b/src/service.ts index e6f98f18..43dc89a8 100644 --- a/src/service.ts +++ b/src/service.ts @@ -1,5 +1,4 @@ import * as process from 'process'; -// tslint:disable-next-line:no-implicit-dependencies import * as ts from 'typescript'; // import for types alone import { IncrementalChecker } from './IncrementalChecker'; @@ -17,11 +16,13 @@ import { createIssueFromInternalError, Issue } from './issue'; const rpc = new RpcProvider(message => { try { - process.send!(message, undefined, undefined, error => { - if (error) { - process.exit(); - } - }); + if (process.send) { + process.send(message, undefined, undefined, error => { + if (error) { + process.exit(); + } + }); + } } catch (e) { // channel closed... process.exit(); @@ -29,7 +30,8 @@ const rpc = new RpcProvider(message => { }); process.on('message', message => rpc.dispatch(message)); -const typescript: typeof ts = require(process.env.TYPESCRIPT_PATH!); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const typescript: typeof ts = require(String(process.env.TYPESCRIPT_PATH)); const patchConfig: TypeScriptPatchConfig = { skipGetSyntacticDiagnostics: process.env.USE_INCREMENTAL_API === 'true' && @@ -39,17 +41,17 @@ const patchConfig: TypeScriptPatchConfig = { patchTypescript(typescript, patchConfig); const resolveModuleName = process.env.RESOLVE_MODULE_NAME - ? require(process.env.RESOLVE_MODULE_NAME!).resolveModuleName + ? require(process.env.RESOLVE_MODULE_NAME).resolveModuleName : undefined; const resolveTypeReferenceDirective = process.env .RESOLVE_TYPE_REFERENCE_DIRECTIVE - ? require(process.env.RESOLVE_TYPE_REFERENCE_DIRECTIVE!) + ? require(process.env.RESOLVE_TYPE_REFERENCE_DIRECTIVE) .resolveTypeReferenceDirective : undefined; const eslinter = process.env.ESLINT === 'true' - ? createEslinter(JSON.parse(process.env.ESLINT_OPTIONS!)) + ? createEslinter(JSON.parse(String(process.env.ESLINT_OPTIONS))) : undefined; function createChecker( @@ -57,17 +59,14 @@ function createChecker( ): IncrementalCheckerInterface { const incrementalCheckerParams: IncrementalCheckerParams = { typescript, - context: process.env.CONTEXT!, - programConfigFile: process.env.TSCONFIG!, - compilerOptions: JSON.parse(process.env.COMPILER_OPTIONS!), - linterConfigFile: - process.env.TSLINT === 'true' ? true : process.env.TSLINT! || false, - linterAutoFix: process.env.TSLINTAUTOFIX === 'true', + context: String(process.env.CONTEXT), + programConfigFile: String(process.env.TSCONFIG), + compilerOptions: JSON.parse(String(process.env.COMPILER_OPTIONS)), eslinter, checkSyntacticErrors: process.env.CHECK_SYNTACTIC_ERRORS === 'true', resolveModuleName, resolveTypeReferenceDirective, - vue: JSON.parse(process.env.VUE!) + vue: JSON.parse(String(process.env.VUE)) }; return useIncrementalApi @@ -87,8 +86,6 @@ async function run(cancellationToken: CancellationToken) { diagnostics.push(...(await checker.getTypeScriptIssues(cancellationToken))); if (checker.hasEsLinter()) { lints.push(...(await checker.getEsLintIssues(cancellationToken))); - } else if (checker.hasTsLinter()) { - lints.push(...(await checker.getTsLintIssues(cancellationToken))); } } catch (error) { if (error instanceof typescript.OperationCanceledException) { @@ -110,7 +107,7 @@ async function run(cancellationToken: CancellationToken) { rpc.registerRpcHandler(RUN, message => typeof message !== 'undefined' - ? run(CancellationToken.createFromJSON(typescript, message!)) + ? run(CancellationToken.createFromJSON(typescript, message)) : undefined ); diff --git a/src/tsconfig.json b/src/tsconfig.json index dbb85751..ebb05364 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -12,6 +12,8 @@ "moduleResolution": "node", "declaration": true, "outDir": "../lib", - "sourceMap": true + "sourceMap": true, + "rootDir": "./", + "sourceRoot": "./" } } diff --git a/src/tslint.json b/src/tslint.json deleted file mode 100644 index 6c112cb5..00000000 --- a/src/tslint.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": ["tslint:latest", "tslint-config-prettier"], - "rules": { - "object-literal-sort-keys": false, - "interface-name": [true, "never-prefix"], - "no-this-assignment": [true, { "allow-destructuring": true }], - "member-ordering": [false], - "no-object-literal-type-assertion": false, - "no-var-requires": false, - "no-string-literal": false, - "ordered-imports": false, - "prefer-object-spread": false, - "ban-types": false, - "arrow-parens": false, - "member-access": [true], - "trailing-comma": [false], - "triple-equals": [true], - "variable-name": [ - true, - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ], - "no-namespace": false, - "array-type": [true, "array"] - } -} diff --git a/test/.eslintrc.js b/test/.eslintrc.js deleted file mode 100644 index 92fcbbe0..00000000 --- a/test/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -module.exports = { - parserOptions: { - sourceType: 'module', - ecmaVersion: 2018 - }, - env: { - node: true, - jest: true, - es6: true - }, - extends: [ - 'plugin:@typescript-eslint/recommended' // Uses the recommended rules from the @typescript-eslint/eslint-plugin - ], - rules: { - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/indent': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-var-requires': 'off' - } -}; diff --git a/test/fixtures/project_hierarchical_tslint/index.ts b/test/fixtures/project_hierarchical_tslint/index.ts deleted file mode 100644 index 02722db2..00000000 --- a/test/fixtures/project_hierarchical_tslint/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { func as anotherFunc } from './lib/func'; -import { func as yetAnotherFunc } from './lib/utils/func'; - -export const func = a => a; // no tslint config here = no errors diff --git a/test/fixtures/project_hierarchical_tslint/lib/func.ts b/test/fixtures/project_hierarchical_tslint/lib/func.ts deleted file mode 100644 index 65495be9..00000000 --- a/test/fixtures/project_hierarchical_tslint/lib/func.ts +++ /dev/null @@ -1 +0,0 @@ -export const func = a => a; // one error here diff --git a/test/fixtures/project_hierarchical_tslint/lib/tslint.json b/test/fixtures/project_hierarchical_tslint/lib/tslint.json deleted file mode 100644 index a2a6ee63..00000000 --- a/test/fixtures/project_hierarchical_tslint/lib/tslint.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "defaultSeverity": "warning", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "rules": { - "typedef": [true, "arrow-call-signature"], - "arrow-parens": false - }, - "rulesDirectory": [] -} diff --git a/test/fixtures/project_hierarchical_tslint/lib/utils/func.ts b/test/fixtures/project_hierarchical_tslint/lib/utils/func.ts deleted file mode 100644 index 54292e1d..00000000 --- a/test/fixtures/project_hierarchical_tslint/lib/utils/func.ts +++ /dev/null @@ -1 +0,0 @@ -export const func = a => a; // two errors here diff --git a/test/fixtures/project_hierarchical_tslint/lib/utils/tslint.json b/test/fixtures/project_hierarchical_tslint/lib/utils/tslint.json deleted file mode 100644 index 07e8d4c6..00000000 --- a/test/fixtures/project_hierarchical_tslint/lib/utils/tslint.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": [ - "../tslint.json" - ], - "jsRules": {}, - "rules": { - "typedef": [true, "arrow-call-signature", "arrow-parameter"] - } -} diff --git a/test/fixtures/project_hierarchical_tslint/tsconfig.json b/test/fixtures/project_hierarchical_tslint/tsconfig.json deleted file mode 100644 index 2d1a0848..00000000 --- a/test/fixtures/project_hierarchical_tslint/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "compilerOptions": { - "lib": ["es2016"] - } -} diff --git a/test/fixtures/vue/src/langs/index.ts b/test/fixtures/vue/src/langs/index.ts index a5001e1c..70eec88f 100644 --- a/test/fixtures/vue/src/langs/index.ts +++ b/test/fixtures/vue/src/langs/index.ts @@ -1,6 +1,6 @@ -import Vue from "vue"; -import ExampleTsx from "./example-tsx.vue"; +import Vue from 'vue'; +import ExampleTsx from './example-tsx.vue'; new Vue({ - components: { ExampleTsx } + components: { ExampleTsx } }); diff --git a/test/fixtures/vue/tslint.json b/test/fixtures/vue/tslint.json deleted file mode 100644 index dfff889c..00000000 --- a/test/fixtures/vue/tslint.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "defaultSeverity": "warning", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "rules": {}, - "rulesDirectory": [] -} \ No newline at end of file diff --git a/test/integration/general.spec.ts b/test/integration/general.spec.ts index f8a93ae0..509cd828 100644 --- a/test/integration/general.spec.ts +++ b/test/integration/general.spec.ts @@ -1,5 +1,3 @@ -// tslint:disable: no-implicit-dependencies - tests might also use devDependencies -import fs from 'fs'; import path from 'path'; import ForkTsCheckerWebpackPlugin from '../../lib/index'; import * as helpers from './helpers'; @@ -37,16 +35,14 @@ describe.each([[true], [false]])( it('should allow to pass no options', () => { expect(() => { - // tslint:disable-next-line: no-unused-expression new ForkTsCheckerWebpackPlugin(); }).not.toThrowError(); }); it('should detect paths', () => { - const plugin = new ForkTsCheckerWebpackPlugin({ tslint: true }); + const plugin = new ForkTsCheckerWebpackPlugin({}); expect(plugin['tsconfig']).toBe('./tsconfig.json'); - expect(plugin['tslint']).toBe(true); }); it('should set logger to console by default', () => { @@ -55,67 +51,6 @@ describe.each([[true], [false]])( expect(plugin['logger']).toBe(console); }); - it('should find lint warnings', callback => { - const fileName = 'lintingError2'; - const { compiler } = helpers.testLintAutoFixTest({ - pluginOptions: { - tslint: './tslint.json', - ignoreLintWarnings: false, - ...overrideOptions - }, - fileName - }); - - compiler.run((err, stats) => { - expect( - stats.compilation.warnings.filter(warning => - warning.message.includes('missing whitespace') - ).length - ).toBeGreaterThan(0); - callback(); - }); - }); - - it('should not print warnings when ignoreLintWarnings passed as option', callback => { - const fileName = 'lintingError2'; - const { compiler } = helpers.testLintAutoFixTest({ - fileName, - pluginOptions: { - tslint: './tslint.json', - ignoreLintWarnings: true, - ...overrideOptions - } - }); - compiler.run((err, stats) => { - expect( - stats.compilation.warnings.filter(warning => - warning.message.includes('missing whitespace') - ).length - ).toBe(0); - callback(); - }); - }); - - it('should not mark warnings as errors when ignoreLintWarnings passed as option', callback => { - const fileName = 'lintingError2'; - const { compiler } = helpers.testLintAutoFixTest({ - fileName, - pluginOptions: { - tslint: './tslint.json', - ignoreLintWarnings: true, - ...overrideOptions - } - }); - compiler.run((err, stats) => { - expect( - stats.compilation.errors.filter(error => - error.message.includes('missing whitespace') - ).length - ).toBe(0); - callback(); - }); - }); - it('should find semantic errors', callback => { const compiler = createCompiler({ pluginOptions: { @@ -178,47 +113,6 @@ describe.each([[true], [false]])( } ); - it('should fix linting errors with tslintAutofix flag set to true', callback => { - const fileName = 'lintingError1'; - const { - compiler, - formattedFileContents, - targetFileName - } = helpers.testLintAutoFixTest({ - fileName, - pluginOptions: { - tslintAutoFix: true, - tslint: './tslint.autofix.json', - tsconfig: undefined, - ...overrideOptions - } - }); - compiler.run((err, stats) => { - expect(stats.compilation.warnings.length).toBe(0); - - const fileContents = fs.readFileSync(targetFileName, { - encoding: 'utf-8' - }); - expect(fileContents).toBe(formattedFileContents); - callback(); - }); - }); - - it('should not fix linting by default', callback => { - const fileName = 'lintingError2'; - const { compiler } = helpers.testLintAutoFixTest({ - fileName, - pluginOptions: { - tslint: true, - ...overrideOptions - } - }); - compiler.run((err, stats) => { - expect(stats.compilation.warnings.length).toBe(7); - callback(); - }); - }); - it('should detect eslints', callback => { const compiler = createCompiler({ context: './project_eslint', @@ -362,22 +256,6 @@ describe.each([[true], [false]])( }).toThrowError(); }); - it('should throw error if config container wrong tslint.json path', () => { - expect(() => { - createCompiler({ - pluginOptions: { - tslint: '/some/path/that/not/exists/tslint.json' - } - }); - }).toThrowError(); - }); - - it('should detect tslint path for true option', () => { - expect(() => { - createCompiler({ pluginOptions: { tslint: true } }); - }).not.toThrowError(); - }); - it('should allow delaying service-start', callback => { const compiler = createCompiler(); let delayed = false; @@ -409,28 +287,6 @@ describe.each([[true], [false]])( }); }); - it('should respect "tslint.json"s hierarchy when config-file not specified', callback => { - const { compiler } = helpers.createCompiler({ - pluginOptions: { - tslint: true, - ...overrideOptions - }, - entryPoint: './index.ts', - context: './project_hierarchical_tslint' - }); - compiler.run((err, stats) => { - /* - * there are three identical arrow functions - * in index.ts, lib/func.ts and lib/utils/func.ts - * and plugin should warn three times on typedef-rule - * twice on "arrow-call-signature" and once on "arrow-parameter" - * because this rule is overriden inside lib/tslint.json - * */ - expect(stats.compilation.warnings.length).toBe(3); - callback(); - }); - }); - it('should not find syntactic errors when checkSyntacticErrors is false', callback => { const compiler = createCompiler({ pluginOptions: { checkSyntacticErrors: false }, diff --git a/test/integration/helpers/createCompiler.ts b/test/integration/helpers/createCompiler.ts index d811f66a..774d6787 100644 --- a/test/integration/helpers/createCompiler.ts +++ b/test/integration/helpers/createCompiler.ts @@ -1,4 +1,3 @@ -// tslint:disable:no-implicit-dependencies import webpack from 'webpack'; import * as path from 'path'; import * as fs from 'fs'; @@ -89,7 +88,6 @@ function normalizeDiagnosticsPaths( rawMessage: string; message: string; file: string; - location: any[]; }[], contextDir: string ) { diff --git a/test/integration/helpers/createVueCompiler.ts b/test/integration/helpers/createVueCompiler.ts index 65c722bb..93f6197c 100644 --- a/test/integration/helpers/createVueCompiler.ts +++ b/test/integration/helpers/createVueCompiler.ts @@ -1,13 +1,12 @@ -// tslint:disable:no-implicit-dependencies -// @ts-ignore -import { rpcMethods } from './rpc'; +import * as VueLoader from 'vue-loader'; // import for types alone import * as path from 'path'; -import { CreateCompilerOptions, createCompiler } from '.'; import { RpcProvider } from 'worker-rpc'; -let VueLoaderPlugin: any; +import { rpcMethods } from './rpc'; +import { CreateCompilerOptions, createCompiler } from '.'; + +let VueLoaderPlugin: typeof VueLoader.VueLoaderPlugin; try { - // tslint:disable-next-line: no-submodule-imports VueLoaderPlugin = require('vue-loader/lib/plugin'); } catch { /** older versions of vue-loader come without that import - that's fine. */ @@ -33,6 +32,7 @@ export async function createVueCompiler({ resolve: { extensions: ['.ts', '.js', '.vue', '.json'], alias: { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion '@': path.resolve(config.context!, './src'), surprise: './src/index.ts' } @@ -69,31 +69,34 @@ export async function createVueCompiler({ const { compilerConfig, plugin } = results; const files = { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 'example.vue': path.resolve(compilerConfig.context!, 'src/example.vue'), 'syntacticError.ts': path.resolve( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion compilerConfig.context!, 'src/syntacticError.ts' ) }; plugin['spawnService'](); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const rpcProvider: RpcProvider = plugin['serviceRpc']!; - await rpcProvider.rpc(rpcMethods.checker_nextIteration); + await rpcProvider.rpc(rpcMethods.nextIteration); return { ...results, files, rpcProvider, getKnownFileNames(): Promise { - return rpcProvider.rpc(rpcMethods.checker_getKnownFileNames); + return rpcProvider.rpc(rpcMethods.getKnownFileNames); }, getSourceFile(fileName: string): Promise<{ text: string } | undefined> { - return rpcProvider.rpc(rpcMethods.checker_getSourceFile, fileName); + return rpcProvider.rpc(rpcMethods.getSourceFile, fileName); }, getSyntacticDiagnostics(): Promise< { start: number; length: number; file: { text: string } }[] | undefined > { - return rpcProvider.rpc(rpcMethods.checker_getSyntacticDiagnostics); + return rpcProvider.rpc(rpcMethods.getSyntacticDiagnostics); } }; } diff --git a/test/integration/helpers/index.ts b/test/integration/helpers/index.ts index a5cde96b..33cbec90 100644 --- a/test/integration/helpers/index.ts +++ b/test/integration/helpers/index.ts @@ -3,7 +3,6 @@ export { ForkTsCheckerWebpackPlugin }; export { createCompiler, CreateCompilerOptions } from './createCompiler'; export { createVueCompiler } from './createVueCompiler'; export { getRpcProvider, rpcMethods } from './rpc'; -export { testLintAutoFixTest } from './testLintAutoFixTest'; export const expectedErrorCodes = { expectedSyntacticErrorCode: 'TS1005', diff --git a/test/integration/helpers/rpc.js b/test/integration/helpers/rpc.js index 6bff1d41..582e7750 100644 --- a/test/integration/helpers/rpc.js +++ b/test/integration/helpers/rpc.js @@ -1,25 +1,29 @@ const RpcProvider = require('worker-rpc').RpcProvider; /** - * this file needs to be JavaScript because it is direcly required from files that are injected into node using --require + * this file needs to be JavaScript because it is directly required from files + * that are injected into node using --require */ exports.rpcMethods = { - checker_nextIteration: 'checker_nextIteration', - checker_getKnownFileNames: 'checker_getKnownFileNames', - checker_getSourceFile: 'checker_getSourceFile', - checker_getSyntacticDiagnostics: 'checker_getSyntacticDiagnostics' + nextIteration: 'checker_nextIteration', + getKnownFileNames: 'checker_getKnownFileNames', + getSourceFile: 'checker_getSourceFile', + getSyntacticDiagnostics: 'checker_getSyntacticDiagnostics' }; /** @type {RpcProvider} */ let rpc; + exports.getRpcProvider = () => { if (!rpc) { - rpc = new RpcProvider(message => - // @ts-ignore - process.send(message) - ); + rpc = new RpcProvider(message => { + if (process && process.send) { + return process.send(message); + } + }); process.on('message', message => rpc.dispatch(message)); } + return rpc; }; diff --git a/test/integration/helpers/testLintAutoFixTest.ts b/test/integration/helpers/testLintAutoFixTest.ts deleted file mode 100644 index aaab08ba..00000000 --- a/test/integration/helpers/testLintAutoFixTest.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createCompiler } from './createCompiler'; -import { ForkTsCheckerWebpackPlugin } from '.'; -import fs from 'fs'; -import path from 'path'; - -export function testLintAutoFixTest({ - fileName, - pluginOptions -}: { - fileName: string; - pluginOptions: Partial; -}) { - const lintErrorFileContents = `function someFunctionName(param1,param2){return param1+param2}; -`; - const formattedFileContents = `function someFunctionName(param1, param2) {return param1 + param2; } -`; - - const results = createCompiler({ - pluginOptions, - entryPoint: `./src/${fileName}.ts` - }); - - const targetFileName = path.resolve( - results.contextDir, - `./src/${fileName}.ts` - ); - - fs.writeFileSync(targetFileName, lintErrorFileContents, { flag: 'w' }); - - return { ...results, targetFileName, formattedFileContents }; -} diff --git a/test/integration/incrementalApi.spec.ts b/test/integration/incrementalApi.spec.ts index 5b37cb72..6c2f7235 100644 --- a/test/integration/incrementalApi.spec.ts +++ b/test/integration/incrementalApi.spec.ts @@ -31,21 +31,6 @@ describe('[INTEGRATION] specific tests for useTypescriptIncrementalApi: true', ( }); } - it('should not fix linting by default', callback => { - const fileName = 'lintingError2'; - const { compiler } = helpers.testLintAutoFixTest({ - fileName, - pluginOptions: { - useTypescriptIncrementalApi: true, - tslint: true - } - }); - compiler.run((err, stats) => { - expect(stats.compilation.warnings.length).toBe(7); - callback(); - }); - }); - it('should get syntactic diagnostics from Vue program', callback => { createVueCompiler({ pluginOptions: { checkSyntacticErrors: true } }).then( ({ compiler }) => diff --git a/test/integration/mocks/ApiIncrementalCheckerWithRpc.js b/test/integration/mocks/ApiIncrementalCheckerWithRpc.js index 004eeb86..cd10a76c 100644 --- a/test/integration/mocks/ApiIncrementalCheckerWithRpc.js +++ b/test/integration/mocks/ApiIncrementalCheckerWithRpc.js @@ -1,7 +1,6 @@ -const mock = require('mock-require'); - -const origImport = require('../../../lib/ApiIncrementalChecker'); -const { rpcMethods, getRpcProvider } = require('../helpers/rpc'); +import * as mock from 'mock-require'; +import * as origImport from '../../../lib/ApiIncrementalChecker'; +import { rpcMethods, getRpcProvider } from '../helpers/rpc'; mock('../../../lib/ApiIncrementalChecker', { ApiIncrementalChecker: class extends origImport.ApiIncrementalChecker { @@ -18,40 +17,34 @@ mock('../../../lib/ApiIncrementalChecker', { } }; - rpc.registerRpcHandler(rpcMethods.checker_nextIteration, () => { + rpc.registerRpcHandler(rpcMethods.nextIteration, () => { return this.nextIteration(); }); - rpc.registerRpcHandler(rpcMethods.checker_getKnownFileNames, async () => { + rpc.registerRpcHandler(rpcMethods.getKnownFileNames, async () => { await awaitInit(); return Array.from(this.tsIncrementalCompiler.getAllKnownFiles()); }); - rpc.registerRpcHandler( - rpcMethods.checker_getSourceFile, - async fileName => { - await awaitInit(); - const result = this.tsIncrementalCompiler - .getProgram() - .getSourceFile(fileName); - return !result ? undefined : { text: result.text }; - } - ); + rpc.registerRpcHandler(rpcMethods.getSourceFile, async fileName => { + await awaitInit(); + const result = this.tsIncrementalCompiler + .getProgram() + .getSourceFile(fileName); + return !result ? undefined : { text: result.text }; + }); - rpc.registerRpcHandler( - rpcMethods.checker_getSyntacticDiagnostics, - async () => { - await awaitInit(); - const result = this.tsIncrementalCompiler - .getProgram() - .getSyntacticDiagnostics(); - return result.map(({ start, length, file }) => ({ - start, - length, - file: { text: file.text } - })); - } - ); + rpc.registerRpcHandler(rpcMethods.getSyntacticDiagnostics, async () => { + await awaitInit(); + const result = this.tsIncrementalCompiler + .getProgram() + .getSyntacticDiagnostics(); + return result.map(({ start, length, file }) => ({ + start, + length, + file: { text: file.text } + })); + }); } } }); diff --git a/test/integration/mocks/IncrementalCheckerWithError.js b/test/integration/mocks/IncrementalCheckerWithError.js index 82d6a1e1..2cbc7517 100644 --- a/test/integration/mocks/IncrementalCheckerWithError.js +++ b/test/integration/mocks/IncrementalCheckerWithError.js @@ -1,4 +1,4 @@ -const mock = require('mock-require'); +import * as mock from 'mock-require'; mock('../../../lib/IncrementalChecker', { IncrementalChecker: class { diff --git a/test/integration/mocks/IncrementalCheckerWithRpc.js b/test/integration/mocks/IncrementalCheckerWithRpc.js index 43933547..1e35622c 100644 --- a/test/integration/mocks/IncrementalCheckerWithRpc.js +++ b/test/integration/mocks/IncrementalCheckerWithRpc.js @@ -1,8 +1,6 @@ -const mock = require('mock-require'); - -const origImport = require('../../../lib/IncrementalChecker'); - -const { rpcMethods, getRpcProvider } = require('../helpers/rpc'); +import * as mock from 'mock-require'; +import * as origImport from '../../../lib/IncrementalChecker'; +import { rpcMethods, getRpcProvider } from '../helpers/rpc'; mock('../../../lib/IncrementalChecker', { IncrementalChecker: class extends origImport.IncrementalChecker { @@ -11,20 +9,20 @@ mock('../../../lib/IncrementalChecker', { const rpc = getRpcProvider(); - rpc.registerRpcHandler(rpcMethods.checker_nextIteration, () => { + rpc.registerRpcHandler(rpcMethods.nextIteration, () => { return this.nextIteration(); }); - rpc.registerRpcHandler(rpcMethods.checker_getKnownFileNames, () => { + rpc.registerRpcHandler(rpcMethods.getKnownFileNames, () => { return this.programConfig.fileNames; }); - rpc.registerRpcHandler(rpcMethods.checker_getSourceFile, fileName => { + rpc.registerRpcHandler(rpcMethods.getSourceFile, fileName => { const result = this.program.getSourceFile(fileName); return !result ? undefined : { text: result.text }; }); - rpc.registerRpcHandler(rpcMethods.checker_getSyntacticDiagnostics, () => { + rpc.registerRpcHandler(rpcMethods.getSyntacticDiagnostics, () => { const result = this.program.getSyntacticDiagnostics(); return result.map(({ start, length, file }) => ({ start, diff --git a/test/integration/nonIncrementalApi.spec.ts b/test/integration/nonIncrementalApi.spec.ts index 3383dc9c..a2436ad8 100644 --- a/test/integration/nonIncrementalApi.spec.ts +++ b/test/integration/nonIncrementalApi.spec.ts @@ -1,4 +1,3 @@ -// tslint:disable:no-implicit-dependencies import path from 'path'; import * as helpers from './helpers'; diff --git a/test/integration/tslint.json b/test/integration/tslint.json deleted file mode 100644 index 2e1d3268..00000000 --- a/test/integration/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["../../src/tslint.json"] -} diff --git a/test/integration/vue.spec.ts b/test/integration/vue.spec.ts index d6db9030..ab56578b 100644 --- a/test/integration/vue.spec.ts +++ b/test/integration/vue.spec.ts @@ -1,4 +1,3 @@ -// tslint:disable:no-implicit-dependencies import path from 'path'; import unixify from 'unixify'; import { @@ -24,14 +23,18 @@ const useTypescriptIncrementalApiOptions = [ // eslint-disable-next-line @typescript-eslint/array-type function mixLists(list1: ReadonlyArray, list2: ReadonlyArray) { - return list1.reduce((acc, item1) => acc.concat(list2.map(item2 => [item1, item2])), [] as [T1, T2][]); + return list1.reduce( + (acc, item1) => acc.concat(list2.map(item2 => [item1, item2])), + [] as [T1, T2][] + ); } describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( '[INTEGRATION] vue tests - useTypescriptIncrementalApi: %s, vue tpl compiler: %s', (useTypescriptIncrementalApi, vueTplCompiler) => { const vueEnabledOption = { enabled: true, compiler: vueTplCompiler }; - const testOnlyFirstVueTplCompiler = vueEnabledOption.compiler !== vueTplCompilers[0] ? it.skip : it; + const testOnlyFirstVueTplCompiler = + vueEnabledOption.compiler !== vueTplCompilers[0] ? it.skip : it; const createCompiler = (options: Partial = {}) => createVueCompiler({ @@ -80,21 +83,28 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( expect(fileFound).toBe(true); }); - testOnlyFirstVueTplCompiler('should not create a Vue program config if vue is disabled', async () => { - const { getKnownFileNames, files } = await createCompiler(); + testOnlyFirstVueTplCompiler( + 'should not create a Vue program config if vue is disabled', + async () => { + const { getKnownFileNames, files } = await createCompiler(); - const fileNames = await getKnownFileNames(); + const fileNames = await getKnownFileNames(); - let fileFound; - let fileWeWant = unixify(files['example.vue']); + let fileFound; + let fileWeWant = unixify(files['example.vue']); - fileFound = fileNames.some(filename => unixify(filename) === fileWeWant); - expect(fileFound).toBe(false); + fileFound = fileNames.some( + filename => unixify(filename) === fileWeWant + ); + expect(fileFound).toBe(false); - fileWeWant = unixify(files['syntacticError.ts']); - fileFound = fileNames.some(filename => unixify(filename) === fileWeWant); - expect(fileFound).toBe(true); - }); + fileWeWant = unixify(files['syntacticError.ts']); + fileFound = fileNames.some( + filename => unixify(filename) === fileWeWant + ); + expect(fileFound).toBe(true); + } + ); it('should create a Vue program if vue is enabled', async () => { const { getSourceFile, files } = await createCompiler({ @@ -110,48 +120,50 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( expect(source).toBeDefined(); }); - testOnlyFirstVueTplCompiler('should not create a Vue program if vue is disabled', async () => { - const { getSourceFile, files } = await createCompiler(); + testOnlyFirstVueTplCompiler( + 'should not create a Vue program if vue is disabled', + async () => { + const { getSourceFile, files } = await createCompiler(); - let source; + let source; - source = await getSourceFile(files['example.vue']); - expect(source).toBeUndefined(); + source = await getSourceFile(files['example.vue']); + expect(source).toBeUndefined(); - source = await getSourceFile(files['syntacticError.ts']); - expect(source).toBeDefined(); - }); + source = await getSourceFile(files['syntacticError.ts']); + expect(source).toBeDefined(); + } + ); it('should get syntactic diagnostics from Vue program', async () => { const { getSyntacticDiagnostics } = await createCompiler({ - pluginOptions: { tslint: true, vue: vueEnabledOption } + pluginOptions: { vue: vueEnabledOption } }); const diagnostics = await getSyntacticDiagnostics(); expect(diagnostics).toBeDefined(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion expect(diagnostics!.length).toBe(1); }); it('should not find syntactic errors when checkSyntacticErrors is false', callback => { - createCompiler({ pluginOptions: { tslint: true, vue: true } }).then( - ({ compiler }) => - compiler.run((_error, stats) => { - const syntacticErrorNotFoundInStats = stats.compilation.errors.every( - error => - !error.rawMessage.includes( - expectedErrorCodes.expectedSyntacticErrorCode - ) - ); - expect(syntacticErrorNotFoundInStats).toBe(true); - callback(); - }) + createCompiler({ pluginOptions: { vue: true } }).then(({ compiler }) => + compiler.run((_error, stats) => { + const syntacticErrorNotFoundInStats = stats.compilation.errors.every( + error => + !error.rawMessage.includes( + expectedErrorCodes.expectedSyntacticErrorCode + ) + ); + expect(syntacticErrorNotFoundInStats).toBe(true); + callback(); + }) ); }); it('should find syntactic errors when checkSyntacticErrors is true', callback => { createCompiler({ pluginOptions: { - tslint: true, vue: true, checkSyntacticErrors: true } @@ -169,23 +181,12 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( ); }); - it('should not report no-consecutive-blank-lines tslint rule', callback => { - createCompiler({ pluginOptions: { tslint: true, vue: vueEnabledOption } }).then( - ({ compiler }) => - compiler.run((error, stats) => { - stats.compilation.warnings.forEach(warning => { - expect(warning.rawMessage).not.toMatch( - /no-consecutive-blank-lines/ - ); - }); - callback(); - }) - ); - }); - it('should resolve src attribute but not report not found error', callback => { createCompiler({ - pluginOptions: { vue: vueEnabledOption, tsconfig: 'tsconfig-attrs.json' } + pluginOptions: { + vue: vueEnabledOption, + tsconfig: 'tsconfig-attrs.json' + } }).then(({ compiler }) => compiler.run((error, stats) => { const errors = stats.compilation.errors; @@ -202,20 +203,20 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( 'example-js.vue', 'example-jsx.vue', 'example-nolang.vue' - ])('should be able to extract script from %s', - async fileName => { - const { getSourceFile, contextDir } = await createCompiler({ - pluginOptions: { vue: vueEnabledOption, tsconfig: 'tsconfig-langs.json' } - }); - const sourceFilePath = path.resolve( - contextDir, - 'src/langs/' + fileName - ); - const source = await getSourceFile(sourceFilePath); - expect(source).toBeDefined(); - // remove padding lines - const text = source!.text.replace(/^\s*\/\/.*$\r*\n/gm, '').trim(); - expect(text.startsWith('/* OK */')).toBe(true); + ])('should be able to extract script from %s', async fileName => { + const { getSourceFile, contextDir } = await createCompiler({ + pluginOptions: { + vue: vueEnabledOption, + tsconfig: 'tsconfig-langs.json' + } + }); + const sourceFilePath = path.resolve(contextDir, 'src/langs/' + fileName); + const source = await getSourceFile(sourceFilePath); + expect(source).toBeDefined(); + // remove padding lines + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const text = source!.text.replace(/^\s*\/\/.*$\r*\n/gm, '').trim(); + expect(text.startsWith('/* OK */')).toBe(true); }); function groupByFileName(errors: Error[]) { diff --git a/test/unit/CancellationToken.spec.js b/test/unit/CancellationToken.spec.ts similarity index 72% rename from test/unit/CancellationToken.spec.js rename to test/unit/CancellationToken.spec.ts index b83aa602..f90dfa2b 100644 --- a/test/unit/CancellationToken.spec.js +++ b/test/unit/CancellationToken.spec.ts @@ -1,13 +1,12 @@ -var os = require('os'); -var ts = require('typescript'); -var mockFs = require('mock-fs'); -var CancellationToken = require('../../lib/CancellationToken') - .CancellationToken; -var fileExistsSync = require('../../lib/FsHelper').fileExistsSync; +import * as os from 'os'; +import * as ts from 'typescript'; +import mockFs from 'mock-fs'; +import { CancellationToken } from '../../lib/CancellationToken'; +import { fileExistsSync } from '../../lib/FsHelper'; describe('[UNIT] CancellationToken', () => { beforeEach(() => { - var fsTree = {}; + const fsTree = {}; fsTree[os.tmpdir()] = mockFs.directory(); mockFs(fsTree); @@ -18,23 +17,23 @@ describe('[UNIT] CancellationToken', () => { }); it('should create valid cancellation token', () => { - var tokenA = new CancellationToken(require('typescript')); + const tokenA = new CancellationToken(require('typescript')); expect(tokenA.isCancellationRequested()).toBe(false); - var tokenB = new CancellationToken( + const tokenB = new CancellationToken( require('typescript'), 'FA#FERgSERgRT$rA$#rA#Ea@RweFRgERG' ); expect(tokenB.isCancellationRequested()).toBe(false); - var tokenC = new CancellationToken( + const tokenC = new CancellationToken( require('typescript'), 'GFERWgEgeF#R2erwreWrweWER', false ); expect(tokenC.isCancellationRequested()).toBe(false); - var tokenD = new CancellationToken( + const tokenD = new CancellationToken( require('typescript'), 'REGg$#R2$#@r@#R$#T43T$#t43t', true @@ -43,8 +42,8 @@ describe('[UNIT] CancellationToken', () => { }); it('should serialize to JSON', () => { - var tokenA = new CancellationToken(require('typescript')); - var json = JSON.stringify(tokenA); + const tokenA = new CancellationToken(require('typescript')); + const json = JSON.stringify(tokenA); expect(typeof json).toBe('string'); expect(function() { @@ -52,7 +51,8 @@ describe('[UNIT] CancellationToken', () => { }).not.toThrowError(Error); expect(typeof JSON.parse(json)).toBe('object'); - var tokenB = CancellationToken.createFromJSON( + const tokenB = CancellationToken.createFromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires require('typescript'), JSON.parse(json) ); @@ -65,18 +65,18 @@ describe('[UNIT] CancellationToken', () => { }); it('should generate path in os.tmpdir() directory', () => { - var tokenA = new CancellationToken(require('typescript')); + const tokenA = new CancellationToken(require('typescript')); expect(tokenA.getCancellationFilePath().indexOf(os.tmpdir())).toBe(0); }); it('should throw ts.OperationCanceledException error on cancelled', () => { - var tokenA = new CancellationToken(require('typescript')); + const tokenA = new CancellationToken(require('typescript')); expect(function() { tokenA.throwIfCancellationRequested(); }).not.toThrowError(); - var tokenB = new CancellationToken( + const tokenB = new CancellationToken( require('typescript'), 'rgeer#R23r$#T$3t#$t43', true @@ -87,7 +87,7 @@ describe('[UNIT] CancellationToken', () => { }); it('should write file in filesystem on requestCancellation', () => { - var tokenA = new CancellationToken(require('typescript')); + const tokenA = new CancellationToken(require('typescript')); tokenA.requestCancellation(); expect(tokenA.isCancellationRequested()).toBe(true); @@ -95,7 +95,7 @@ describe('[UNIT] CancellationToken', () => { }); it('should cleanup file on cleanupCancellation', () => { - var tokenA = new CancellationToken(require('typescript')); + const tokenA = new CancellationToken(require('typescript')); tokenA.requestCancellation(); tokenA.cleanupCancellation(); @@ -110,7 +110,7 @@ describe('[UNIT] CancellationToken', () => { }); it('should not throw error on cleanupCancellation with no file exists', () => { - var tokenA = new CancellationToken( + const tokenA = new CancellationToken( require('typescript'), 'some_file_that_doesnt_exists', true @@ -125,12 +125,13 @@ describe('[UNIT] CancellationToken', () => { }); it('should throttle check for 10ms', done => { - var tokenA = new CancellationToken(require('typescript')); - var tokenB = CancellationToken.createFromJSON( + const tokenA = new CancellationToken(require('typescript')); + const tokenB = CancellationToken.createFromJSON( + // eslint-disable-next-line @typescript-eslint/no-var-requires require('typescript'), tokenA.toJSON() ); - var start = Date.now(); + const start = Date.now(); expect(tokenA.isCancellationRequested()).toBe(false); expect(tokenB.isCancellationRequested()).toBe(false); @@ -138,7 +139,7 @@ describe('[UNIT] CancellationToken', () => { tokenA.requestCancellation(); expect(tokenA.isCancellationRequested()).toBe(true); - var duration = Math.abs(Date.now() - start); + const duration = Math.abs(Date.now() - start); if (duration < 10) { // we should throttle check expect(tokenB.isCancellationRequested()).toBe(false); diff --git a/test/unit/FileRegister.spec.js b/test/unit/FileRegister.spec.ts similarity index 89% rename from test/unit/FileRegister.spec.js rename to test/unit/FileRegister.spec.ts index 6b4e3400..fe73b063 100644 --- a/test/unit/FileRegister.spec.js +++ b/test/unit/FileRegister.spec.ts @@ -1,13 +1,15 @@ -var FilesRegister = require('../../lib/FilesRegister').FilesRegister; +import { FilesRegister } from '../../lib/FilesRegister'; describe('[UNIT] FilesRegister', () => { - var register; + let register; beforeEach(() => { - register = new FilesRegister(function() { - return { - test: true - }; - }); + register = new FilesRegister( + () => + ({ + test: true + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any) + ); }); it('should add and remove files', () => { @@ -62,14 +64,14 @@ describe('[UNIT] FilesRegister', () => { register.ensure('/test'); expect(register.has('/test')).toBe(true); - var reference = register.get('/test'); + const reference = register.get('/test'); register.ensure('/test'); expect(reference).toBe(register.get('/test')); }); it('should mutate existing data', () => { register.add('/test'); - var dataReference = register.getData('/test'); + const dataReference = register.getData('/test'); expect(dataReference.test).toBe(true); register.mutateData('/test', function(data) { data.test = false; diff --git a/test/unit/IncrementalChecker.spec.js b/test/unit/IncrementalChecker.spec.js deleted file mode 100644 index e7ad4759..00000000 --- a/test/unit/IncrementalChecker.spec.js +++ /dev/null @@ -1,84 +0,0 @@ -var path = require('path'); -var minimatch = require('minimatch'); -var typescript = require('typescript'); -var IncrementalChecker = require('../../lib/IncrementalChecker') - .IncrementalChecker; - -jest.mock('typescript', () => ({ - parseJsonConfigFileContent: jest.fn(function(tsconfig) { - return { - options: tsconfig.compilerOptions - }; - }), - readConfigFile() { - return { - config: { - compilerOptions: { - foo: true - } - } - }; - }, - - sys: {} -})); - -describe('[UNIT] IncrementalChecker', () => { - describe('isFileExcluded', () => { - it('should properly filter definition files and listed exclusions', () => { - var linterConfig = { - linterOptions: { - exclude: ['src/formatter/**/*.ts'] - } - }; - - var exclusions = linterConfig.linterOptions.exclude.map(function( - pattern - ) { - return new minimatch.Minimatch(path.resolve(pattern)); - }); - - var testPaths = [ - 'src/formatter/codeframeFormatter.ts', - 'src/formatter/defaultFormatter.ts', - 'src/service.ts', - 'node_modules/tslint/lib/configuration.d.ts' - ].map(function(p) { - return path.resolve(p); - }); - - var pathsAreExcluded = testPaths.map(function(p) { - return IncrementalChecker.isFileExcluded(p, exclusions); - }); - - expect(pathsAreExcluded[0]).toBe(true); - expect(pathsAreExcluded[1]).toBe(true); - expect(pathsAreExcluded[2]).toBe(false); - expect(pathsAreExcluded[3]).toBe(true); - }); - }); - - describe('loadProgramConfig', () => { - it('merges compilerOptions into config file options', () => { - IncrementalChecker.loadProgramConfig( - require('typescript'), - 'tsconfig.foo.json', - { - bar: false - } - ); - - expect(typescript.parseJsonConfigFileContent).toHaveBeenCalledTimes(1); - expect(typescript.parseJsonConfigFileContent).toHaveBeenLastCalledWith( - { - compilerOptions: { - foo: true, - bar: false - } - }, - expect.anything(), - expect.anything() - ); - }); - }); -}); diff --git a/test/unit/IncrementalChecker.spec.ts b/test/unit/IncrementalChecker.spec.ts new file mode 100644 index 00000000..d163ae6c --- /dev/null +++ b/test/unit/IncrementalChecker.spec.ts @@ -0,0 +1,48 @@ +import * as ts from 'typescript'; +import { IncrementalChecker } from '../../lib/IncrementalChecker'; + +jest.mock('typescript', () => ({ + parseJsonConfigFileContent: jest.fn(function(tsconfig) { + return { + options: tsconfig.compilerOptions + }; + }), + readConfigFile() { + return { + config: { + compilerOptions: { + foo: true + } + } + }; + }, + + sys: {} +})); + +describe('[UNIT] IncrementalChecker', () => { + describe('loadProgramConfig', () => { + it('merges compilerOptions into config file options', () => { + IncrementalChecker.loadProgramConfig( + // eslint-disable-next-line @typescript-eslint/no-var-requires + require('typescript'), + 'tsconfig.foo.json', + { + bar: false + } + ); + + expect(ts.parseJsonConfigFileContent).toHaveBeenCalledTimes(1); + expect(ts.parseJsonConfigFileContent).toHaveBeenLastCalledWith( + { + compilerOptions: { + foo: true, + bar: false + } + }, + expect.anything(), + expect.anything() + ); + }); + }); +}); diff --git a/test/unit/VueProgram.spec.js b/test/unit/VueProgram.spec.ts similarity index 77% rename from test/unit/VueProgram.spec.js rename to test/unit/VueProgram.spec.ts index 2597f946..0e818213 100644 --- a/test/unit/VueProgram.spec.js +++ b/test/unit/VueProgram.spec.ts @@ -1,14 +1,16 @@ -var unixify = require('unixify'); -var ts = require('typescript'); -var VueProgram = require('../../lib/VueProgram').VueProgram; -var ForkTsCheckerWebpackPlugin = require('../../lib/index'); -var templateCompilers = [ +import unixify from 'unixify'; +import * as ts from 'typescript'; +import { VueProgram } from '../../lib/VueProgram'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +const ForkTsCheckerWebpackPlugin = require('../../lib/index'); + +const templateCompilers = [ 'vue-template-compiler', 'nativescript-vue-template-compiler' ]; jest.mock('typescript', () => { - var originalTs = jest.requireActual('typescript'); + const originalTs = jest.requireActual('typescript'); return { parseJsonConfigFileContent: jest.fn(function(tsconfig) { return { @@ -42,17 +44,17 @@ describe('[UNIT] VueProgram', () => { }); it('should properly resolve relative module names', () => { - var basedir = '/base/dir'; - var containingFile = '/con/tain/ing/main.ts'; - var options = { + const basedir = '/base/dir'; + const containingFile = '/con/tain/ing/main.ts'; + const options: ts.CompilerOptions = { baseUrl: '/baseurl', paths: { '@/*': ['src/*'] } }; - var moduleNames = ['./test.vue', '../test.vue', '../../test.vue']; + const moduleNames = ['./test.vue', '../test.vue', '../../test.vue']; - var resolvedModuleNames = moduleNames.map(function(moduleName) { + const resolvedModuleNames = moduleNames.map(function(moduleName) { return VueProgram.resolveNonTsModuleName( moduleName, containingFile, @@ -67,12 +69,12 @@ describe('[UNIT] VueProgram', () => { }); it('should properly resolve wildcard module names', () => { - var basedir = '/base/dir'; - var containingFile = '/con/tain/ing/main.ts'; - var options = {}; - var moduleName = '@/test.vue'; + const basedir = '/base/dir'; + const containingFile = '/con/tain/ing/main.ts'; + const options: ts.CompilerOptions = {}; + const moduleName = '@/test.vue'; - var resolvedModuleName = VueProgram.resolveNonTsModuleName( + let resolvedModuleName = VueProgram.resolveNonTsModuleName( moduleName, containingFile, basedir, @@ -123,7 +125,8 @@ describe('[UNIT] VueProgram', () => { it.each(vueOptionsVariants)( 'should init valid vue options with: %p', option => { - var result = ForkTsCheckerWebpackPlugin.prepareVueOptions(option); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = ForkTsCheckerWebpackPlugin.prepareVueOptions(option); expect(typeof result.enabled).toBe('boolean'); expect(typeof result.compiler).toBe('string'); } @@ -132,14 +135,18 @@ describe('[UNIT] VueProgram', () => { it.each(templateCompilers)( 'should extract script block with compiler=%s', templateCompiler => { - var content = [ + const content = [ '' ].join('\n'); - var result = VueProgram.resolveScriptBlock(ts, content, templateCompiler); + const result = VueProgram.resolveScriptBlock( + ts, + content, + templateCompiler + ); expect(result.scriptKind).toBe(ts.ScriptKind.TS); expect(result.content).toBe( @@ -154,7 +161,7 @@ describe('[UNIT] VueProgram', () => { ); it.each(templateCompilers)('should pad lines with %s', templateCompiler => { - var content = [ + const content = [ '', @@ -165,7 +172,7 @@ describe('[UNIT] VueProgram', () => { '' ].join('\n'); - var result = VueProgram.resolveScriptBlock(ts, content, templateCompiler); + const result = VueProgram.resolveScriptBlock(ts, content, templateCompiler); expect(result.content).toBe( [ '//', @@ -182,7 +189,8 @@ describe('[UNIT] VueProgram', () => { describe('loadProgramConfig', () => { it('sets allowNonTsExtensions to true on returned options', () => { - var result = VueProgram.loadProgramConfig( + const result = VueProgram.loadProgramConfig( + // eslint-disable-next-line @typescript-eslint/no-var-requires require('typescript'), 'tsconfig.foo.json', {} @@ -192,6 +200,7 @@ describe('[UNIT] VueProgram', () => { }); it('merges compilerOptions into config file options', () => { + // eslint-disable-next-line @typescript-eslint/no-var-requires VueProgram.loadProgramConfig(require('typescript'), 'tsconfig.foo.json', { bar: false }); diff --git a/test/unit/formatter/CodeframeFormatter.spec.js b/test/unit/formatter/CodeframeFormatter.spec.ts similarity index 87% rename from test/unit/formatter/CodeframeFormatter.spec.js rename to test/unit/formatter/CodeframeFormatter.spec.ts index 7f41956d..1616fafb 100644 --- a/test/unit/formatter/CodeframeFormatter.spec.js +++ b/test/unit/formatter/CodeframeFormatter.spec.ts @@ -1,9 +1,7 @@ -const os = require('os'); -const mockFs = require('mock-fs'); -const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); -const { - createCodeframeFormatter -} = require('../../../lib/formatter/CodeframeFormatter'); +import * as os from 'os'; +import mockFs from 'mock-fs'; +import { Issue, IssueOrigin, IssueSeverity } from '../../../lib/issue'; +import { createCodeframeFormatter } from '../../../lib/formatter'; describe('[UNIT] formatter/CodeframeFormatter', () => { beforeEach(() => { @@ -87,7 +85,8 @@ describe('[UNIT] formatter/CodeframeFormatter', () => { }, 'INTERNAL ERROR: Stack overflow - out of memory' ] - ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + ])('formats issue message "%p" to "%p"', (...args) => { + const [issue, expectedFormatted] = args as [Issue, string]; const formatter = createCodeframeFormatter({ linesAbove: 1, linesBelow: 1 diff --git a/test/unit/formatter/DefaultFormatter.spec.js b/test/unit/formatter/DefaultFormatter.spec.ts similarity index 81% rename from test/unit/formatter/DefaultFormatter.spec.js rename to test/unit/formatter/DefaultFormatter.spec.ts index 22024a51..813d60d4 100644 --- a/test/unit/formatter/DefaultFormatter.spec.js +++ b/test/unit/formatter/DefaultFormatter.spec.ts @@ -1,8 +1,6 @@ -const os = require('os'); -const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); -const { - createDefaultFormatter -} = require('../../../lib/formatter/DefaultFormatter'); +import * as os from 'os'; +import { Issue, IssueOrigin, IssueSeverity } from '../../../lib/issue'; +import { createDefaultFormatter } from '../../../lib/formatter'; describe('[UNIT] formatter/DefaultFormatter', () => { it.each([ @@ -45,7 +43,8 @@ describe('[UNIT] formatter/DefaultFormatter', () => { }, 'INTERNAL ERROR: Stack overflow - out of memory' ] - ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + ])('formats issue message "%p" to "%p"', (...args) => { + const [issue, expectedFormatted] = args as [Issue, string]; const formatter = createDefaultFormatter(); const formatted = formatter(issue); diff --git a/test/unit/formatter/FormatterFactory.spec.js b/test/unit/formatter/FormatterFactory.spec.ts similarity index 83% rename from test/unit/formatter/FormatterFactory.spec.js rename to test/unit/formatter/FormatterFactory.spec.ts index 49291008..2758592d 100644 --- a/test/unit/formatter/FormatterFactory.spec.js +++ b/test/unit/formatter/FormatterFactory.spec.ts @@ -1,7 +1,7 @@ -const os = require('os'); -const mockFs = require('mock-fs'); -const { createFormatter } = require('../../../lib/formatter'); -const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); +import * as os from 'os'; +import mockFs from 'mock-fs'; +import { createFormatter, FormatterType } from '../../../lib/formatter'; +import { Issue, IssueOrigin, IssueSeverity } from '../../../lib/issue'; describe('[UNIT] formatter/FormatterFactory', () => { beforeEach(() => { @@ -23,10 +23,10 @@ describe('[UNIT] formatter/FormatterFactory', () => { mockFs.restore(); }); - const issue = { + const issue: Issue = { origin: IssueOrigin.TYPESCRIPT, severity: IssueSeverity.ERROR, - code: 123, + code: '123', message: 'Some issue content', file: 'some/file.ts', line: 1, @@ -34,7 +34,7 @@ describe('[UNIT] formatter/FormatterFactory', () => { }; it.each(['default', undefined])('creates default formatter', type => { - const formatter = createFormatter(type); + const formatter = createFormatter(type as FormatterType); const formattedMessage = formatter(issue); expect(formattedMessage).toEqual( @@ -85,7 +85,8 @@ describe('[UNIT] formatter/FormatterFactory', () => { }); it('throws an error on unknown formatter type', () => { - expect(() => createFormatter('unknown-type')).toThrowError( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect(() => createFormatter('unknown-type' as any)).toThrowError( `Unknown "unknown-type" formatter. Available types are: default, codeframe.` ); }); diff --git a/test/unit/formatter/InternalFormatter.spec.js b/test/unit/formatter/InternalFormatter.spec.ts similarity index 91% rename from test/unit/formatter/InternalFormatter.spec.js rename to test/unit/formatter/InternalFormatter.spec.ts index 99923736..d889bf08 100644 --- a/test/unit/formatter/InternalFormatter.spec.js +++ b/test/unit/formatter/InternalFormatter.spec.ts @@ -1,6 +1,6 @@ -const { IssueSeverity, IssueOrigin } = require('../../../lib/issue'); -const { createInternalFormatter } = require('../../../lib/formatter'); -const os = require('os'); +import * as os from 'os'; +import { Issue, IssueSeverity, IssueOrigin } from '../../../lib/issue'; +import { createInternalFormatter } from '../../../lib/formatter'; describe('[UNIT] formatter/InternalFormatter', () => { it.each([ @@ -41,7 +41,7 @@ describe('[UNIT] formatter/InternalFormatter', () => { ] ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { const formatter = createInternalFormatter(); - const formatted = formatter(issue); + const formatted = formatter(issue as Issue); expect(formatted).toEqual(expectedFormatted); }); diff --git a/test/unit/formatter/RawFormatter.spec.js b/test/unit/formatter/RawFormatter.spec.ts similarity index 77% rename from test/unit/formatter/RawFormatter.spec.js rename to test/unit/formatter/RawFormatter.spec.ts index 01c97a8a..df161a82 100644 --- a/test/unit/formatter/RawFormatter.spec.js +++ b/test/unit/formatter/RawFormatter.spec.ts @@ -1,5 +1,5 @@ -const { IssueOrigin, IssueSeverity } = require('../../../lib/issue'); -const { createRawFormatter } = require('../../../lib/formatter'); +import { Issue, IssueOrigin, IssueSeverity } from '../../../lib/issue'; +import { createRawFormatter } from '../../../lib/formatter'; describe('[UNIT] formatter/RawFormatter', () => { it.each([ @@ -27,7 +27,8 @@ describe('[UNIT] formatter/RawFormatter', () => { }, `WARNING no-unused-vars: 'x' is assigned a value but never used.` ] - ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + ])('formats issue message "%p" to "%p"', (...args) => { + const [issue, expectedFormatted] = args as [Issue, string]; const formatter = createRawFormatter(); const formatted = formatter(issue); diff --git a/test/unit/index.spec.js b/test/unit/index.spec.ts similarity index 64% rename from test/unit/index.spec.js rename to test/unit/index.spec.ts index b15200c9..0278724e 100644 --- a/test/unit/index.spec.js +++ b/test/unit/index.spec.ts @@ -7,7 +7,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { describe('typescript', () => { it('should throw if typescript not present', () => { jest.setMock('typescript', () => undefined); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(function() { new ForkTsCheckerWebpackPlugin(); @@ -16,7 +16,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should not throw if typescript version >= 2.1.0', () => { jest.setMock('typescript', { version: '2.1.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(function() { new ForkTsCheckerWebpackPlugin(); @@ -25,7 +25,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should throw if typescript version < 2.1.0', () => { jest.setMock('typescript', { version: '2.0.8' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(function() { new ForkTsCheckerWebpackPlugin(); @@ -37,7 +37,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should throw if eslint not present', () => { jest.setMock('typescript', { version: '2.1.0' }); jest.setMock('eslint', undefined); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(function() { new ForkTsCheckerWebpackPlugin({ eslint: true }); @@ -47,7 +47,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should not throw if eslint is present', () => { jest.setMock('typescript', { version: '2.1.0' }); jest.setMock('eslint', { Linter: { VERSION: '5.7.0' } }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(function() { new ForkTsCheckerWebpackPlugin({ eslint: true }); @@ -55,42 +55,10 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { }); }); - describe('tslint', () => { - it('should throw if tslint not present', () => { - jest.setMock('typescript', { version: '2.1.0' }); - jest.setMock('tslint', undefined); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); - - expect(function() { - new ForkTsCheckerWebpackPlugin({ tslint: true }); - }).toThrowError(Error); - }); - - it('should not throw if tslint version >= 4.0.0', () => { - jest.setMock('typescript', { version: '2.1.0' }); - jest.setMock('tslint', { Linter: { VERSION: '4.0.0' } }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); - - expect(function() { - new ForkTsCheckerWebpackPlugin({ tslint: true }); - }).not.toThrowError(); - }); - - it('should throw if tslint version < 4.0.0', () => { - jest.setMock('typescript', { version: '2.1.0' }); - jest.setMock('tslint', { Linter: { VERSION: '3.15.1' } }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); - - expect(function() { - new ForkTsCheckerWebpackPlugin({ tslint: true }); - }).toThrowError(Error); - }); - }); - describe('useTypescriptIncrementalApi', () => { it('should be true if useTypescriptIncrementalApi: true supplied', () => { jest.setMock('typescript', { version: '2.1.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect( new ForkTsCheckerWebpackPlugin({ useTypescriptIncrementalApi: true }) @@ -100,7 +68,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should be true if useTypescriptIncrementalApi: false supplied', () => { jest.setMock('typescript', { version: '3.0.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect( new ForkTsCheckerWebpackPlugin({ useTypescriptIncrementalApi: false }) @@ -110,7 +78,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should be false if useTypescriptIncrementalApi not supplied and typescript version < 3.0.0', () => { jest.setMock('typescript', { version: '2.1.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(new ForkTsCheckerWebpackPlugin().useTypescriptIncrementalApi).toBe( false @@ -119,7 +87,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should be true if useTypescriptIncrementalApi not supplied and typescript version >= 3.0.0', () => { jest.setMock('typescript', { version: '3.0.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect(new ForkTsCheckerWebpackPlugin().useTypescriptIncrementalApi).toBe( true @@ -128,7 +96,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should be false if useTypescriptIncrementalApi not supplied and typescript version < 3.0.0 and vue is true', () => { jest.setMock('typescript', { version: '2.1.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect( new ForkTsCheckerWebpackPlugin({ vue: true }) @@ -138,7 +106,7 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { it('should be false if useTypescriptIncrementalApi not supplied and typescript version >= 3.0.0 and vue is true', () => { jest.setMock('typescript', { version: '3.0.0' }); - var ForkTsCheckerWebpackPlugin = require('../../lib/index'); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); expect( new ForkTsCheckerWebpackPlugin({ vue: true }) diff --git a/test/unit/issue/Issue.spec.js b/test/unit/issue/Issue.spec.ts similarity index 89% rename from test/unit/issue/Issue.spec.js rename to test/unit/issue/Issue.spec.ts index 154b9224..076b4d7f 100644 --- a/test/unit/issue/Issue.spec.js +++ b/test/unit/issue/Issue.spec.ts @@ -1,9 +1,9 @@ -const { IssueSeverity } = require('../../../lib/issue/IssueSeverity'); -const { IssueOrigin } = require('../../../lib/issue/IssueOrigin'); -const { +import { + IssueSeverity, + IssueOrigin, isIssue, deduplicateAndSortIssues -} = require('../../../lib/issue/Issue'); +} from '../../../lib/issue'; function omit(object, keys) { const omittedObject = Object.assign({}, object); @@ -31,21 +31,13 @@ describe('[UNIT] issue/Issue', () => { code: 'white-space', message: 'Missing space between function brackets' }; - const BASIC_TSLINT_ISSUE = { - origin: IssueOrigin.TSLINT, - severity: IssueSeverity.WARNING, - code: 'white-space', - message: 'Missing space between function brackets' - }; - it.each([ - BASIC_INTERNAL_ISSUE, - BASIC_TYPESCRIPT_ISSUE, - BASIC_ESLINT_ISSUE, - BASIC_TSLINT_ISSUE - ])("checks if '%p' is a Issue", issue => { - expect(isIssue(issue)).toEqual(true); - }); + it.each([BASIC_INTERNAL_ISSUE, BASIC_TYPESCRIPT_ISSUE, BASIC_ESLINT_ISSUE])( + "checks if '%p' is a Issue", + issue => { + expect(isIssue(issue)).toEqual(true); + } + ); it.each([ null, @@ -60,7 +52,6 @@ describe('[UNIT] issue/Issue', () => { omit(BASIC_INTERNAL_ISSUE, ['origin']), omit(BASIC_TYPESCRIPT_ISSUE, ['severity']), omit(BASIC_ESLINT_ISSUE, ['code']), - omit(BASIC_TSLINT_ISSUE, ['message']), omit(BASIC_TYPESCRIPT_ISSUE, ['origin', 'message']) ])("checks if '%p' isn't a Issue", issue => { expect(isIssue(issue)).toEqual(false); @@ -74,16 +65,10 @@ describe('[UNIT] issue/Issue', () => { BASIC_TYPESCRIPT_ISSUE, BASIC_ESLINT_ISSUE, BASIC_INTERNAL_ISSUE, - BASIC_TSLINT_ISSUE, BASIC_INTERNAL_ISSUE, BASIC_ESLINT_ISSUE ], - [ - BASIC_INTERNAL_ISSUE, - BASIC_TYPESCRIPT_ISSUE, - BASIC_ESLINT_ISSUE, - BASIC_TSLINT_ISSUE - ] + [BASIC_INTERNAL_ISSUE, BASIC_TYPESCRIPT_ISSUE, BASIC_ESLINT_ISSUE] ], [ // compare file diff --git a/test/unit/issue/IssueOrigin.spec.js b/test/unit/issue/IssueOrigin.spec.ts similarity index 51% rename from test/unit/issue/IssueOrigin.spec.js rename to test/unit/issue/IssueOrigin.spec.ts index 510e226c..96d06efb 100644 --- a/test/unit/issue/IssueOrigin.spec.js +++ b/test/unit/issue/IssueOrigin.spec.ts @@ -1,22 +1,20 @@ -const { +import { IssueOrigin, isIssueOrigin, compareIssueOrigins -} = require('../../../lib/issue/IssueOrigin'); +} from '../../../lib/issue'; describe('[UNIT] issue/IssueOrigin', () => { it('defines issue origin enum', () => { expect(IssueOrigin).toMatchSnapshot(); }); - it.each([ - IssueOrigin.INTERNAL, - IssueOrigin.TYPESCRIPT, - IssueOrigin.ESLINT, - IssueOrigin.TSLINT - ])("checks if '%p' is a IssueOrigin", origin => { - expect(isIssueOrigin(origin)).toEqual(true); - }); + it.each([IssueOrigin.INTERNAL, IssueOrigin.TYPESCRIPT, IssueOrigin.ESLINT])( + "checks if '%p' is a IssueOrigin", + origin => { + expect(isIssueOrigin(origin)).toEqual(true); + } + ); it.each([null, undefined, '', 'test', 1, {}, new Date(), true, false])( "checks if '%p' isn't a IssueOrigin", @@ -30,29 +28,22 @@ describe('[UNIT] issue/IssueOrigin', () => { [IssueOrigin.INTERNAL, IssueOrigin.INTERNAL, 0], [IssueOrigin.INTERNAL, IssueOrigin.TYPESCRIPT, -1], [IssueOrigin.INTERNAL, IssueOrigin.ESLINT, -1], - [IssueOrigin.INTERNAL, IssueOrigin.TSLINT, -1], // TYPESCRIPT [IssueOrigin.TYPESCRIPT, IssueOrigin.INTERNAL, 1], [IssueOrigin.TYPESCRIPT, IssueOrigin.TYPESCRIPT, 0], [IssueOrigin.TYPESCRIPT, IssueOrigin.ESLINT, -1], - [IssueOrigin.TYPESCRIPT, IssueOrigin.TSLINT, -1], // ESLINT [IssueOrigin.ESLINT, IssueOrigin.INTERNAL, 1], [IssueOrigin.ESLINT, IssueOrigin.TYPESCRIPT, 1], - [IssueOrigin.ESLINT, IssueOrigin.ESLINT, 0], - [IssueOrigin.ESLINT, IssueOrigin.TSLINT, -1], - - // TSLINT - [IssueOrigin.TSLINT, IssueOrigin.INTERNAL, 1], - [IssueOrigin.TSLINT, IssueOrigin.TYPESCRIPT, 1], - [IssueOrigin.TSLINT, IssueOrigin.ESLINT, 1], - [IssueOrigin.TSLINT, IssueOrigin.TSLINT, 0] - ])( - "compares issue origin '%p' with '%p' and returns '%p'", - (originA, originB, result) => { - expect(compareIssueOrigins(originA, originB)).toEqual(result); - } - ); + [IssueOrigin.ESLINT, IssueOrigin.ESLINT, 0] + ])("compares issue origin '%p' with '%p' and returns '%p'", (...args) => { + const [originA, originB, result] = args as [ + IssueOrigin, + IssueOrigin, + number + ]; + expect(compareIssueOrigins(originA, originB)).toEqual(result); + }); }); diff --git a/test/unit/issue/IssueSeverity.spec.js b/test/unit/issue/IssueSeverity.spec.ts similarity index 89% rename from test/unit/issue/IssueSeverity.spec.js rename to test/unit/issue/IssueSeverity.spec.ts index 78f3f799..09cfdc2b 100644 --- a/test/unit/issue/IssueSeverity.spec.js +++ b/test/unit/issue/IssueSeverity.spec.ts @@ -1,8 +1,8 @@ -const { +import { IssueSeverity, isIssueSeverity, compareIssueSeverities -} = require('../../../lib/issue/IssueSeverity'); +} from '../../../lib/issue'; describe('[UNIT] issue/IssueSeverity', () => { it('defines issue severity enum', () => { @@ -33,7 +33,7 @@ describe('[UNIT] issue/IssueSeverity', () => { [IssueSeverity.WARNING, IssueSeverity.WARNING, 0] ])( "compares issue severity '%p' with '%p' and returns '%p'", - (severityA, severityB, result) => { + (severityA: IssueSeverity, severityB: IssueSeverity, result: number) => { expect(compareIssueSeverities(severityA, severityB)).toEqual(result); } ); diff --git a/test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap b/test/unit/issue/__snapshots__/IssueOrigin.spec.ts.snap similarity index 90% rename from test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap rename to test/unit/issue/__snapshots__/IssueOrigin.spec.ts.snap index a6b704e5..6f798fde 100644 --- a/test/unit/issue/__snapshots__/IssueOrigin.spec.js.snap +++ b/test/unit/issue/__snapshots__/IssueOrigin.spec.ts.snap @@ -4,7 +4,6 @@ exports[`[UNIT] issue/IssueOrigin defines issue origin enum 1`] = ` Object { "ESLINT": "eslint", "INTERNAL": "internal", - "TSLINT": "tslint", "TYPESCRIPT": "typescript", } `; diff --git a/test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap b/test/unit/issue/__snapshots__/IssueSeverity.spec.ts.snap similarity index 100% rename from test/unit/issue/__snapshots__/IssueSeverity.spec.js.snap rename to test/unit/issue/__snapshots__/IssueSeverity.spec.ts.snap diff --git a/test/unit/issue/eslint/EsLintIssueFactory.spec.js b/test/unit/issue/eslint/EsLintIssueFactory.spec.ts similarity index 68% rename from test/unit/issue/eslint/EsLintIssueFactory.spec.js rename to test/unit/issue/eslint/EsLintIssueFactory.spec.ts index 8da2c0eb..4fb5002f 100644 --- a/test/unit/issue/eslint/EsLintIssueFactory.spec.js +++ b/test/unit/issue/eslint/EsLintIssueFactory.spec.ts @@ -1,9 +1,12 @@ -const { - createIssuesFromEsLintReports -} = require('../../../../lib/issue/eslint/EsLintIssueFactory'); +import { createIssuesFromEsLintReports } from '../../../../lib/issue'; +import * as eslint from 'eslint'; describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { - const ES_LINT_MESSAGE_ERROR = { + type LintMessage = eslint.Linter.LintMessage; + type LintResult = eslint.CLIEngine.LintResult; + type LintReport = eslint.CLIEngine.LintReport; + + const ES_LINT_MESSAGE_ERROR: LintMessage = { column: 0, line: 13, endColumn: 5, @@ -11,16 +14,19 @@ describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { ruleId: 'no-unused-vars', message: `'y' is assigned a value but never used.`, nodeType: '', - severity: 0 + severity: 0, + source: null }; - const ES_LINT_MESSAGE_WARNING = { + const ES_LINT_MESSAGE_WARNING: LintMessage = { column: 10, line: 15, + ruleId: 'no-unused-vars', message: `'y' is assigned a value but never used.`, nodeType: '', - severity: 1 + severity: 1, + source: null }; - const ES_LINT_RESULT_INDEX = { + const ES_LINT_RESULT_INDEX: LintResult = { filePath: 'src/index.ts', messages: [ES_LINT_MESSAGE_ERROR], errorCount: 1, @@ -28,7 +34,7 @@ describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { fixableErrorCount: 0, fixableWarningCount: 0 }; - const ES_LINT_RESULT_ANOTHER = { + const ES_LINT_RESULT_ANOTHER: LintResult = { filePath: 'src/another.ts', messages: [ES_LINT_MESSAGE_WARNING], errorCount: 0, @@ -36,7 +42,7 @@ describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { fixableErrorCount: 0, fixableWarningCount: 0 }; - const ES_LINT_RESULT_ADDITIONAL = { + const ES_LINT_RESULT_ADDITIONAL: LintResult = { filePath: 'src/additional.ts', messages: [ES_LINT_MESSAGE_ERROR], errorCount: 1, @@ -44,14 +50,14 @@ describe('[UNIT] issue/eslint/EsLintIssueFactory', () => { fixableErrorCount: 0, fixableWarningCount: 0 }; - const ES_LINT_REPORT_A = { + const ES_LINT_REPORT_A: LintReport = { results: [ES_LINT_RESULT_INDEX, ES_LINT_RESULT_ANOTHER], errorCount: 1, warningCount: 1, fixableErrorCount: 0, fixableWarningCount: 0 }; - const ES_LINT_REPORT_B = { + const ES_LINT_REPORT_B: LintReport = { results: [ES_LINT_RESULT_ADDITIONAL], errorCount: 1, warningCount: 1, diff --git a/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap b/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.ts.snap similarity index 96% rename from test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap rename to test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.ts.snap index a8d6717e..75d35833 100644 --- a/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.js.snap +++ b/test/unit/issue/eslint/__snapshots__/EsLintIssueFactory.spec.ts.snap @@ -13,7 +13,7 @@ Array [ }, Object { "character": 10, - "code": "[unknown]", + "code": "no-unused-vars", "file": "src/another.ts", "line": 15, "message": "'y' is assigned a value but never used.", diff --git a/test/unit/issue/internal/InternalIssueFactory.spec.js b/test/unit/issue/internal/InternalIssueFactory.spec.ts similarity index 90% rename from test/unit/issue/internal/InternalIssueFactory.spec.js rename to test/unit/issue/internal/InternalIssueFactory.spec.ts index f4603c39..99c9eec4 100644 --- a/test/unit/issue/internal/InternalIssueFactory.spec.js +++ b/test/unit/issue/internal/InternalIssueFactory.spec.ts @@ -1,6 +1,4 @@ -const { - createIssueFromInternalError -} = require('../../../../lib/issue/internal/InternalIssueFactory'); +import { createIssueFromInternalError } from '../../../../lib/issue'; describe('[UNIT] issue/internal/InternalIssueFactory', () => { const ERROR_WITH_MESSAGE_AND_STACK = { diff --git a/test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap b/test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.ts.snap similarity index 100% rename from test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.js.snap rename to test/unit/issue/internal/__snapshots__/InternalIssueFactory.spec.ts.snap diff --git a/test/unit/issue/tslint/TsLintIssueFactory.spec.js b/test/unit/issue/tslint/TsLintIssueFactory.spec.js deleted file mode 100644 index a25f8412..00000000 --- a/test/unit/issue/tslint/TsLintIssueFactory.spec.js +++ /dev/null @@ -1,49 +0,0 @@ -const { - createIssueFromTsLintRuleFailure, - createIssuesFromTsLintRuleFailures -} = require('../../../../lib/issue/tslint/TsLintIssueFactory'); - -describe('[UNIT] issue/tslint/TsLintIssueFactory', () => { - const TS_LINT_RULE_FAILURE_WARNING = { - getRuleName: () => 'no-unused-vars', - getRuleSeverity: () => 'warning', - getFailure: () => `'x' is assigned a value but never used.`, - getFileName: () => 'src/test.ts', - getStartPosition: () => ({ - getLineAndCharacter: () => ({ - line: 2, - character: 2 - }) - }) - }; - const TS_LINT_RULE_FAILURE_ERROR = { - getRuleName: () => 'no-unused-vars', - getRuleSeverity: () => 'error', - getFailure: () => `'y' is assigned a value but never used.`, - getFileName: () => 'src/index.ts', - getStartPosition: () => ({ - getLineAndCharacter: () => ({ - line: 10, - character: 14 - }) - }) - }; - - it.each([[TS_LINT_RULE_FAILURE_WARNING], [TS_LINT_RULE_FAILURE_ERROR]])( - 'creates Issue from TsLint RuleFailure: %p', - ruleFailure => { - const issue = createIssueFromTsLintRuleFailure(ruleFailure); - - expect(issue).toMatchSnapshot(); - } - ); - - it.each([[[TS_LINT_RULE_FAILURE_WARNING, TS_LINT_RULE_FAILURE_ERROR]]])( - 'creates Issues from TsLint RuleFailures: %p', - ruleFailures => { - const issues = createIssuesFromTsLintRuleFailures(ruleFailures); - - expect(issues).toMatchSnapshot(); - } - ); -}); diff --git a/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap b/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap deleted file mode 100644 index d29fcd0c..00000000 --- a/test/unit/issue/tslint/__snapshots__/TsLintIssueFactory.spec.js.snap +++ /dev/null @@ -1,48 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issue from TsLint RuleFailure: {"getFailure": [Function getFailure], "getFileName": [Function getFileName], "getRuleName": [Function getRuleName], "getRuleSeverity": [Function getRuleSeverity], "getStartPosition": [Function getStartPosition]} 1`] = ` -Object { - "character": 3, - "code": "no-unused-vars", - "file": "src/test.ts", - "line": 3, - "message": "'x' is assigned a value but never used.", - "origin": "tslint", - "severity": "warning", -} -`; - -exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issue from TsLint RuleFailure: {"getFailure": [Function getFailure], "getFileName": [Function getFileName], "getRuleName": [Function getRuleName], "getRuleSeverity": [Function getRuleSeverity], "getStartPosition": [Function getStartPosition]} 2`] = ` -Object { - "character": 15, - "code": "no-unused-vars", - "file": "src/index.ts", - "line": 11, - "message": "'y' is assigned a value but never used.", - "origin": "tslint", - "severity": "error", -} -`; - -exports[`[UNIT] issue/tslint/TsLintIssueFactory creates Issues from TsLint RuleFailures: [[Object], [Object]] 1`] = ` -Array [ - Object { - "character": 15, - "code": "no-unused-vars", - "file": "src/index.ts", - "line": 11, - "message": "'y' is assigned a value but never used.", - "origin": "tslint", - "severity": "error", - }, - Object { - "character": 3, - "code": "no-unused-vars", - "file": "src/test.ts", - "line": 3, - "message": "'x' is assigned a value but never used.", - "origin": "tslint", - "severity": "warning", - }, -] -`; diff --git a/test/unit/issue/typescript/TypeScriptIssueFactory.spec.js b/test/unit/issue/typescript/TypeScriptIssueFactory.spec.ts similarity index 69% rename from test/unit/issue/typescript/TypeScriptIssueFactory.spec.js rename to test/unit/issue/typescript/TypeScriptIssueFactory.spec.ts index 12dbd738..5687375e 100644 --- a/test/unit/issue/typescript/TypeScriptIssueFactory.spec.js +++ b/test/unit/issue/typescript/TypeScriptIssueFactory.spec.ts @@ -1,57 +1,66 @@ -const { +import { createIssueFromTsDiagnostic, createIssuesFromTsDiagnostics -} = require('../../../../lib/issue/typescript'); +} from '../../../../lib/issue'; +import { Diagnostic } from 'typescript'; describe('[UNIT] issue/typescript/TypeScriptIssueFactory', () => { - const TS_DIAGNOSTIC_WARNING = { + const TS_DIAGNOSTIC_WARNING: Diagnostic = { start: 100, - code: '4221', + code: 4221, category: 1, messageText: 'Cannot assign string to the number type', + length: 1, file: { fileName: 'src/test.ts', getLineAndCharacterOfPosition: () => ({ line: 2, character: 2 }) - } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any }; - const TS_DIAGNOSTIC_ERROR = { + const TS_DIAGNOSTIC_ERROR: Diagnostic = { start: 12, - code: '1221', + code: 1221, category: 0, messageText: 'Cannot assign object to the string type', + length: 1, file: { fileName: 'src/index.ts', getLineAndCharacterOfPosition: () => ({ line: 5, character: 10 }) - } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any }; - const TS_DIAGNOSTIC_WITHOUT_FILE = { + const TS_DIAGNOSTIC_WITHOUT_FILE: Diagnostic = { start: 12, - code: '1221', + code: 1221, category: 0, - messageText: 'Cannot assign object to the string type' + length: 1, + messageText: 'Cannot assign object to the string type', + file: undefined }; - const TS_DIAGNOSTIC_MESSAGE_CHAIN = { + const TS_DIAGNOSTIC_MESSAGE_CHAIN: Diagnostic = { start: 12, - code: '1221', + code: 1221, category: 0, + length: 3, + file: undefined, messageText: { messageText: 'Cannot assign object to the string type', category: 0, - code: '1221', + code: 1221, next: { messageText: 'Another ident message', category: 0, - code: '1221', + code: 1221, next: { messageText: 'The most ident message', category: 0, - code: '1221' + code: 1221 } } } diff --git a/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap b/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.ts.snap similarity index 77% rename from test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap rename to test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.ts.snap index df60d4ef..2b6dc3b4 100644 --- a/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.js.snap +++ b/test/unit/issue/typescript/__snapshots__/TypeScriptIssueFactory.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "file": [Object], "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": 1221, "file": [Object], "length": 1, "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` Object { "character": 11, "code": "1221", @@ -12,7 +12,7 @@ Object { } `; -exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": 1221, "file": undefined, "length": 1, "messageText": "Cannot assign object to the string type", "start": 12} 1`] = ` Object { "character": undefined, "code": "1221", @@ -24,7 +24,7 @@ Object { } `; -exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": "1221", "messageText": [Object], "start": 12} 1`] = ` +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 0, "code": 1221, "file": undefined, "length": 3, "messageText": [Object], "start": 12} 1`] = ` Object { "character": undefined, "code": "1221", @@ -38,7 +38,7 @@ Object { } `; -exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 1, "code": "4221", "file": [Object], "messageText": "Cannot assign string to the number type", "start": 100} 1`] = ` +exports[`[UNIT] issue/typescript/TypeScriptIssueFactory creates Issue from TsDiagnostic: {"category": 1, "code": 4221, "file": [Object], "length": 1, "messageText": "Cannot assign string to the number type", "start": 100} 1`] = ` Object { "character": 3, "code": "4221", diff --git a/yarn.lock b/yarn.lock index 86c303a6..7d0fbdfd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,15 +35,15 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.4.tgz#37e864532200cb6b50ee9a4045f5f817840166ab" - integrity sha512-+bYbx56j4nYBmpsWtnPUsKW3NdnYxbqyfrP2w9wILBuHzdfIKz9prieZK0DFPyIzkjYVUe4QkusGL07r5pXznQ== +"@babel/core@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" + integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" + "@babel/generator" "^7.7.7" "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.4" + "@babel/parser" "^7.7.7" "@babel/template" "^7.7.4" "@babel/traverse" "^7.7.4" "@babel/types" "^7.7.4" @@ -76,46 +76,76 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/generator@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" + integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-define-map@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" - integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.4.4" - lodash "^4.17.11" + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-create-class-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" + integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== + dependencies: + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helper-function-name@^7.1.0": version "7.1.0" @@ -149,45 +179,45 @@ dependencies: "@babel/types" "^7.7.4" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.7.4" -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" - integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== +"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" + integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.4.4" - lodash "^4.17.11" + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.7.4" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" @@ -201,34 +231,34 @@ dependencies: lodash "^4.17.11" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-replace-supers@^7.1.0", "@babel/helper-replace-supers@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" - integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" @@ -244,15 +274,15 @@ dependencies: "@babel/types" "^7.7.4" -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" "@babel/helpers@^7.4.4": version "7.4.4" @@ -290,395 +320,433 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/parser@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" + integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== + +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" -"@babel/plugin-proposal-object-rest-spread@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz#1ef173fcf24b3e2df92a678f027673b55e7e3005" - integrity sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g== +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-object-rest-spread@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-proposal-unicode-property-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" + integrity sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-object-rest-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" + integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-typescript@^7.2.0": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991" - integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag== +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz#a3f1d01f2f21cadab20b33a82133116f14fb5894" - integrity sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA== +"@babel/plugin-syntax-typescript@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" + integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== dependencies: - "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" - integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== dependencies: + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.11" + "@babel/helper-remap-async-to-generator" "^7.7.4" -"@babel/plugin-transform-classes@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" - integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.4.4" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.4.4" - "@babel/helper-split-export-declaration" "^7.4.4" + +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz#9d964717829cc9e4b601fc82a26a71a4d8faf20f" - integrity sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ== +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" + integrity sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" - integrity sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw== +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== dependencies: - "@babel/helper-function-name" "^7.1.0" + "@babel/helper-function-name" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" - integrity sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw== +"@babel/plugin-transform-modules-amd@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" + integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.5" "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz#0bef4713d30f1d78c2e59b3d6db40e60192cac1e" - integrity sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw== +"@babel/plugin-transform-modules-commonjs@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" + integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== dependencies: - "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-module-transforms" "^7.7.5" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-simple-access" "^7.7.4" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz#dc83c5665b07d6c2a7b224c00ac63659ea36a405" - integrity sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ== +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-hoist-variables" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-module-transforms" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz#5611d96d987dfc4a3a81c4383bb173361037d68d" - integrity sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== dependencies: - regexp-tree "^0.1.0" + "@babel/helper-create-regexp-features-plugin" "^7.7.4" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" - integrity sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg== +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.1.0" + "@babel/helper-replace-supers" "^7.7.4" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz#5b4da4df79391895fca9e28f99e87e22cfc02072" - integrity sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g== +"@babel/plugin-transform-regenerator@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" + integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== dependencies: - regenerator-transform "^0.13.4" + regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.3.2": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.4.tgz#93e9c3f2a546e6d3da1e9cc990e30791b807aa9f" - integrity sha512-rwDvjaMTx09WC0rXGBRlYSSkEHOKRrecY6hEr3SVIPKII8DVWXtapNAfAyMC0dovuO+zYArcAuKeu3q9DNRfzA== +"@babel/plugin-transform-typescript@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" + integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== dependencies: + "@babel/helper-create-class-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.2.0" + "@babel/plugin-syntax-typescript" "^7.7.4" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" -"@babel/preset-env@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" - integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== +"@babel/preset-env@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.7.tgz#c294167b91e53e7e36d820e943ece8d0c7fe46ac" + integrity sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== dependencies: - "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-module-imports" "^7.7.4" "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.4.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.4.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.4.4" - "@babel/plugin-transform-classes" "^7.4.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.4.4" - "@babel/plugin-transform-modules-systemjs" "^7.4.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.4" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.4" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.4.4" - browserslist "^4.5.2" - core-js-compat "^3.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.7" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.7" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.5" + "@babel/plugin-transform-modules-commonjs" "^7.7.5" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.7" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.5" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" + browserslist "^4.6.0" + core-js-compat "^3.6.0" invariant "^2.2.2" js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-typescript@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" - integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== +"@babel/preset-typescript@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.7.tgz#69ddea54e8b4e491ccbf94147e673b2ac6e11e2e" + integrity sha512-Apg0sCTovsSA+pEaI8efnA44b9x4X/7z4P8vsWMiN8rSUaM4y4+Shl5NMWnMl6njvt96+CEb6jwpXAKYAVCSQA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.3.2" + "@babel/plugin-transform-typescript" "^7.7.4" "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": version "7.4.4" @@ -728,7 +796,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" integrity sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ== @@ -1150,7 +1218,7 @@ dependencies: "@types/jest-diff" "*" -"@types/json-schema@*": +"@types/json-schema@*", "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== @@ -1228,42 +1296,48 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== -"@typescript-eslint/eslint-plugin@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.11.0.tgz#870f752c520db04db6d3668af7479026a6f2fb9a" - integrity sha512-mXv9ccCou89C8/4avKHuPB2WkSZyY/XcTQUXd5LFZAcLw1I3mWYVjUu6eS9Ja0QkP/ClolbcW9tb3Ov/pMdcqw== +"@typescript-eslint/eslint-plugin@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.12.0.tgz#0da7cbca7b24f4c6919e9eb31c704bfb126f90ad" + integrity sha512-1t4r9rpLuEwl3hgt90jY18wJHSyb0E3orVL3DaqwmpiSDHmHiSspVsvsFF78BJ/3NNG3qmeso836jpuBWYziAA== dependencies: - "@typescript-eslint/experimental-utils" "1.11.0" - eslint-utils "^1.3.1" + "@typescript-eslint/experimental-utils" "2.12.0" + eslint-utils "^1.4.3" functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" - tsutils "^3.7.0" + regexpp "^3.0.0" + tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.11.0.tgz#594abe47091cbeabac1d6f9cfed06d0ad99eb7e3" - integrity sha512-7LbfaqF6B8oa8cp/315zxKk8FFzosRzzhF8Kn/ZRsRsnpm7Qcu25cR/9RnAQo5utZ2KIWVgaALr+ZmcbG47ruw== +"@typescript-eslint/experimental-utils@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.12.0.tgz#e0a76ffb6293e058748408a191921e453c31d40d" + integrity sha512-jv4gYpw5N5BrWF3ntROvCuLe1IjRenLy5+U57J24NbPGwZFAjhnM45qpq0nDH1y/AZMb3Br25YiNVwyPbz6RkA== dependencies: - "@typescript-eslint/typescript-estree" "1.11.0" - eslint-scope "^4.0.0" + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.12.0" + eslint-scope "^5.0.0" -"@typescript-eslint/parser@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.11.0.tgz#2f6d4f7e64eeb1e7c25b422f8df14d0c9e508e36" - integrity sha512-5xBExyXaxVyczrZvbRKEXvaTUFFq7gIM9BynXukXZE0zF3IQP/FxF4mPmmh3gJ9egafZFqByCpPTFm3dk4SY7Q== +"@typescript-eslint/parser@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.12.0.tgz#393f1604943a4ca570bb1a45bc8834e9b9158884" + integrity sha512-lPdkwpdzxEfjI8TyTzZqPatkrswLSVu4bqUgnB03fHSOwpC7KSerPgJRgIAf11UGNf7HKjJV6oaPZI4AghLU6g== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.11.0" - "@typescript-eslint/typescript-estree" "1.11.0" - eslint-visitor-keys "^1.0.0" + "@typescript-eslint/experimental-utils" "2.12.0" + "@typescript-eslint/typescript-estree" "2.12.0" + eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.11.0.tgz#b7b5782aab22e4b3b6d84633652c9f41e62d37d5" - integrity sha512-fquUHF5tAx1sM2OeRCC7wVxFd1iMELWMGCzOSmJ3pLzArj9+kRixdlC4d5MncuzXpjEqc6045p3KwM0o/3FuUA== +"@typescript-eslint/typescript-estree@2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.12.0.tgz#bd9e547ccffd17dfab0c3ab0947c80c8e2eb914c" + integrity sha512-rGehVfjHEn8Frh9UW02ZZIfJs6SIIxIu/K1bbci8rFfDE/1lQ8krIJy5OXOV3DVnNdDPtoiPOdEANkLMrwXbiQ== dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" lodash.unescape "4.0.1" - semver "5.5.0" + semver "^6.3.0" + tsutils "^3.17.1" "@vue/component-compiler-utils@^2.4.0": version "2.5.0" @@ -1464,9 +1538,10 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-walk@^6.0.1: version "6.1.1" @@ -1483,16 +1558,16 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== -acorn@^6.0.7: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.0.tgz#67f0da2fc339d6cfb5d6fb244fd449f33cd8bbe3" - integrity sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw== - acorn@^6.2.1: version "6.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1552,10 +1627,12 @@ ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + dependencies: + type-fest "^0.8.1" ansi-regex@^2.0.0: version "2.1.1" @@ -1576,6 +1653,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1790,6 +1872,13 @@ babel-jest@^24.7.1: chalk "^2.4.2" slash "^2.0.0" +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-istanbul@^5.1.0: version "5.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.3.tgz#202d20ffc96a821c68a3964412de75b9bdeb48c7" @@ -1999,14 +2088,14 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^4.5.2, browserslist@^4.5.4: - version "4.5.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.5.6.tgz#ea42e8581ca2513fa7f371d4dd66da763938163d" - integrity sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg== +browserslist@^4.6.0, browserslist@^4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" + integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== dependencies: - caniuse-lite "^1.0.30000963" - electron-to-chromium "^1.3.127" - node-releases "^1.1.17" + caniuse-lite "^1.0.30001015" + electron-to-chromium "^1.3.322" + node-releases "^1.1.42" bser@^2.0.0: version "2.0.0" @@ -2033,7 +2122,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -2130,10 +2219,10 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000928" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000928.tgz#2e83d2b14276442da239511615eb7c62fed0cfa7" -caniuse-lite@^1.0.30000963: - version "1.0.30000963" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz#5be481d5292f22aff5ee0db4a6c049b65b5798b1" - integrity sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ== +caniuse-lite@^1.0.30001015: + version "1.0.30001016" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz#16ea48d7d6e8caf3cad3295c2d746fe38c4e7f66" + integrity sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA== capture-exit@^2.0.0: version "2.0.0" @@ -2243,6 +2332,13 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -2338,7 +2434,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1, commander@^2.14.1, commander@^2.9.0: +commander@^2.14.1, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2476,25 +2572,13 @@ copy-dir@^0.4.0: dependencies: mkdir-p "~0.0.4" -core-js-compat@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.1.tgz#bff73ba31ca8687431b9c88f78d3362646fb76f0" - integrity sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g== +core-js-compat@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.0.tgz#4eb6cb69d03d99159ed7c860cd5fcf7d23a62ea9" + integrity sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg== dependencies: - browserslist "^4.5.4" - core-js "3.0.1" - core-js-pure "3.0.1" - semver "^6.0.0" - -core-js-pure@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.0.1.tgz#37358fb0d024e6b86d443d794f4e37e949098cbe" - integrity sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g== - -core-js@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.1.tgz#1343182634298f7f38622f95e73f54e48ddf4738" - integrity sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew== + browserslist "^4.8.2" + semver "7.0.0" core-js@^2.4.0, core-js@^2.5.0: version "2.6.5" @@ -2861,7 +2945,7 @@ diff-sequences@^24.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== -diff@3.5.0, diff@^3.2.0: +diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -2926,10 +3010,10 @@ electron-to-chromium@^1.2.7: version "1.3.102" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz#3ac43a037c8a63bca3dfa189eb3d90f097196787" -electron-to-chromium@^1.3.127: - version "1.3.128" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.128.tgz#1f9ffa31397da2f220d583dbb2b763e365dfbbc5" - integrity sha512-1QK+KELj1mhC9iE7grSP9PP2f06F85UgTs0M9qjuvSuKwxbyifhyPB8dZ27IlYvzMBnLtO4oHNBKTQoN6Tg5mg== +electron-to-chromium@^1.3.322: + version "1.3.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" + integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== elegant-spinner@^1.0.1: version "1.0.1" @@ -2953,6 +3037,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3031,12 +3120,39 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" +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: - esrecurse "^4.1.0" - estraverse "^4.1.1" + get-stdin "^6.0.0" + +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== + dependencies: + eslint-utils "^1.4.2" + regexpp "^3.0.0" + +eslint-plugin-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== + dependencies: + eslint-plugin-es "^2.0.0" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.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-scope@^4.0.3: version "4.0.3" @@ -3046,22 +3162,30 @@ eslint-scope@^4.0.3: 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== +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.2, 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.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.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.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.0.1.tgz#4a32181d72cb999d6f54151df7d337131f81cda7" - integrity sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w== +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" @@ -3069,45 +3193,46 @@ eslint@^6.0.0: cross-spawn "^6.0.5" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.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 "^3.1.0" - globals "^11.7.0" + glob-parent "^5.0.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.2.2" + 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.11" + lodash "^4.17.14" 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 "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^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" -espree@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" - integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== +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 "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" @@ -3262,11 +3387,16 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" +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-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" -fast-levenshtein@~2.0.4: +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" @@ -3298,6 +3428,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -3540,6 +3677,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob@7.1.3, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -3561,7 +3705,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3593,9 +3737,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globals@^11.7.0: - version "11.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50" +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" globby@^6.1.0: version "6.1.0" @@ -3833,6 +3980,11 @@ ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -3898,22 +4050,22 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^6.2.2: - version "6.4.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" - integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== +inquirer@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.1.tgz#13f7980eedc73c689feff3994b109c4e799c6ebb" + integrity sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.11" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" + rxjs "^6.5.3" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -4055,6 +4207,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -4067,7 +4224,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -4678,7 +4835,7 @@ js-yaml@3.13.1, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@3.x, js-yaml@^3.9.0: version "3.12.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" dependencies: @@ -4999,7 +5156,7 @@ lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5, lodash@^4.2.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== -lodash@^4.17.13: +lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -5225,7 +5382,7 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -mimic-fn@^2.0.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -5386,9 +5543,10 @@ ms@2.1.1, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.12.1: version "2.13.2" @@ -5520,12 +5678,12 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.17: - version "1.1.17" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.17.tgz#71ea4631f0a97d5cd4f65f7d04ecf9072eac711a" - integrity sha512-/SCjetyta1m7YXLgtACZGDYJdCSIBAWorDWkGCGZlydP2Ll7J48l7j/JxNYZ+xsgSPbWfdulVS/aY+GdjUsQ7Q== +node-releases@^1.1.42: + version "1.1.43" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.43.tgz#2c6ca237f88ce11d49631f11190bb01f8d0549f2" + integrity sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w== dependencies: - semver "^5.3.0" + semver "^6.3.0" nopt@3.x: version "3.0.6" @@ -5672,7 +5830,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0: +object.assign@4.1.0, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -5710,6 +5868,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -5717,7 +5882,7 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -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" dependencies: @@ -5728,6 +5893,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" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -6251,6 +6428,13 @@ prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" +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.13.7: version "1.13.7" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" @@ -6517,10 +6701,10 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -regenerate-unicode-properties@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" - integrity sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ== +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== dependencies: regenerate "^1.4.0" @@ -6538,10 +6722,10 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-transform@^0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.4.tgz#18f6763cf1382c69c36df76c6ce122cc694284fb" - integrity sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A== +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== dependencies: private "^0.1.6" @@ -6553,15 +6737,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.6.tgz#84900fa12fdf428a2ac25f04300382a7c0148479" - integrity sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" +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@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -6570,13 +6754,13 @@ regexpu-core@^1.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" - integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" - regenerate-unicode-properties "^8.0.2" + regenerate-unicode-properties "^8.1.0" regjsgen "^0.5.0" regjsparser "^0.6.0" unicode-match-property-ecmascript "^1.0.4" @@ -6731,6 +6915,13 @@ resolve@^1.10.0: dependencies: path-parse "^1.0.6" +resolve@^1.10.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" + integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== + dependencies: + path-parse "^1.0.6" + resolve@^1.3.2: version "1.9.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" @@ -6744,6 +6935,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -6804,10 +7003,10 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" -rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== +rxjs@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== dependencies: tslib "^1.9.0" @@ -6864,14 +7063,14 @@ semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -"semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@5.6.0, semver@^5.0.1, semver@^5.5.0, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== semver@^5.3.0: version "5.7.1" @@ -6888,6 +7087,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== +semver@^6.1.0, semver@^6.1.2, 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== + serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" @@ -7197,7 +7401,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -7213,6 +7417,15 @@ string-width@^3.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string_decoder@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7255,13 +7468,20 @@ strip-ansi@^5.0.0: dependencies: ansi-regex "^4.0.0" -strip-ansi@^5.1.0: +strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -7276,10 +7496,15 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" +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== + supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -7523,41 +7748,14 @@ ts-loader@^5.0.0: micromatch "^3.1.4" semver "^5.0.1" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" -tslint-config-prettier@^1.16.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz#946ed6117f98f3659a65848279156d87628c33dc" - -tslint@^5.11.0: - version "5.12.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.7.0" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.27.2" - -tsutils@^2.27.2: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - dependencies: - tslib "^1.8.1" - -tsutils@^3.7.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.14.0.tgz#bf8d5a7bae5369331fa0f2b0a5a10bd7f7396c77" - integrity sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: tslib "^1.8.1" @@ -7584,6 +7782,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +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== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -7729,6 +7932,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +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== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7910,6 +8118,11 @@ wide-align@1.1.3, wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +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@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" From a0208ba091571bd802d6df5951496716d5d87499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Sun, 22 Dec 2019 16:44:16 +0700 Subject: [PATCH 16/18] feat: change configuration to support Node.js 6 --- .eslintrc.js | 26 +- .github/workflows/main.yml | 11 +- README.md | 6 +- jest.config.js | 187 +-- package.json | 6 +- src/IncrementalChecker.ts | 4 +- src/formatter/CodeframeFormatter.ts | 3 +- src/index.ts | 21 +- src/service.ts | 1 - src/tsconfig.json | 12 +- test/integration/general.spec.ts | 25 +- test/integration/helpers/createVueCompiler.ts | 2 + test/integration/helpers/index.ts | 2 + .../mocks/ApiIncrementalCheckerWithRpc.js | 59 +- .../mocks/IncrementalCheckerWithError.js | 2 +- .../mocks/IncrementalCheckerWithRpc.js | 6 +- test/integration/vue.spec.ts | 6 +- test/{setupTestFramework.ts => setup.ts} | 0 test/unit/CancellationToken.spec.ts | 16 +- test/unit/FileRegister.spec.ts | 12 +- test/unit/IncrementalChecker.spec.ts | 6 +- test/unit/VueProgram.spec.ts | 30 +- test/unit/formatter/InternalFormatter.spec.ts | 5 +- test/unit/index.spec.ts | 39 +- test/unit/issue/Issue.spec.ts | 11 +- test/unit/issue/IssueSeverity.spec.ts | 14 +- tsconfig.json | 12 + yarn.lock | 1004 ++--------------- 28 files changed, 283 insertions(+), 1245 deletions(-) rename test/{setupTestFramework.ts => setup.ts} (100%) create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js index bd3a707e..a609a445 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,11 +1,6 @@ module.exports = { parser: '@typescript-eslint/parser', - extends: [ - 'plugin:node/recommended', - 'plugin:@typescript-eslint/recommended', - 'prettier/@typescript-eslint', - 'plugin:prettier/recommended' - ], + extends: ['plugin:node/recommended', 'plugin:prettier/recommended'], parserOptions: { ecmaVersion: 2018, sourceType: 'module' @@ -18,8 +13,19 @@ module.exports = { rules: { 'no-process-exit': 'off', // to investigate if we should throw an error instead of process.exit() 'node/no-unsupported-features/es-builtins': 'off', - 'node/no-unsupported-features/es-syntax': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-namespace': 'off' // maybe we should consider enabling it in the future - } + 'node/no-unsupported-features/es-syntax': 'off' + }, + overrides: [ + { + files: ['*.ts'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'prettier/@typescript-eslint' + ], + rules: { + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-namespace': 'off' // maybe we should consider enabling it in the future + } + } + ] }; diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6bfb8631..fc7f7739 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -43,14 +43,17 @@ jobs: - ubuntu-latest - macos-latest - windows-latest - node: + node: + - '6' - '8' - '10' - '12' packages: - webpack@5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4 - webpack@^4.0.0 ts-loader@^5.0.0 vue-loader@^15.2.4 - + exclude: + - node: '6' + packages: 'webpack@5.0.0-alpha.5 ts-loader@^5.0.0 vue-loader@^15.2.4' steps: - uses: actions/checkout@v1 @@ -71,10 +74,10 @@ jobs: ${{ runner.os }}-node-${{ matrix.node }}-yarn- - name: Install dependencies - run: yarn install --frozen-lockfile + run: yarn install --frozen-lockfile --ignore-engines - name: Replace dependencies - run: yarn add ${{ matrix.packages }} -D + run: yarn add ${{ matrix.packages }} -D --ignore-engines - name: Download build artifact uses: actions/download-artifact@v1 diff --git a/README.md b/README.md index 3c2f3a81..c3dc03ee 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ ## Installation -This plugin requires minimum **webpack 4.0**, **TypeScript 2.1** and optionally **ESLint 6.0.0** +This plugin requires minimum **Node.js 6.11.5**, **webpack 4**, **TypeScript 2.1** and optionally **ESLint 6** (which itself requires minimum **Node.js 8.10.0**) -If you depend on **webpack 2.0**, **webpack 3.0**, or **tslint 4.0**, please use [older version](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v3.1.1) of the plugin. +If you depend on **webpack 2**, **webpack 3**, or **tslint 4**, please use [older version](https://github.com/TypeStrong/fork-ts-checker-webpack-plugin/tree/v3.1.1) of the plugin. ```sh # with npm @@ -168,7 +168,7 @@ new ForkTsCheckerWebpackPlugin({ - **measureCompilationTime** `boolean`: If true, the plugin will measure the time spent inside the compilation code. This may be useful to compare modes, - especially if there are other loaders/plugins involved in the compilation. **requires node 8+** + especially if there are other loaders/plugins involved in the compilation. **requires Node.js >= 8.5.0** - **typescript** `string`: If supplied this is a custom path where `typescript` can be found. Defaults to `require.resolve('typescript')`. diff --git a/jest.config.js b/jest.config.js index 72abaabe..83d20440 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,188 +1,5 @@ -// For a detailed explanation regarding each configuration property, visit: -// https://jestjs.io/docs/en/configuration.html - -const path = require('path'); - module.exports = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // Respect "browser" field in package.json when resolving modules - // browser: false, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/tmp/jest_rs", - - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: null, - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: null, - - // A path to a custom dependency extractor - // dependencyExtractor: null, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: null, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: null, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "json", - // "jsx", - // "ts", - // "tsx", - // "node" - // ], - - // A map from regular expressions to module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: 'ts-jest', - - // Run tests from one or more projects - // projects: null, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: null, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: null, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - setupFilesAfterEnv: ['./test/setupTestFramework.ts'], - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing + preset: 'ts-jest', testEnvironment: 'node', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - testMatch: ['**/?(*.)+(spec).[tj]s?(x)'] - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: null, - - // This option allows use of a custom test runner - // testRunner: "jasmine2", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - // transform: null, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: null, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, + setupFilesAfterEnv: ['./test/setup.ts'] }; diff --git a/package.json b/package.json index 8502002c..698b43b2 100644 --- a/package.json +++ b/package.json @@ -98,9 +98,6 @@ "worker-rpc": "^0.1.0" }, "devDependencies": { - "@babel/core": "^7.7.7", - "@babel/preset-env": "^7.7.7", - "@babel/preset-typescript": "^7.7.7", "@commitlint/config-conventional": "^7.5.0", "@types/babel-code-frame": "^6.20.1", "@types/eslint": "^4.16.6", @@ -108,6 +105,7 @@ "@types/lodash": "^4.14.134", "@types/micromatch": "^3.1.0", "@types/minimatch": "^3.0.1", + "@types/mock-fs": "^4.10.0", "@types/mock-require": "^2.0.0", "@types/node": "^11.0.0", "@types/rimraf": "^2.0.2", @@ -124,7 +122,6 @@ "eslint-plugin-prettier": "^3.1.2", "git-cz": "^3.0.1", "husky": "^1.1.4", - "istanbul": "^0.4.5", "jest": "^24.7.1", "lint-staged": "^8.0.5", "lodash": "^4.17.11", @@ -133,6 +130,7 @@ "nativescript-vue-template-compiler": "^2.4.0", "prettier": "^1.14.3", "rimraf": "^3.0.0", + "ts-jest": "^24.2.0", "ts-loader": "^5.0.0", "typescript": "^3.0.1", "unixify": "^1.0.0", diff --git a/src/IncrementalChecker.ts b/src/IncrementalChecker.ts index 3860e5ee..60732967 100644 --- a/src/IncrementalChecker.ts +++ b/src/IncrementalChecker.ts @@ -273,12 +273,12 @@ export class IncrementalChecker implements IncrementalCheckerInterface { }); // set lints in files register - for (const [filePath, lint] of currentEsLintErrors) { + currentEsLintErrors.forEach((lint, filePath) => { this.files.mutateData(filePath, data => { data.linted = true; data.eslints.push(lint); }); - } + }); // set all files as linted this.files.keys().forEach(filePath => { diff --git a/src/formatter/CodeframeFormatter.ts b/src/formatter/CodeframeFormatter.ts index 6b0bd480..98e2a14e 100644 --- a/src/formatter/CodeframeFormatter.ts +++ b/src/formatter/CodeframeFormatter.ts @@ -6,8 +6,7 @@ import { fileExistsSync } from '../FsHelper'; import { IssueSeverity, IssueOrigin } from '../issue'; import { Formatter } from './Formatter'; import { createInternalFormatter } from './InternalFormatter'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const codeFrame = require('babel-code-frame'); +import codeFrame from 'babel-code-frame'; interface CodeFrameFormatterOptions { /** Syntax highlight the code as JavaScript for terminals. default: false */ diff --git a/src/index.ts b/src/index.ts index 2e7a3432..a049f7a0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,9 @@ import * as path from 'path'; -import * as process from 'process'; import * as childProcess from 'child_process'; import * as webpack from 'webpack'; import * as ts from 'typescript'; import * as semver from 'semver'; -import * as micromatch from 'micromatch'; +import micromatch from 'micromatch'; import chalk from 'chalk'; import { RpcProvider } from 'worker-rpc'; @@ -185,7 +184,14 @@ class ForkTsCheckerWebpackPlugin { this.measureTime = options.measureCompilationTime === true; if (this.measureTime) { + if (semver.lt(process.version, '8.5.0')) { + throw new Error( + `To use 'measureCompilationTime' option, please update to Node.js >= v8.5.0 ` + + `(current version is ${process.version})` + ); + } // Node 8+ only + // eslint-disable-next-line node/no-unsupported-features/node-builtins this.performance = require('perf_hooks').performance; } } @@ -231,11 +237,18 @@ class ForkTsCheckerWebpackPlugin { const eslintOptions = typeof options.eslintOptions === 'object' ? options.eslintOptions : {}; + if (semver.lt(process.version, '8.10.0')) { + throw new Error( + `To use 'eslint' option, please update to Node.js >= v8.10.0 ` + + `(current version is ${process.version})` + ); + } + try { eslintVersion = require('eslint').Linter.version; - } catch (_ignored) { + } catch (error) { throw new Error( - 'When you use `eslint` option, make sure to install `eslint`.' + `When you use 'eslint' option, make sure to install 'eslint'.` ); } diff --git a/src/service.ts b/src/service.ts index 43dc89a8..d979e221 100644 --- a/src/service.ts +++ b/src/service.ts @@ -1,4 +1,3 @@ -import * as process from 'process'; import * as ts from 'typescript'; // import for types alone import { IncrementalChecker } from './IncrementalChecker'; diff --git a/src/tsconfig.json b/src/tsconfig.json index ebb05364..124a34d3 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,18 +1,8 @@ { + "extends": "../tsconfig", "compilerOptions": { - "target": "es6", - "noImplicitReturns": true, - "noUnusedLocals": true, - "noUnusedParameters": false, - "skipLibCheck": true, - "suppressImplicitAnyIndexErrors": true, - "strict": true, - "lib": ["es2015", "es2016.array.include"], - "module": "commonjs", - "moduleResolution": "node", "declaration": true, "outDir": "../lib", - "sourceMap": true, "rootDir": "./", "sourceRoot": "./" } diff --git a/test/integration/general.spec.ts b/test/integration/general.spec.ts index 509cd828..f9688006 100644 --- a/test/integration/general.spec.ts +++ b/test/integration/general.spec.ts @@ -3,6 +3,7 @@ import ForkTsCheckerWebpackPlugin from '../../lib/index'; import * as helpers from './helpers'; import { cloneDeep } from 'lodash'; import unixify from 'unixify'; +import * as semver from 'semver'; describe.each([[true], [false]])( '[INTEGRATION] common tests - useTypescriptIncrementalApi: %s', @@ -22,7 +23,9 @@ describe.each([[true], [false]])( return compiler.compiler; } - const skipIfIncremental = useTypescriptIncrementalApi ? it.skip : it; + const ifNotIncrementalIt = useTypescriptIncrementalApi ? it.skip : it; + const ifNodeGte8It = semver.lt(process.version, '8.10.0') ? it.skip : it; + const ifNodeLt8It = semver.lt(process.version, '8.10.0') ? it : it.skip; /** * Implicitly check whether killService was called by checking that @@ -87,7 +90,7 @@ describe.each([[true], [false]])( }); }); - skipIfIncremental( + ifNotIncrementalIt( 'should support custom resolution w/ "paths"', callback => { const compiler = createCompiler({ @@ -113,7 +116,7 @@ describe.each([[true], [false]])( } ); - it('should detect eslints', callback => { + ifNodeGte8It('should detect eslints', callback => { const compiler = createCompiler({ context: './project_eslint', entryPoint: './src/index.ts', @@ -173,6 +176,22 @@ describe.each([[true], [false]])( }); }); + ifNodeLt8It( + 'throws an error about Node.js version required for `eslint` option', + () => { + expect(() => { + createCompiler({ + context: './project_eslint', + entryPoint: './src/index.ts', + pluginOptions: { eslint: true } + }); + }).toThrowError( + `To use 'eslint' option, please update to Node.js >= v8.10.0 ` + + `(current version is ${process.version})` + ); + } + ); + it('should block emit on build mode', callback => { const compiler = createCompiler(); diff --git a/test/integration/helpers/createVueCompiler.ts b/test/integration/helpers/createVueCompiler.ts index 93f6197c..0ace739f 100644 --- a/test/integration/helpers/createVueCompiler.ts +++ b/test/integration/helpers/createVueCompiler.ts @@ -2,6 +2,8 @@ import * as VueLoader from 'vue-loader'; // import for types alone import * as path from 'path'; import { RpcProvider } from 'worker-rpc'; +// eslint-disable-next-line @typescript-eslint/ban-ts-ignore +// @ts-ignore import { rpcMethods } from './rpc'; import { CreateCompilerOptions, createCompiler } from '.'; diff --git a/test/integration/helpers/index.ts b/test/integration/helpers/index.ts index 33cbec90..769823fd 100644 --- a/test/integration/helpers/index.ts +++ b/test/integration/helpers/index.ts @@ -2,6 +2,8 @@ import ForkTsCheckerWebpackPlugin from '../../../lib'; export { ForkTsCheckerWebpackPlugin }; export { createCompiler, CreateCompilerOptions } from './createCompiler'; export { createVueCompiler } from './createVueCompiler'; +// eslint-disable-next-line @typescript-eslint/ban-ts-ignore +// @ts-ignore export { getRpcProvider, rpcMethods } from './rpc'; export const expectedErrorCodes = { diff --git a/test/integration/mocks/ApiIncrementalCheckerWithRpc.js b/test/integration/mocks/ApiIncrementalCheckerWithRpc.js index cd10a76c..886f7fa6 100644 --- a/test/integration/mocks/ApiIncrementalCheckerWithRpc.js +++ b/test/integration/mocks/ApiIncrementalCheckerWithRpc.js @@ -1,6 +1,6 @@ -import * as mock from 'mock-require'; -import * as origImport from '../../../lib/ApiIncrementalChecker'; -import { rpcMethods, getRpcProvider } from '../helpers/rpc'; +const mock = require('mock-require'); +const origImport = require('../../../lib/ApiIncrementalChecker'); +const { rpcMethods, getRpcProvider } = require('../helpers/rpc'); mock('../../../lib/ApiIncrementalChecker', { ApiIncrementalChecker: class extends origImport.ApiIncrementalChecker { @@ -9,41 +9,44 @@ mock('../../../lib/ApiIncrementalChecker', { const rpc = getRpcProvider(); - const awaitInit = async () => { - if (!this.tsIncrementalCompiler.lastProcessing) { - await this.tsIncrementalCompiler.processChanges(); - } else { - await this.tsIncrementalCompiler.lastProcessing; - } + const init = () => { + return ( + this.tsIncrementalCompiler.lastProcessing || + this.tsIncrementalCompiler.processChanges() + ); }; rpc.registerRpcHandler(rpcMethods.nextIteration, () => { return this.nextIteration(); }); - rpc.registerRpcHandler(rpcMethods.getKnownFileNames, async () => { - await awaitInit(); - return Array.from(this.tsIncrementalCompiler.getAllKnownFiles()); + rpc.registerRpcHandler(rpcMethods.getKnownFileNames, () => { + return init().then(() => + Array.from(this.tsIncrementalCompiler.getAllKnownFiles()) + ); }); - rpc.registerRpcHandler(rpcMethods.getSourceFile, async fileName => { - await awaitInit(); - const result = this.tsIncrementalCompiler - .getProgram() - .getSourceFile(fileName); - return !result ? undefined : { text: result.text }; + rpc.registerRpcHandler(rpcMethods.getSourceFile, fileName => { + return init().then(() => { + const result = this.tsIncrementalCompiler + .getProgram() + .getSourceFile(fileName); + + return !result ? undefined : { text: result.text }; + }); }); - rpc.registerRpcHandler(rpcMethods.getSyntacticDiagnostics, async () => { - await awaitInit(); - const result = this.tsIncrementalCompiler - .getProgram() - .getSyntacticDiagnostics(); - return result.map(({ start, length, file }) => ({ - start, - length, - file: { text: file.text } - })); + rpc.registerRpcHandler(rpcMethods.getSyntacticDiagnostics, () => { + return init().then(() => { + const result = this.tsIncrementalCompiler + .getProgram() + .getSyntacticDiagnostics(); + return result.map(({ start, length, file }) => ({ + start, + length, + file: { text: file.text } + })); + }); }); } } diff --git a/test/integration/mocks/IncrementalCheckerWithError.js b/test/integration/mocks/IncrementalCheckerWithError.js index 2cbc7517..82d6a1e1 100644 --- a/test/integration/mocks/IncrementalCheckerWithError.js +++ b/test/integration/mocks/IncrementalCheckerWithError.js @@ -1,4 +1,4 @@ -import * as mock from 'mock-require'; +const mock = require('mock-require'); mock('../../../lib/IncrementalChecker', { IncrementalChecker: class { diff --git a/test/integration/mocks/IncrementalCheckerWithRpc.js b/test/integration/mocks/IncrementalCheckerWithRpc.js index 1e35622c..039c963e 100644 --- a/test/integration/mocks/IncrementalCheckerWithRpc.js +++ b/test/integration/mocks/IncrementalCheckerWithRpc.js @@ -1,6 +1,6 @@ -import * as mock from 'mock-require'; -import * as origImport from '../../../lib/IncrementalChecker'; -import { rpcMethods, getRpcProvider } from '../helpers/rpc'; +const mock = require('mock-require'); +const origImport = require('../../../lib/IncrementalChecker'); +const { rpcMethods, getRpcProvider } = require('../helpers/rpc'); mock('../../../lib/IncrementalChecker', { IncrementalChecker: class extends origImport.IncrementalChecker { diff --git a/test/integration/vue.spec.ts b/test/integration/vue.spec.ts index ab56578b..cebb8318 100644 --- a/test/integration/vue.spec.ts +++ b/test/integration/vue.spec.ts @@ -236,7 +236,7 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( } describe('should be able to compile *.vue with each lang', () => { - let errors: { [key: string]: Error[] }; + let errors: { [key: string]: Error[] } = {}; beforeAll(callback => { createCompiler({ pluginOptions: { @@ -271,7 +271,7 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( }); describe('should be able to detect errors in *.vue', () => { - let errors: { [key: string]: Error[] }; + let errors: { [key: string]: Error[] } = {}; beforeAll(callback => { // tsconfig-langs-strict.json === tsconfig-langs.json + noUnusedLocals createCompiler({ @@ -310,7 +310,7 @@ describe.each(mixLists(useTypescriptIncrementalApiOptions, vueTplCompilers))( }); describe('should resolve *.vue in the same way as TypeScript', () => { - let errors: Error[]; + let errors: Error[] = []; beforeAll(callback => { createCompiler({ pluginOptions: { diff --git a/test/setupTestFramework.ts b/test/setup.ts similarity index 100% rename from test/setupTestFramework.ts rename to test/setup.ts diff --git a/test/unit/CancellationToken.spec.ts b/test/unit/CancellationToken.spec.ts index f90dfa2b..a7daffc6 100644 --- a/test/unit/CancellationToken.spec.ts +++ b/test/unit/CancellationToken.spec.ts @@ -6,10 +6,9 @@ import { fileExistsSync } from '../../lib/FsHelper'; describe('[UNIT] CancellationToken', () => { beforeEach(() => { - const fsTree = {}; - fsTree[os.tmpdir()] = mockFs.directory(); - - mockFs(fsTree); + mockFs({ + [os.tmpdir()]: mockFs.directory() + }); }); afterEach(() => { @@ -131,7 +130,6 @@ describe('[UNIT] CancellationToken', () => { require('typescript'), tokenA.toJSON() ); - const start = Date.now(); expect(tokenA.isCancellationRequested()).toBe(false); expect(tokenB.isCancellationRequested()).toBe(false); @@ -139,15 +137,9 @@ describe('[UNIT] CancellationToken', () => { tokenA.requestCancellation(); expect(tokenA.isCancellationRequested()).toBe(true); - const duration = Math.abs(Date.now() - start); - if (duration < 10) { - // we should throttle check - expect(tokenB.isCancellationRequested()).toBe(false); - } - setTimeout(function() { expect(tokenB.isCancellationRequested()).toBe(true); done(); - }, 11); + }, 20); }); }); diff --git a/test/unit/FileRegister.spec.ts b/test/unit/FileRegister.spec.ts index fe73b063..6a081bf3 100644 --- a/test/unit/FileRegister.spec.ts +++ b/test/unit/FileRegister.spec.ts @@ -1,7 +1,8 @@ import { FilesRegister } from '../../lib/FilesRegister'; describe('[UNIT] FilesRegister', () => { - let register; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let register: any; beforeEach(() => { register = new FilesRegister( () => @@ -73,7 +74,8 @@ describe('[UNIT] FilesRegister', () => { register.add('/test'); const dataReference = register.getData('/test'); expect(dataReference.test).toBe(true); - register.mutateData('/test', function(data) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + register.mutateData('/test', function(data: any) { data.test = false; }); expect(dataReference).toBe(register.getData('/test')); @@ -82,7 +84,8 @@ describe('[UNIT] FilesRegister', () => { it('should set mtime and reset data if mtime changes', () => { register.add('/test'); - register.mutateData('/test', function(data) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + register.mutateData('/test', function(data: any) { data.test = false; }); expect(register.getData('/test').test).toBe(false); @@ -91,7 +94,8 @@ describe('[UNIT] FilesRegister', () => { register.setMtime('/test', 1000); expect(register.getMtime('/test')).toBe(1000); expect(register.getData('/test').test).toBe(true); - register.mutateData('/test', function(data) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + register.mutateData('/test', function(data: any) { data.test = false; }); expect(register.getData('/test').test).toBe(false); diff --git a/test/unit/IncrementalChecker.spec.ts b/test/unit/IncrementalChecker.spec.ts index d163ae6c..d426fafc 100644 --- a/test/unit/IncrementalChecker.spec.ts +++ b/test/unit/IncrementalChecker.spec.ts @@ -1,4 +1,4 @@ -import * as ts from 'typescript'; +import * as typescript from 'typescript'; import { IncrementalChecker } from '../../lib/IncrementalChecker'; jest.mock('typescript', () => ({ @@ -32,8 +32,8 @@ describe('[UNIT] IncrementalChecker', () => { } ); - expect(ts.parseJsonConfigFileContent).toHaveBeenCalledTimes(1); - expect(ts.parseJsonConfigFileContent).toHaveBeenLastCalledWith( + expect(typescript.parseJsonConfigFileContent).toHaveBeenCalledTimes(1); + expect(typescript.parseJsonConfigFileContent).toHaveBeenLastCalledWith( { compilerOptions: { foo: true, diff --git a/test/unit/VueProgram.spec.ts b/test/unit/VueProgram.spec.ts index 0e818213..9deeaa47 100644 --- a/test/unit/VueProgram.spec.ts +++ b/test/unit/VueProgram.spec.ts @@ -1,8 +1,7 @@ import unixify from 'unixify'; import * as ts from 'typescript'; import { VueProgram } from '../../lib/VueProgram'; -// eslint-disable-next-line @typescript-eslint/no-var-requires -const ForkTsCheckerWebpackPlugin = require('../../lib/index'); +import ForkTsCheckerWebpackPlugin from '../../lib/index'; const templateCompilers = [ 'vue-template-compiler', @@ -12,20 +11,16 @@ const templateCompilers = [ jest.mock('typescript', () => { const originalTs = jest.requireActual('typescript'); return { - parseJsonConfigFileContent: jest.fn(function(tsconfig) { - return { - options: tsconfig.compilerOptions - }; - }), - readConfigFile() { - return { - config: { - compilerOptions: { - foo: true - } + parseJsonConfigFileContent: jest.fn(tsconfig => ({ + options: tsconfig.compilerOptions + })), + readConfigFile: () => ({ + config: { + compilerOptions: { + foo: true } - }; - }, + } + }), sys: {}, ScriptKind: originalTs.ScriptKind }; @@ -126,7 +121,9 @@ describe('[UNIT] VueProgram', () => { 'should init valid vue options with: %p', option => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const result = ForkTsCheckerWebpackPlugin.prepareVueOptions(option); + const result = (ForkTsCheckerWebpackPlugin as any).prepareVueOptions( + option + ); expect(typeof result.enabled).toBe('boolean'); expect(typeof result.compiler).toBe('string'); } @@ -205,7 +202,6 @@ describe('[UNIT] VueProgram', () => { bar: false }); - expect(ts.parseJsonConfigFileContent).toHaveBeenCalledTimes(1); expect(ts.parseJsonConfigFileContent).toHaveBeenLastCalledWith( { compilerOptions: { diff --git a/test/unit/formatter/InternalFormatter.spec.ts b/test/unit/formatter/InternalFormatter.spec.ts index d889bf08..8fd8a56d 100644 --- a/test/unit/formatter/InternalFormatter.spec.ts +++ b/test/unit/formatter/InternalFormatter.spec.ts @@ -39,9 +39,10 @@ describe('[UNIT] formatter/InternalFormatter', () => { `Abort trap: 6` ].join(os.EOL) ] - ])('formats issue message "%p" to "%p"', (issue, expectedFormatted) => { + ])('formats issue message "%p" to "%p"', (...args) => { + const [issue, expectedFormatted] = args as [Issue, string]; const formatter = createInternalFormatter(); - const formatted = formatter(issue as Issue); + const formatted = formatter(issue); expect(formatted).toEqual(expectedFormatted); }); diff --git a/test/unit/index.spec.ts b/test/unit/index.spec.ts index 0278724e..cfaea897 100644 --- a/test/unit/index.spec.ts +++ b/test/unit/index.spec.ts @@ -1,4 +1,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ +import * as semver from 'semver'; + describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { beforeEach(() => { jest.resetModules(); @@ -34,6 +36,9 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { }); describe('eslint', () => { + const ifNodeGte8It = semver.lt(process.version, '8.10.0') ? it.skip : it; + const ifNodeLt8It = semver.lt(process.version, '8.10.0') ? it : it.skip; + it('should throw if eslint not present', () => { jest.setMock('typescript', { version: '2.1.0' }); jest.setMock('eslint', undefined); @@ -44,15 +49,31 @@ describe('[UNIT] ForkTsCheckerWebpackPlugin', () => { }).toThrowError(Error); }); - it('should not throw if eslint is present', () => { - jest.setMock('typescript', { version: '2.1.0' }); - jest.setMock('eslint', { Linter: { VERSION: '5.7.0' } }); - const ForkTsCheckerWebpackPlugin = require('../../lib/index'); - - expect(function() { - new ForkTsCheckerWebpackPlugin({ eslint: true }); - }).not.toThrowError(); - }); + ifNodeGte8It( + 'should not throw if eslint is present and Node.js version >= 8.10.0', + () => { + jest.setMock('typescript', { version: '2.1.0' }); + jest.setMock('eslint', { Linter: { VERSION: '5.7.0' } }); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); + + expect(function() { + new ForkTsCheckerWebpackPlugin({ eslint: true }); + }).not.toThrowError(); + } + ); + + ifNodeLt8It( + 'should throw if eslint is present and Node.js version < 8.10.0', + () => { + jest.setMock('typescript', { version: '2.1.0' }); + jest.setMock('eslint', { Linter: { VERSION: '5.7.0' } }); + const ForkTsCheckerWebpackPlugin = require('../../lib/index'); + + expect(function() { + new ForkTsCheckerWebpackPlugin({ eslint: true }); + }).toThrowError(); + } + ); }); describe('useTypescriptIncrementalApi', () => { diff --git a/test/unit/issue/Issue.spec.ts b/test/unit/issue/Issue.spec.ts index 076b4d7f..09469303 100644 --- a/test/unit/issue/Issue.spec.ts +++ b/test/unit/issue/Issue.spec.ts @@ -2,10 +2,14 @@ import { IssueSeverity, IssueOrigin, isIssue, - deduplicateAndSortIssues + deduplicateAndSortIssues, + Issue } from '../../../lib/issue'; -function omit(object, keys) { +function omit( + object: TObject, + keys: (keyof TObject)[] +) { const omittedObject = Object.assign({}, object); keys.forEach(key => delete omittedObject[key]); @@ -342,7 +346,8 @@ describe('[UNIT] issue/Issue', () => { [BASIC_ESLINT_ISSUE] ], [[omit(BASIC_ESLINT_ISSUE, ['message'])], []] - ])('deduplicates issues %p to %p', (issues, deduplicatedIssues) => { + ])('deduplicates issues %p to %p', (...args) => { + const [issues, deduplicatedIssues] = args as [Issue[], Issue[]]; expect(deduplicateAndSortIssues(issues)).toEqual(deduplicatedIssues); }); }); diff --git a/test/unit/issue/IssueSeverity.spec.ts b/test/unit/issue/IssueSeverity.spec.ts index 09cfdc2b..9f4ba0f8 100644 --- a/test/unit/issue/IssueSeverity.spec.ts +++ b/test/unit/issue/IssueSeverity.spec.ts @@ -31,10 +31,12 @@ describe('[UNIT] issue/IssueSeverity', () => { // WARNING [IssueSeverity.WARNING, IssueSeverity.ERROR, 1], [IssueSeverity.WARNING, IssueSeverity.WARNING, 0] - ])( - "compares issue severity '%p' with '%p' and returns '%p'", - (severityA: IssueSeverity, severityB: IssueSeverity, result: number) => { - expect(compareIssueSeverities(severityA, severityB)).toEqual(result); - } - ); + ])("compares issue severity '%p' with '%p' and returns '%p'", (...args) => { + const [severityA, severityB, result] = args as [ + IssueSeverity, + IssueSeverity, + number + ]; + expect(compareIssueSeverities(severityA, severityB)).toEqual(result); + }); }); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..6d7ccf34 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es5", + "esModuleInterop": true, + "skipLibCheck": true, + "strict": true, + "lib": ["es2015"], + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true + } +} diff --git a/yarn.lock b/yarn.lock index 7d0fbdfd..66d09ba6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,13 +8,6 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - "@babel/core@^7.1.0": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.4.tgz#84055750b05fcd50f9915a826b44fa347a825250" @@ -35,26 +28,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.7.7.tgz#ee155d2e12300bcc0cff6a8ad46f2af5063803e9" - integrity sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.7" - "@babel/helpers" "^7.7.4" - "@babel/parser" "^7.7.7" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/generator@^7.0.0", "@babel/generator@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" @@ -66,87 +39,6 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" - integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== - dependencies: - "@babel/types" "^7.7.4" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/generator@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" - integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== - dependencies: - "@babel/types" "^7.7.4" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" - integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" - integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-call-delegate@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" - integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== - dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-create-class-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.4.tgz#fce60939fd50618610942320a8d951b3b639da2d" - integrity sha512-l+OnKACG4uiDHQ/aJT8dwpR+LhCJALxL0mJ6nzjB25e5IPwqV1VOsY7ah6UB1DG+VOXAIMtuC54rFJGiHkxjgA== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - -"@babel/helper-create-regexp-features-plugin@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" - integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== - dependencies: - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" - -"@babel/helper-define-map@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" - integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/types" "^7.7.4" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" - integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== - dependencies: - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -156,15 +48,6 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" - integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== - dependencies: - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -172,94 +55,11 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-get-function-arity@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" - integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-hoist-variables@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" - integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-member-expression-to-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" - integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-module-imports@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" - integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" - integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-simple-access" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" - integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== - dependencies: - "@babel/types" "^7.7.4" - "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" - integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== - dependencies: - lodash "^4.17.11" - -"@babel/helper-remap-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" - integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-wrap-function" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-replace-supers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" - integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - -"@babel/helper-simple-access@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" - integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== - dependencies: - "@babel/template" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" @@ -267,23 +67,6 @@ dependencies: "@babel/types" "^7.4.4" -"@babel/helper-split-export-declaration@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" - integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== - dependencies: - "@babel/types" "^7.7.4" - -"@babel/helper-wrap-function@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" - integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/helpers@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.4.tgz#868b0ef59c1dd4e78744562d5ce1b59c89f2f2a5" @@ -293,15 +76,6 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/helpers@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" - integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg== - dependencies: - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -315,86 +89,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" integrity sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w== -"@babel/parser@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb" - integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g== - -"@babel/parser@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" - integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== - -"@babel/plugin-proposal-async-generator-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" - integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - -"@babel/plugin-proposal-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" - integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - -"@babel/plugin-proposal-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" - integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.7.4" - -"@babel/plugin-proposal-object-rest-spread@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" - integrity sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" - integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - -"@babel/plugin-proposal-unicode-property-regex@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" - integrity sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-async-generators@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" - integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" - integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" - integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -402,352 +96,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" - integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" - integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-top-level-await@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" - integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.7.4.tgz#5d037ffa10f3b25a16f32570ebbe7a8c2efa304b" - integrity sha512-77blgY18Hud4NM1ggTA8xVT/dBENQf17OpiToSa2jSmEY3fWXD2jwrdVlO4kq5yzUTeF15WSQ6b4fByNvJcjpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" - integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" - integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.7.4" - -"@babel/plugin-transform-block-scoped-functions@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" - integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" - integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" - integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-define-map" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-optimise-call-expression" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" - integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" - integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" - integrity sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-duplicate-keys@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" - integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" - integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" - integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" - integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== - dependencies: - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" - integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-member-expression-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" - integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" - integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== - dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" - integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== - dependencies: - "@babel/helper-module-transforms" "^7.7.5" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.7.4" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" - integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== - dependencies: - "@babel/helper-hoist-variables" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" - integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== - dependencies: - "@babel/helper-module-transforms" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" - integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - -"@babel/plugin-transform-new-target@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" - integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" - integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.7.4" - -"@babel/plugin-transform-parameters@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" - integrity sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== - dependencies: - "@babel/helper-call-delegate" "^7.7.4" - "@babel/helper-get-function-arity" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-property-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" - integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-regenerator@^7.7.5": - version "7.7.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" - integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== - dependencies: - regenerator-transform "^0.14.0" - -"@babel/plugin-transform-reserved-words@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" - integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-shorthand-properties@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" - integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" - integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" - integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" - integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" - integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typescript@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.4.tgz#2974fd05f4e85c695acaf497f432342de9fc0636" - integrity sha512-X8e3tcPEKnwwPVG+vP/vSqEShkwODOEeyQGod82qrIuidwIrfnsGn11qPM1jBLF4MqguTXXYzm58d0dY+/wdpg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-typescript" "^7.7.4" - -"@babel/plugin-transform-unicode-regex@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" - integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/preset-env@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.7.tgz#c294167b91e53e7e36d820e943ece8d0c7fe46ac" - integrity sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.7" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.7" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.5" - "@babel/plugin-transform-modules-commonjs" "^7.7.5" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.7" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.5" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.6.0" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - -"@babel/preset-typescript@^7.7.7": - version "7.7.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.7.tgz#69ddea54e8b4e491ccbf94147e673b2ac6e11e2e" - integrity sha512-Apg0sCTovsSA+pEaI8efnA44b9x4X/7z4P8vsWMiN8rSUaM4y4+Shl5NMWnMl6njvt96+CEb6jwpXAKYAVCSQA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.7.4" - "@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" @@ -757,15 +105,6 @@ "@babel/parser" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/template@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" - integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" @@ -781,21 +120,6 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/traverse@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" - integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.7.4" - "@babel/helper-function-name" "^7.7.4" - "@babel/helper-split-export-declaration" "^7.7.4" - "@babel/parser" "^7.7.4" - "@babel/types" "^7.7.4" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" @@ -805,15 +129,6 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" -"@babel/types@^7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" - integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -1238,6 +553,13 @@ version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" +"@types/mock-fs@^4.10.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@types/mock-fs/-/mock-fs-4.10.0.tgz#460061b186993d76856f669d5317cda8a007c24b" + integrity sha512-FQ5alSzmHMmliqcL36JqIA4Yyn9jyJKvRSGV3mvPh108VFatX7naJDzSG4fnFQNZFq9dIx0Dzoe6ddflMB2Xkg== + dependencies: + "@types/node" "*" + "@types/mock-require@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/mock-require/-/mock-require-2.0.0.tgz#57a4f0db0b4b6274f610a2d2c20beb3c842181e1" @@ -1526,10 +848,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - acorn-globals@^4.1.0: version "4.3.2" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.2.tgz#4e2c2313a597fd589720395f6354b41cd5ec8006" @@ -1614,10 +932,6 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1803,16 +1117,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - async@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -1872,13 +1176,6 @@ babel-jest@^24.7.1: chalk "^2.4.2" slash "^2.0.0" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-istanbul@^5.1.0: version "5.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.3.tgz#202d20ffc96a821c68a3964412de75b9bdeb48c7" @@ -2088,14 +1385,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^4.6.0, browserslist@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" - integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: - caniuse-lite "^1.0.30001015" - electron-to-chromium "^1.3.322" - node-releases "^1.1.42" + fast-json-stable-stringify "2.x" bser@^2.0.0: version "2.0.0" @@ -2104,7 +1399,7 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-from@^1.0.0: +buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2219,11 +1514,6 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000928" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000928.tgz#2e83d2b14276442da239511615eb7c62fed0cfa7" -caniuse-lite@^1.0.30001015: - version "1.0.30001016" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz#16ea48d7d6e8caf3cad3295c2d746fe38c4e7f66" - integrity sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA== - capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2541,13 +1831,6 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" @@ -2572,14 +1855,6 @@ copy-dir@^0.4.0: dependencies: mkdir-p "~0.0.4" -core-js-compat@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.0.tgz#4eb6cb69d03d99159ed7c860cd5fcf7d23a62ea9" - integrity sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg== - dependencies: - browserslist "^4.8.2" - semver "7.0.0" - core-js@^2.4.0, core-js@^2.5.0: version "2.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" @@ -3010,11 +2285,6 @@ electron-to-chromium@^1.2.7: version "1.3.102" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz#3ac43a037c8a63bca3dfa189eb3d90f097196787" -electron-to-chromium@^1.3.322: - version "1.3.322" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" - integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== - elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -3097,17 +2367,6 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - escodegen@^1.9.1: version "1.11.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" @@ -3234,7 +2493,7 @@ espree@^6.1.2: acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: +esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -3259,10 +2518,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -3392,6 +2647,11 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-json-stable-stringify@2.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3695,16 +2955,6 @@ glob@7.1.3, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3772,16 +3022,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.1: - version "4.0.12" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" - dependencies: - async "^2.5.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - handlebars@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" @@ -4069,7 +3309,7 @@ inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" -invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -4426,25 +3666,6 @@ istanbul-reports@^2.2.3: dependencies: handlebars "^4.1.0" -istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - jest-changed-files@^24.7.0: version "24.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" @@ -4814,11 +4035,6 @@ js-base64@^2.1.9: version "2.5.0" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.0.tgz#42255ba183ab67ce59a0dee640afdc00ab5ae93e" -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4835,7 +4051,7 @@ js-yaml@3.13.1, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.9.0: +js-yaml@^3.9.0: version "3.12.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" dependencies: @@ -4917,6 +4133,13 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@2.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== + dependencies: + minimist "^1.2.0" + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -5114,7 +4337,7 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -5151,12 +4374,12 @@ lodash@4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5, lodash@^4.2.1: +lodash@^4.17.11, lodash@^4.17.5, lodash@^4.2.1: version "4.17.13" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== -lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -5217,6 +4440,11 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-error@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -5404,7 +4632,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -5476,7 +4704,7 @@ mkdir-p@~0.0.4: resolved "https://registry.yarnpkg.com/mkdir-p/-/mkdir-p-0.0.7.tgz#24c5dbe26da3a99ef158a1eef9a5c2dd9de5683c" integrity sha1-JMXb4m2jqZ7xWKHu+aXC3Z3laDw= -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -5678,19 +4906,6 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.42: - version "1.1.43" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.43.tgz#2c6ca237f88ce11d49631f11190bb01f8d0549f2" - integrity sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w== - dependencies: - semver "^6.3.0" - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -5830,7 +5045,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0, object.assign@^4.1.0: +object.assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -5855,7 +5070,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -6460,11 +5675,6 @@ pretty-format@^24.7.0: ansi-styles "^3.2.0" react-is "^16.8.4" -private@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -6701,14 +5911,7 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.2.1, regenerate@^1.4.0: +regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -6722,13 +5925,6 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== - dependencies: - private "^0.1.6" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -6754,40 +5950,16 @@ regexpu-core@^1.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" dependencies: jsesc "~0.5.0" -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -6904,10 +6076,17 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@1.x, resolve@^1.10.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" + integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== + dependencies: + path-parse "^1.0.6" + resolve@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" @@ -6915,13 +6094,6 @@ resolve@^1.10.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" - integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== - dependencies: - path-parse "^1.0.6" - resolve@^1.3.2: version "1.9.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" @@ -7067,12 +6239,7 @@ semver-compare@^1.0.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^5.3.0: +semver@^5.3.0, semver@^5.5: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -7257,12 +6424,6 @@ source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -7516,7 +6677,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.2.3: +supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -7737,6 +6898,22 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +ts-jest@^24.2.0: + version "24.2.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.2.0.tgz#7abca28c2b4b0a1fdd715cd667d65d047ea4e768" + integrity sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + ts-loader@^5.0.0: version "5.3.3" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.3.3.tgz#8b4af042e773132d86b3c99ef0acf3b4d325f473" @@ -7803,29 +6980,6 @@ uglify-js@^3.1.4: commander "~2.17.1" source-map "~0.6.1" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8106,7 +7260,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1.3.1, which@^1.1.1, which@^1.2.10, which@^1.2.9, which@^1.3.0: +which@1.3.1, which@^1.2.10, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -8123,14 +7277,14 @@ word-wrap@~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@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -8214,6 +7368,13 @@ yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yargs-parser@10.x, yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@13.0.0, yargs-parser@^13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" @@ -8222,13 +7383,6 @@ yargs-parser@13.0.0, yargs-parser@^13.0.0: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" From ec647e22c5ef509b393f57523dde824fa4d1a049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Thu, 16 Jan 2020 21:50:12 +0100 Subject: [PATCH 17/18] chore: upgrade semantic-release to the stable version --- .github/workflows/main.yml | 2 +- package.json | 15 --------------- release.config.js | 9 +++++++++ 3 files changed, 10 insertions(+), 16 deletions(-) create mode 100644 release.config.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fc7f7739..6f046972 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -111,4 +111,4 @@ jobs: name: lib - name: Release - run: npx semantic-release@16.0.0-beta.18 + run: npx semantic-release@16.0.2 diff --git a/package.json b/package.json index 698b43b2..06928326 100644 --- a/package.json +++ b/package.json @@ -73,21 +73,6 @@ "path": "cz-conventional-changelog" } }, - "release": { - "branches": [ - "master", - { - "name": "beta", - "prerelease": true - } - ], - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - "@semantic-release/npm", - "@semantic-release/github" - ] - }, "dependencies": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", diff --git a/release.config.js b/release.config.js new file mode 100644 index 00000000..51f9524c --- /dev/null +++ b/release.config.js @@ -0,0 +1,9 @@ +module.exports = { + branches: ['master', 'beta'], + plugins: [ + '@semantic-release/commit-analyzer', + '@semantic-release/release-notes-generator', + '@semantic-release/npm', + '@semantic-release/github' + ] +}; From c7a1b2c21047a91613a8cb84380da4c75c213e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ole=C5=9B?= Date: Thu, 16 Jan 2020 23:07:21 +0100 Subject: [PATCH 18/18] chore: fix semantic-release config for the beta branch --- release.config.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/release.config.js b/release.config.js index 51f9524c..b65123d8 100644 --- a/release.config.js +++ b/release.config.js @@ -1,5 +1,11 @@ module.exports = { - branches: ['master', 'beta'], + branches: [ + 'master', + { + name: 'beta', + prerelease: true + } + ], plugins: [ '@semantic-release/commit-analyzer', '@semantic-release/release-notes-generator',