diff --git a/package.json b/package.json index 5492098..f069170 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-repo-tools", - "version": "2.1.2", + "version": "2.2.0", "description": "Useful tool to get versions from all repos of Github user/org", "main": "build/app.js", "bin": { @@ -42,6 +42,7 @@ "figlet": "^1.2.1", "inquirer": "^6.3.1", "lodash": "^4.17.11", + "lodash-decorators": "^6.0.1", "moment": "^2.24.0", "ora": "^3.4.0", "reflect-metadata": "^0.1.13", diff --git a/src/app.service.ts b/src/app.service.ts index 23037d5..b77537e 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -27,7 +27,7 @@ export class AppService { this.setupPresenter(options); this.presenterService.showFiglet(); - this.presenterService.showGithubTokenInfo(); + this.presenterService.showGithubTokenInfo(options); const { package: packageName, node, rateLimit } = options; diff --git a/src/interfaces.ts b/src/interfaces.ts index c38905a..adb54e3 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -30,6 +30,7 @@ export interface IPresenterOptions { export interface IProgramOptions extends IFilterOptions, IOwnerOptions, IPackageOptions, INodeOptions, IPresenterOptions { rateLimit?: boolean; + token?: string; } export interface IReportItem { diff --git a/src/modules/cli/cli.service.ts b/src/modules/cli/cli.service.ts index 9613fb0..e991c07 100644 --- a/src/modules/cli/cli.service.ts +++ b/src/modules/cli/cli.service.ts @@ -1,9 +1,10 @@ import { Injectable } from '@nestjs/common'; +import { Memoize } from 'lodash-decorators'; import { IProgramOptions } from '../../interfaces'; import { CommanderService } from './commander.service'; import { InquirerService } from './inquirer.service'; import { InputValidatorService } from './input.validator.service'; -import { InvalidResult, ValidResult } from './interfaces'; +import { InvalidResult } from './interfaces'; @Injectable() export class CliService { @@ -15,10 +16,11 @@ export class CliService { ) { } - public async getProgramOptions(): Promise { + @Memoize() + public getProgramOptions(): Promise { const options = this.commanderService.getProgramOptions(); - return await this.patchOptions(options); + return this.patchOptions(options); } public async patchOptions(options): Promise { diff --git a/src/modules/cli/commander.service.ts b/src/modules/cli/commander.service.ts index e647916..3eea26e 100644 --- a/src/modules/cli/commander.service.ts +++ b/src/modules/cli/commander.service.ts @@ -10,7 +10,7 @@ export class CommanderService { .usage('Search npm packages in all org repos. You can set GITHUB_TOKEN env var, if public access restricted') .help('help') .alias('h', 'help') - .showHelpOnFail(false, "Specify --help for available options") + .showHelpOnFail(false, 'Specify --help for available options') .version() .alias('v', 'version') .describe('v', 'show version information') @@ -92,6 +92,12 @@ export class CommanderService { default: false, type: 'boolean', }) + .option('token', { + alias: 't', + describe: 'token to auth on github. Env var GITHUB_TOKEN strictly prefered', + default: process.env.GITHUB_TOKEN, + type: 'string' + }) .group(['user', 'org'], 'Owner:') .group(['package', 'deps', 'dev-deps', 'peer-deps', 'yarn-lock', 'package-lock'], 'NPM package:') .group(['node', 'nvm', 'engines'], 'Node version:') diff --git a/src/modules/cli/input.validator.service.ts b/src/modules/cli/input.validator.service.ts index d0421b1..c9cc3bf 100644 --- a/src/modules/cli/input.validator.service.ts +++ b/src/modules/cli/input.validator.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from "@nestjs/common"; -import { IProgramOptions, IOwnerOptions } from "../../interfaces"; -import { Mode, ValidationResult } from "./interfaces"; +import { Injectable } from '@nestjs/common'; +import { IProgramOptions, IOwnerOptions } from '../../interfaces'; +import { Mode, ValidationResult } from './interfaces'; @Injectable() export class InputValidatorService { diff --git a/src/modules/node-version/node.version.module.ts b/src/modules/node-version/node.version.module.ts index 5cc251a..9052a9a 100644 --- a/src/modules/node-version/node.version.module.ts +++ b/src/modules/node-version/node.version.module.ts @@ -1,7 +1,7 @@ -import { Module } from "@nestjs/common"; -import { OctokitModule } from "../octokit/octokit.module"; -import { NodeVersionService } from "./node.version.service"; -import { PresenterModule } from "../presenter/presenter.module"; +import { Module } from '@nestjs/common'; +import { OctokitModule } from '../octokit/octokit.module'; +import { NodeVersionService } from './node.version.service'; +import { PresenterModule } from '../presenter/presenter.module'; @Module({ imports: [ diff --git a/src/modules/node-version/node.version.service.ts b/src/modules/node-version/node.version.service.ts index afbbf82..393b25f 100644 --- a/src/modules/node-version/node.version.service.ts +++ b/src/modules/node-version/node.version.service.ts @@ -1,8 +1,8 @@ -import { Injectable } from "@nestjs/common"; -import { IProgramOptions } from "../../interfaces"; -import { INodeVersion } from "./interfaces"; -import { OctokitService } from "../octokit/octokit.service"; -import { PresenterService } from "../presenter/presenter.service"; +import { Injectable } from '@nestjs/common'; +import { IProgramOptions } from '../../interfaces'; +import { INodeVersion } from './interfaces'; +import { OctokitService } from '../octokit/octokit.service'; +import { PresenterService } from '../presenter/presenter.service'; @Injectable() export class NodeVersionService { diff --git a/src/modules/npm-dependency-version/interfaces.ts b/src/modules/npm-dependency-version/interfaces.ts index bd2dedc..b964c38 100644 --- a/src/modules/npm-dependency-version/interfaces.ts +++ b/src/modules/npm-dependency-version/interfaces.ts @@ -1,4 +1,4 @@ -import { IReportItem } from "../../interfaces"; +import { IReportItem } from '../../interfaces'; export interface IPacakgeVersion extends IReportItem { version?: string; diff --git a/src/modules/npm-dependency-version/npm.dependency.version.module.ts b/src/modules/npm-dependency-version/npm.dependency.version.module.ts index d640640..8861fe0 100644 --- a/src/modules/npm-dependency-version/npm.dependency.version.module.ts +++ b/src/modules/npm-dependency-version/npm.dependency.version.module.ts @@ -1,9 +1,9 @@ -import { Module } from "@nestjs/common"; -import { OctokitModule } from "../octokit/octokit.module"; -import { NpmDependencyVersionService } from "./npm.dependency.version.service"; -import { PackageLockVersionService } from "./package.lock.version.service"; -import { YarnLockVersionService } from "./yarn.lock.version.service"; -import { PresenterModule } from "../presenter/presenter.module"; +import { Module } from '@nestjs/common'; +import { OctokitModule } from '../octokit/octokit.module'; +import { NpmDependencyVersionService } from './npm.dependency.version.service'; +import { PackageLockVersionService } from './package.lock.version.service'; +import { YarnLockVersionService } from './yarn.lock.version.service'; +import { PresenterModule } from '../presenter/presenter.module'; @Module({ diff --git a/src/modules/npm-dependency-version/npm.dependency.version.service.ts b/src/modules/npm-dependency-version/npm.dependency.version.service.ts index 3261ab5..4edc5e6 100644 --- a/src/modules/npm-dependency-version/npm.dependency.version.service.ts +++ b/src/modules/npm-dependency-version/npm.dependency.version.service.ts @@ -1,11 +1,11 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import chalk from 'chalk'; -import { IProgramOptions, IPackageOptions } from "../../interfaces"; -import { OctokitService } from "../octokit/octokit.service"; -import { PackageLockVersionService } from "./package.lock.version.service"; -import { YarnLockVersionService } from "./yarn.lock.version.service"; -import { PresenterService } from "../presenter/presenter.service"; -import { IPacakgeVersion as IPackageVersion } from "./interfaces"; +import { IProgramOptions, IPackageOptions } from '../../interfaces'; +import { OctokitService } from '../octokit/octokit.service'; +import { PackageLockVersionService } from './package.lock.version.service'; +import { YarnLockVersionService } from './yarn.lock.version.service'; +import { PresenterService } from '../presenter/presenter.service'; +import { IPacakgeVersion as IPackageVersion } from './interfaces'; @Injectable() export class NpmDependencyVersionService { diff --git a/src/modules/npm-dependency-version/package.lock.version.service.ts b/src/modules/npm-dependency-version/package.lock.version.service.ts index ffc4a1d..be66903 100644 --- a/src/modules/npm-dependency-version/package.lock.version.service.ts +++ b/src/modules/npm-dependency-version/package.lock.version.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import { get } from 'lodash'; -import { OctokitService } from "../octokit/octokit.service"; +import { OctokitService } from '../octokit/octokit.service'; @Injectable() export class PackageLockVersionService { diff --git a/src/modules/npm-dependency-version/yarn.lock.version.service.ts b/src/modules/npm-dependency-version/yarn.lock.version.service.ts index 6768b37..acfc841 100644 --- a/src/modules/npm-dependency-version/yarn.lock.version.service.ts +++ b/src/modules/npm-dependency-version/yarn.lock.version.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import * as lockfile from '@yarnpkg/lockfile'; -import { OctokitService } from "../octokit/octokit.service"; +import { OctokitService } from '../octokit/octokit.service'; @Injectable() export class YarnLockVersionService { diff --git a/src/modules/octokit/octokit.module.ts b/src/modules/octokit/octokit.module.ts index e37bb95..e95a474 100644 --- a/src/modules/octokit/octokit.module.ts +++ b/src/modules/octokit/octokit.module.ts @@ -1,10 +1,12 @@ -import { Module } from "@nestjs/common"; -import { OctokitService } from "./octokit.service"; -import { PresenterModule } from "../presenter/presenter.module"; +import { Module } from '@nestjs/common'; +import { OctokitService } from './octokit.service'; +import { PresenterModule } from '../presenter/presenter.module'; +import { CliModule } from '../cli/cli.module'; @Module({ imports: [ PresenterModule, + CliModule, ], providers: [OctokitService], exports: [OctokitService] diff --git a/src/modules/octokit/octokit.service.ts b/src/modules/octokit/octokit.service.ts index dfe8922..33ad7fa 100644 --- a/src/modules/octokit/octokit.service.ts +++ b/src/modules/octokit/octokit.service.ts @@ -1,34 +1,37 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import * as Octokit from '@octokit/rest'; import * as RetryPlugin from '@octokit/plugin-retry'; -import { PresenterService } from "../presenter/presenter.service"; +import { PresenterService } from '../presenter/presenter.service'; +import { CliService } from '../cli/cli.service'; +import { Memoize } from 'lodash-decorators'; +import { ClientHttp2Stream } from 'http2'; @Injectable() export class OctokitService { constructor( private presentationService: PresenterService, + private cliService: CliService, ) { } - private octokitInstance: Octokit; + @Memoize() + public async getOctokit() { + const { token } = await this.cliService.getProgramOptions(); - public get octokit() { - if (!this.octokitInstance) { - this.octokitInstance = new (Octokit.plugin(RetryPlugin))({ - auth: process.env.GITHUB_TOKEN, - retry: { - doNotRetry: [404], - } - }); - } - - return this.octokitInstance; + return new (Octokit.plugin(RetryPlugin))({ + auth: token, + retry: { + doNotRetry: [404], + } + }); } public async getFileContent(owner, repo, path) { + const octokit = await this.getOctokit(); + try { - const response = await this.octokit.repos.getContents({ + const response = await octokit.repos.getContents({ owner, repo, path, @@ -48,13 +51,15 @@ export class OctokitService { } public async getRepos({ org, user }: { org: string, user: string }): Promise { + const octokit = await this.getOctokit(); + const options = org - ? this.octokit.repos.listForOrg.endpoint.merge({ org }) - : this.octokit.repos.listForUser.endpoint.merge({ username: user }); + ? octokit.repos.listForOrg.endpoint.merge({ org }) + : octokit.repos.listForUser.endpoint.merge({ username: user }); this.presentationService.showSpinner('Searching for repos...'); try { - const repos = await this.octokit.paginate(options); + const repos = await octokit.paginate(options); this.presentationService.hideSpinner({ success: true, message: `${repos.length} repos found` }); return repos.map(repo => repo.name); diff --git a/src/modules/presenter/default.presenter.service.ts b/src/modules/presenter/default.presenter.service.ts index ec17f7e..ee2f7d4 100644 --- a/src/modules/presenter/default.presenter.service.ts +++ b/src/modules/presenter/default.presenter.service.ts @@ -3,11 +3,12 @@ import * as moment from 'moment'; import * as Octokit from '@octokit/rest'; import * as ora from 'ora'; import chalk from 'chalk'; -import { TableService } from "../table/table.service"; -import { IPresenterService } from "./interfaces"; +import { Injectable } from '@nestjs/common'; +import { TableService } from '../table/table.service'; +import { IPresenterService } from './interfaces'; import { IReportItem, IProgramOptions } from '../../interfaces'; import { getFilter } from '../../util/result-filter'; -import { Injectable } from '@nestjs/common'; +import { CliService } from '../cli/cli.service'; @Injectable() export class DefaultPresenterService implements IPresenterService { @@ -25,13 +26,17 @@ export class DefaultPresenterService implements IPresenterService { console.log(figlet.textSync('Github Repo Tools')); } - public showGithubTokenInfo() { - const withGithubToken = !!process.env.GITHUB_TOKEN; + public showGithubTokenInfo(options: IProgramOptions) { + const withGithubToken = !!options.token; console.log(`Use GITHUB_TOKEN env: ${withGithubToken ? chalk.green('yes') : chalk.red('no')}`); } public showRateLimit(rateLimit: Octokit.RateLimitGetResponseRate) { + if (!rateLimit) { + return; + } + const { limit, remaining, reset } = rateLimit; const resetMoment = moment(reset * 1000); const resetIn = resetMoment.fromNow(); @@ -45,6 +50,11 @@ export class DefaultPresenterService implements IPresenterService { } public showData(report: IReportItem[], options: IProgramOptions) { + if (!report) { + console.log('No data found'); + return; + } + const filteredReport: IReportItem[] = report.filter(getFilter(options)); const output: string = this.tableService.format(filteredReport, options); diff --git a/src/modules/presenter/interfaces.ts b/src/modules/presenter/interfaces.ts index 969f640..1708540 100644 --- a/src/modules/presenter/interfaces.ts +++ b/src/modules/presenter/interfaces.ts @@ -9,7 +9,7 @@ export enum PresentationMode { export interface IPresenterService { showFiglet(); - showGithubTokenInfo(); + showGithubTokenInfo(options: IProgramOptions); showRateLimit(rateLimit: Octokit.RateLimitGetResponseRate, isMainInfo: boolean); showError(message: string); showData(report: IReportItem[], options: IProgramOptions); diff --git a/src/modules/presenter/json.presenter.service.ts b/src/modules/presenter/json.presenter.service.ts index 7f8cf12..a551934 100644 --- a/src/modules/presenter/json.presenter.service.ts +++ b/src/modules/presenter/json.presenter.service.ts @@ -1,5 +1,5 @@ -import { Injectable } from "@nestjs/common"; -import { RawJsonPresenterService } from "./raw.json.presenter.service"; +import { Injectable } from '@nestjs/common'; +import { RawJsonPresenterService } from './raw.json.presenter.service'; @Injectable() export class JsonPresenterService extends RawJsonPresenterService { diff --git a/src/modules/presenter/presenter.module.ts b/src/modules/presenter/presenter.module.ts index ee533af..e8181ab 100644 --- a/src/modules/presenter/presenter.module.ts +++ b/src/modules/presenter/presenter.module.ts @@ -1,9 +1,9 @@ -import { Module } from "@nestjs/common"; -import { PresenterService } from "./presenter.service"; -import { TableModule } from "../table/table.module"; -import { DefaultPresenterService } from "./default.presenter.service"; -import { JsonPresenterService } from "./json.presenter.service"; -import { RawJsonPresenterService } from "./raw.json.presenter.service"; +import { Module } from '@nestjs/common'; +import { PresenterService } from './presenter.service'; +import { TableModule } from '../table/table.module'; +import { DefaultPresenterService } from './default.presenter.service'; +import { JsonPresenterService } from './json.presenter.service'; +import { RawJsonPresenterService } from './raw.json.presenter.service'; @Module({ providers: [ diff --git a/src/modules/presenter/presenter.service.ts b/src/modules/presenter/presenter.service.ts index 7226a20..a101e09 100644 --- a/src/modules/presenter/presenter.service.ts +++ b/src/modules/presenter/presenter.service.ts @@ -1,10 +1,10 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import * as Octokit from '@octokit/rest'; -import { PresentationMode, IPresenterService } from "./interfaces"; -import { DefaultPresenterService } from "./default.presenter.service"; -import { JsonPresenterService } from "./json.presenter.service"; -import { IReportItem, IProgramOptions } from "../../interfaces"; -import { RawJsonPresenterService } from "./raw.json.presenter.service"; +import { PresentationMode, IPresenterService } from './interfaces'; +import { DefaultPresenterService } from './default.presenter.service'; +import { JsonPresenterService } from './json.presenter.service'; +import { IReportItem, IProgramOptions } from '../../interfaces'; +import { RawJsonPresenterService } from './raw.json.presenter.service'; @Injectable() export class PresenterService implements IPresenterService { @@ -37,8 +37,8 @@ export class PresenterService implements IPresenterService { this.presenter.showFiglet(); } - public showGithubTokenInfo() { - this.presenter.showGithubTokenInfo(); + public showGithubTokenInfo(options: IProgramOptions) { + this.presenter.showGithubTokenInfo(options); } public showRateLimit(rateLimit: Octokit.RateLimitGetResponseRate, isMainInfo: boolean) { diff --git a/src/modules/presenter/raw.json.presenter.service.ts b/src/modules/presenter/raw.json.presenter.service.ts index c8a384c..7ff1fe7 100644 --- a/src/modules/presenter/raw.json.presenter.service.ts +++ b/src/modules/presenter/raw.json.presenter.service.ts @@ -1,8 +1,8 @@ import * as Octokit from '@octokit/rest'; -import { Injectable } from "@nestjs/common"; -import { IPresenterService } from "./interfaces"; -import { IReportItem, IProgramOptions } from "../../interfaces"; -import { getFilter } from "../../util/result-filter"; +import { Injectable } from '@nestjs/common'; +import { IPresenterService } from './interfaces'; +import { IReportItem, IProgramOptions } from '../../interfaces'; +import { getFilter } from '../../util/result-filter'; @Injectable() export class RawJsonPresenterService implements IPresenterService { @@ -27,6 +27,11 @@ export class RawJsonPresenterService implements IPresenterService { } public showData(report: IReportItem[], options: IProgramOptions) { + if (!report) { + this.log({ error: 'No data found' }); + return; + } + const filteredReport: IReportItem[] = report.filter(getFilter(options)); this.log(filteredReport); diff --git a/src/modules/rate-limit/rate.limit.module.ts b/src/modules/rate-limit/rate.limit.module.ts index 89e56f6..e501075 100644 --- a/src/modules/rate-limit/rate.limit.module.ts +++ b/src/modules/rate-limit/rate.limit.module.ts @@ -1,7 +1,7 @@ -import { Module } from "@nestjs/common"; -import { OctokitModule } from "../octokit/octokit.module"; -import { RateLimitService } from "./rate.limit.service"; -import { PresenterModule } from "../presenter/presenter.module"; +import { Module } from '@nestjs/common'; +import { OctokitModule } from '../octokit/octokit.module'; +import { RateLimitService } from './rate.limit.service'; +import { PresenterModule } from '../presenter/presenter.module'; @Module({ imports: [ diff --git a/src/modules/rate-limit/rate.limit.service.ts b/src/modules/rate-limit/rate.limit.service.ts index 41a4608..ebfdb7c 100644 --- a/src/modules/rate-limit/rate.limit.service.ts +++ b/src/modules/rate-limit/rate.limit.service.ts @@ -1,5 +1,5 @@ -import { Injectable } from "@nestjs/common"; -import { OctokitService } from "../octokit/octokit.service"; +import { Injectable } from '@nestjs/common'; +import { OctokitService } from '../octokit/octokit.service'; import { PresenterService } from '../presenter/presenter.service'; @Injectable() @@ -14,11 +14,17 @@ export class RateLimitService { public async getRateLimit() { this.presenterService.showSpinner('Getting rate limits info'); - const response = await this.octokitService.octokit.rateLimit.get(); + try { + const octokit = await this.octokitService.getOctokit(); + const response = await octokit.rateLimit.get(); - this.presenterService.hideSpinner({ success: true, message: 'Rate limits info received' }); + this.presenterService.hideSpinner({ success: true, message: 'Rate limits info received' }); - return response.data.rate; + return response.data.rate; + } catch (e) { + this.presenterService.hideSpinner({ success: false, message: 'Rate limits not received' }); + return null; + } } } diff --git a/src/modules/table/table.module.ts b/src/modules/table/table.module.ts index c6e6f05..0e2b925 100644 --- a/src/modules/table/table.module.ts +++ b/src/modules/table/table.module.ts @@ -1,5 +1,5 @@ -import { Module } from "@nestjs/common"; -import { TableService } from "./table.service"; +import { Module } from '@nestjs/common'; +import { TableService } from './table.service'; @Module({ providers: [TableService], diff --git a/src/modules/table/table.service.ts b/src/modules/table/table.service.ts index 435e8a4..22df970 100644 --- a/src/modules/table/table.service.ts +++ b/src/modules/table/table.service.ts @@ -1,19 +1,19 @@ -import { Injectable } from "@nestjs/common"; +import { Injectable } from '@nestjs/common'; import * as Table from 'cli-table3'; import * as changeCase from 'change-case'; -import { IProgramOptions, IReportItem } from "../../interfaces"; +import { IProgramOptions, IReportItem } from '../../interfaces'; @Injectable() export class TableService { private readonly ORDER = Object.freeze({ - "repo": Number.MIN_VALUE, - "version": -10, - "packageLockVersion": -11, - "yarnLockVersion": -12, - "nvmVersion": -7, - "enginesVersion": -6, - "error": Number.MAX_VALUE, + 'repo': Number.MIN_VALUE, + 'version': -10, + 'packageLockVersion': -11, + 'yarnLockVersion': -12, + 'nvmVersion': -7, + 'enginesVersion': -6, + 'error': Number.MAX_VALUE, }); public format(data: IReportItem[], options: IProgramOptions): string { diff --git a/src/util/result-filter.ts b/src/util/result-filter.ts index 4b238ea..cce5eac 100644 --- a/src/util/result-filter.ts +++ b/src/util/result-filter.ts @@ -1,4 +1,4 @@ -import { IFilterOptions } from "../interfaces"; +import { IFilterOptions } from '../interfaces'; export function getFilter({ skipError, skipEmpty }: IFilterOptions) { const filterError = ({ error }) => !error || (skipError instanceof Array ? !skipError.includes(+error) : !skipError); diff --git a/tslint.json b/tslint.json index 895be75..314c95d 100644 --- a/tslint.json +++ b/tslint.json @@ -2,6 +2,7 @@ "rules": { "indent": true, "semicolon": true, - "eofline": true + "eofline": true, + "quotemark": [true, "single"] } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 86bf59c..ec1ef12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -534,7 +534,7 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" -glob@^7.1.1: +glob@^7.1.1, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -687,6 +687,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash-decorators@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/lodash-decorators/-/lodash-decorators-6.0.1.tgz#f5347811ee7792eba4719042354541578142273d" + integrity sha512-1M0YC8G3nFTkejZEk2ehyvryEdcqj6xATH+ybI8j53cLs/bKRsavaE//y7nz/A0vxEFhxYqev7vdWfsuTJ1AtQ== + dependencies: + tslib "^1.9.2" + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -1023,6 +1030,13 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -1173,6 +1187,11 @@ tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslib@^1.9.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + tslint@^5.16.0: version "5.16.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.16.0.tgz#ae61f9c5a98d295b9a4f4553b1b1e831c1984d67"