├── .circleci └── config.yml ├── .codeclimate.yml ├── .dockerignore ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── bin ├── analyze ├── get-tslint-rules └── version ├── body-template.md.hbs ├── engine.json ├── package.json ├── src ├── codeclimate.ts ├── contentRenderer.ts ├── fileMatcher.ts ├── index.ts ├── issueConverter.ts ├── ruleLoader.ts ├── test │ ├── codeclimate.spec.ts │ ├── contentRenderer.spec.ts │ ├── fileMatcher.spec.ts │ ├── issueConverter.spec.ts │ ├── mockConfig.js │ ├── tsConfigNormalizer.spec.ts │ ├── tsLinter.spec.ts │ └── utils.spec.ts ├── tsConfigNormalizer.ts ├── tsLinter.ts └── utils.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | working_directory: ~/codeclimate-tslint 5 | docker: 6 | - image: node:8.11 7 | environment: 8 | CC_TEST_REPORTER_ID: 'a6e3ac5244e94afa515dd02af923e1205c3b56bb8969894fa4dd5deee012ac1d' 9 | steps: 10 | - checkout 11 | - run: 12 | name: Install cc-test-reporter 13 | command: | 14 | curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter 15 | chmod +x ./cc-test-reporter 16 | - restore_cache: 17 | key: codeclimate-tslint-{{ .Branch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} 18 | - run: 19 | name: Install dependencies 20 | command: yarn install 21 | - save_cache: 22 | paths: 23 | - ~/.cache/yarn 24 | key: codeclimate-tslint-{{ .Branch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} 25 | - run: 26 | name: Run tests 27 | command: | 28 | ./cc-test-reporter before-build 29 | yarn test 30 | ./cc-test-reporter after-build --exit-code $? 31 | - store_artifacts: 32 | path: coverage 33 | 34 | deploy: 35 | docker: 36 | - image: docker:17.05.0-ce-git 37 | environment: 38 | REPOSITORY: tkqubo/codeclimate-tslint 39 | steps: 40 | - checkout 41 | - setup_remote_docker 42 | - run: docker login -u $DOCKER_USER -p $DOCKER_AUTH 43 | - run: docker build -t=$REPOSITORY:b$CIRCLE_BUILD_NUM . 44 | - run: docker push $REPOSITORY:b$CIRCLE_BUILD_NUM 45 | workflows: 46 | version: 2 47 | build-and-publish: 48 | jobs: 49 | - build 50 | - deploy: 51 | requires: 52 | - build 53 | filters: 54 | branches: 55 | only: master 56 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | engines: 2 | tslint: 3 | enabled: true 4 | config: tslint.json 5 | ratings: 6 | paths: 7 | - "**.ts" 8 | exclude_paths: 9 | - bin 10 | - node_modules 11 | - typings 12 | - coverage 13 | - dist 14 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | src/*.js 3 | src/*.js.map 4 | test/*.js 5 | test/*.js.map 6 | node_modules 7 | coverage 8 | docs/ 9 | .nyc_output 10 | package-lock.json 11 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mhart/alpine-node:10 2 | 3 | LABEL maintainer = "tkqubo " 4 | 5 | RUN adduser -u 9000 -D app 6 | 7 | WORKDIR /usr/src/app 8 | 9 | COPY engine.json package.json yarn.lock ./ 10 | COPY ./bin/ ./bin/ 11 | 12 | RUN npm install --global yarn && \ 13 | apk --update add git jq && \ 14 | yarn install && \ 15 | jq /engine.json && \ 16 | bin/get-tslint-rules && \ 17 | chown -R app:app . && \ 18 | apk del --purge git jq && \ 19 | rm -rf /var/cache/apk/* /tmp/* ~/.npm && \ 20 | npm uninstall --global yarn 21 | 22 | 23 | USER app 24 | COPY . ./ 25 | USER root 26 | RUN mkdir -p dist 27 | RUN chown app:app -R dist 28 | 29 | USER app 30 | RUN npm run build 31 | 32 | VOLUME /code 33 | WORKDIR /code 34 | 35 | CMD ["/usr/src/app/bin/analyze"] 36 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: image test citest update_version release 2 | 3 | MODULE_NAME ?= codeclimate-tslint 4 | IMAGE_NAME ?= codeclimate/$(MODULE_NAME) 5 | RELEASE_REGISTRY ?= us.gcr.io/code_climate 6 | RELEASE_TAG ?= latest 7 | TEST_IMAGE_NAME ?= $(IMAGE_NAME)-test 8 | 9 | image: 10 | docker build --rm -t $(IMAGE_NAME) . 11 | 12 | test-image: image 13 | docker build --rm -t $(TEST_IMAGE_NAME) -f Dockerfile.test . 14 | 15 | test: 16 | @$(MAKE) test-image > /dev/null 17 | docker run \ 18 | -e PAGER=more \ 19 | --tty --interactive --rm \ 20 | $(TEST_IMAGE_NAME) 21 | 22 | update_database: 23 | date > DATABASE_VERSION 24 | make image 25 | 26 | release: 27 | docker tag $(IMAGE_NAME) $(RELEASE_REGISTRY)/$(MODULE_NAME):$(RELEASE_TAG) 28 | docker push $(RELEASE_REGISTRY)/$(MODULE_NAME):$(RELEASE_TAG) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Code Climate TSLint-Engine 2 | 3 | [![CircleCI](https://img.shields.io/circleci/project/tkqubo/codeclimate-tslint.svg)](https://circleci.com/gh/tkqubo/codeclimate-tslint) 4 | [![Code Climate](https://codeclimate.com/github/tkqubo/codeclimate-tslint/badges/gpa.svg)](https://codeclimate.com/github/tkqubo/codeclimate-tslint) 5 | [![Code Climate](https://img.shields.io/codeclimate/coverage/github/tkqubo/codeclimate-tslint.svg)](https://codeclimate.com/github/tkqubo/codeclimate-tslint/coverage) 6 | ![David](https://david-dm.org/tkqubo/codeclimate-tslint.svg) 7 | [![License](http://img.shields.io/:license-mit-blue.svg)](http://doge.mit-license.org) 8 | 9 | `codeclimate-tslint` is a Code Climate engine that wraps [tslint](http://palantir.github.io/tslint/). You can run it on your command line using the Code Climate CLI, or on Code Climate's hosted analysis platform. 10 | 11 | `TSLint` is a linter for the TypeScript language. 12 | 13 | 14 | ### Installation 15 | 16 | 1. If you haven't already, [install the Code Climate CLI](https://github.com/codeclimate/codeclimate). 17 | 2. Run `codeclimate engines:enable tslint`. This command both installs the engine and enables it in your `.codeclimate.yml` file. 18 | 3. You're ready to analyze! Browse into your project's folder and run `codeclimate analyze`. 19 | 20 | ### Need help? 21 | 22 | For help with `tslint`, [check out their documentation](http://palantir.github.io/tslint/). 23 | 24 | If you're running into a Code Climate issue, first look over this project's [GitHub Issues](https://github.com/tkqubo/codeclimate-tslint/issues), as your question may have already been covered. 25 | -------------------------------------------------------------------------------- /bin/analyze: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../dist/index'); -------------------------------------------------------------------------------- /bin/get-tslint-rules: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | module=tslint 5 | version=${1-$(./bin/version ${module})} 6 | echo "Pulling rules.json from $module $version" 7 | 8 | git clone --quiet --branch "$version" https://github.com/palantir/tslint.git /tmp/tslint 9 | 10 | cd /tmp/tslint 11 | yarn install 12 | yarn run compile:core 13 | yarn run compile:scripts 14 | yarn run docs 15 | cd - 16 | 17 | mkdir -p ./tslint/docs 18 | cp /tmp/tslint/docs/_data/rules.json ./tslint/docs/rules.json 19 | rm -rf /tmp/tslint 20 | -------------------------------------------------------------------------------- /bin/version: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -eu 3 | 4 | module=$1 5 | npm -j ls ${module} | jq -r '.dependencies["'${module}'"].version' 6 | -------------------------------------------------------------------------------- /body-template.md.hbs: -------------------------------------------------------------------------------- 1 | # Rule: {{{rule.ruleName}}} 2 | 3 | {{{rule.description}}}{{#if rule.descriptionDetails }} 4 | 5 | {{{rule.descriptionDetails}}} 6 | {{/if}} 7 | {{#if rule.rationale }} 8 | 9 | ##### Rationale 10 | 11 | {{{ rule.rationale }}} 12 | {{/if}} 13 | {{ notesHeader rule }} 14 | {{#if rule.typescriptOnly }}- **TypeScript Only** 15 | {{/if}}{{#if rule.hasFix }}- **Has Fix** 16 | {{/if}}{{#if rule.requiresTypeInfo }}- **Requires Type Info** 17 | {{/if}} 18 | 19 | {{#if rule.optionsDescription }} 20 | ### Config 21 | 22 | {{{ rule.optionsDescription }}} 23 | {{/if}} 24 | {{#if rule.optionExamples }} 25 | 26 | ##### Examples 27 | 28 | {{#each rule.optionExamples }} 29 | {{{json . false ../rule.ruleName }}} 30 | {{/each}} 31 | {{/if}} 32 | 33 | {{#if rule.options }} 34 | ##### Schema 35 | 36 | {{{json rule.options true '' }}} 37 | {{/if}} 38 | 39 | For more information see [this page](https://palantir.github.io/tslint/rules/{{{rule.ruleName}}}). 40 | -------------------------------------------------------------------------------- /engine.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tslint", 3 | "description": "Code Climate tslint-Engine", 4 | "maintainer": { 5 | "name": "tkqubo", 6 | "email": "tk.qubo@gmail.com" 7 | }, 8 | "languages" : ["TypeScript"], 9 | "version": "(generated)", 10 | "spec_version": "0.3.1" 11 | } 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeclimate-tslint", 3 | "version": "0.16.1", 4 | "description": "Code Climate TSLint-Engine for TypeScript", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "clean": "rm -rfv dist", 8 | "build": "npm run clean && tsc", 9 | "build:watch": "tsc --watch", 10 | "start": "npm run build && npm run docker", 11 | "docker": "npm run docker:build && npm run docker:run", 12 | "docker:build": "docker build --rm -t codeclimate/codeclimate-tslint .", 13 | "docker:run": "docker run -v $(pwd):/code codeclimate/codeclimate-tslint", 14 | "codeclimate": "npm run docker:build && npm run codeclimate:run", 15 | "codeclimate:run": "codeclimate analyze --dev", 16 | "test": "npm run test:mocha", 17 | "test:watch": "npm run mocha -- --watch --watch-extensions ts", 18 | "test:mocha": "nyc mocha src/test/*.spec.ts", 19 | "mocha": "mocha --require ts-node/register src/test/*.spec.ts" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "git+https://github.com/tkqubo/codeclimate-tslint.git" 24 | }, 25 | "keywords": [ 26 | "TypeScript", 27 | "tslint", 28 | "codeclimate", 29 | "Code Climate" 30 | ], 31 | "author": "tkqubo", 32 | "license": "MIT", 33 | "bugs": { 34 | "url": "https://github.com/tkqubo/codeclimate-tslint/issues" 35 | }, 36 | "homepage": "https://github.com/tkqubo/codeclimate-tslint#readme", 37 | "devDependencies": { 38 | "@angular/common": "^8.0.1", 39 | "@angular/compiler": "^8.0.1", 40 | "@angular/core": "^8.0.1", 41 | "@angular/platform-browser": "^8.0.1", 42 | "@angular/platform-browser-dynamic": "^8.0.1", 43 | "@types/glob": "^7.1.1", 44 | "@types/lodash": "^4.14.134", 45 | "@types/mocha": "^5.2.7", 46 | "@types/mock-fs": "^3.6.30", 47 | "@types/node": "^12.0.8", 48 | "@types/power-assert": "^1.5.0", 49 | "@types/power-assert-formatter": "^1.4.28", 50 | "@types/proxyquire": "^1.3.28", 51 | "@types/sinon": "^7.0.13", 52 | "@types/strip-json-comments": "0.0.30", 53 | "istanbul": "^0.4.5", 54 | "js-yaml": "^3.13.1", 55 | "mocha": "^6.1.4", 56 | "mock-fs": "^4.10.1", 57 | "nyc": "^14.1.1", 58 | "power-assert": "^1.6.1", 59 | "proxyquire": "^2.1.0", 60 | "sinon": "^7.3.2", 61 | "ts-node": "^8.3.0", 62 | "tslint-sonarts": "^1.9.0", 63 | "typescript": "^3.5.2", 64 | "zone.js": "~0.9.1" 65 | }, 66 | "dependencies": { 67 | "@kushki/tslint": "^5.2.12", 68 | "@types/js-yaml": "^3.12.1", 69 | "autobind-decorator": "^2.4.0", 70 | "codelyzer": "^5.1.0", 71 | "glob": "^7.1.4", 72 | "handlebars": "^4.1.2", 73 | "lodash": "^4.17.11", 74 | "prettier": "^1.18.2", 75 | "rxjs": "^6.5.2", 76 | "strip-json-comments": "^3.0.1", 77 | "tslint": "^5.17.0", 78 | "tslint-config-airbnb": "^5.11.1", 79 | "tslint-config-prettier": "^1.18.0", 80 | "tslint-config-standard": "^8.0.1", 81 | "tslint-eslint-rules": "^5.4.0", 82 | "tslint-microsoft-contrib": "^6.2.0", 83 | "tslint-no-circular-imports": "^0.7.0", 84 | "tslint-no-unused-expression-chai": "^0.1.4", 85 | "tslint-plugin-prettier": "^2.0.1", 86 | "tslint-react": "^4.0.0", 87 | "tslint-react-hooks": "^2.1.1" 88 | }, 89 | "nyc": { 90 | "include": [ 91 | "src/**/*.ts" 92 | ], 93 | "exclude": [ 94 | "src/**/*.spec.ts" 95 | ], 96 | "extension": [ 97 | ".ts" 98 | ], 99 | "require": [ 100 | "ts-node/register" 101 | ], 102 | "reporter": [ 103 | "text", 104 | "html", 105 | "lcov" 106 | ], 107 | "sourceMap": true, 108 | "instrument": true 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /src/codeclimate.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as fs from 'fs'; 4 | 5 | export type Location = ILineLocation|IPositionLocation; 6 | export type Position = ILineColumnPosition|IOffsetPosition; 7 | 8 | export interface IConfig { 9 | enabled?: boolean; 10 | channel?: string; 11 | include_paths: string[]; 12 | config?: string; 13 | ignore_warnings?: boolean; 14 | } 15 | 16 | export interface IIssue { 17 | type: string; 18 | check_name: string; 19 | description: string; 20 | content?: IContents; 21 | categories: Category[]; 22 | location: Location; 23 | other_locations?: Location[]; 24 | trace?: ITrace; 25 | remediation_points: number; 26 | severity?: Severity; 27 | fingerprint?: string; 28 | } 29 | 30 | export interface IContents { 31 | body: string; 32 | } 33 | 34 | export interface ILineLocation { 35 | path: string; 36 | lines: { 37 | begin: number; 38 | end: number; 39 | }; 40 | } 41 | 42 | export interface IPositionLocation { 43 | path: string; 44 | positions: { 45 | begin: Position; 46 | end: Position; 47 | }; 48 | } 49 | 50 | export interface ILineColumnPosition { 51 | line: number; 52 | column: number; 53 | } 54 | 55 | export interface IOffsetPosition { 56 | offset: number; 57 | } 58 | 59 | export interface ITrace { 60 | locations: Location[]; 61 | stacktrace?: boolean; 62 | } 63 | 64 | export const issueTypes = { 65 | Issue: 'issue' 66 | }; 67 | 68 | export type Category = 'Bug Risk'|'Clarity'|'Compatibility'|'Complexity'|'Duplication'|'Performance'|'Security'|'Style'; 69 | 70 | export type Severity = 'info'|'normal'|'critical'; 71 | 72 | export function loadCodeClimateConfig(file: string): IConfig { 73 | if (fs.existsSync(file) && fs.statSync(file).isFile()) { 74 | return JSON.parse(fs.readFileSync(file).toString('utf-8')); 75 | } else { 76 | console.warn(`${file} does not exist, so defaulting to process all the file under the 'src' directory`); 77 | return {enabled: true, include_paths: ['src']}; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/contentRenderer.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import * as path from 'path'; 3 | import * as fs from 'fs'; 4 | import * as handlebars from 'handlebars'; 5 | import {IRuleMetadata} from 'tslint'; 6 | import * as _ from 'lodash'; 7 | import autobind from 'autobind-decorator'; 8 | 9 | handlebars.registerHelper('notesHeader', (rule: IRuleMetadata) => { 10 | return (rule.typescriptOnly || rule.hasFix || rule.requiresTypeInfo) ? `\n##### Notes\n` : ''; 11 | }); 12 | handlebars.registerHelper('json', (obj: any, escape: boolean = false, prefix: string) => { 13 | const json = escape ? JSON.stringify(obj, null, 2) : obj; 14 | const prefixString = !_.isEmpty(prefix) ? '"' + prefix + '": ' : ''; 15 | return '```json\n' + prefixString + json + '\n```'; 16 | }); 17 | 18 | export class ContentRenderer { 19 | static templateFileName: string = 'body-template.md.hbs'; 20 | 21 | readonly template: string; 22 | 23 | constructor(public templatePath: string) { 24 | const templateFile = path.join(templatePath, ContentRenderer.templateFileName); 25 | this.template = fs.readFileSync(templateFile).toString('UTF-8'); 26 | } 27 | 28 | @autobind 29 | render(rule: IRuleMetadata): string { 30 | return handlebars.compile(this.template)({rule}); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/fileMatcher.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import * as fs from 'fs'; 3 | import * as glob from 'glob'; 4 | import * as _ from 'lodash'; 5 | import autobind from 'autobind-decorator'; 6 | 7 | @autobind 8 | export class FileMatcher { 9 | constructor(public basePath: string, public extensions: string[]) { } 10 | 11 | matchFiles(includePaths: string[]): string[] { 12 | const expandedIncludePaths: string[] = 13 | _.flatten(includePaths.map((path) => glob.sync(`${this.basePath}${path}`))); 14 | const [directories, files]: string[][] = 15 | _.partition(expandedIncludePaths, (file) => fs.lstatSync(file).isDirectory()); 16 | 17 | return _.chain(directories) 18 | .map((directory) => glob.sync(`${directory}/**/**`)) 19 | .flatMap(this.prunePathsWithinSymlinks) 20 | .concat(files) 21 | .filter(this.isFileWithMatchingExtension) 22 | .value() as string[]; 23 | } 24 | 25 | private prunePathsWithinSymlinks(paths: string[]): string[] { 26 | const symlinks = paths.filter((path) => fs.lstatSync(path).isSymbolicLink()); 27 | return paths.filter((path) => symlinks.every((symlink) => path.indexOf(symlink) !== 0)); 28 | } 29 | 30 | private isFileWithMatchingExtension(file: string): boolean { 31 | const stats = fs.lstatSync(file); 32 | const extension = '.' + file.split('.').pop(); 33 | return ( 34 | stats.isFile() && 35 | !stats.isSymbolicLink() && 36 | this.extensions.indexOf(extension) >= 0 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import {TsLinter} from './tsLinter'; 4 | import {IRuleMetadata} from 'tslint'; 5 | import {IConfig, loadCodeClimateConfig} from './codeclimate'; 6 | import {getRules} from './ruleLoader'; 7 | import {map} from 'rxjs/operators'; 8 | 9 | /** A path where code under analysis is deployed */ 10 | const targetPath: string = '/code/'; 11 | /** A path where this codeclimate-tslint program is installed on Docker container */ 12 | const linterPath: string = '/usr/src/app/'; 13 | /** Codeclimate config path */ 14 | const configPath: string = '/config.json'; 15 | 16 | const codeClimateConfig: IConfig = loadCodeClimateConfig(configPath); 17 | const rules: IRuleMetadata[] = getRules(linterPath); 18 | 19 | const tsLinter: TsLinter = new TsLinter({ 20 | targetPath, 21 | linterPath, 22 | codeClimateConfig, 23 | rules 24 | }); 25 | 26 | tsLinter 27 | .lint() 28 | .pipe( 29 | map(j => JSON.stringify(j)), 30 | map(json => `${json}\u0000`) 31 | ) 32 | .subscribe(line => console.log(line)); 33 | -------------------------------------------------------------------------------- /src/issueConverter.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import {IRuleMetadata, RuleFailure, RuleFailurePosition} from 'tslint'; 4 | import * as _ from 'lodash'; 5 | import * as CodeClimate from './codeclimate'; 6 | import {ContentRenderer} from './contentRenderer'; 7 | import {ITsLinterOption} from './tsLinter'; 8 | import autobind from 'autobind-decorator'; 9 | 10 | export class RuleNameNotFoundError extends Error { 11 | constructor(public ruleName: string) { 12 | super(`rule named ${ruleName} is not found in the metadata.`); 13 | } 14 | } 15 | 16 | @autobind 17 | export class IssueConverter { 18 | readonly filePattern: RegExp; 19 | readonly contentRenderer: ContentRenderer; 20 | 21 | constructor(public option: ITsLinterOption) { 22 | this.filePattern = new RegExp(`${option.targetPath}(.*)`, 'i'); 23 | this.contentRenderer = new ContentRenderer(option.linterPath); 24 | } 25 | 26 | convert(failure: RuleFailure): CodeClimate.IIssue { 27 | return { 28 | type: CodeClimate.issueTypes.Issue, 29 | check_name: failure.getRuleName(), 30 | content: { 31 | body: this.contentBody(failure.getRuleName()) 32 | }, 33 | description: failure.getFailure(), 34 | categories: ['Style'], // currently only Style is available 35 | remediation_points: 50000, // all style issues are 50k 36 | location: this.convertToLocation(failure) 37 | }; 38 | } 39 | 40 | private contentBody(name: string): string { 41 | const rule: IRuleMetadata | null = _.find(this.option.rules, { ruleName: name }); 42 | if (rule != null) { 43 | return this.contentRenderer.render(rule); 44 | } else { 45 | throw new RuleNameNotFoundError(name); 46 | } 47 | } 48 | 49 | private convertToLocation(failure: RuleFailure): CodeClimate.Location { 50 | return { 51 | path: this.getFilePath(failure), 52 | positions: { 53 | begin: this.convertToLineColumnPosition(failure.getStartPosition()), 54 | end: this.convertToLineColumnPosition(failure.getEndPosition()) 55 | } 56 | }; 57 | } 58 | 59 | private getFilePath(failure: RuleFailure): string { 60 | return this.filePattern.exec(failure.getFileName()).pop(); 61 | } 62 | 63 | private convertToLineColumnPosition(position: RuleFailurePosition): CodeClimate.ILineColumnPosition { 64 | return { 65 | line: position.getLineAndCharacter().line + 1, 66 | column: position.getLineAndCharacter().character + 1 67 | }; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/ruleLoader.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as fs from 'fs'; 4 | import * as _ from 'lodash'; 5 | import * as path from 'path'; 6 | import {IRuleMetadata} from 'tslint'; 7 | import Utils from './utils'; 8 | 9 | /** Tslint rule file which is installed by `./bin/get-tslint-rules` */ 10 | export const tslintRuleFile: string = '../tslint/docs/rules'; 11 | /** Rule paths that are provided by third parties */ 12 | export const additionalRulePaths = [ 13 | 'codelyzer', 14 | 'tslint-eslint-rules/dist/rules', 15 | 'tslint-microsoft-contrib', 16 | 'tslint-plugin-prettier/rules', 17 | 'tslint-react/rules', 18 | 'tslint-react-hooks/dist', 19 | 'tslint-sonarts/lib/rules', 20 | ]; 21 | 22 | export function getRules(additionalRuleBasePath: string): IRuleMetadata[] { 23 | return getTslintRules().concat(getAdditionalRules(additionalRuleBasePath)); 24 | } 25 | 26 | export function getTslintRules(): IRuleMetadata[] { 27 | return require(tslintRuleFile) as IRuleMetadata[]; 28 | } 29 | 30 | export function getAdditionalRules(basePath: string): IRuleMetadata[] { 31 | const rules = additionalRulePaths 32 | .map(p => `node_modules/${p}`) 33 | .map(p => path.join(basePath, p)) 34 | .map(loadRules); 35 | return _.flatten(rules); 36 | } 37 | 38 | export function loadRules(rulePath: string): IRuleMetadata[] { 39 | return fs.readdirSync(rulePath) 40 | .filter(isRuleFile) 41 | .map(file => { 42 | const rule = require(path.join(rulePath, file)).Rule || {}; 43 | if (rule.metadata) { 44 | return rule.metadata as IRuleMetadata; 45 | } else { 46 | const ruleName = rule.RULE_NAME || _.kebabCase(file.match(/(.*)Rule\.js$/).pop()); 47 | return Utils.createEmptyRuleMetadata(ruleName); 48 | } 49 | }) 50 | .filter(metadata => !!metadata); 51 | } 52 | 53 | export function isRuleFile(fileName: string): boolean { 54 | return fileName.endsWith('Rule.js'); 55 | } 56 | -------------------------------------------------------------------------------- /src/test/codeclimate.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import {loadCodeClimateConfig} from '../codeclimate'; 4 | import * as _ from 'lodash'; 5 | import * as assert from 'power-assert'; 6 | import * as mock from 'mock-fs'; 7 | 8 | describe('codeclimate', () => { 9 | describe('loadCodeClimateConfig', () => { 10 | it('should load a file as a config if it exists', async () => { 11 | // Given 12 | const filePath = 'filePath' + _.random(); 13 | const expected = { 14 | include_paths: [ 'something', ], 15 | }; 16 | mock({[filePath]: JSON.stringify(expected)}); 17 | // When 18 | const actual = loadCodeClimateConfig(filePath); 19 | // Then 20 | assert.deepStrictEqual(actual, expected); 21 | }); 22 | it('should return a default config if a config file does not exist', () => { 23 | // Given 24 | const filePath = 'filePath' + _.random(); 25 | const expected = {enabled: true, include_paths: ['src']}; 26 | // When 27 | const actual = loadCodeClimateConfig(filePath); 28 | // Then 29 | assert.deepStrictEqual(actual, expected); 30 | }); 31 | afterEach(() => mock.restore()); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/test/contentRenderer.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const assert = require('power-assert'); 3 | import {IRuleMetadata} from 'tslint'; 4 | import {ContentRenderer} from '../contentRenderer'; 5 | 6 | describe('ContentRenderer', () => { 7 | describe('.render(name: string, rule: IRuleMetadata)', () => { 8 | it('renders markdown with full information from rule metadata', done => { 9 | // Given 10 | const renderer = new ContentRenderer('./'); 11 | const rule: IRuleMetadata = { 12 | ruleName: 'foo-rule', 13 | type: 'style', 14 | description: 'DESCRIPTION', 15 | descriptionDetails: 'DETAILS', 16 | hasFix: true, 17 | optionsDescription: '`true`', 18 | options: { 19 | type: 'array', 20 | items: { 21 | type: 'string', 22 | enum: [ 'yes', 'no' ] 23 | } 24 | }, 25 | optionExamples: [ 26 | 'true', 'false' 27 | ], 28 | rationale: 'RATIONALE', 29 | requiresTypeInfo: true, 30 | typescriptOnly: true 31 | }; 32 | const optionExamples = (rule.optionExamples as string[]) 33 | .map(o => '```json\n' + '"' + rule.ruleName + '": ' + o + '\n```').join('\n'); 34 | const options = '```json\n' + JSON.stringify(rule.options, null, 2) + '\n```'; 35 | const expected = `# Rule: ${rule.ruleName} 36 | 37 | ${rule.description} 38 | 39 | ${rule.descriptionDetails} 40 | 41 | ##### Rationale 42 | 43 | ${rule.rationale} 44 | 45 | ##### Notes 46 | 47 | - **TypeScript Only** 48 | - **Has Fix** 49 | - **Requires Type Info** 50 | 51 | ### Config 52 | 53 | ${rule.optionsDescription} 54 | 55 | ##### Examples 56 | 57 | ${optionExamples} 58 | 59 | ##### Schema 60 | 61 | ${options} 62 | 63 | For more information see [this page](https://palantir.github.io/tslint/rules/${rule.ruleName}). 64 | `; 65 | // When 66 | const actual = renderer.render(rule); 67 | // Then 68 | assert.equal(actual, expected); 69 | done(); 70 | }); 71 | it('renders markdown with least information from rule metadata', done => { 72 | // Given 73 | const renderer = new ContentRenderer('./'); 74 | const rule: IRuleMetadata = { 75 | ruleName: 'foo-rule', 76 | type: 'style', 77 | description: 'DESCRIPTION', 78 | optionsDescription: '`true`', 79 | options: { }, 80 | typescriptOnly: false 81 | }; 82 | const options = '```json\n' + JSON.stringify(rule.options, null, 2) + '\n```'; 83 | const expected = `# Rule: ${rule.ruleName} 84 | 85 | ${rule.description} 86 | 87 | ### Config 88 | 89 | ${rule.optionsDescription} 90 | 91 | ##### Schema 92 | 93 | ${options} 94 | 95 | For more information see [this page](https://palantir.github.io/tslint/rules/${rule.ruleName}).`; 96 | // When 97 | const actual = renderer.render(rule); 98 | // Then 99 | done(); 100 | }); 101 | }); 102 | }); 103 | -------------------------------------------------------------------------------- /src/test/fileMatcher.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const assert = require('power-assert'); 3 | import * as proxyquire from 'proxyquire'; 4 | const globMock: any = {}; 5 | const fsMock: any = { 6 | lstatSync: (file: string): any => ({ 7 | isFile: () => !/\.non-file/.test(file), 8 | isSymbolicLink: () => /.sym/.test(file), 9 | isDirectory: () => file.indexOf('.') === -1 10 | }) 11 | }; 12 | import {FileMatcher as ActualFileMatcher} from '../fileMatcher'; 13 | const fileMatcherModule = proxyquire('../fileMatcher', { glob: globMock, fs: fsMock }); 14 | const FileMatcher: typeof ActualFileMatcher = fileMatcherModule.FileMatcher; 15 | 16 | const basePath = '/file-matcher-test/'; 17 | 18 | function createSyncMockFunction(baseMap: { [pattern: string]: string[] }): (path: string) => string[] { 19 | return (path: string) => { 20 | return (baseMap[path.substring(basePath.length)] || []).map((file) => `${basePath}${file}`); 21 | }; 22 | } 23 | 24 | describe('FileMatcher', () => { 25 | globMock.sync = createSyncMockFunction({ 26 | '**/**': [ 27 | 'index.ts', 28 | 'index.js', 29 | 'some.non-file.ts', 30 | 'some.sym.ts', 31 | 'src', 32 | 'src/lib', 33 | 'src/lib/util.ts', 34 | 'src/lib/util.js', 35 | 'node_modules', 36 | 'node_modules/util/util.ts', 37 | 'node_modules/util/util.js', 38 | 'node_modules/README.md' 39 | ], 40 | 'node_modules': [ 41 | 'node_modules', 42 | 'node_modules/util/util.ts', 43 | 'node_modules/util/util.js', 44 | 'node_modules/README.md' 45 | ], 46 | '*.ts': [ 47 | 'index.ts', 48 | 'some.non-file.ts', 49 | 'some.sym.ts', 50 | ], 51 | 'src/**/*': [ 52 | 'src/lib', 53 | 'src/lib/util.ts', 54 | 'src/lib/util.js', 55 | ] 56 | }); 57 | const fileMatcher = new FileMatcher(basePath, ['.ts']); 58 | 59 | describe('.matchFiles(includePaths: string[])', () => { 60 | it('passes', (done) => { 61 | // Given 62 | const expected = [ 63 | `${basePath}index.ts`, 64 | `${basePath}src/lib/util.ts` 65 | ]; 66 | // When 67 | const actual = fileMatcher.matchFiles(['*.ts', 'src/**/*']); 68 | // Then 69 | assert.deepStrictEqual(actual, expected); 70 | done(); 71 | }); 72 | 73 | it('passes with empty list', (done) => { 74 | assert.deepStrictEqual(fileMatcher.matchFiles([]), []); 75 | done(); 76 | }); 77 | }); 78 | }); 79 | -------------------------------------------------------------------------------- /src/test/issueConverter.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import {fail, ok} from 'power-assert'; 4 | import * as sinon from 'sinon'; 5 | import * as ts from 'typescript'; 6 | import {IRuleMetadata, RuleFailure} from 'tslint'; 7 | import {IssueConverter} from '../issueConverter'; 8 | import {IConfig, ILineColumnPosition, IPositionLocation} from '../codeclimate'; 9 | 10 | const assert = require('power-assert'); 11 | 12 | describe('IssueConverter', () => { 13 | describe('.convert(failure: RuleFailure)', () => { 14 | const linterPath: string = './'; 15 | const targetPath: string = '/base/path/'; 16 | const codeClimateConfig: IConfig = {include_paths: []}; 17 | const failure = 'Style failed'; 18 | const ruleName = 'foo-rule'; 19 | const ruleMetadata: IRuleMetadata = { 20 | description: 'foo', 21 | ruleName, 22 | type: 'style', 23 | typescriptOnly: true, 24 | options: null, 25 | optionsDescription: 'option', 26 | optionExamples: [ 27 | 'foo', 'bar' 28 | ] 29 | }; 30 | const converter = new IssueConverter({targetPath, linterPath, codeClimateConfig, rules: [ruleMetadata]}); 31 | const sourceFile = sinon.mock({}) as any as ts.SourceFile; 32 | const sourcePath = 'path/target-source-file.ts'; 33 | sourceFile.fileName = `${targetPath}${sourcePath}`; 34 | sourceFile.getLineAndCharacterOfPosition = (pos: number) => { 35 | return pos === 1 ? {line: 2, character: 30} : {line: 8, character: 24}; 36 | }; 37 | it('converts RuleFailure object properly', () => { 38 | // given 39 | const ruleFailure = new RuleFailure(sourceFile, 1, 2, failure, ruleName); 40 | // when 41 | const actual = converter.convert(ruleFailure); 42 | // then 43 | assert(actual !== null && actual !== undefined); 44 | assert(actual.type === 'issue'); 45 | assert(actual.categories.length === 1); 46 | assert(actual.categories[0] === 'Style'); 47 | assert(actual.check_name === ruleName); 48 | assert(actual.description === failure); 49 | const location = actual.location as IPositionLocation; 50 | const begin = location.positions.begin as ILineColumnPosition; 51 | const end = location.positions.end as ILineColumnPosition; 52 | assert(location.path === sourcePath); 53 | assert(begin.line === 3); 54 | assert(begin.column === 31); 55 | assert(end.line === 9); 56 | assert(end.column === 25); 57 | }); 58 | it('throws an error when rule name is not found', () => { 59 | // given 60 | const ruleFailure = new RuleFailure(sourceFile, 1, 2, failure, 'non-existent'); 61 | try { 62 | // when 63 | converter.convert(ruleFailure); 64 | fail(); 65 | } catch (e) { 66 | // then 67 | ok('should fail'); 68 | } 69 | }); 70 | }); 71 | }); 72 | -------------------------------------------------------------------------------- /src/test/mockConfig.js: -------------------------------------------------------------------------------- 1 | module.exports = { key1: "value", key2: 123, key4: false, key5: null }; 2 | -------------------------------------------------------------------------------- /src/test/tsConfigNormalizer.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as assert from 'power-assert'; 4 | import * as fs from 'fs'; 5 | import * as mock from 'mock-fs'; 6 | import * as path from 'path'; 7 | import {temporaryDir} from '../utils'; 8 | import {load, normalizeTsConfig, resolveRulesDirectory, save} from '../tsConfigNormalizer'; 9 | import {RawConfigFile} from 'tslint/lib/configuration'; 10 | 11 | describe('tsConfigNormalizer', () => { 12 | const altBase = 'alternative'; 13 | afterEach(() => mock.restore()); 14 | describe('normalizeTsConfig', () => { 15 | it('should normalize tsconfig.json', async () => { 16 | // Given 17 | const input = '/somewhere/tsconfig.json'; 18 | const existentOnBase = 'existent-on-base'; 19 | const existentOnAltBase = 'existent-on-alt-base'; 20 | const existentOnBoth = 'existent-on-both'; 21 | const nonexistent = 'nonexistent'; 22 | const originalConfig: RawConfigFile = { 23 | rules: { 24 | someRule: [Math.random()], 25 | }, 26 | rulesDirectory: [existentOnBase, existentOnAltBase, existentOnBoth, nonexistent], 27 | }; 28 | mock({ 29 | [temporaryDir]: {}, 30 | [input]: JSON.stringify(originalConfig), 31 | [existentOnBase]: '', 32 | [path.join(altBase, existentOnAltBase)]: '', 33 | [existentOnBoth]: '', 34 | [path.join(altBase, existentOnBoth)]: '', 35 | }); 36 | const expectedNormalizedConfig: RawConfigFile = { 37 | ...originalConfig, 38 | rulesDirectory: [ 39 | existentOnBase, path.join(altBase, existentOnAltBase), existentOnBoth, nonexistent 40 | ].map(p => path.resolve(p)), 41 | }; 42 | // When 43 | const actual = normalizeTsConfig(input, altBase); 44 | // Then 45 | assert.equal(actual.startsWith(temporaryDir), true); 46 | assert.equal(actual.endsWith('.json'), true); 47 | const actualNormalizedConfig = load(actual); 48 | assert.deepStrictEqual(actualNormalizedConfig, expectedNormalizedConfig); 49 | }); 50 | }); 51 | describe('load', () => { 52 | it('should load JSON', async () => { 53 | // Given 54 | const fileName = 'json-with-comment.json'; 55 | const json = `{ 56 | // comment 57 | "key1": "value", 58 | "key2": 123, 59 | // key2: 456, 60 | /* 61 | key3: 789, 62 | */ 63 | "key4": false, 64 | "key5": null 65 | }`; 66 | mock({[fileName]: json}); 67 | const expected: any = {key1: 'value', key2: 123, key4: false, key5: null}; 68 | // When 69 | const actual = load(fileName); 70 | // Then 71 | assert.deepStrictEqual(actual, expected); 72 | }); 73 | 74 | it('should load JS', async () => { 75 | // Given 76 | const fileName = path.join(__dirname, 'mockConfig.js'); 77 | const expected: any = {key1: 'value', key2: 123, key4: false, key5: null}; 78 | // When 79 | const actual = load(fileName); 80 | // Then 81 | assert.deepStrictEqual(actual, expected); 82 | }); 83 | }); 84 | describe('save', () => { 85 | it('should save JSON', async () => { 86 | // Given 87 | mock({[temporaryDir]: {}}); 88 | const file = `/tmp/codeclimate-tslint/tsconfig-${Math.random()}.json`; 89 | const expected: any = {saved: Math.random()}; 90 | // When 91 | save(expected, file); 92 | // Then 93 | assert.deepStrictEqual(JSON.parse(fs.readFileSync(file).toString('UTF-8')), expected); 94 | fs.unlinkSync(file); 95 | }); 96 | }); 97 | describe('resolveRulesDirectory', () => { 98 | it('should retain rules directory when it exists', async () => { 99 | // Given 100 | const expected = 'single-dir'; 101 | mock({[expected]: ''}); 102 | // When 103 | const actual = resolveRulesDirectory(expected, altBase); 104 | // Then 105 | assert.deepStrictEqual(actual, path.resolve(expected)); 106 | }); 107 | it('should resolve rules directory when it does not exist but does on alternative base', async () => { 108 | // Given 109 | const dir = 'non-existent-dir'; 110 | const expected = path.join(altBase, dir); 111 | mock({[expected]: ''}); 112 | // When 113 | const actual = resolveRulesDirectory(dir, altBase); 114 | // Then 115 | assert.deepStrictEqual(actual, path.resolve(expected)); 116 | }); 117 | it('should retain rules directory when it does not exist', async () => { 118 | // Given 119 | const expected = 'single-dir'; 120 | // When 121 | const actual = resolveRulesDirectory(expected, altBase); 122 | // Then 123 | assert.deepStrictEqual(actual, path.resolve(expected)); 124 | }); 125 | it('should resolve string array', async () => { 126 | // Given 127 | const existentOnBase = 'existent-on-base'; 128 | const existentOnAltBase = 'existent-on-alt-base'; 129 | const existentOnBoth = 'existent-on-both'; 130 | const nonexistent = 'nonexistent'; 131 | const expected = [existentOnBase, path.join(altBase, existentOnAltBase), existentOnBoth, nonexistent]; 132 | mock({ 133 | [existentOnBase]: '', 134 | [path.join(altBase, existentOnAltBase)]: '', 135 | [existentOnBoth]: '', 136 | [path.join(altBase, existentOnBoth)]: '', 137 | }); 138 | // When 139 | const actual = resolveRulesDirectory( 140 | [existentOnBase, existentOnAltBase, existentOnBoth, nonexistent], 141 | altBase 142 | ); 143 | // Then 144 | assert.deepStrictEqual(actual, expected.map(p => path.resolve(p))); 145 | }); 146 | it('should not resolve undefined rules directory', async () => { 147 | // Given 148 | const expected: undefined = undefined; 149 | // When 150 | const actual = resolveRulesDirectory(expected, altBase); 151 | // Then 152 | assert.deepStrictEqual(actual, expected); 153 | }); 154 | }); 155 | }); 156 | -------------------------------------------------------------------------------- /src/test/tsLinter.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as assert from 'power-assert'; 4 | import * as _ from 'lodash'; 5 | import * as mock from 'mock-fs'; 6 | import * as path from 'path'; 7 | import * as ts from 'typescript'; 8 | import {ILinterOptions, IRuleMetadata, Linter, LintResult, RuleFailure} from 'tslint'; 9 | import {ITsLinterOption, TsLinter} from '../tsLinter'; 10 | import {IConfig, IIssue} from '../codeclimate'; 11 | import {ContentRenderer} from '../contentRenderer'; 12 | import {IConfigurationFile} from 'tslint/lib/configuration'; 13 | import Utils, {temporaryDir} from '../utils'; 14 | import {Observable} from 'rxjs'; 15 | import {catchError, map, toArray} from 'rxjs/operators'; 16 | 17 | describe('TsLinter', () => { 18 | const linterPath: string = './'; 19 | const targetPath: string = '/base/path/'; 20 | const option: ITsLinterOption = {targetPath, linterPath, codeClimateConfig: {include_paths: []}, rules: []}; 21 | const templateFile = path.join(linterPath, ContentRenderer.templateFileName); 22 | const defaultTsLintFile = path.join(linterPath, TsLinter.defaultTsLintFileName); 23 | 24 | function mockFiles(...files: string[]) { 25 | mock(_ 26 | .reduce( 27 | files.concat(defaultTsLintFile, templateFile), 28 | (acc, file) => { 29 | acc[file] = '{}'; 30 | return acc; 31 | }, 32 | {[temporaryDir]: {}} 33 | )); 34 | } 35 | 36 | afterEach(() => mock.restore()); 37 | 38 | describe('.getTsLintFile()', () => { 39 | it('returns a specified file on the target', () => { 40 | // Given 41 | const config = 'specified.json'; 42 | const codeClimateConfig: IConfig = {config, include_paths: []}; 43 | const expected = path.join(targetPath, config); 44 | mockFiles(expected); 45 | // When 46 | const tsLinter = new TsLinter({...option, codeClimateConfig}); 47 | // Then 48 | assert.equal(tsLinter.getTsLintFile(), expected); 49 | }); 50 | it('returns a default file on the linter when a specified file on the target doe not exist', () => { 51 | // Given 52 | const config = 'non-existent.json'; 53 | const codeClimateConfig: IConfig = {config, include_paths: []}; 54 | const targetDefaultTsLintFile = path.join(targetPath, TsLinter.defaultTsLintFileName); 55 | mockFiles(targetDefaultTsLintFile); 56 | // When 57 | const tsLinter = new TsLinter({...option, codeClimateConfig}); 58 | // Then 59 | assert.equal(tsLinter.getTsLintFile(), defaultTsLintFile); 60 | }); 61 | it('returns a default file on the linter when no file on the target exists', () => { 62 | // Given 63 | const config = 'non-existent.json'; 64 | const codeClimateConfig: IConfig = {config, include_paths: []}; 65 | mockFiles(); 66 | // When 67 | const tsLinter = new TsLinter({...option, codeClimateConfig}); 68 | // Then 69 | assert.equal(tsLinter.getTsLintFile(), defaultTsLintFile); 70 | }); 71 | it('returns a default file on the target', () => { 72 | // Given 73 | const targetDefaultTsLintFile = path.join(targetPath, TsLinter.defaultTsLintFileName); 74 | mockFiles(targetDefaultTsLintFile); 75 | // When 76 | const tsLinter = new TsLinter(option); 77 | // Then 78 | assert.equal(tsLinter.getTsLintFile(), targetDefaultTsLintFile); 79 | }); 80 | it('returns a default file on the linter', () => { 81 | // Given 82 | mockFiles(); 83 | // When 84 | const tsLinter = new TsLinter(option); 85 | // Then 86 | assert.equal(tsLinter.getTsLintFile(), defaultTsLintFile); 87 | }); 88 | }); 89 | describe('.listFiles()', () => { 90 | it('returns file list', () => { 91 | // Given 92 | mockFiles(); 93 | const include_paths: string[] = ['one.ts', 'two.ts']; 94 | const codeClimateConfig: IConfig = {...option.codeClimateConfig, include_paths}; 95 | const tsLinter = new TsLinter({...option, codeClimateConfig}); 96 | tsLinter.fileMatcher.matchFiles = includePaths => includePaths.concat('three.ts'); 97 | // When 98 | const actual = tsLinter.listFiles(); 99 | // Then 100 | assert.deepStrictEqual(actual, include_paths.concat('three.ts')); 101 | }); 102 | }); 103 | describe('.lint()', () => { 104 | // Mocked version of Linter 105 | class MockedLinter extends Linter { 106 | constructor(options: ILinterOptions, private dummyFailures: RuleFailure[]) { 107 | super(options); 108 | } 109 | 110 | lint(fileName: string, source: string, configuration?: IConfigurationFile): void { 111 | // 112 | } 113 | 114 | getResult(): LintResult { 115 | return { 116 | errorCount: 2, 117 | warningCount: 0, 118 | failures: this.dummyFailures, 119 | format: 'json', 120 | output: 'output' 121 | }; 122 | } 123 | } 124 | 125 | // Mocked version of TsLinter 126 | class MockedTsLinter extends TsLinter { 127 | constructor(codeClimateConfig: IConfig, private dummyFailures: RuleFailure[]) { 128 | super({targetPath, linterPath, codeClimateConfig, rules}); 129 | } 130 | 131 | listFiles(): string[] { 132 | return ['file.ts']; 133 | } 134 | 135 | protected createLinter(): Linter { 136 | return new MockedLinter(this.linterOption, this.dummyFailures); 137 | } 138 | } 139 | 140 | function createSourceFile(fileName: string): ts.SourceFile { 141 | const source = `'use strict'; 142 | var unused = 32; 143 | let object = { 144 | c: 42, 145 | a: false 146 | }; 147 | `; 148 | return ts.createSourceFile(`${targetPath}${fileName}`, source, ts.ScriptTarget.ES2016); 149 | } 150 | 151 | function createIssue(): IIssue { 152 | return { 153 | type: 'issue', 154 | check_name: ruleName, 155 | content: { 156 | body: '' // omit testing 157 | }, 158 | description: 'some failure', 159 | categories: ['Style'], 160 | remediation_points: 50000, 161 | location: { 162 | path: sourceFile, 163 | positions: { 164 | begin: {line: 1, column: 1}, 165 | end: {line: 1, column: 1} 166 | } 167 | } 168 | }; 169 | } 170 | 171 | function assertLintResult(actual$: Observable, expected: IIssue[], done: Mocha.Done): void { 172 | actual$ 173 | .pipe( 174 | // skip body comparison 175 | map((result: IIssue) => { 176 | result.content = {body: ''}; 177 | return result; 178 | }), 179 | toArray(), 180 | catchError(assert.fail.bind(assert)), 181 | ) 182 | .subscribe( 183 | (actual: any) => { 184 | // Then 185 | assert.deepStrictEqual(actual, expected); 186 | done(); 187 | } 188 | ); 189 | } 190 | 191 | const ruleName = 'foo-rule'; 192 | const rules: IRuleMetadata[] = [ 193 | { 194 | description: 'foo', 195 | ruleName, 196 | type: 'style', 197 | typescriptOnly: true, 198 | options: null, 199 | optionsDescription: '', 200 | optionExamples: [] 201 | } 202 | ]; 203 | const sourceFile = 'failed.ts'; 204 | const file = createSourceFile(sourceFile); 205 | 206 | it('passes', done => { 207 | // Given 208 | const tslintPath = path.join(linterPath, TsLinter.defaultTsLintFileName); 209 | mockFiles(tslintPath, 'file.ts'); 210 | const location = { 211 | path: sourceFile, 212 | positions: { 213 | begin: {line: 1, column: 2}, 214 | end: {line: 2, column: 7} 215 | } 216 | }; 217 | const issue: IIssue = {...createIssue(), location}; 218 | const failure: RuleFailure = new RuleFailure(file, 1, 20, issue.description, ruleName); 219 | const tsLinter: TsLinter = new MockedTsLinter({include_paths: []}, [failure]); 220 | const expected: IIssue[] = [issue]; 221 | // When 222 | const actual = tsLinter.lint(); 223 | // Then 224 | assertLintResult(actual, expected, done); 225 | }); 226 | it('doesn\'t report warnings if ignore_warnings option is given', done => { 227 | // Given 228 | const tslintPath = path.join(linterPath, TsLinter.defaultTsLintFileName); 229 | mockFiles(tslintPath, 'file.ts'); 230 | const warningIssue: IIssue = {...createIssue(), description: 'some warning'}; 231 | const errorIssue: IIssue = {...createIssue(), description: 'some error'}; 232 | const warning: RuleFailure = new RuleFailure(file, 0, 0, warningIssue.description, ruleName); 233 | warning.setRuleSeverity('warning'); 234 | const error: RuleFailure = new RuleFailure(file, 0, 0, errorIssue.description, ruleName); 235 | error.setRuleSeverity('error'); 236 | const tsLinter: TsLinter = new MockedTsLinter( 237 | {include_paths: [], ignore_warnings: true}, 238 | [warning, error] 239 | ); 240 | const expected: IIssue[] = [errorIssue]; // warningIssue is not included 241 | // When 242 | const actual = tsLinter.lint(); 243 | // Then 244 | assertLintResult(actual, expected, done); 245 | }); 246 | it('returns runtime-error issue when failing to convert a rule failure to an issue', done => { 247 | // Given 248 | const tslintPath = path.join(linterPath, TsLinter.defaultTsLintFileName); 249 | mockFiles(tslintPath, 'file.ts'); 250 | const failure: RuleFailure = new RuleFailure(file, 0, 0, 'whatever', 'non-existent'); 251 | const tsLinter: TsLinter = new MockedTsLinter({include_paths: []}, [failure]); 252 | const error = new Error(); 253 | tsLinter.issueConverter.convert = () => { 254 | throw error; 255 | }; 256 | const issue = { 257 | ...Utils.createIssueFromError(error, tsLinter.getRelativeFilePath('file.ts')), 258 | content: {body: ''} 259 | }; 260 | const expected: IIssue[] = [issue]; 261 | // When 262 | const actual = tsLinter.lint(); 263 | // Then 264 | assertLintResult(actual, expected, done); 265 | }); 266 | }); 267 | describe('.getRelativeFilePath', () => { 268 | it('returns correct path', () => { 269 | const tsLinter = new TsLinter({...option, targetPath: '/code/src'}); 270 | assert(tsLinter.getRelativeFilePath('/code/src/foo.ts') === 'foo.ts'); 271 | assert(tsLinter.getRelativeFilePath('/code/src/foo/bar.ts') === 'foo/bar.ts'); 272 | assert(tsLinter.getRelativeFilePath('/code/src/foo/bar/baz.ts') === 'foo/bar/baz.ts'); 273 | assert(tsLinter.getRelativeFilePath('/code/tmp/foo.ts') === '../tmp/foo.ts'); 274 | assert(tsLinter.getRelativeFilePath('/tmp/foo.ts') === '../../tmp/foo.ts'); 275 | }); 276 | }); 277 | }); 278 | -------------------------------------------------------------------------------- /src/test/utils.spec.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import {RuleNameNotFoundError} from '../issueConverter'; 3 | import * as CodeClimate from '../codeclimate'; 4 | import Utils from '../utils'; 5 | 6 | const mock = require('mock-fs'); 7 | const assert = require('power-assert'); 8 | 9 | describe('Utils', () => { 10 | describe('createEmptyRuleMetadata(ruleName: string)', () => { 11 | it('creates correct instance', done => { 12 | const name = 'rule-name'; 13 | const actual = Utils.createEmptyRuleMetadata(name); 14 | assert.equal(actual.ruleName, name); 15 | done(); 16 | }); 17 | }); 18 | describe('createIssueFromError(e: Error)', () => { 19 | it('creates correct instance', done => { 20 | const path = 'some path'; 21 | const e = new RuleNameNotFoundError('some-rule'); 22 | const actual = Utils.createIssueFromError(e, path); 23 | assert.equal( 24 | actual.description, 25 | `Sorry, description could not be provided due to the internal error:\n${e.stack}` 26 | ); 27 | assert.equal(actual.type, CodeClimate.issueTypes.Issue); 28 | done(); 29 | }); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /src/tsConfigNormalizer.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as fs from 'fs'; 4 | import * as path from 'path'; 5 | import {RawConfigFile} from 'tslint/lib/configuration'; 6 | import {ensureTemporaryDir, getTemporaryFileName} from './utils'; 7 | 8 | import * as stripJsonComments from 'strip-json-comments'; 9 | import * as yaml from 'js-yaml'; 10 | 11 | export type RulesDirectory = string | string[] | undefined; 12 | 13 | /** 14 | * Normalizes tsconfg.json file. 15 | * Currently doing these stuffs. 16 | *
    17 | *
  • 18 | * Resolve rules directories if they are not found on the original path but defined in the tslint base path 19 | *
  • 20 | *
  • 21 | * Make rules directories as absolute paths 22 | *
  • 23 | *
24 | */ 25 | export function normalizeTsConfig(input: string, altBase: string): string { 26 | const config = load(input); 27 | config.rulesDirectory = resolveRulesDirectory(config.rulesDirectory, altBase); 28 | const output = getTemporaryFileName(); 29 | save(config, output); 30 | return output; 31 | } 32 | 33 | function isJSFile(file: string) { 34 | return file.endsWith('.js'); 35 | } 36 | 37 | function isYAMLFile(file: string) { 38 | return /\.(yaml|yml)$/.test(file); 39 | } 40 | 41 | export function load(file: string): RawConfigFile { 42 | if (isJSFile(file)) { 43 | return require(file); 44 | } 45 | 46 | // Read in file 47 | const content = fs.readFileSync(file).toString('UTF-8'); 48 | 49 | // Parse if yaml, else use plain content 50 | const json = isYAMLFile(file) ? yaml.safeLoad(content) : content; 51 | 52 | return JSON.parse(stripJsonComments(json)); 53 | } 54 | 55 | export function save(rawConfig: RawConfigFile, file: string): void { 56 | ensureTemporaryDir(); 57 | fs.writeFileSync(file, JSON.stringify(rawConfig), 'UTF-8'); 58 | } 59 | 60 | function normalizeRulesDirectoryPath(dir: string, altBase: string): string { 61 | if (!fs.existsSync(dir) && fs.existsSync(path.join(altBase, dir))) { 62 | return path.resolve(path.join(altBase, dir)); 63 | } 64 | return path.resolve(dir); 65 | } 66 | 67 | /** Resolves rules directories */ 68 | export function resolveRulesDirectory(rulesDirectory: RulesDirectory, altBase: string): RulesDirectory { 69 | if (!rulesDirectory) { 70 | return rulesDirectory; 71 | } else if (typeof rulesDirectory === 'string') { 72 | return normalizeRulesDirectoryPath(rulesDirectory, altBase); 73 | } else { 74 | return rulesDirectory.map(dir => normalizeRulesDirectoryPath(dir, altBase)); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/tsLinter.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import * as fs from 'fs'; 4 | import * as path from 'path'; 5 | import * as _ from 'lodash'; 6 | import {Observable, of} from 'rxjs'; 7 | import {Configuration, ILinterOptions, IRuleMetadata, Linter, RuleFailure} from 'tslint'; 8 | import {IConfig, IIssue} from './codeclimate'; 9 | import {FileMatcher} from './fileMatcher'; 10 | import {IssueConverter} from './issueConverter'; 11 | import Utils from './utils'; 12 | import {normalizeTsConfig} from './tsConfigNormalizer'; 13 | import autobind from 'autobind-decorator'; 14 | import {catchError, filter, flatMap, map} from 'rxjs/operators'; 15 | 16 | export interface ITsLinterOption { 17 | targetPath: string; 18 | linterPath: string; 19 | codeClimateConfig: IConfig; 20 | rules: IRuleMetadata[]; 21 | } 22 | 23 | @autobind 24 | export class TsLinter { 25 | static defaultTsLintFileName: string = 'tslint.json'; 26 | 27 | linterOption: ILinterOptions = { 28 | fix: false, 29 | formatter: 'json' 30 | }; 31 | 32 | fileMatcher: FileMatcher; 33 | issueConverter: IssueConverter; 34 | configurationFile: Configuration.IConfigurationFile; 35 | 36 | constructor(public option: ITsLinterOption) { 37 | this.fileMatcher = new FileMatcher(option.targetPath, ['.ts', '.tsx']); 38 | this.issueConverter = new IssueConverter(option); 39 | const normalizedConfigPath = normalizeTsConfig(this.getTsLintFile(), option.linterPath); 40 | this.configurationFile = Configuration.findConfiguration(normalizedConfigPath, '').results; 41 | } 42 | 43 | getTsLintFile(): string { 44 | return _.find([ 45 | path.join(this.option.targetPath, this.option.codeClimateConfig.config || TsLinter.defaultTsLintFileName), 46 | path.join(this.option.linterPath, TsLinter.defaultTsLintFileName) 47 | ], (file) => fs.existsSync(file)); 48 | } 49 | 50 | lint(): Observable { 51 | return of(...this.listFiles()) 52 | .pipe(flatMap(this.doLint)); 53 | } 54 | 55 | listFiles(): string[] { 56 | return this.fileMatcher.matchFiles(this.option.codeClimateConfig.include_paths); 57 | } 58 | 59 | getRelativeFilePath(fileName: string): string { 60 | const dirname = path.dirname(fileName); 61 | const basename = path.basename(fileName); 62 | return path.join(path.relative(this.option.targetPath, dirname), basename); 63 | } 64 | 65 | protected createLinter(): Linter { 66 | return new Linter(this.linterOption); 67 | } 68 | 69 | private doLint(fileName: string): Observable { 70 | const contents = fs.readFileSync(fileName, 'utf8'); 71 | const linter: Linter = this.createLinter(); 72 | 73 | linter.lint(fileName, contents, this.configurationFile); 74 | 75 | let observable: Observable = of(...linter.getResult().failures); 76 | if (this.option.codeClimateConfig.ignore_warnings) { 77 | observable = observable.pipe(filter((failure) => failure.getRuleSeverity() !== 'warning')); 78 | } 79 | return observable 80 | .pipe( 81 | map(this.issueConverter.convert), 82 | catchError((e: any) => of(Utils.createIssueFromError(e, this.getRelativeFilePath(fileName)))) 83 | ) 84 | ; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import {IRuleMetadata} from 'tslint'; 4 | import * as CodeClimate from './codeclimate'; 5 | import {RuleNameNotFoundError} from './issueConverter'; 6 | import * as path from 'path'; 7 | import * as crypto from 'crypto'; 8 | import * as fs from 'fs'; 9 | 10 | class Utils { 11 | createEmptyRuleMetadata(ruleName: string): IRuleMetadata { 12 | return { 13 | ruleName, 14 | type: 'style', 15 | description: '*No description is given*', 16 | optionsDescription: '', 17 | options: {}, 18 | typescriptOnly: false 19 | }; 20 | } 21 | 22 | createIssueFromError(e: Error, locationPath: string): CodeClimate.IIssue { 23 | return { 24 | type: CodeClimate.issueTypes.Issue, 25 | check_name: this.resolveCheckName(e), 26 | description: `Sorry, description could not be provided due to the internal error:\n${e.stack}`, 27 | categories: ['Bug Risk'], 28 | remediation_points: 50000, 29 | location: { 30 | path: locationPath, 31 | positions: { 32 | begin: { line: 0, column: 0 }, 33 | end: { line: 0, column: 0 } 34 | } 35 | } 36 | }; 37 | } 38 | 39 | private resolveCheckName(e: Error): string { 40 | if (e instanceof RuleNameNotFoundError) { 41 | return e.ruleName; 42 | } else { 43 | return '(runtime error)'; 44 | } 45 | } 46 | } 47 | 48 | export default new Utils(); 49 | 50 | export const temporaryDir = '/tmp/codeclimate-tslint'; 51 | 52 | export function getTemporaryFileName(extension: string = 'json'): string { 53 | return path.join(temporaryDir, `${crypto.randomBytes(32).toString('hex')}.${extension}`); 54 | } 55 | 56 | export function ensureTemporaryDir() { 57 | if (!fs.existsSync(temporaryDir)) { 58 | fs.mkdirSync(temporaryDir); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "moduleResolution": "node", 5 | "module": "commonjs", 6 | "declaration": false, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "sourceMap": true, 11 | "pretty": true, 12 | "allowUnreachableCode": true, 13 | "allowUnusedLabels": true, 14 | "noImplicitAny": true, 15 | "noImplicitReturns": false, 16 | "noImplicitUseStrict": false, 17 | "noFallthroughCasesInSwitch": false, 18 | "noEmitOnError": false, 19 | "allowSyntheticDefaultImports": true, 20 | "suppressExcessPropertyErrors": true, 21 | "suppressImplicitAnyIndexErrors": true, 22 | "outDir": "dist/", 23 | "baseUrl": "src/", 24 | "listFiles": false, 25 | "noEmitHelpers": false 26 | }, 27 | "include": [ 28 | "src/**/*" 29 | ], 30 | "exclude": [ 31 | "node_modules" 32 | ], 33 | "compileOnSave": false 34 | } 35 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["tslint:latest"], 3 | "rulesDirectory": [], 4 | "rules": { 5 | "angular-whitespace": [true, "check-interpolation", "check-semicolon"], 6 | "banana-in-box": true, 7 | "templates-no-negated-async": true, 8 | "directive-selector": [true, "attribute", "sg", "camelCase"], 9 | "component-selector": [true, "element", "sg", "kebab-case"], 10 | "use-input-property-decorator": true, 11 | "use-output-property-decorator": true, 12 | "use-host-property-decorator": true, 13 | "use-view-encapsulation": true, 14 | "no-attribute-parameter-decorator": true, 15 | "no-input-rename": true, 16 | "no-output-rename": true, 17 | "no-output-on-prefix": true, 18 | "no-forward-ref": true, 19 | "use-life-cycle-interface": true, 20 | "contextual-life-cycle": true, 21 | "trackBy-function": true, 22 | "use-pipe-transform-interface": true, 23 | "pipe-naming": [true, "camelCase", "sg"], 24 | "component-class-suffix": true, 25 | "directive-class-suffix": true, 26 | "indent": [true, "spaces"], 27 | "quotemark": [true, "single"], 28 | "object-literal-sort-keys": false, 29 | "trailing-comma": false, 30 | "class-name": true, 31 | "semicolon": [true, "always"], 32 | "triple-equals": [true, "allow-null-check"], 33 | "eofline": true, 34 | "jsdoc-format": true, 35 | "member-access": false, 36 | "arrow-parens": false, 37 | "max-classes-per-file": false, 38 | "no-implicit-dependencies": false, 39 | "no-case-with-or": true, 40 | "no-console": false, 41 | "whitespace": [true, 42 | "check-decl", 43 | "check-operator", 44 | "check-separator", 45 | "check-type" 46 | ], 47 | "variable-name": [ 48 | "allow-leading-underscore" 49 | ], 50 | "curly": false, 51 | "no-reference": false, 52 | "no-var-requires": false, 53 | "no-submodule-imports": false, 54 | "ordered-imports": false, 55 | "no-trailing-whitespace": false 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@angular/common@^8.0.1": 6 | version "8.2.14" 7 | resolved "https://registry.yarnpkg.com/@angular/common/-/common-8.2.14.tgz#027e52b2951c14082d6e3af1a4ffa1356220e439" 8 | integrity sha512-Qmt+aX2quUW54kaNT7QH7WGXnFxr/cC2C6sf5SW5SdkZfDQSiz8IaItvieZfXVQUbBOQKFRJ7TlSkt0jI/yjvw== 9 | dependencies: 10 | tslib "^1.9.0" 11 | 12 | "@angular/compiler@^8.0.1": 13 | version "8.2.14" 14 | resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-8.2.14.tgz#46db7a9d1c17f236126518ff26480c160d5a6183" 15 | integrity sha512-ABZO4E7eeFA1QyJ2trDezxeQM5ZFa1dXw1Mpl/+1vuXDKNjJgNyWYwKp/NwRkLmrsuV0yv4UDCDe4kJOGbPKnw== 16 | dependencies: 17 | tslib "^1.9.0" 18 | 19 | "@angular/core@^8.0.1": 20 | version "8.2.14" 21 | resolved "https://registry.yarnpkg.com/@angular/core/-/core-8.2.14.tgz#35566f5b19480369229477e7e0e0fde740bd5204" 22 | integrity sha512-zeePkigi+hPh3rN7yoNENG/YUBUsIvUXdxx+AZq+QPaFeKEA2FBSrKn36ojHFrdJUjKzl0lPMEiGC2b6a6bo6g== 23 | dependencies: 24 | tslib "^1.9.0" 25 | 26 | "@angular/platform-browser-dynamic@^8.0.1": 27 | version "8.2.14" 28 | resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.14.tgz#4439a79fe10ec45170e6940a28835e9ff0918950" 29 | integrity sha512-mO2JPR5kLU/A3AQngy9+R/Q5gaF9csMStBQjwsCRI0wNtlItOIGL6+wTYpiTuh/ux+WVN1F2sLcEYU4Zf1ud9A== 30 | dependencies: 31 | tslib "^1.9.0" 32 | 33 | "@angular/platform-browser@^8.0.1": 34 | version "8.2.14" 35 | resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-8.2.14.tgz#31f082e8ba977f9b89964d721c38cbc32ce0e433" 36 | integrity sha512-MtJptptyKzsE37JZ2VB/tI4cvMrdAH+cT9pMBYZd66YSZfKjIj5s+AZo7z8ncoskQSB1o3HMfDjSK7QXGx1mLQ== 37 | dependencies: 38 | tslib "^1.9.0" 39 | 40 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": 41 | version "7.5.5" 42 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 43 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 44 | dependencies: 45 | "@babel/highlight" "^7.0.0" 46 | 47 | "@babel/generator@^7.4.0", "@babel/generator@^7.7.4": 48 | version "7.7.7" 49 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45" 50 | integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ== 51 | dependencies: 52 | "@babel/types" "^7.7.4" 53 | jsesc "^2.5.1" 54 | lodash "^4.17.13" 55 | source-map "^0.5.0" 56 | 57 | "@babel/helper-function-name@^7.7.4": 58 | version "7.7.4" 59 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" 60 | integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== 61 | dependencies: 62 | "@babel/helper-get-function-arity" "^7.7.4" 63 | "@babel/template" "^7.7.4" 64 | "@babel/types" "^7.7.4" 65 | 66 | "@babel/helper-get-function-arity@^7.7.4": 67 | version "7.7.4" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" 69 | integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== 70 | dependencies: 71 | "@babel/types" "^7.7.4" 72 | 73 | "@babel/helper-split-export-declaration@^7.7.4": 74 | version "7.7.4" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" 76 | integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== 77 | dependencies: 78 | "@babel/types" "^7.7.4" 79 | 80 | "@babel/highlight@^7.0.0": 81 | version "7.5.0" 82 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 83 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 84 | dependencies: 85 | chalk "^2.0.0" 86 | esutils "^2.0.2" 87 | js-tokens "^4.0.0" 88 | 89 | "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": 90 | version "7.7.7" 91 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937" 92 | integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw== 93 | 94 | "@babel/runtime-corejs2@^7.2.0": 95 | version "7.7.7" 96 | resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.7.7.tgz#44885957b275a5fd70413142eda9cff4662847ac" 97 | integrity sha512-P91T3dFYQL7aj44PxOMIAbo66Ag3NbmXG9fseSYaXxapp3K9XTct5HU9IpTOm2D0AoktKusgqzN5YcSxZXEKBQ== 98 | dependencies: 99 | core-js "^2.6.5" 100 | regenerator-runtime "^0.13.2" 101 | 102 | "@babel/template@^7.4.0", "@babel/template@^7.7.4": 103 | version "7.7.4" 104 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" 105 | integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== 106 | dependencies: 107 | "@babel/code-frame" "^7.0.0" 108 | "@babel/parser" "^7.7.4" 109 | "@babel/types" "^7.7.4" 110 | 111 | "@babel/traverse@^7.4.3": 112 | version "7.7.4" 113 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" 114 | integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== 115 | dependencies: 116 | "@babel/code-frame" "^7.5.5" 117 | "@babel/generator" "^7.7.4" 118 | "@babel/helper-function-name" "^7.7.4" 119 | "@babel/helper-split-export-declaration" "^7.7.4" 120 | "@babel/parser" "^7.7.4" 121 | "@babel/types" "^7.7.4" 122 | debug "^4.1.0" 123 | globals "^11.1.0" 124 | lodash "^4.17.13" 125 | 126 | "@babel/types@^7.4.0", "@babel/types@^7.7.4": 127 | version "7.7.4" 128 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" 129 | integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== 130 | dependencies: 131 | esutils "^2.0.2" 132 | lodash "^4.17.13" 133 | to-fast-properties "^2.0.0" 134 | 135 | "@fimbul/bifrost@^0.17.0": 136 | version "0.17.0" 137 | resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.17.0.tgz#f0383ba7e40992e3193dc87e2ddfde2ad62a9cf4" 138 | integrity sha512-gVTkJAOef5HtN6LPmrtt5fAUmBywwlgmObsU3FBhPoNeXPLaIl2zywXkJEtvvVLQnaFmtff3x+wIj5lHRCDE3Q== 139 | dependencies: 140 | "@fimbul/ymir" "^0.17.0" 141 | get-caller-file "^2.0.0" 142 | tslib "^1.8.1" 143 | tsutils "^3.5.0" 144 | 145 | "@fimbul/bifrost@^0.21.0": 146 | version "0.21.0" 147 | resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.21.0.tgz#d0fafa25938fda475657a6a1e407a21bbe02c74e" 148 | integrity sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg== 149 | dependencies: 150 | "@fimbul/ymir" "^0.21.0" 151 | get-caller-file "^2.0.0" 152 | tslib "^1.8.1" 153 | tsutils "^3.5.0" 154 | 155 | "@fimbul/ymir@^0.17.0": 156 | version "0.17.0" 157 | resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.17.0.tgz#4f28389b9f804d1cd202e11983af1743488b7815" 158 | integrity sha512-xMXM9KTXRLHLVS6dnX1JhHNEkmWHcAVCQ/4+DA1KKwC/AFnGHzu/7QfQttEPgw3xplT+ILf9e3i64jrFwB3JtA== 159 | dependencies: 160 | inversify "^5.0.0" 161 | reflect-metadata "^0.1.12" 162 | tslib "^1.8.1" 163 | 164 | "@fimbul/ymir@^0.21.0": 165 | version "0.21.0" 166 | resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.21.0.tgz#8525726787aceeafd4e199472c0d795160b5d4a1" 167 | integrity sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg== 168 | dependencies: 169 | inversify "^5.0.0" 170 | reflect-metadata "^0.1.12" 171 | tslib "^1.8.1" 172 | 173 | "@kushki/tslint@^5.2.12": 174 | version "5.2.12" 175 | resolved "https://registry.yarnpkg.com/@kushki/tslint/-/tslint-5.2.12.tgz#92eb7a6d04f32efd987d16fc2ae0bdd86dd92a53" 176 | integrity sha512-cncPgf6k2b9ulQhNZcNgw2HTdlb6VrdUINqw5B7R71UmnHfBlycn4LquDFFeZs+LCVwTIAJSNQx1HZtq4SKZDg== 177 | dependencies: 178 | rxjs-tslint "0.1.7" 179 | rxjs-tslint-rules "4.24.0" 180 | tslint-config-prettier "1.18.0" 181 | tslint-config-standard "8.0.1" 182 | tslint-consistent-codestyle "1.15.1" 183 | tslint-eslint-rules "5.4.0" 184 | tslint-microsoft-contrib "6.2.0" 185 | tslint-no-unused-expression-chai "0.1.4" 186 | tslint-sonarts "1.9.0" 187 | vrsource-tslint-rules "6.0.0" 188 | 189 | "@phenomnomnominal/tsquery@^3.0.0": 190 | version "3.0.0" 191 | resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz#6f2f4dbf6304ff52b12cc7a5b979f20c3794a22a" 192 | integrity sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw== 193 | dependencies: 194 | esquery "^1.0.1" 195 | 196 | "@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": 197 | version "1.7.0" 198 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" 199 | integrity sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== 200 | dependencies: 201 | type-detect "4.0.8" 202 | 203 | "@sinonjs/formatio@^3.2.1": 204 | version "3.2.2" 205 | resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" 206 | integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== 207 | dependencies: 208 | "@sinonjs/commons" "^1" 209 | "@sinonjs/samsam" "^3.1.0" 210 | 211 | "@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": 212 | version "3.3.3" 213 | resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" 214 | integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== 215 | dependencies: 216 | "@sinonjs/commons" "^1.3.0" 217 | array-from "^2.1.1" 218 | lodash "^4.17.15" 219 | 220 | "@sinonjs/text-encoding@^0.7.1": 221 | version "0.7.1" 222 | resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" 223 | integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== 224 | 225 | "@types/empower@*": 226 | version "1.2.30" 227 | resolved "https://registry.yarnpkg.com/@types/empower/-/empower-1.2.30.tgz#c7cfc14b3a61e54c74c674c1fbc91ba2df0d1392" 228 | integrity sha1-x8/BSzph5Ux0xnTB+8kbot8NE5I= 229 | 230 | "@types/events@*": 231 | version "1.1.0" 232 | resolved "https://registry.yarnpkg.com/@types/events/-/events-1.1.0.tgz#93b1be91f63c184450385272c47b6496fd028e02" 233 | integrity sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw== 234 | 235 | "@types/glob@^7.1.1": 236 | version "7.1.1" 237 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 238 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 239 | dependencies: 240 | "@types/events" "*" 241 | "@types/minimatch" "*" 242 | "@types/node" "*" 243 | 244 | "@types/js-yaml@^3.12.1": 245 | version "3.12.1" 246 | resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656" 247 | integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA== 248 | 249 | "@types/lodash@^4.14.134": 250 | version "4.14.149" 251 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" 252 | integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== 253 | 254 | "@types/minimatch@*": 255 | version "3.0.3" 256 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 257 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 258 | 259 | "@types/mocha@^5.2.7": 260 | version "5.2.7" 261 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" 262 | integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== 263 | 264 | "@types/mock-fs@^3.6.30": 265 | version "3.6.30" 266 | resolved "https://registry.yarnpkg.com/@types/mock-fs/-/mock-fs-3.6.30.tgz#4d812541e87b23577261a5aa95f704dd3d01e410" 267 | integrity sha1-TYElQeh7I1dyYaWqlfcE3T0B5BA= 268 | dependencies: 269 | "@types/node" "*" 270 | 271 | "@types/node@*": 272 | version "9.3.0" 273 | resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" 274 | integrity sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw== 275 | 276 | "@types/node@^12.0.8": 277 | version "12.12.22" 278 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.22.tgz#b8d9eae3328b96910a373cf06ac8d3c5abe9c200" 279 | integrity sha512-r5i93jqbPWGXYXxianGATOxTelkp6ih/U0WVnvaqAvTqM+0U6J3kw6Xk6uq/dWNRkEVw/0SLcO5ORXbVNz4FMQ== 280 | 281 | "@types/power-assert-formatter@*", "@types/power-assert-formatter@^1.4.28": 282 | version "1.4.28" 283 | resolved "https://registry.yarnpkg.com/@types/power-assert-formatter/-/power-assert-formatter-1.4.28.tgz#25b8fddb6322259c6b91c35338d39b0f8e524252" 284 | integrity sha1-Jbj922MiJZxrkcNTONObD45SQlI= 285 | 286 | "@types/power-assert@^1.5.0": 287 | version "1.5.2" 288 | resolved "https://registry.yarnpkg.com/@types/power-assert/-/power-assert-1.5.2.tgz#38ec43f349a3f8ab783c6372912444e8ebabf375" 289 | integrity sha512-7Bj/gxWEa3eB8aQoo8vGh1kgVmnNwHALI3/K6ZXyKfBznEO51xNPQXm1hOROZRACD9XdYUOeADStMvIaNYX4Lg== 290 | dependencies: 291 | "@types/empower" "*" 292 | "@types/power-assert-formatter" "*" 293 | 294 | "@types/proxyquire@^1.3.28": 295 | version "1.3.28" 296 | resolved "https://registry.yarnpkg.com/@types/proxyquire/-/proxyquire-1.3.28.tgz#05a647bb0d8fe48fc8edcc193e43cc79310faa7d" 297 | integrity sha512-SQaNzWQ2YZSr7FqAyPPiA3FYpux2Lqh3HWMZQk47x3xbMCqgC/w0dY3dw9rGqlweDDkrySQBcaScXWeR+Yb11Q== 298 | 299 | "@types/sinon@^7.0.13": 300 | version "7.5.1" 301 | resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.1.tgz#d27b81af0d1cfe1f9b24eebe7a24f74ae40f5b7c" 302 | integrity sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ== 303 | 304 | "@types/strip-json-comments@0.0.30": 305 | version "0.0.30" 306 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 307 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 308 | 309 | abbrev@1: 310 | version "1.1.1" 311 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 312 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 313 | 314 | abbrev@1.0.x: 315 | version "1.0.9" 316 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 317 | integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= 318 | 319 | acorn-es7-plugin@^1.0.12: 320 | version "1.1.7" 321 | resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" 322 | integrity sha1-8u4fMiipDurRJF+asZIusucdM2s= 323 | 324 | acorn@^4.0.0: 325 | version "4.0.13" 326 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" 327 | integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= 328 | 329 | amdefine@>=0.0.4: 330 | version "1.0.1" 331 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 332 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 333 | 334 | ansi-colors@3.2.3: 335 | version "3.2.3" 336 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 337 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 338 | 339 | ansi-regex@^3.0.0: 340 | version "3.0.0" 341 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 342 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 343 | 344 | ansi-regex@^4.1.0: 345 | version "4.1.0" 346 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 347 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 348 | 349 | ansi-styles@^3.1.0: 350 | version "3.2.0" 351 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 352 | integrity sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug== 353 | dependencies: 354 | color-convert "^1.9.0" 355 | 356 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 357 | version "3.2.1" 358 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 359 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 360 | dependencies: 361 | color-convert "^1.9.0" 362 | 363 | app-root-path@^2.2.1: 364 | version "2.2.1" 365 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" 366 | integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== 367 | 368 | append-transform@^1.0.0: 369 | version "1.0.0" 370 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" 371 | integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== 372 | dependencies: 373 | default-require-extensions "^2.0.0" 374 | 375 | archy@^1.0.0: 376 | version "1.0.0" 377 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 378 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 379 | 380 | arg@^4.1.0: 381 | version "4.1.2" 382 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" 383 | integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== 384 | 385 | argparse@^1.0.7: 386 | version "1.0.9" 387 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 388 | integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= 389 | dependencies: 390 | sprintf-js "~1.0.2" 391 | 392 | aria-query@^3.0.0: 393 | version "3.0.0" 394 | resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" 395 | integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= 396 | dependencies: 397 | ast-types-flow "0.0.7" 398 | commander "^2.11.0" 399 | 400 | array-filter@^1.0.0: 401 | version "1.0.0" 402 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" 403 | integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= 404 | 405 | array-from@^2.1.1: 406 | version "2.1.1" 407 | resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" 408 | integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= 409 | 410 | ast-types-flow@0.0.7: 411 | version "0.0.7" 412 | resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" 413 | integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= 414 | 415 | async@1.x: 416 | version "1.5.2" 417 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 418 | integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= 419 | 420 | autobind-decorator@^2.4.0: 421 | version "2.4.0" 422 | resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-2.4.0.tgz#ea9e1c98708cf3b5b356f7cf9f10f265ff18239c" 423 | integrity sha512-OGYhWUO72V6DafbF8PM8rm3EPbfuyMZcJhtm5/n26IDwO18pohE4eNazLoCGhPiXOCD0gEGmrbU3849QvM8bbw== 424 | 425 | axobject-query@2.0.2: 426 | version "2.0.2" 427 | resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" 428 | integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== 429 | dependencies: 430 | ast-types-flow "0.0.7" 431 | 432 | balanced-match@^1.0.0: 433 | version "1.0.0" 434 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 435 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 436 | 437 | brace-expansion@^1.1.7: 438 | version "1.1.8" 439 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 440 | integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= 441 | dependencies: 442 | balanced-match "^1.0.0" 443 | concat-map "0.0.1" 444 | 445 | browser-stdout@1.3.1: 446 | version "1.3.1" 447 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 448 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 449 | 450 | buffer-from@^1.0.0: 451 | version "1.1.1" 452 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 453 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 454 | 455 | builtin-modules@^1.0.0, builtin-modules@^1.1.1: 456 | version "1.1.1" 457 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 458 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 459 | 460 | caching-transform@^3.0.2: 461 | version "3.0.2" 462 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" 463 | integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== 464 | dependencies: 465 | hasha "^3.0.0" 466 | make-dir "^2.0.0" 467 | package-hash "^3.0.0" 468 | write-file-atomic "^2.4.2" 469 | 470 | call-signature@0.0.2: 471 | version "0.0.2" 472 | resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" 473 | integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY= 474 | 475 | camelcase@^5.0.0: 476 | version "5.3.1" 477 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 478 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 479 | 480 | chalk@^2.0.0: 481 | version "2.4.1" 482 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 483 | integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== 484 | dependencies: 485 | ansi-styles "^3.2.1" 486 | escape-string-regexp "^1.0.5" 487 | supports-color "^5.3.0" 488 | 489 | chalk@^2.0.1, chalk@^2.4.0: 490 | version "2.4.2" 491 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 492 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 493 | dependencies: 494 | ansi-styles "^3.2.1" 495 | escape-string-regexp "^1.0.5" 496 | supports-color "^5.3.0" 497 | 498 | chalk@^2.3.0: 499 | version "2.3.0" 500 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" 501 | integrity sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q== 502 | dependencies: 503 | ansi-styles "^3.1.0" 504 | escape-string-regexp "^1.0.5" 505 | supports-color "^4.0.0" 506 | 507 | cliui@^5.0.0: 508 | version "5.0.0" 509 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 510 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 511 | dependencies: 512 | string-width "^3.1.0" 513 | strip-ansi "^5.2.0" 514 | wrap-ansi "^5.1.0" 515 | 516 | codelyzer@^5.1.0: 517 | version "5.2.1" 518 | resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.1.tgz#44fd431e128009f38c761828c33ebacba9549d32" 519 | integrity sha512-awBZXFcJUyC5HMYXiHzjr3D24tww2l1D1OqtfA9vUhEtYr32a65A+Gblm/OvsO+HuKLYzn8EDMw1inSM3VbxWA== 520 | dependencies: 521 | app-root-path "^2.2.1" 522 | aria-query "^3.0.0" 523 | axobject-query "2.0.2" 524 | css-selector-tokenizer "^0.7.1" 525 | cssauron "^1.4.0" 526 | damerau-levenshtein "^1.0.4" 527 | semver-dsl "^1.0.1" 528 | source-map "^0.5.7" 529 | sprintf-js "^1.1.2" 530 | 531 | color-convert@^1.9.0: 532 | version "1.9.1" 533 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 534 | integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ== 535 | dependencies: 536 | color-name "^1.1.1" 537 | 538 | color-name@^1.1.1: 539 | version "1.1.3" 540 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 541 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 542 | 543 | commander@^2.11.0: 544 | version "2.20.3" 545 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 546 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 547 | 548 | commander@^2.12.1: 549 | version "2.13.0" 550 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" 551 | integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== 552 | 553 | commander@~2.17.1: 554 | version "2.17.1" 555 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" 556 | integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== 557 | 558 | commondir@^1.0.1: 559 | version "1.0.1" 560 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 561 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 562 | 563 | concat-map@0.0.1: 564 | version "0.0.1" 565 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 566 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 567 | 568 | convert-source-map@^1.6.0: 569 | version "1.7.0" 570 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 571 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 572 | dependencies: 573 | safe-buffer "~5.1.1" 574 | 575 | core-js@^2.0.0: 576 | version "2.5.3" 577 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" 578 | integrity sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4= 579 | 580 | core-js@^2.6.5: 581 | version "2.6.11" 582 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" 583 | integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== 584 | 585 | cp-file@^6.2.0: 586 | version "6.2.0" 587 | resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" 588 | integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== 589 | dependencies: 590 | graceful-fs "^4.1.2" 591 | make-dir "^2.0.0" 592 | nested-error-stacks "^2.0.0" 593 | pify "^4.0.1" 594 | safe-buffer "^5.0.1" 595 | 596 | cross-spawn@^4: 597 | version "4.0.2" 598 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 599 | integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= 600 | dependencies: 601 | lru-cache "^4.0.1" 602 | which "^1.2.9" 603 | 604 | css-selector-tokenizer@^0.7.1: 605 | version "0.7.1" 606 | resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" 607 | integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA== 608 | dependencies: 609 | cssesc "^0.1.0" 610 | fastparse "^1.1.1" 611 | regexpu-core "^1.0.0" 612 | 613 | cssauron@^1.4.0: 614 | version "1.4.0" 615 | resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" 616 | integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= 617 | dependencies: 618 | through X.X.X 619 | 620 | cssesc@^0.1.0: 621 | version "0.1.0" 622 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" 623 | integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= 624 | 625 | damerau-levenshtein@^1.0.4: 626 | version "1.0.5" 627 | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz#780cf7144eb2e8dbd1c3bb83ae31100ccc31a414" 628 | integrity sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA== 629 | 630 | debug@3.2.6: 631 | version "3.2.6" 632 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 633 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 634 | dependencies: 635 | ms "^2.1.1" 636 | 637 | debug@^4.1.0, debug@^4.1.1: 638 | version "4.1.1" 639 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 640 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 641 | dependencies: 642 | ms "^2.1.1" 643 | 644 | decamelize@^1.2.0: 645 | version "1.2.0" 646 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 647 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 648 | 649 | decamelize@^3.0.0: 650 | version "3.2.0" 651 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-3.2.0.tgz#84b8e8f4f8c579f938e35e2cc7024907e0090851" 652 | integrity sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw== 653 | dependencies: 654 | xregexp "^4.2.4" 655 | 656 | deep-is@~0.1.3: 657 | version "0.1.3" 658 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 659 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 660 | 661 | default-require-extensions@^2.0.0: 662 | version "2.0.0" 663 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" 664 | integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= 665 | dependencies: 666 | strip-bom "^3.0.0" 667 | 668 | define-properties@^1.1.2: 669 | version "1.1.2" 670 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 671 | integrity sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ= 672 | dependencies: 673 | foreach "^2.0.5" 674 | object-keys "^1.0.8" 675 | 676 | define-properties@^1.1.3: 677 | version "1.1.3" 678 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 679 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 680 | dependencies: 681 | object-keys "^1.0.12" 682 | 683 | diff-match-patch@^1.0.0: 684 | version "1.0.0" 685 | resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.0.tgz#1cc3c83a490d67f95d91e39f6ad1f2e086b63048" 686 | integrity sha1-HMPIOkkNZ/ldkeOfatHy4Ia2MEg= 687 | 688 | diff@3.5.0, diff@^3.5.0: 689 | version "3.5.0" 690 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 691 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 692 | 693 | diff@^4.0.1: 694 | version "4.0.1" 695 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 696 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 697 | 698 | doctrine@0.7.2: 699 | version "0.7.2" 700 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" 701 | integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= 702 | dependencies: 703 | esutils "^1.1.6" 704 | isarray "0.0.1" 705 | 706 | eastasianwidth@^0.1.1: 707 | version "0.1.1" 708 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" 709 | integrity sha1-RNZW3p2kFWlEZzNTZfsxR7hXK3w= 710 | 711 | emoji-regex@^7.0.1: 712 | version "7.0.3" 713 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 714 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 715 | 716 | empower-core@^1.2.0: 717 | version "1.2.0" 718 | resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" 719 | integrity sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ== 720 | dependencies: 721 | call-signature "0.0.2" 722 | core-js "^2.0.0" 723 | 724 | empower@^1.3.1: 725 | version "1.3.1" 726 | resolved "https://registry.yarnpkg.com/empower/-/empower-1.3.1.tgz#768979cbbb36d71d8f5edaab663deacb9dab916c" 727 | integrity sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA== 728 | dependencies: 729 | core-js "^2.0.0" 730 | empower-core "^1.2.0" 731 | 732 | error-ex@^1.3.1: 733 | version "1.3.2" 734 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 735 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 736 | dependencies: 737 | is-arrayish "^0.2.1" 738 | 739 | es-abstract@^1.17.0-next.1: 740 | version "1.17.0" 741 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0.tgz#f42a517d0036a5591dbb2c463591dc8bb50309b1" 742 | integrity sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug== 743 | dependencies: 744 | es-to-primitive "^1.2.1" 745 | function-bind "^1.1.1" 746 | has "^1.0.3" 747 | has-symbols "^1.0.1" 748 | is-callable "^1.1.5" 749 | is-regex "^1.0.5" 750 | object-inspect "^1.7.0" 751 | object-keys "^1.1.1" 752 | object.assign "^4.1.0" 753 | string.prototype.trimleft "^2.1.1" 754 | string.prototype.trimright "^2.1.1" 755 | 756 | es-to-primitive@^1.2.1: 757 | version "1.2.1" 758 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 759 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 760 | dependencies: 761 | is-callable "^1.1.4" 762 | is-date-object "^1.0.1" 763 | is-symbol "^1.0.2" 764 | 765 | es6-error@^4.0.1: 766 | version "4.1.1" 767 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 768 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 769 | 770 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 771 | version "1.0.5" 772 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 773 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 774 | 775 | escodegen@1.8.x: 776 | version "1.8.1" 777 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 778 | integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= 779 | dependencies: 780 | esprima "^2.7.1" 781 | estraverse "^1.9.1" 782 | esutils "^2.0.2" 783 | optionator "^0.8.1" 784 | optionalDependencies: 785 | source-map "~0.2.0" 786 | 787 | eslint-plugin-prettier@^2.2.0: 788 | version "2.5.0" 789 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.5.0.tgz#39a91dd7528eaf19cd42c0ee3f2c1f684606a05f" 790 | integrity sha512-L06bewYpt2Wb8Uk7os8f/0cL5DjddL38t1M/nOpjw5MqVFBn1RIIBBE6tfr37lHUH7AvAubZsvu/bDmNl4RBKQ== 791 | dependencies: 792 | fast-diff "^1.1.1" 793 | jest-docblock "^21.0.0" 794 | 795 | esprima@2.7.x, esprima@^2.7.1: 796 | version "2.7.3" 797 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 798 | integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= 799 | 800 | esprima@^4.0.0: 801 | version "4.0.0" 802 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 803 | integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== 804 | 805 | espurify@^1.6.0: 806 | version "1.7.0" 807 | resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" 808 | integrity sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY= 809 | dependencies: 810 | core-js "^2.0.0" 811 | 812 | esquery@^1.0.1: 813 | version "1.0.1" 814 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 815 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 816 | dependencies: 817 | estraverse "^4.0.0" 818 | 819 | estraverse@^1.9.1: 820 | version "1.9.3" 821 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 822 | integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= 823 | 824 | estraverse@^4.0.0: 825 | version "4.3.0" 826 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 827 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 828 | 829 | estraverse@^4.1.0, estraverse@^4.2.0: 830 | version "4.2.0" 831 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 832 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 833 | 834 | esutils@^1.1.6: 835 | version "1.1.6" 836 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" 837 | integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= 838 | 839 | esutils@^2.0.2: 840 | version "2.0.2" 841 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 842 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 843 | 844 | fast-diff@^1.1.1: 845 | version "1.1.2" 846 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" 847 | integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== 848 | 849 | fast-levenshtein@~2.0.4: 850 | version "2.0.6" 851 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 852 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 853 | 854 | fastparse@^1.1.1: 855 | version "1.1.1" 856 | resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" 857 | integrity sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg= 858 | 859 | fill-keys@^1.0.2: 860 | version "1.0.2" 861 | resolved "https://registry.yarnpkg.com/fill-keys/-/fill-keys-1.0.2.tgz#9a8fa36f4e8ad634e3bf6b4f3c8882551452eb20" 862 | integrity sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA= 863 | dependencies: 864 | is-object "~1.0.1" 865 | merge-descriptors "~1.0.0" 866 | 867 | find-cache-dir@^2.1.0: 868 | version "2.1.0" 869 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" 870 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== 871 | dependencies: 872 | commondir "^1.0.1" 873 | make-dir "^2.0.0" 874 | pkg-dir "^3.0.0" 875 | 876 | find-up@3.0.0, find-up@^3.0.0: 877 | version "3.0.0" 878 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 879 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 880 | dependencies: 881 | locate-path "^3.0.0" 882 | 883 | flat@^4.1.0: 884 | version "4.1.0" 885 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 886 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 887 | dependencies: 888 | is-buffer "~2.0.3" 889 | 890 | foreach@^2.0.5: 891 | version "2.0.5" 892 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 893 | integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= 894 | 895 | foreground-child@^1.5.6: 896 | version "1.5.6" 897 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" 898 | integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= 899 | dependencies: 900 | cross-spawn "^4" 901 | signal-exit "^3.0.0" 902 | 903 | fs.realpath@^1.0.0: 904 | version "1.0.0" 905 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 906 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 907 | 908 | function-bind@^1.1.1: 909 | version "1.1.1" 910 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 911 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 912 | 913 | get-caller-file@^2.0.0, get-caller-file@^2.0.1: 914 | version "2.0.5" 915 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 916 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 917 | 918 | glob@7.1.3, glob@^7.0.5: 919 | version "7.1.3" 920 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 921 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 922 | dependencies: 923 | fs.realpath "^1.0.0" 924 | inflight "^1.0.4" 925 | inherits "2" 926 | minimatch "^3.0.4" 927 | once "^1.3.0" 928 | path-is-absolute "^1.0.0" 929 | 930 | glob@^5.0.15: 931 | version "5.0.15" 932 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 933 | integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= 934 | dependencies: 935 | inflight "^1.0.4" 936 | inherits "2" 937 | minimatch "2 || 3" 938 | once "^1.3.0" 939 | path-is-absolute "^1.0.0" 940 | 941 | glob@^7.1.1: 942 | version "7.1.2" 943 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 944 | integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== 945 | dependencies: 946 | fs.realpath "^1.0.0" 947 | inflight "^1.0.4" 948 | inherits "2" 949 | minimatch "^3.0.4" 950 | once "^1.3.0" 951 | path-is-absolute "^1.0.0" 952 | 953 | glob@^7.1.3, glob@^7.1.4: 954 | version "7.1.6" 955 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 956 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 957 | dependencies: 958 | fs.realpath "^1.0.0" 959 | inflight "^1.0.4" 960 | inherits "2" 961 | minimatch "^3.0.4" 962 | once "^1.3.0" 963 | path-is-absolute "^1.0.0" 964 | 965 | globals@^11.1.0: 966 | version "11.7.0" 967 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" 968 | integrity sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg== 969 | 970 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 971 | version "4.1.11" 972 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 973 | integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= 974 | 975 | graceful-fs@^4.1.15: 976 | version "4.2.3" 977 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 978 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 979 | 980 | growl@1.10.5: 981 | version "1.10.5" 982 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 983 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 984 | 985 | handlebars@^4.0.1: 986 | version "4.5.3" 987 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" 988 | integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== 989 | dependencies: 990 | neo-async "^2.6.0" 991 | optimist "^0.6.1" 992 | source-map "^0.6.1" 993 | optionalDependencies: 994 | uglify-js "^3.1.4" 995 | 996 | handlebars@^4.1.2: 997 | version "4.3.0" 998 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.3.0.tgz#427391b584626c9c9c6ffb7d1fb90aa9789221cc" 999 | integrity sha512-7XlnO8yBXOdi7AzowjZssQr47Ctidqm7GbgARapOaqSN9HQhlClnOkR9HieGauIT3A8MBC6u9wPCXs97PCYpWg== 1000 | dependencies: 1001 | neo-async "^2.6.0" 1002 | optimist "^0.6.1" 1003 | source-map "^0.6.1" 1004 | optionalDependencies: 1005 | uglify-js "^3.1.4" 1006 | 1007 | has-flag@^1.0.0: 1008 | version "1.0.0" 1009 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1010 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= 1011 | 1012 | has-flag@^2.0.0: 1013 | version "2.0.0" 1014 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 1015 | integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= 1016 | 1017 | has-flag@^3.0.0: 1018 | version "3.0.0" 1019 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1020 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1021 | 1022 | has-symbols@^1.0.0, has-symbols@^1.0.1: 1023 | version "1.0.1" 1024 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1025 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1026 | 1027 | has@^1.0.3: 1028 | version "1.0.3" 1029 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1030 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1031 | dependencies: 1032 | function-bind "^1.1.1" 1033 | 1034 | hasha@^3.0.0: 1035 | version "3.0.0" 1036 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" 1037 | integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= 1038 | dependencies: 1039 | is-stream "^1.0.1" 1040 | 1041 | he@1.2.0: 1042 | version "1.2.0" 1043 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1044 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1045 | 1046 | hosted-git-info@^2.1.4: 1047 | version "2.7.1" 1048 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1049 | integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== 1050 | 1051 | immutable@^3.8.2: 1052 | version "3.8.2" 1053 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" 1054 | integrity sha1-wkOZUUVbs5kT2vKBN28VMOEErfM= 1055 | 1056 | imurmurhash@^0.1.4: 1057 | version "0.1.4" 1058 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1059 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1060 | 1061 | indexof@0.0.1: 1062 | version "0.0.1" 1063 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1064 | integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= 1065 | 1066 | inflight@^1.0.4: 1067 | version "1.0.6" 1068 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1069 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1070 | dependencies: 1071 | once "^1.3.0" 1072 | wrappy "1" 1073 | 1074 | inherits@2: 1075 | version "2.0.3" 1076 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1077 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1078 | 1079 | inversify@^5.0.0: 1080 | version "5.0.1" 1081 | resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" 1082 | integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== 1083 | 1084 | is-arrayish@^0.2.1: 1085 | version "0.2.1" 1086 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1087 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1088 | 1089 | is-buffer@~2.0.3: 1090 | version "2.0.4" 1091 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 1092 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 1093 | 1094 | is-builtin-module@^1.0.0: 1095 | version "1.0.0" 1096 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1097 | integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= 1098 | dependencies: 1099 | builtin-modules "^1.0.0" 1100 | 1101 | is-callable@^1.1.4, is-callable@^1.1.5: 1102 | version "1.1.5" 1103 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" 1104 | integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== 1105 | 1106 | is-date-object@^1.0.1: 1107 | version "1.0.2" 1108 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1109 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1110 | 1111 | is-fullwidth-code-point@^2.0.0: 1112 | version "2.0.0" 1113 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1114 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1115 | 1116 | is-object@~1.0.1: 1117 | version "1.0.1" 1118 | resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" 1119 | integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= 1120 | 1121 | is-regex@^1.0.5: 1122 | version "1.0.5" 1123 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 1124 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 1125 | dependencies: 1126 | has "^1.0.3" 1127 | 1128 | is-stream@^1.0.1: 1129 | version "1.1.0" 1130 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1131 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1132 | 1133 | is-symbol@^1.0.2: 1134 | version "1.0.3" 1135 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1136 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1137 | dependencies: 1138 | has-symbols "^1.0.1" 1139 | 1140 | isarray@0.0.1: 1141 | version "0.0.1" 1142 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1143 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= 1144 | 1145 | isexe@^2.0.0: 1146 | version "2.0.0" 1147 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1148 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1149 | 1150 | istanbul-lib-coverage@^2.0.5: 1151 | version "2.0.5" 1152 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" 1153 | integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== 1154 | 1155 | istanbul-lib-hook@^2.0.7: 1156 | version "2.0.7" 1157 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" 1158 | integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== 1159 | dependencies: 1160 | append-transform "^1.0.0" 1161 | 1162 | istanbul-lib-instrument@^3.3.0: 1163 | version "3.3.0" 1164 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" 1165 | integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== 1166 | dependencies: 1167 | "@babel/generator" "^7.4.0" 1168 | "@babel/parser" "^7.4.3" 1169 | "@babel/template" "^7.4.0" 1170 | "@babel/traverse" "^7.4.3" 1171 | "@babel/types" "^7.4.0" 1172 | istanbul-lib-coverage "^2.0.5" 1173 | semver "^6.0.0" 1174 | 1175 | istanbul-lib-report@^2.0.8: 1176 | version "2.0.8" 1177 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" 1178 | integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== 1179 | dependencies: 1180 | istanbul-lib-coverage "^2.0.5" 1181 | make-dir "^2.1.0" 1182 | supports-color "^6.1.0" 1183 | 1184 | istanbul-lib-source-maps@^3.0.6: 1185 | version "3.0.6" 1186 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" 1187 | integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== 1188 | dependencies: 1189 | debug "^4.1.1" 1190 | istanbul-lib-coverage "^2.0.5" 1191 | make-dir "^2.1.0" 1192 | rimraf "^2.6.3" 1193 | source-map "^0.6.1" 1194 | 1195 | istanbul-reports@^2.2.4: 1196 | version "2.2.6" 1197 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" 1198 | integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== 1199 | dependencies: 1200 | handlebars "^4.1.2" 1201 | 1202 | istanbul@^0.4.5: 1203 | version "0.4.5" 1204 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" 1205 | integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= 1206 | dependencies: 1207 | abbrev "1.0.x" 1208 | async "1.x" 1209 | escodegen "1.8.x" 1210 | esprima "2.7.x" 1211 | glob "^5.0.15" 1212 | handlebars "^4.0.1" 1213 | js-yaml "3.x" 1214 | mkdirp "0.5.x" 1215 | nopt "3.x" 1216 | once "1.x" 1217 | resolve "1.1.x" 1218 | supports-color "^3.1.0" 1219 | which "^1.1.1" 1220 | wordwrap "^1.0.0" 1221 | 1222 | jest-docblock@^21.0.0: 1223 | version "21.2.0" 1224 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" 1225 | integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== 1226 | 1227 | js-tokens@^4.0.0: 1228 | version "4.0.0" 1229 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1230 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1231 | 1232 | js-yaml@3.13.1, js-yaml@^3.13.1: 1233 | version "3.13.1" 1234 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1235 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1236 | dependencies: 1237 | argparse "^1.0.7" 1238 | esprima "^4.0.0" 1239 | 1240 | js-yaml@3.x: 1241 | version "3.10.0" 1242 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" 1243 | integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== 1244 | dependencies: 1245 | argparse "^1.0.7" 1246 | esprima "^4.0.0" 1247 | 1248 | jsesc@^2.5.1: 1249 | version "2.5.1" 1250 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" 1251 | integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= 1252 | 1253 | jsesc@~0.5.0: 1254 | version "0.5.0" 1255 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1256 | integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= 1257 | 1258 | json-parse-better-errors@^1.0.1: 1259 | version "1.0.2" 1260 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1261 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1262 | 1263 | just-extend@^4.0.2: 1264 | version "4.0.2" 1265 | resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" 1266 | integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== 1267 | 1268 | levn@~0.3.0: 1269 | version "0.3.0" 1270 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1271 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1272 | dependencies: 1273 | prelude-ls "~1.1.2" 1274 | type-check "~0.3.2" 1275 | 1276 | lines-and-columns@^1.1.6: 1277 | version "1.1.6" 1278 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 1279 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 1280 | 1281 | load-json-file@^4.0.0: 1282 | version "4.0.0" 1283 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1284 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1285 | dependencies: 1286 | graceful-fs "^4.1.2" 1287 | parse-json "^4.0.0" 1288 | pify "^3.0.0" 1289 | strip-bom "^3.0.0" 1290 | 1291 | locate-path@^3.0.0: 1292 | version "3.0.0" 1293 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1294 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1295 | dependencies: 1296 | p-locate "^3.0.0" 1297 | path-exists "^3.0.0" 1298 | 1299 | lodash.flattendeep@^4.4.0: 1300 | version "4.4.0" 1301 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 1302 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 1303 | 1304 | lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.15: 1305 | version "4.17.15" 1306 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 1307 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 1308 | 1309 | log-symbols@2.2.0: 1310 | version "2.2.0" 1311 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1312 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1313 | dependencies: 1314 | chalk "^2.0.1" 1315 | 1316 | lolex@^4.2.0: 1317 | version "4.2.0" 1318 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" 1319 | integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== 1320 | 1321 | lolex@^5.0.1: 1322 | version "5.1.2" 1323 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" 1324 | integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== 1325 | dependencies: 1326 | "@sinonjs/commons" "^1.7.0" 1327 | 1328 | lru-cache@^4.0.1: 1329 | version "4.1.3" 1330 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" 1331 | integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== 1332 | dependencies: 1333 | pseudomap "^1.0.2" 1334 | yallist "^2.1.2" 1335 | 1336 | make-dir@^2.0.0, make-dir@^2.1.0: 1337 | version "2.1.0" 1338 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1339 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1340 | dependencies: 1341 | pify "^4.0.1" 1342 | semver "^5.6.0" 1343 | 1344 | make-error@^1.1.1: 1345 | version "1.3.5" 1346 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 1347 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1348 | 1349 | merge-descriptors@~1.0.0: 1350 | version "1.0.1" 1351 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1352 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1353 | 1354 | merge-source-map@^1.1.0: 1355 | version "1.1.0" 1356 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 1357 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== 1358 | dependencies: 1359 | source-map "^0.6.1" 1360 | 1361 | "minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: 1362 | version "3.0.4" 1363 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1364 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1365 | dependencies: 1366 | brace-expansion "^1.1.7" 1367 | 1368 | minimist@0.0.8: 1369 | version "0.0.8" 1370 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1371 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1372 | 1373 | minimist@~0.0.1: 1374 | version "0.0.10" 1375 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1376 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 1377 | 1378 | mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: 1379 | version "0.5.1" 1380 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1381 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1382 | dependencies: 1383 | minimist "0.0.8" 1384 | 1385 | mocha@^6.1.4: 1386 | version "6.2.2" 1387 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" 1388 | integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== 1389 | dependencies: 1390 | ansi-colors "3.2.3" 1391 | browser-stdout "1.3.1" 1392 | debug "3.2.6" 1393 | diff "3.5.0" 1394 | escape-string-regexp "1.0.5" 1395 | find-up "3.0.0" 1396 | glob "7.1.3" 1397 | growl "1.10.5" 1398 | he "1.2.0" 1399 | js-yaml "3.13.1" 1400 | log-symbols "2.2.0" 1401 | minimatch "3.0.4" 1402 | mkdirp "0.5.1" 1403 | ms "2.1.1" 1404 | node-environment-flags "1.0.5" 1405 | object.assign "4.1.0" 1406 | strip-json-comments "2.0.1" 1407 | supports-color "6.0.0" 1408 | which "1.3.1" 1409 | wide-align "1.1.3" 1410 | yargs "13.3.0" 1411 | yargs-parser "13.1.1" 1412 | yargs-unparser "1.6.0" 1413 | 1414 | mock-fs@^4.10.1: 1415 | version "4.10.4" 1416 | resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.10.4.tgz#4eaa3d6f7da2f44e1f3dd6b462cbbcb7b082e3d4" 1417 | integrity sha512-gDfZDLaPIvtOusbusLinfx6YSe2YpQsDT8qdP41P47dQ/NQggtkHukz7hwqgt8QvMBmAv+Z6DGmXPyb5BWX2nQ== 1418 | 1419 | module-not-found-error@^1.0.1: 1420 | version "1.0.1" 1421 | resolved "https://registry.yarnpkg.com/module-not-found-error/-/module-not-found-error-1.0.1.tgz#cf8b4ff4f29640674d6cdd02b0e3bc523c2bbdc0" 1422 | integrity sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA= 1423 | 1424 | ms@2.1.1: 1425 | version "2.1.1" 1426 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1427 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1428 | 1429 | ms@^2.1.1: 1430 | version "2.1.2" 1431 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1432 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1433 | 1434 | neo-async@^2.6.0: 1435 | version "2.6.1" 1436 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 1437 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== 1438 | 1439 | nested-error-stacks@^2.0.0: 1440 | version "2.1.0" 1441 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" 1442 | integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== 1443 | 1444 | nise@^1.5.2: 1445 | version "1.5.3" 1446 | resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" 1447 | integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== 1448 | dependencies: 1449 | "@sinonjs/formatio" "^3.2.1" 1450 | "@sinonjs/text-encoding" "^0.7.1" 1451 | just-extend "^4.0.2" 1452 | lolex "^5.0.1" 1453 | path-to-regexp "^1.7.0" 1454 | 1455 | node-environment-flags@1.0.5: 1456 | version "1.0.5" 1457 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1458 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1459 | dependencies: 1460 | object.getownpropertydescriptors "^2.0.3" 1461 | semver "^5.7.0" 1462 | 1463 | nopt@3.x: 1464 | version "3.0.6" 1465 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1466 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= 1467 | dependencies: 1468 | abbrev "1" 1469 | 1470 | normalize-package-data@^2.3.2: 1471 | version "2.4.0" 1472 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1473 | integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== 1474 | dependencies: 1475 | hosted-git-info "^2.1.4" 1476 | is-builtin-module "^1.0.0" 1477 | semver "2 || 3 || 4 || 5" 1478 | validate-npm-package-license "^3.0.1" 1479 | 1480 | nyc@^14.1.1: 1481 | version "14.1.1" 1482 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" 1483 | integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== 1484 | dependencies: 1485 | archy "^1.0.0" 1486 | caching-transform "^3.0.2" 1487 | convert-source-map "^1.6.0" 1488 | cp-file "^6.2.0" 1489 | find-cache-dir "^2.1.0" 1490 | find-up "^3.0.0" 1491 | foreground-child "^1.5.6" 1492 | glob "^7.1.3" 1493 | istanbul-lib-coverage "^2.0.5" 1494 | istanbul-lib-hook "^2.0.7" 1495 | istanbul-lib-instrument "^3.3.0" 1496 | istanbul-lib-report "^2.0.8" 1497 | istanbul-lib-source-maps "^3.0.6" 1498 | istanbul-reports "^2.2.4" 1499 | js-yaml "^3.13.1" 1500 | make-dir "^2.1.0" 1501 | merge-source-map "^1.1.0" 1502 | resolve-from "^4.0.0" 1503 | rimraf "^2.6.3" 1504 | signal-exit "^3.0.2" 1505 | spawn-wrap "^1.4.2" 1506 | test-exclude "^5.2.3" 1507 | uuid "^3.3.2" 1508 | yargs "^13.2.2" 1509 | yargs-parser "^13.0.0" 1510 | 1511 | object-inspect@^1.7.0: 1512 | version "1.7.0" 1513 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 1514 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 1515 | 1516 | object-keys@^1.0.0, object-keys@^1.0.8: 1517 | version "1.0.11" 1518 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 1519 | integrity sha1-xUYBd4rVYPEULODgG8yotW0TQm0= 1520 | 1521 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 1522 | version "1.1.1" 1523 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1524 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1525 | 1526 | object.assign@4.1.0, object.assign@^4.1.0: 1527 | version "4.1.0" 1528 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1529 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1530 | dependencies: 1531 | define-properties "^1.1.2" 1532 | function-bind "^1.1.1" 1533 | has-symbols "^1.0.0" 1534 | object-keys "^1.0.11" 1535 | 1536 | object.getownpropertydescriptors@^2.0.3: 1537 | version "2.1.0" 1538 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 1539 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 1540 | dependencies: 1541 | define-properties "^1.1.3" 1542 | es-abstract "^1.17.0-next.1" 1543 | 1544 | once@1.x, once@^1.3.0: 1545 | version "1.4.0" 1546 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1547 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1548 | dependencies: 1549 | wrappy "1" 1550 | 1551 | optimist@^0.6.1: 1552 | version "0.6.1" 1553 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1554 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 1555 | dependencies: 1556 | minimist "~0.0.1" 1557 | wordwrap "~0.0.2" 1558 | 1559 | optionator@^0.8.1: 1560 | version "0.8.2" 1561 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1562 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1563 | dependencies: 1564 | deep-is "~0.1.3" 1565 | fast-levenshtein "~2.0.4" 1566 | levn "~0.3.0" 1567 | prelude-ls "~1.1.2" 1568 | type-check "~0.3.2" 1569 | wordwrap "~1.0.0" 1570 | 1571 | os-homedir@^1.0.1: 1572 | version "1.0.2" 1573 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1574 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1575 | 1576 | p-limit@^2.0.0: 1577 | version "2.0.0" 1578 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" 1579 | integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== 1580 | dependencies: 1581 | p-try "^2.0.0" 1582 | 1583 | p-locate@^3.0.0: 1584 | version "3.0.0" 1585 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1586 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1587 | dependencies: 1588 | p-limit "^2.0.0" 1589 | 1590 | p-try@^2.0.0: 1591 | version "2.0.0" 1592 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" 1593 | integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== 1594 | 1595 | package-hash@^3.0.0: 1596 | version "3.0.0" 1597 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" 1598 | integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== 1599 | dependencies: 1600 | graceful-fs "^4.1.15" 1601 | hasha "^3.0.0" 1602 | lodash.flattendeep "^4.4.0" 1603 | release-zalgo "^1.0.0" 1604 | 1605 | parse-json@^4.0.0: 1606 | version "4.0.0" 1607 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 1608 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 1609 | dependencies: 1610 | error-ex "^1.3.1" 1611 | json-parse-better-errors "^1.0.1" 1612 | 1613 | path-exists@^3.0.0: 1614 | version "3.0.0" 1615 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1616 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1617 | 1618 | path-is-absolute@^1.0.0: 1619 | version "1.0.1" 1620 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1621 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1622 | 1623 | path-parse@^1.0.5: 1624 | version "1.0.5" 1625 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1626 | integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= 1627 | 1628 | path-parse@^1.0.6: 1629 | version "1.0.6" 1630 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1631 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1632 | 1633 | path-to-regexp@^1.7.0: 1634 | version "1.7.0" 1635 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" 1636 | integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= 1637 | dependencies: 1638 | isarray "0.0.1" 1639 | 1640 | path-type@^3.0.0: 1641 | version "3.0.0" 1642 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 1643 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 1644 | dependencies: 1645 | pify "^3.0.0" 1646 | 1647 | pify@^3.0.0: 1648 | version "3.0.0" 1649 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1650 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1651 | 1652 | pify@^4.0.1: 1653 | version "4.0.1" 1654 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1655 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1656 | 1657 | pkg-dir@^3.0.0: 1658 | version "3.0.0" 1659 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 1660 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 1661 | dependencies: 1662 | find-up "^3.0.0" 1663 | 1664 | power-assert-context-formatter@^1.0.7: 1665 | version "1.1.1" 1666 | resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf" 1667 | integrity sha1-7bo1LT7YpgMRTWZyZazOYNaJzN8= 1668 | dependencies: 1669 | core-js "^2.0.0" 1670 | power-assert-context-traversal "^1.1.1" 1671 | 1672 | power-assert-context-reducer-ast@^1.0.7: 1673 | version "1.1.2" 1674 | resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz#484a99e26f4973ff8832e5c5cc756702e6094174" 1675 | integrity sha1-SEqZ4m9Jc/+IMuXFzHVnAuYJQXQ= 1676 | dependencies: 1677 | acorn "^4.0.0" 1678 | acorn-es7-plugin "^1.0.12" 1679 | core-js "^2.0.0" 1680 | espurify "^1.6.0" 1681 | estraverse "^4.2.0" 1682 | 1683 | power-assert-context-traversal@^1.1.1: 1684 | version "1.1.1" 1685 | resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9" 1686 | integrity sha1-iMq8oNE7Y1nwfT0+ivppkmRXftk= 1687 | dependencies: 1688 | core-js "^2.0.0" 1689 | estraverse "^4.1.0" 1690 | 1691 | power-assert-formatter@^1.4.1: 1692 | version "1.4.1" 1693 | resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" 1694 | integrity sha1-XcEl7VCj37HdomwZNH879Y7CiEo= 1695 | dependencies: 1696 | core-js "^2.0.0" 1697 | power-assert-context-formatter "^1.0.7" 1698 | power-assert-context-reducer-ast "^1.0.7" 1699 | power-assert-renderer-assertion "^1.0.7" 1700 | power-assert-renderer-comparison "^1.0.7" 1701 | power-assert-renderer-diagram "^1.0.7" 1702 | power-assert-renderer-file "^1.0.7" 1703 | 1704 | power-assert-renderer-assertion@^1.0.7: 1705 | version "1.1.1" 1706 | resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98" 1707 | integrity sha1-y/wOd+AIao+Wrz8djme57n4ozpg= 1708 | dependencies: 1709 | power-assert-renderer-base "^1.1.1" 1710 | power-assert-util-string-width "^1.1.1" 1711 | 1712 | power-assert-renderer-base@^1.1.1: 1713 | version "1.1.1" 1714 | resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" 1715 | integrity sha1-lqZQxv0F7hvB9mtUrWFELIs/Y+s= 1716 | 1717 | power-assert-renderer-comparison@^1.0.7: 1718 | version "1.1.1" 1719 | resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz#d7439d97d85156be4e30a00f2fb5a72514ce3c08" 1720 | integrity sha1-10Odl9hRVr5OMKAPL7WnJRTOPAg= 1721 | dependencies: 1722 | core-js "^2.0.0" 1723 | diff-match-patch "^1.0.0" 1724 | power-assert-renderer-base "^1.1.1" 1725 | stringifier "^1.3.0" 1726 | type-name "^2.0.1" 1727 | 1728 | power-assert-renderer-diagram@^1.0.7: 1729 | version "1.1.2" 1730 | resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz#655f8f711935a9b6d541b86327654717c637a986" 1731 | integrity sha1-ZV+PcRk1qbbVQbhjJ2VHF8Y3qYY= 1732 | dependencies: 1733 | core-js "^2.0.0" 1734 | power-assert-renderer-base "^1.1.1" 1735 | power-assert-util-string-width "^1.1.1" 1736 | stringifier "^1.3.0" 1737 | 1738 | power-assert-renderer-file@^1.0.7: 1739 | version "1.1.1" 1740 | resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz#a37e2bbd178ccacd04e78dbb79c92fe34933c5e7" 1741 | integrity sha1-o34rvReMys0E5427eckv40kzxec= 1742 | dependencies: 1743 | power-assert-renderer-base "^1.1.1" 1744 | 1745 | power-assert-util-string-width@^1.1.1: 1746 | version "1.1.1" 1747 | resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592" 1748 | integrity sha1-vmWet5N/3S5smncmjar2S9W3xZI= 1749 | dependencies: 1750 | eastasianwidth "^0.1.1" 1751 | 1752 | power-assert@^1.6.1: 1753 | version "1.6.1" 1754 | resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.6.1.tgz#b28cbc02ae808afd1431d0cd5093a39ac5a5b1fe" 1755 | integrity sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ== 1756 | dependencies: 1757 | define-properties "^1.1.2" 1758 | empower "^1.3.1" 1759 | power-assert-formatter "^1.4.1" 1760 | universal-deep-strict-equal "^1.2.1" 1761 | xtend "^4.0.0" 1762 | 1763 | prelude-ls@~1.1.2: 1764 | version "1.1.2" 1765 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1766 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1767 | 1768 | prettier@^1.18.2: 1769 | version "1.19.1" 1770 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 1771 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 1772 | 1773 | proxyquire@^2.1.0: 1774 | version "2.1.3" 1775 | resolved "https://registry.yarnpkg.com/proxyquire/-/proxyquire-2.1.3.tgz#2049a7eefa10a9a953346a18e54aab2b4268df39" 1776 | integrity sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg== 1777 | dependencies: 1778 | fill-keys "^1.0.2" 1779 | module-not-found-error "^1.0.1" 1780 | resolve "^1.11.1" 1781 | 1782 | pseudomap@^1.0.2: 1783 | version "1.0.2" 1784 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1785 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1786 | 1787 | read-pkg-up@^4.0.0: 1788 | version "4.0.0" 1789 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 1790 | integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== 1791 | dependencies: 1792 | find-up "^3.0.0" 1793 | read-pkg "^3.0.0" 1794 | 1795 | read-pkg@^3.0.0: 1796 | version "3.0.0" 1797 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 1798 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 1799 | dependencies: 1800 | load-json-file "^4.0.0" 1801 | normalize-package-data "^2.3.2" 1802 | path-type "^3.0.0" 1803 | 1804 | reflect-metadata@^0.1.12: 1805 | version "0.1.13" 1806 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" 1807 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== 1808 | 1809 | regenerate@^1.2.1: 1810 | version "1.3.3" 1811 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" 1812 | integrity sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg== 1813 | 1814 | regenerator-runtime@^0.13.2: 1815 | version "0.13.3" 1816 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" 1817 | integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== 1818 | 1819 | regexpu-core@^1.0.0: 1820 | version "1.0.0" 1821 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" 1822 | integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs= 1823 | dependencies: 1824 | regenerate "^1.2.1" 1825 | regjsgen "^0.2.0" 1826 | regjsparser "^0.1.4" 1827 | 1828 | regjsgen@^0.2.0: 1829 | version "0.2.0" 1830 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1831 | integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= 1832 | 1833 | regjsparser@^0.1.4: 1834 | version "0.1.5" 1835 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1836 | integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= 1837 | dependencies: 1838 | jsesc "~0.5.0" 1839 | 1840 | release-zalgo@^1.0.0: 1841 | version "1.0.0" 1842 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 1843 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 1844 | dependencies: 1845 | es6-error "^4.0.1" 1846 | 1847 | require-directory@^2.1.1: 1848 | version "2.1.1" 1849 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1850 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1851 | 1852 | require-main-filename@^2.0.0: 1853 | version "2.0.0" 1854 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1855 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1856 | 1857 | resolve-from@^4.0.0: 1858 | version "4.0.0" 1859 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1860 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1861 | 1862 | resolve@1.1.x: 1863 | version "1.1.7" 1864 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1865 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 1866 | 1867 | resolve@^1.11.1, resolve@^1.4.0: 1868 | version "1.14.1" 1869 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff" 1870 | integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg== 1871 | dependencies: 1872 | path-parse "^1.0.6" 1873 | 1874 | resolve@^1.3.2: 1875 | version "1.5.0" 1876 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" 1877 | integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== 1878 | dependencies: 1879 | path-parse "^1.0.5" 1880 | 1881 | rimraf@^2.6.2: 1882 | version "2.6.2" 1883 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1884 | integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== 1885 | dependencies: 1886 | glob "^7.0.5" 1887 | 1888 | rimraf@^2.6.3: 1889 | version "2.7.1" 1890 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1891 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1892 | dependencies: 1893 | glob "^7.1.3" 1894 | 1895 | rxjs-tslint-rules@4.24.0: 1896 | version "4.24.0" 1897 | resolved "https://registry.yarnpkg.com/rxjs-tslint-rules/-/rxjs-tslint-rules-4.24.0.tgz#e06d5886327ac8ba7c2733a994a47f8b5dd6d61e" 1898 | integrity sha512-GiPTSipUJUcgZbtITMkvpjhaRXqvRkT7NSmYm/0I+M/JsU1+zsDPWekREU7h14p6O68Q26V7CKA/7EpKUftGIg== 1899 | dependencies: 1900 | "@phenomnomnominal/tsquery" "^3.0.0" 1901 | decamelize "^3.0.0" 1902 | resolve "^1.4.0" 1903 | semver "^6.0.0" 1904 | tslib "^1.8.0" 1905 | tsutils "^3.0.0" 1906 | tsutils-etc "^1.1.0" 1907 | 1908 | rxjs-tslint@0.1.7: 1909 | version "0.1.7" 1910 | resolved "https://registry.yarnpkg.com/rxjs-tslint/-/rxjs-tslint-0.1.7.tgz#5ed841d1837cc0dc2187e5b57a2d45aa2af337e4" 1911 | integrity sha512-NnOfqutNfdT7VQnQm32JLYh2gDZjc0gdWZFtrxf/czNGkLKJ1nOO6jbKAFI09W0f9lCtv6P2ozxjbQH8TSPPFQ== 1912 | dependencies: 1913 | chalk "^2.4.0" 1914 | optimist "^0.6.1" 1915 | tslint "^5.9.1" 1916 | tsutils "^2.25.0" 1917 | typescript ">=2.8.3" 1918 | 1919 | rxjs@^6.5.2: 1920 | version "6.5.3" 1921 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" 1922 | integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== 1923 | dependencies: 1924 | tslib "^1.9.0" 1925 | 1926 | safe-buffer@^5.0.1: 1927 | version "5.2.0" 1928 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1929 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1930 | 1931 | safe-buffer@~5.1.1: 1932 | version "5.1.2" 1933 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1934 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1935 | 1936 | semver-dsl@^1.0.1: 1937 | version "1.0.1" 1938 | resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" 1939 | integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= 1940 | dependencies: 1941 | semver "^5.3.0" 1942 | 1943 | "semver@2 || 3 || 4 || 5": 1944 | version "5.5.1" 1945 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" 1946 | integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== 1947 | 1948 | semver@^5.3.0: 1949 | version "5.4.1" 1950 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 1951 | integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== 1952 | 1953 | semver@^5.6.0, semver@^5.7.0: 1954 | version "5.7.1" 1955 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1956 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1957 | 1958 | semver@^6.0.0: 1959 | version "6.3.0" 1960 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1961 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1962 | 1963 | set-blocking@^2.0.0: 1964 | version "2.0.0" 1965 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1966 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1967 | 1968 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1969 | version "3.0.2" 1970 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1971 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 1972 | 1973 | sinon@^7.3.2: 1974 | version "7.5.0" 1975 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" 1976 | integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== 1977 | dependencies: 1978 | "@sinonjs/commons" "^1.4.0" 1979 | "@sinonjs/formatio" "^3.2.1" 1980 | "@sinonjs/samsam" "^3.3.3" 1981 | diff "^3.5.0" 1982 | lolex "^4.2.0" 1983 | nise "^1.5.2" 1984 | supports-color "^5.5.0" 1985 | 1986 | source-map-support@^0.5.6: 1987 | version "0.5.9" 1988 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" 1989 | integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== 1990 | dependencies: 1991 | buffer-from "^1.0.0" 1992 | source-map "^0.6.0" 1993 | 1994 | source-map@^0.5.0, source-map@^0.5.7: 1995 | version "0.5.7" 1996 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1997 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 1998 | 1999 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2000 | version "0.6.1" 2001 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2002 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2003 | 2004 | source-map@~0.2.0: 2005 | version "0.2.0" 2006 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 2007 | integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= 2008 | dependencies: 2009 | amdefine ">=0.0.4" 2010 | 2011 | spawn-wrap@^1.4.2: 2012 | version "1.4.2" 2013 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" 2014 | integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== 2015 | dependencies: 2016 | foreground-child "^1.5.6" 2017 | mkdirp "^0.5.0" 2018 | os-homedir "^1.0.1" 2019 | rimraf "^2.6.2" 2020 | signal-exit "^3.0.2" 2021 | which "^1.3.0" 2022 | 2023 | spdx-correct@^3.0.0: 2024 | version "3.0.0" 2025 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" 2026 | integrity sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g== 2027 | dependencies: 2028 | spdx-expression-parse "^3.0.0" 2029 | spdx-license-ids "^3.0.0" 2030 | 2031 | spdx-exceptions@^2.1.0: 2032 | version "2.1.0" 2033 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" 2034 | integrity sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg== 2035 | 2036 | spdx-expression-parse@^3.0.0: 2037 | version "3.0.0" 2038 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 2039 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 2040 | dependencies: 2041 | spdx-exceptions "^2.1.0" 2042 | spdx-license-ids "^3.0.0" 2043 | 2044 | spdx-license-ids@^3.0.0: 2045 | version "3.0.1" 2046 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" 2047 | integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== 2048 | 2049 | sprintf-js@^1.1.2: 2050 | version "1.1.2" 2051 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" 2052 | integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== 2053 | 2054 | sprintf-js@~1.0.2: 2055 | version "1.0.3" 2056 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2057 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2058 | 2059 | "string-width@^1.0.2 || 2": 2060 | version "2.1.1" 2061 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2062 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2063 | dependencies: 2064 | is-fullwidth-code-point "^2.0.0" 2065 | strip-ansi "^4.0.0" 2066 | 2067 | string-width@^3.0.0, string-width@^3.1.0: 2068 | version "3.1.0" 2069 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2070 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2071 | dependencies: 2072 | emoji-regex "^7.0.1" 2073 | is-fullwidth-code-point "^2.0.0" 2074 | strip-ansi "^5.1.0" 2075 | 2076 | string.prototype.trimleft@^2.1.1: 2077 | version "2.1.1" 2078 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" 2079 | integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== 2080 | dependencies: 2081 | define-properties "^1.1.3" 2082 | function-bind "^1.1.1" 2083 | 2084 | string.prototype.trimright@^2.1.1: 2085 | version "2.1.1" 2086 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" 2087 | integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== 2088 | dependencies: 2089 | define-properties "^1.1.3" 2090 | function-bind "^1.1.1" 2091 | 2092 | stringifier@^1.3.0: 2093 | version "1.3.0" 2094 | resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959" 2095 | integrity sha1-3vGDQvaTPbDy2/yaoCF1tEjBeVk= 2096 | dependencies: 2097 | core-js "^2.0.0" 2098 | traverse "^0.6.6" 2099 | type-name "^2.0.1" 2100 | 2101 | strip-ansi@^4.0.0: 2102 | version "4.0.0" 2103 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2104 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2105 | dependencies: 2106 | ansi-regex "^3.0.0" 2107 | 2108 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2109 | version "5.2.0" 2110 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2111 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2112 | dependencies: 2113 | ansi-regex "^4.1.0" 2114 | 2115 | strip-bom@^3.0.0: 2116 | version "3.0.0" 2117 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2118 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2119 | 2120 | strip-json-comments@2.0.1: 2121 | version "2.0.1" 2122 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2123 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2124 | 2125 | strip-json-comments@^3.0.1: 2126 | version "3.0.1" 2127 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" 2128 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== 2129 | 2130 | supports-color@6.0.0: 2131 | version "6.0.0" 2132 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 2133 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 2134 | dependencies: 2135 | has-flag "^3.0.0" 2136 | 2137 | supports-color@^3.1.0: 2138 | version "3.2.3" 2139 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 2140 | integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= 2141 | dependencies: 2142 | has-flag "^1.0.0" 2143 | 2144 | supports-color@^4.0.0: 2145 | version "4.5.0" 2146 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 2147 | integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= 2148 | dependencies: 2149 | has-flag "^2.0.0" 2150 | 2151 | supports-color@^5.3.0, supports-color@^5.5.0: 2152 | version "5.5.0" 2153 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2154 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2155 | dependencies: 2156 | has-flag "^3.0.0" 2157 | 2158 | supports-color@^6.1.0: 2159 | version "6.1.0" 2160 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 2161 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 2162 | dependencies: 2163 | has-flag "^3.0.0" 2164 | 2165 | test-exclude@^5.2.3: 2166 | version "5.2.3" 2167 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" 2168 | integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== 2169 | dependencies: 2170 | glob "^7.1.3" 2171 | minimatch "^3.0.4" 2172 | read-pkg-up "^4.0.0" 2173 | require-main-filename "^2.0.0" 2174 | 2175 | through@X.X.X: 2176 | version "2.3.8" 2177 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2178 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2179 | 2180 | to-fast-properties@^2.0.0: 2181 | version "2.0.0" 2182 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2183 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2184 | 2185 | traverse@^0.6.6: 2186 | version "0.6.6" 2187 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" 2188 | integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= 2189 | 2190 | ts-node@^8.3.0: 2191 | version "8.5.4" 2192 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" 2193 | integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== 2194 | dependencies: 2195 | arg "^4.1.0" 2196 | diff "^4.0.1" 2197 | make-error "^1.1.1" 2198 | source-map-support "^0.5.6" 2199 | yn "^3.0.0" 2200 | 2201 | tslib@1.9.0: 2202 | version "1.9.0" 2203 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" 2204 | integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== 2205 | 2206 | tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1: 2207 | version "1.8.1" 2208 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac" 2209 | integrity sha1-aUavLR1lGnsYY7Ux1uWvpBqkTqw= 2210 | 2211 | tslib@^1.9.0: 2212 | version "1.10.0" 2213 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 2214 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 2215 | 2216 | tslint-config-airbnb@^5.11.1: 2217 | version "5.11.2" 2218 | resolved "https://registry.yarnpkg.com/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz#2f3d239fa3923be8e7a4372217a7ed552671528f" 2219 | integrity sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow== 2220 | dependencies: 2221 | tslint-consistent-codestyle "^1.14.1" 2222 | tslint-eslint-rules "^5.4.0" 2223 | tslint-microsoft-contrib "~5.2.1" 2224 | 2225 | tslint-config-prettier@1.18.0, tslint-config-prettier@^1.18.0: 2226 | version "1.18.0" 2227 | resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" 2228 | integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== 2229 | 2230 | tslint-config-standard@8.0.1, tslint-config-standard@^8.0.1: 2231 | version "8.0.1" 2232 | resolved "https://registry.yarnpkg.com/tslint-config-standard/-/tslint-config-standard-8.0.1.tgz#e4dd3128e84b0e34b51990b68715a641f2b417e4" 2233 | integrity sha512-OWG+NblgjQlVuUS/Dmq3ax2v5QDZwRx4L0kEuDi7qFY9UI6RJhhNfoCV1qI4el8Fw1c5a5BTrjQJP0/jhGXY/Q== 2234 | dependencies: 2235 | tslint-eslint-rules "^5.3.1" 2236 | 2237 | tslint-consistent-codestyle@1.15.1: 2238 | version "1.15.1" 2239 | resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.1.tgz#a0c5cd5a5860d40b659c490d8013c5732e02af8c" 2240 | integrity sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg== 2241 | dependencies: 2242 | "@fimbul/bifrost" "^0.17.0" 2243 | tslib "^1.7.1" 2244 | tsutils "^2.29.0" 2245 | 2246 | tslint-consistent-codestyle@^1.14.1: 2247 | version "1.16.0" 2248 | resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz#52348ea899a7e025b37cc6545751c6a566a19077" 2249 | integrity sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw== 2250 | dependencies: 2251 | "@fimbul/bifrost" "^0.21.0" 2252 | tslib "^1.7.1" 2253 | tsutils "^2.29.0" 2254 | 2255 | tslint-eslint-rules@5.4.0, tslint-eslint-rules@^5.3.1, tslint-eslint-rules@^5.4.0: 2256 | version "5.4.0" 2257 | resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" 2258 | integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== 2259 | dependencies: 2260 | doctrine "0.7.2" 2261 | tslib "1.9.0" 2262 | tsutils "^3.0.0" 2263 | 2264 | tslint-microsoft-contrib@6.2.0, tslint-microsoft-contrib@^6.2.0: 2265 | version "6.2.0" 2266 | resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-6.2.0.tgz#8aa0f40584d066d05e6a5e7988da5163b85f2ad4" 2267 | integrity sha512-6tfi/2tHqV/3CL77pULBcK+foty11Rr0idRDxKnteTaKm6gWF9qmaCNU17HVssOuwlYNyOmd9Jsmjd+1t3a3qw== 2268 | dependencies: 2269 | tsutils "^2.27.2 <2.29.0" 2270 | 2271 | tslint-microsoft-contrib@~5.2.1: 2272 | version "5.2.1" 2273 | resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" 2274 | integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== 2275 | dependencies: 2276 | tsutils "^2.27.2 <2.29.0" 2277 | 2278 | tslint-no-circular-imports@^0.7.0: 2279 | version "0.7.0" 2280 | resolved "https://registry.yarnpkg.com/tslint-no-circular-imports/-/tslint-no-circular-imports-0.7.0.tgz#9df0a15654d66b172e0b7843eed073fa5ae99b5f" 2281 | integrity sha512-k3wxpeMC4ef40UbpfBVHEHIzKfNZq5/SCtAO1YjGsaNTklo+K53/TWLrym+poA65RJFDiYgYNWvkeIIkJNA0Vw== 2282 | 2283 | tslint-no-unused-expression-chai@0.1.4, tslint-no-unused-expression-chai@^0.1.4: 2284 | version "0.1.4" 2285 | resolved "https://registry.yarnpkg.com/tslint-no-unused-expression-chai/-/tslint-no-unused-expression-chai-0.1.4.tgz#f4a2c9dd3306088f44eb7574cf470082b09ade49" 2286 | integrity sha512-frEWKNTcq7VsaWKgUxMDOB2N/cmQadVkUtUGIut+2K4nv/uFXPfgJyPjuNC/cHyfUVqIkHMAvHOCL+d/McU3nQ== 2287 | dependencies: 2288 | tsutils "^3.0.0" 2289 | 2290 | tslint-plugin-prettier@^2.0.1: 2291 | version "2.1.0" 2292 | resolved "https://registry.yarnpkg.com/tslint-plugin-prettier/-/tslint-plugin-prettier-2.1.0.tgz#e2522d273cb9672d93d0e68f2514fe3c19698c3a" 2293 | integrity sha512-nMCpU+QSpXtydcWXeZF+3ljIbG/K8SHVZwB7K/MtuoQQFXxXN6watqTSBpVXCInuPFvmjiWkhxeMoUW4N0zgSg== 2294 | dependencies: 2295 | eslint-plugin-prettier "^2.2.0" 2296 | lines-and-columns "^1.1.6" 2297 | tslib "^1.7.1" 2298 | 2299 | tslint-react-hooks@^2.1.1: 2300 | version "2.2.1" 2301 | resolved "https://registry.yarnpkg.com/tslint-react-hooks/-/tslint-react-hooks-2.2.1.tgz#c52c7df65ee1517b2d6c92bc716e9ef72ccdf208" 2302 | integrity sha512-bqIg2uZe+quJMfSOGc4OOZ4awo6TP1ejGDGS6IKg2WIrS0XnWfhUJ99i3B8rUpnZhuD4vRSvyYIbXPUmEqQxxQ== 2303 | 2304 | tslint-react@^4.0.0: 2305 | version "4.1.0" 2306 | resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.1.0.tgz#7153b724a8cfbea52423d0ffa469e8eba3bcc834" 2307 | integrity sha512-Y7CbFn09X7Mpg6rc7t/WPbmjx9xPI8p1RsQyiGCLWgDR6sh3+IBSlT+bEkc0PSZcWwClOkqq2wPsID8Vep6szQ== 2308 | dependencies: 2309 | tsutils "^3.9.1" 2310 | 2311 | tslint-sonarts@1.9.0, tslint-sonarts@^1.9.0: 2312 | version "1.9.0" 2313 | resolved "https://registry.yarnpkg.com/tslint-sonarts/-/tslint-sonarts-1.9.0.tgz#feb593e92db328c0328b430b838adbe65d504de9" 2314 | integrity sha512-CJWt+IiYI8qggb2O/JPkS6CkC5DY1IcqRsm9EHJ+AxoWK70lvtP7jguochyNDMP2vIz/giGdWCfEM39x/I/Vnw== 2315 | dependencies: 2316 | immutable "^3.8.2" 2317 | 2318 | tslint@^5.17.0, tslint@^5.9.1: 2319 | version "5.20.1" 2320 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" 2321 | integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== 2322 | dependencies: 2323 | "@babel/code-frame" "^7.0.0" 2324 | builtin-modules "^1.1.1" 2325 | chalk "^2.3.0" 2326 | commander "^2.12.1" 2327 | diff "^4.0.1" 2328 | glob "^7.1.1" 2329 | js-yaml "^3.13.1" 2330 | minimatch "^3.0.4" 2331 | mkdirp "^0.5.1" 2332 | resolve "^1.3.2" 2333 | semver "^5.3.0" 2334 | tslib "^1.8.0" 2335 | tsutils "^2.29.0" 2336 | 2337 | tsutils-etc@^1.1.0: 2338 | version "1.1.0" 2339 | resolved "https://registry.yarnpkg.com/tsutils-etc/-/tsutils-etc-1.1.0.tgz#82ce1c92da29e07d3cde95692d5c5e8dbdc92fd0" 2340 | integrity sha512-pJlLtLmQPUyGHqY/Pq6EGnpGmQCnnTDZetQ7eWkeQ5xaw4GtfcR1Zt7HMKFHGDDp53HzQfbqQ+7ps6iJbfa9Hw== 2341 | 2342 | tsutils@^2.25.0, tsutils@^2.29.0: 2343 | version "2.29.0" 2344 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 2345 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 2346 | dependencies: 2347 | tslib "^1.8.1" 2348 | 2349 | "tsutils@^2.27.2 <2.29.0": 2350 | version "2.28.0" 2351 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" 2352 | integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== 2353 | dependencies: 2354 | tslib "^1.8.1" 2355 | 2356 | tsutils@^3.0.0: 2357 | version "3.1.0" 2358 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.1.0.tgz#9136fdbc347799941db4eb326af4dcb81454820e" 2359 | integrity sha512-rmGhespW+nZMtdkc4JJefYSjux2uCDZxCTLU+nu8gvm+gM+YT0W5XAygHxaeOwRAHZ+SoPdrovZmAlZ2a0KSlw== 2360 | dependencies: 2361 | tslib "^1.8.1" 2362 | 2363 | tsutils@^3.5.0, tsutils@^3.9.1: 2364 | version "3.17.1" 2365 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" 2366 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 2367 | dependencies: 2368 | tslib "^1.8.1" 2369 | 2370 | type-check@~0.3.2: 2371 | version "0.3.2" 2372 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2373 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2374 | dependencies: 2375 | prelude-ls "~1.1.2" 2376 | 2377 | type-detect@4.0.8: 2378 | version "4.0.8" 2379 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2380 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2381 | 2382 | type-name@^2.0.1: 2383 | version "2.0.2" 2384 | resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" 2385 | integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= 2386 | 2387 | typescript@>=2.8.3, typescript@^3.5.2: 2388 | version "3.7.4" 2389 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.4.tgz#1743a5ec5fef6a1fa9f3e4708e33c81c73876c19" 2390 | integrity sha512-A25xv5XCtarLwXpcDNZzCGvW2D1S3/bACratYBx2sax8PefsFhlYmkQicKHvpYflFS8if4zne5zT5kpJ7pzuvw== 2391 | 2392 | uglify-js@^3.1.4: 2393 | version "3.4.9" 2394 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" 2395 | integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== 2396 | dependencies: 2397 | commander "~2.17.1" 2398 | source-map "~0.6.1" 2399 | 2400 | universal-deep-strict-equal@^1.2.1: 2401 | version "1.2.2" 2402 | resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" 2403 | integrity sha1-DaSsL3PP95JMgfpN4BjKViyisKc= 2404 | dependencies: 2405 | array-filter "^1.0.0" 2406 | indexof "0.0.1" 2407 | object-keys "^1.0.0" 2408 | 2409 | uuid@^3.3.2: 2410 | version "3.3.2" 2411 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 2412 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 2413 | 2414 | validate-npm-package-license@^3.0.1: 2415 | version "3.0.4" 2416 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2417 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2418 | dependencies: 2419 | spdx-correct "^3.0.0" 2420 | spdx-expression-parse "^3.0.0" 2421 | 2422 | vrsource-tslint-rules@6.0.0: 2423 | version "6.0.0" 2424 | resolved "https://registry.yarnpkg.com/vrsource-tslint-rules/-/vrsource-tslint-rules-6.0.0.tgz#a4e25e8f3fdd487684174f423c090c35d60f37a9" 2425 | integrity sha512-pmcnJdIVziZTk1V0Cqehmh3gIabBRkBYXkv9vx+1CZDNEa41kNGUBFwQLzw21erYOd2QnD8jJeZhBGqnlT1HWw== 2426 | 2427 | which-module@^2.0.0: 2428 | version "2.0.0" 2429 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2430 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2431 | 2432 | which@1.3.1, which@^1.2.9, which@^1.3.0: 2433 | version "1.3.1" 2434 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2435 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2436 | dependencies: 2437 | isexe "^2.0.0" 2438 | 2439 | which@^1.1.1: 2440 | version "1.3.0" 2441 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 2442 | integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== 2443 | dependencies: 2444 | isexe "^2.0.0" 2445 | 2446 | wide-align@1.1.3: 2447 | version "1.1.3" 2448 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2449 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2450 | dependencies: 2451 | string-width "^1.0.2 || 2" 2452 | 2453 | wordwrap@^1.0.0, wordwrap@~1.0.0: 2454 | version "1.0.0" 2455 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2456 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 2457 | 2458 | wordwrap@~0.0.2: 2459 | version "0.0.3" 2460 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2461 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 2462 | 2463 | wrap-ansi@^5.1.0: 2464 | version "5.1.0" 2465 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 2466 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2467 | dependencies: 2468 | ansi-styles "^3.2.0" 2469 | string-width "^3.0.0" 2470 | strip-ansi "^5.0.0" 2471 | 2472 | wrappy@1: 2473 | version "1.0.2" 2474 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2475 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2476 | 2477 | write-file-atomic@^2.4.2: 2478 | version "2.4.3" 2479 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 2480 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 2481 | dependencies: 2482 | graceful-fs "^4.1.11" 2483 | imurmurhash "^0.1.4" 2484 | signal-exit "^3.0.2" 2485 | 2486 | xregexp@^4.2.4: 2487 | version "4.2.4" 2488 | resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.2.4.tgz#02a4aea056d65a42632c02f0233eab8e4d7e57ed" 2489 | integrity sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA== 2490 | dependencies: 2491 | "@babel/runtime-corejs2" "^7.2.0" 2492 | 2493 | xtend@^4.0.0: 2494 | version "4.0.1" 2495 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2496 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= 2497 | 2498 | y18n@^4.0.0: 2499 | version "4.0.0" 2500 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2501 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2502 | 2503 | yallist@^2.1.2: 2504 | version "2.1.2" 2505 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2506 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2507 | 2508 | yargs-parser@13.1.1, yargs-parser@^13.0.0, yargs-parser@^13.1.1: 2509 | version "13.1.1" 2510 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2511 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 2512 | dependencies: 2513 | camelcase "^5.0.0" 2514 | decamelize "^1.2.0" 2515 | 2516 | yargs-unparser@1.6.0: 2517 | version "1.6.0" 2518 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 2519 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 2520 | dependencies: 2521 | flat "^4.1.0" 2522 | lodash "^4.17.15" 2523 | yargs "^13.3.0" 2524 | 2525 | yargs@13.3.0, yargs@^13.2.2, yargs@^13.3.0: 2526 | version "13.3.0" 2527 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 2528 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 2529 | dependencies: 2530 | cliui "^5.0.0" 2531 | find-up "^3.0.0" 2532 | get-caller-file "^2.0.1" 2533 | require-directory "^2.1.1" 2534 | require-main-filename "^2.0.0" 2535 | set-blocking "^2.0.0" 2536 | string-width "^3.0.0" 2537 | which-module "^2.0.0" 2538 | y18n "^4.0.0" 2539 | yargs-parser "^13.1.1" 2540 | 2541 | yn@^3.0.0: 2542 | version "3.1.1" 2543 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2544 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2545 | 2546 | zone.js@~0.9.1: 2547 | version "0.9.1" 2548 | resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.9.1.tgz#e37c6e5c54c13fae4de26b5ffe8d8e9212da6d9b" 2549 | integrity sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag== 2550 | --------------------------------------------------------------------------------