diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..ee8367f852 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +[*.ts] +indent_style = space +indent_size = 4 + +[*.tsx] +indent_style = space +indent_size = 4 diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE new file mode 100644 index 0000000000..50b5c8eade --- /dev/null +++ b/.github/ISSUE_TEMPLATE @@ -0,0 +1,21 @@ +- Issue + +[describe the issue here] + + + +- Expected behavior + +[describe the expected behavior here] + + + +- Link to a minimal repo that reproduces this issue + +[If you haven't already, create the smallest possible repo that reproduces this issue by running `npm install` and `npm test`. This will speed up any fixes that this issue might need] + + + +- Optional (but highly recommended) - Configure Travis (or your favorite system) with the minimal repo + +This allows potential solutions to be tested against the minimal repo. This saves everyone time and avoids a lot of back and forth. diff --git a/.gitignore b/.gitignore index b1d45c0a1f..116a3fe641 100644 --- a/.gitignore +++ b/.gitignore @@ -41,8 +41,5 @@ jspm_packages # Optional REPL history .node_repl_history -# We need to include this folders, because they are mocks for integration tests -!tests/**/node_modules - .vscode .idea diff --git a/.travis.yml b/.travis.yml index edfba37470..55067d7c8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,10 @@ language: node_js node_js: - - "7" + - "8" - "6" - "4" before_install: - - npm i -g npm@latest + - npm i -g npm@latest tslint + - sudo sysctl fs.inotify.max_user_watches=524288 -sudo: false - -matrix: - allow_failures: - - node_js: "7" +sudo: required diff --git a/AUTHORS b/AUTHORS index 311a69ae54..3a601c89dc 100644 --- a/AUTHORS +++ b/AUTHORS @@ -3,6 +3,29 @@ # # Name/Organization +Alex Jover Morales +Andreas Krummsdorf +Bartosz Gościński +Blake Embrey +Chong Guo +Christian Linne +Christian Rackerseder +Daniel Perez Alvarez +David Sheldrick +Emil Persson +Eric Anderson +Felipe Matos +Forbes Lindesay +Gustav Wengel +Henry Zektser Ihor Chulinda +J Cheyo Jimenez +Joscha Feth Kulshekhar Kabra +Kyle Roach +Marshall Bowers +Maxim Samoilov +Mohammad Rajabifard OJ Kwon +Tom Crockett +Umidbek Karimov diff --git a/README.md b/README.md index 83ee140dfb..4f724a723f 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,52 @@ # ts-jest -[![Build Status for node v7](https://travis-badges.herokuapp.com/repos/kulshekhar/ts-jest/branches/master?job=0)](https://travis-ci.org/kulshekhar/ts-jest) -[![Build Status for node v6](https://travis-badges.herokuapp.com/repos/kulshekhar/ts-jest/branches/master?job=1)](https://travis-ci.org/kulshekhar/ts-jest) -[![Build Status for node v4](https://travis-badges.herokuapp.com/repos/kulshekhar/ts-jest/branches/master?job=2)](https://travis-ci.org/kulshekhar/ts-jest) -[![Build Status for Windows](https://ci.appveyor.com/api/projects/status/gknb1pl72o0w0coc?svg=true)](https://ci.appveyor.com/project/Igmat/ts-jest) [![npm version](https://badge.fury.io/js/ts-jest.svg)](https://badge.fury.io/js/ts-jest) -[![dependencies](https://david-dm.org/kulshekhar/ts-jest.svg)](https://www.npmjs.com/package/ts-jest) +[![NPM downloads](https://img.shields.io/npm/dm/ts-jest.svg?style=flat)](https://npmjs.org/package/ts-jest) +[![Greenkeeper badge](https://badges.greenkeeper.io/kulshekhar/ts-jest.svg)](https://greenkeeper.io/) + +[![Build Status for linux](https://travis-ci.org/kulshekhar/ts-jest.svg?branch=master)](https://travis-ci.org/kulshekhar/ts-jest) +[![Build Status for Windows](https://ci.appveyor.com/api/projects/status/g8tt9qd7usv0tolb/branch/master?svg=true)](https://ci.appveyor.com/project/kulshekhar/ts-jest/branch/master) + +> Note: Looking for collaborators. [Want to help improve ts-jest?](https://github.com/kulshekhar/ts-jest/issues/223) + +`ts-jest` is a TypeScript preprocessor with source map support for Jest that lets you use Jest to test projects written in TypeScript. ## Table of Contents -- [Versioning](#versioning) - [Usage](#usage) -- [Options](#options) + - [Versioning](#versioning) + - [Coverage](#coverage) +- [Default Setup](#default-setup) + - [Sourcemap support](#sourcemap-support) + - [Automatically finds tsconfig.json](#automatically-finds-tsconfigjson) + - [Supports synthetic modules](#supports-synthetic-modules) + - [Supports automatic of jest.mock() calls](#supports-automatic-of-jestmock-calls) +- [Configuration](#configuration) + - [tsconfig](#tsconfig) + - [Skipping Babel](#skipping-babel) +- [Use cases](#use-cases) + - [React Native](#react-native) +- [Angular 2](#angular-2) +- [Tips](#tips) + - [Importing packages written in TypeScript](#importing-packages-written-in-typescript) +- [Known Limitations](#known-limitations) + - [Known limitations for TS compiler options](#known-limitations-for-ts-compiler-options) + - [Known Limitations for hoisting](#known-limitations-for-hoisting) + - [Current limitations for breakpoints](#current-limitations-for-breakpoints) - [How to Contribute](#how-to-contribute) - [Quickstart to run tests (only if you're working on this package)](#quickstart-to-run-tests-only-if-youre-working-on-this-package) - [License](#license) -## Versioning -From version `"jest": "17.0.0"` we are using same MAJOR.MINOR as [`Jest`](https://github.com/facebook/jest). -For `"jest": "< 17.0.0"` use `"ts-jest": "0.1.13"`. Docs for it see [here](https://github.com/kulshekhar/ts-jest/blob/e1f95e524ed62091736f70abf63530f1f107ec03/README.md). - ## Usage To use this in your project, run: ```sh -npm install --save-dev ts-jest +npm install --save-dev ts-jest @types/jest" ``` Modify your project's `package.json` so that the `jest` section looks something like: ```json @@ -49,47 +66,207 @@ Modify your project's `package.json` so that the `jest` section looks something ``` This setup should allow you to write Jest tests in Typescript and be able to locate errors without any additional gymnastics. -By default `jest` does not provide code coverage remapping for transpiled codes, so if you'd like to have code coverage it needs additional coverage remapping. This can be done via writing custom processing script, or configure `testResultsProcessor` to use built-in coverage remapping in `ts-jest`. +### Versioning +From version `"jest": "17.0.0"` we are using same MAJOR.MINOR as [`Jest`](https://github.com/facebook/jest). +For `"jest": "< 17.0.0"` use `"ts-jest": "0.1.13"`. Docs for it see [here](https://github.com/kulshekhar/ts-jest/blob/e1f95e524ed62091736f70abf63530f1f107ec03/README.md). + +### Coverage + +Prior to version `20.0.0`, coverage reports could be obtained using the inbuilt coverage processor in `ts-jest`. Starting with version `20.0.0`, `ts-jest` delegates coverage processing to jest and no longer includes a coverage processor. + +To generate coverage results, set the `mapCoverage` property in the `jest` configuration section to `true`. + +> Please note that the `outDir` property in the `jest` configuration section is removed in coverage mode, due to [#201](https://github.com/kulshekhar/ts-jest/issues/201). + +## Default Setup +`ts-jest` tries to ship with sensible defaults, to get you on your feet as quickly as possible. + +### Sourcemap support +Sourcemaps should work out of the box. That means your stack traces should have the correct line numbers, +and you should be able to step through the TypeScript code using a debugger. + +### Automatically finds tsconfig.json +`ts-jest` automatically located your `tsconfig` file. +If you want to compile typescript with a special configuration, you [can do that too](#tsconfig) + +### Supports synthetic modules +If you're on a codebase where you're using synthetic default imports, e.g. +```javascript 1.6 +//Regular imports +import * as React from 'react'; + +//Synthetic default imports: +import React from 'react'; +``` +`ts-jest` tries to support that. If `allowSyntheticDefaultImports` is set to true in your `tsconfig` file, it uses babel +to automatically create the synthetic default exports for you - nothing else needed. +You can opt-out of this behaviour with the [skipBabel flag](#skipping-babel) + +### Supports automatic of jest.mock() calls +[Just like Jest](https://facebook.github.io/jest/docs/manual-mocks.html#using-with-es-module-imports) `ts-jest` +automatically uses babel to hoist your `jest.mock()` calls to the top of your file. +You can opt-out of this behaviour with the [skipBabel flag](#skipping-babel) + +## Configuration +If the default setup doesn't address your requirements, you can create a custom setup to suit your project. + +### tsconfig +By default this package will try to locate `tsconfig.json` and use its compiler options for your `.ts` and `.tsx` files. + +You can override this behaviour by pointing ts-jest to a custom TypeScript configuration file. +You can do this by setting the `tsConfigFile` option in your global variables under the `ts-jest` key to path of the +custom configuration file (relative to the project's root directory) *__TS_CONFIG__ is deprecated* +```json +{ + "jest": { + "globals": { + "ts-jest": { + "tsConfigFile": "my-tsconfig.json" + } + } + } +} +``` +**Warning: Using __TS_CONFIG__ option in globals is deprecated and soon will be removed.** + +For all available `tsc` options see [TypeScript docs](https://www.typescriptlang.org/docs/handbook/compiler-options.html). + +Note that if you haven't explicitly set the `module` property through a separate configuration file with `tsConfigFile`, it will be overwritten to `commonjs` (regardless of the value in `tsconfig.json`) since that is the format Jest expects. This only happens during testing. + +### Skipping Babel +If you don't use mocks, or synthetic default imports you can skip the babel-transpilation step. +This means `jest.mock()` calls will not be hoisted to the top, +and synthetic default exports will never be created. +Simply add skipBabel to your global variables under the `ts-jest` key: ```json +//This will skip babel transpilation { "jest": { + "globals": { + "ts-jest": { + "skipBabel": true + } + } + } +} +``` + +## Use cases + +### React Native + +There is a few additional steps if you want to use it with React Native. + +Install `babel-jest` and `babel-preset-react-native` modules. + +```sh +npm install -D babel-jest babel-preset-react-native +``` + +Ensure `.babelrc` contains: + +```json +{ + "presets": ["react-native"], + "sourceMaps": "inline" +} +``` + +In `package.json`, inside `jest` section, the `transform` should be like this: +```json +"transform": { + "^.+\\.js$": "/node_modules/babel-jest", + ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" +} +``` + +Fully completed jest section should look like this: + +```json +"jest": { + "preset": "react-native", "transform": { + "^.+\\.js$": "/node_modules/babel-jest", ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" }, - "testResultsProcessor": "/node_modules/ts-jest/coverageprocessor.js" + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] } -} ``` +If only testing typescript files then remove the `js` option in the testRegex. -> **Note:** If you're experiencing remapping failure with source lookup, it may due to pre-created cache from `jest`. It can be manually deleted, or execute with [`--no-cache`](https://facebook.github.io/jest/docs/troubleshooting.html#caching-issues) to not use those. +## Angular 2 +When using Jest with Angular (a.k.a Angular 2) apps you will likely need to parse HTML templates. If you're unable to add `html-loader` to webpack config (e.g. because you don't want to eject from `angular-cli`) you can do so by defining `__TRANSFORM_HTML__` key in `globals` for `jest`. -## Options -By default this package will try to locate `tsconfig.json` and use its compiler options for your `.ts` and `.tsx` files. -But you are able to override this behaviour and provide another path to your config for TypeScript by using `__TS_CONFIG__` option in `globals` for `jest`: ```json { "jest": { "globals": { - "__TS_CONFIG__": "my-tsconfig.json" + "__TRANSFORM_HTML__": true } } } ``` -Or even declare options for `tsc` instead of using separate config, like this: + +You'll also need to extend your `transform` regex with `html` extension: ```json { "jest": { - "globals": { - "__TS_CONFIG__": { - "module": "commonjs", - "jsx": "react" - } + "transform": { + "^.+\\.(ts|tsx|js|html)$": "/node_modules/ts-jest/preprocessor.js" } } } ``` -For all available options see [TypeScript docs](https://www.typescriptlang.org/docs/handbook/compiler-options.html). -> **Note:** You can't target `ES6` while using `node v4` in your test environment. + +## Tips +### Importing packages written in TypeScript + +If you have dependencies on npm packages that are written in TypeScript but are +**not** published in ES5 you have to tweak your configuration. For example +you depend on a private scoped package `@foo/bar` you have to add following to +your Jest configuration: + +```js +{ + // ... + "transformIgnorePatterns": [ + "/node_modules/(?!@foo)" + ] + // ... +} +``` + +By default Jest ignores everything in `node_modules`. This setting prevents Jest from ignoring the package you're interested in, in this case `@foo`, while continuing to ignore everything else in `node_modules`. + + +## Known Limitations +### Known limitations for TS compiler options +- You can't use `"target": "ES6"` while using `node v4` in your test environment; +- You can't use `"jsx": "preserve"` for now (see [progress of this issue](https://github.com/kulshekhar/ts-jest/issues/63)); +- If you use `"baseUrl": ""`, you also have to change `jest config` a little bit: +```json +"jest": { + "moduleDirectories": ["node_modules", ""] +} +``` +### TS compiler && error reporting +- ts-jest only returns syntax errors from [tsc](https://github.com/Microsoft/TypeScript/issues/4864#issuecomment-141567247) +- Non syntactic errors do not show up in [jest](https://github.com/facebook/jest/issues/2168) +- If you only want to run jest if tsc does not output any errors, a workaround is `tsc --noEmit -p . && jest` + +### Known Limitations for hoisting +If the `jest.mock()` calls is placed after actual code, (e.g. after functions or classes) and `skipBabel` is not set, +the line numbers in stacktraces will be off. +We suggest placing the `jest.mock()` calls after the imports, but before any actual code. + +### Current limitations for breakpoints +Breakpoints currently work in WebStorm, but not Visual Studio Code. `debugger`; statements work in both, and will +map the TypeScript code correctly to the transpiled Javascript. ## How to Contribute If you have any suggestions/pull requests to turn this into a useful package, just open an issue and I'll be happy to work with you to improve this. @@ -103,7 +280,9 @@ npm install npm test ``` +**Note:** If you are cloning on Windows, you may have to run `git config --system core.longpaths true` for Windows to stop complaining about long filenames. + ## License -Copyright (c) [Authors](AUTHORS). +Copyright (c) [Authors](AUTHORS). This source code is licensed under the [MIT license](LICENSE). diff --git a/appveyor.yml b/appveyor.yml index a3d68361a8..8579556389 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,19 +7,21 @@ version: "{build}" # fix lineendings in Windows init: - git config --global core.autocrlf input + - git config --system core.longpaths true # what combinations to test environment: matrix: - nodejs_version: 4 - nodejs_version: 6 - - nodejs_version: 7 + - nodejs_version: 8 # get the latest stable version of Node 0.STABLE.latest install: - ps: Install-Product node $env:nodejs_version - set CI=true - - npm i -g npm@latest + - set AppVeyor=true + - npm i -g npm@latest tslint - set PATH=%APPDATA%\npm;%PATH% - npm install @@ -28,4 +30,4 @@ build: off test_script: - node --version - npm --version - - cmd: npm test --no-color \ No newline at end of file + - cmd: npm test --no-color diff --git a/coverageprocessor.js b/coverageprocessor.js deleted file mode 100644 index d2f91c87b2..0000000000 --- a/coverageprocessor.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/coverageprocessor'); \ No newline at end of file diff --git a/package.json b/package.json index 84fd4b286d..8e51a9c54b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ts-jest", - "version": "17.0.3", + "version": "20.0.7", "main": "index.js", "types": "./dist/index.d.ts", "description": "A preprocessor with sourcemap support to help use Typescript with Jest", @@ -9,8 +9,9 @@ "build:watch": "tsc -p . -w", "clean": "rimraf dist/**/* && rimraf tests/simple/coverage/**/* && rimraf tests/simple-async/coverage/**/*", "clean-build": "npm run clean && npm run build", - "pretest": "npm run clean-build", + "pretest": "npm run tslint && npm run clean-build", "test": "node scripts/tests.js", + "tslint": "tslint src/*.ts", "doc": "doctoc .", "prepublish": "npm run clean-build" }, @@ -28,7 +29,8 @@ "author": "Kulshekhar Kabra (https://github.com/kulshekhar)", "contributors": [ "Ihor Chulinda (https://github.com/Igmat)", - "OJ Kwon (https://github.com/kwonoj)" + "OJ Kwon (https://github.com/kwonoj)", + "Emil Persson (https://github.com/emilniklas)" ], "license": "MIT", "bugs": { @@ -37,9 +39,8 @@ "homepage": "https://github.com/kulshekhar/ts-jest#readme", "jest": { "transform": { - ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" + ".(ts|tsx)": "/dist/preprocessor.js" }, - "mocksPattern": "__ts-jest-mocks__", "testRegex": "/__tests__/.*\\.(spec)\\.(ts|js)$", "coverageReporters": [ "text" @@ -51,38 +52,43 @@ ], "moduleFileExtensions": [ "ts", - "js" + "js", + "json" ] }, "dependencies": { - "glob-all": "^3.1.0", - "istanbul-lib-instrument": "^1.2.0", - "lodash.assign": "^4.2.0", - "lodash.includes": "^4.3.0", - "lodash.partition": "^4.6.0", - "remap-istanbul": "^0.7.0", + "@types/babel-core": "^6.7.14", + "babel-core": "^6.24.1", + "babel-plugin-istanbul": "^4.1.4", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-preset-jest": "^20.0.3", + "fs-extra": "^3.0.0", + "jest-config": "^20.0.0", + "jest-util": "^20.0.0", + "pkg-dir": "^2.0.0", "source-map-support": "^0.4.4", - "yargs": "^6.1.1" + "yargs": "^8.0.1" }, "peerDependencies": { - "typescript": "^2.0.6 || ^2.1.0-dev || ^2.2.0-dev", - "jest": "~17.0.0" + "jest": "^20.0.0", + "typescript": "2.x" }, "devDependencies": { "@types/es6-shim": "latest", + "@types/fs-extra": "^3.0.0", "@types/jest": "latest", + "@types/node": "latest", "@types/react": "latest", "@types/source-map-support": "latest", - "@types/node": "latest", - "typescript": "next", - "tslint": "next", - "react": "latest", - "react-test-renderer": "latest", - "jest": "latest", - "ts-jest": "latest", "cross-spawn": "latest", "cross-spawn-with-kill": "latest", + "doctoc": "latest", + "jest": "^20.0.0", + "react": "latest", + "react-test-renderer": "latest", "rimraf": "latest", - "doctoc": "latest" + "ts-jest": "latest", + "tslint": "next", + "typescript": "^2.4.1" } -} \ No newline at end of file +} diff --git a/scripts/tests.js b/scripts/tests.js index 83c0eace5b..75b263239d 100644 --- a/scripts/tests.js +++ b/scripts/tests.js @@ -1,14 +1,72 @@ +'use strict'; + process.env.NODE_ENV = 'test'; process.env.PUBLIC_URL = ''; const jest = require('jest'); const fs = require('fs'); +const path = require('path'); + +function dirExists(dirPath) { + const F_OK = fs.constants && fs.constants.F_OK || fs['F_OK']; + try { + fs.accessSync(dirPath, F_OK); + return fs.statSync(dirPath).isDirectory(); + } catch (e) { + return false; + } +} + +function getDirectories(rootDir) { + return fs.readdirSync(rootDir).filter(function (file) { + return fs.statSync(path.join(rootDir, file)).isDirectory(); + }); +} + +function getFiles(rootDir) { + return fs.readdirSync(rootDir).filter(function (file) { + return !fs.statSync(path.join(rootDir, file)).isDirectory(); + }); +} + +function getIntegrationMockContent(file) { + return `module.exports = require('../../../../${file}');`; +} + +function createIntegrationMock() { + const testsRoot = 'tests'; + const testCaseFolders = getDirectories(testsRoot).filter(function (testDir) { + return !(testDir.startsWith('__') && testDir.endsWith('__')); + }); + const filesToMock = getFiles('dist').filter(function (fileName) { + return fileName.endsWith('.js') + }) + for (let i = 0; i < testCaseFolders.length; i++) { + const testCaseNodeModules = path.join(testsRoot, testCaseFolders[i], 'node_modules'); + if (!dirExists(testCaseNodeModules)) { + fs.mkdirSync(testCaseNodeModules); + const testCaseModuleFolder = path.join(testCaseNodeModules, 'ts-jest') + fs.mkdirSync(testCaseModuleFolder); + filesToMock.forEach(function (fileName) { + const integrationMockPath = path.join(testCaseModuleFolder, fileName); + fs.appendFileSync(integrationMockPath, getIntegrationMockContent(fileName)); + }) + } + } +} + +createIntegrationMock(); const argv = process.argv.slice(2); argv.push('--no-cache'); // Watch unless on CI if (!process.env.CI) { - //argv.push('--watch'); + // argv.push('--watch'); } +// omit tests for watch cases if it runned on AppVeyor due to this issues: +// https://github.com/kulshekhar/ts-jest/issues/53 +// http://help.appveyor.com/discussions/problems/5500-nodejs-child-process-with-watch-and-stderr-problem + +argv.push('--testPathPattern', '^(?!(.*watch\.spec\.ts$)).*'); jest.run(argv); diff --git a/src/coverageprocessor.ts b/src/coverageprocessor.ts deleted file mode 100644 index 4861751289..0000000000 --- a/src/coverageprocessor.ts +++ /dev/null @@ -1,50 +0,0 @@ -declare const global: any; - -import * as path from 'path'; - -const includes = require('lodash.includes'); -const partition = require('lodash.partition'); -const loadCoverage = require('remap-istanbul/lib/loadCoverage'); -const remap = require('remap-istanbul/lib/remap'); -const writeReport = require('remap-istanbul/lib/writeReport'); -const istanbulInstrument = require('istanbul-lib-instrument'); - -function processResult(result: any): void { - if (!global.__ts_coverage__cache__) return; - const { coverageConfig, sourceCache, coverageCollectFiles } = global.__ts_coverage__cache__; - if (!coverageConfig.collectCoverage) return; - - const coverage = result.testResults.map(value => value.coverage); - const coveredFiles = coverage.reduce((acc, x) => x ? acc.concat(Object.keys(x)) : acc, []); - const uncoveredFiles = partition(coverageCollectFiles, x => includes(coveredFiles, x))[1]; - const coverageOutputPath = path.join(coverageConfig.coverageDirectory || 'coverage', 'remapped'); - - //generate 'empty' coverage against uncovered files. - //If source is non-ts passed by allowJS, return empty since not able to lookup from cache - const emptyCoverage = uncoveredFiles.map(x => { - var ret = {}; - if (sourceCache[x]) { - var instrumenter = istanbulInstrument.createInstrumenter(); - instrumenter.instrumentSync(sourceCache[x], x); - ret[x] = instrumenter.fileCoverage; - } - return ret; - }); - - const mergedCoverage = loadCoverage(coverage.concat(emptyCoverage), { readJSON: (t) => t ? t : {} }); - const coverageCollector = remap(mergedCoverage, { - readFile: (x) => { - const key = path.normalize(x); - const source = sourceCache[key]; - delete global.__ts_coverage__cache__.sourceCache[key]; - return source; - } - }); - - writeReport(coverageCollector, 'html', {}, path.join(coverageOutputPath, 'html')); - writeReport(coverageCollector, 'lcovonly', {}, path.join(coverageOutputPath, 'lcov.info')); - writeReport(coverageCollector, 'json', {}, path.join(coverageOutputPath, 'coverage.json')); - writeReport(coverageCollector, 'text', {}, path.join(coverageOutputPath, 'coverage.txt')); -} - -module.exports = processResult; \ No newline at end of file diff --git a/src/default-retrieve-file-handler.ts b/src/default-retrieve-file-handler.ts index af3b5f44b3..d85d9f1c72 100644 --- a/src/default-retrieve-file-handler.ts +++ b/src/default-retrieve-file-handler.ts @@ -6,12 +6,12 @@ export function defaultRetrieveFileHandler(path) { path = path.trim(); // This was removed because it seems that we can't use cache while expecting correct results - // TODO: check correctness and performance with file caching + // TODO: check correctness and performance with file caching // if (path in fileContentsCache) { // return fileContentsCache[path]; // } - var contents: string; + let contents: string; try { contents = fs.readFileSync(path, 'utf8'); contents = transpileIfTypescript(path, contents); @@ -20,4 +20,4 @@ export function defaultRetrieveFileHandler(path) { } return contents; -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 1f8bc46ab0..48def9e083 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,19 @@ -import { defaultRetrieveFileHandler } from './default-retrieve-file-handler'; import * as sourceMapSupport from 'source-map-support'; +import { defaultRetrieveFileHandler } from './default-retrieve-file-handler'; +export { transpileIfTypescript } from './transpile-if-ts'; export function install() { - var options: sourceMapSupport.Options = {}; + const options: sourceMapSupport.Options = {}; options.retrieveFile = defaultRetrieveFileHandler; - options.emptyCacheBetweenOperations = true; // left here only for sourceMapCache TODO: check this for correctness and performance with false velue + options.emptyCacheBetweenOperations = true; // left here only for + // sourceMapCache TODO: check this for correctness and performance with + // false value + + /* tslint:disable */ + // disabling tslint because the types for the source-map-support version + // in use here don't have the 'environment' property on options options['environment'] = 'node'; + /* tslint:disable */ return sourceMapSupport.install(options); } diff --git a/src/jest-types.ts b/src/jest-types.ts new file mode 100644 index 0000000000..6fcccd70e0 --- /dev/null +++ b/src/jest-types.ts @@ -0,0 +1,72 @@ +import { TransformOptions as BabelTransformOpts } from 'babel-core'; + +export interface TransformOptions { + instrument: boolean; +} + +export type Path = string; + +export type Glob = string; + +export interface ConfigGlobals { [key: string]: any; } + +export interface HasteConfig { + defaultPlatform?: string | null; + hasteImplModulePath?: string; + platforms?: string[]; + providesModuleNodeModules: string[]; +} + +export interface BabelTransformOptions extends BabelTransformOpts { + cacheDirectory?: string; +} + +export type PostProcessHook = ( + src: string, + filename: string, + config: JestConfig, + transformOptions: TransformOptions) => string; + +export type JestConfig = Partial; + +export interface FullJestConfig { + automock: boolean; + browser: boolean; + cache: boolean; + cacheDirectory: Path; + clearMocks: boolean; + coveragePathIgnorePatterns: string[]; + globals: ConfigGlobals; + haste: HasteConfig; + moduleDirectories: string[]; + moduleFileExtensions: string[]; + moduleLoader: Path; + moduleNameMapper: Array<[string, string]>; + modulePathIgnorePatterns: string[]; + modulePaths: string[]; + name: string; + resetMocks: boolean; + resetModules: boolean; + resolver: Path | null; + rootDir: Path; + roots: Path[]; + setupFiles: Path[]; + setupTestFrameworkScriptFile: Path; + snapshotSerializers: Path[]; + testEnvironment: string; + testMatch: Glob[]; + testPathIgnorePatterns: string[]; + testRegex: string; + testRunner: string; + testURL: string; + timers: 'real' | 'fake'; + transform: Array<[string, Path]>; + transformIgnorePatterns: Glob[]; + unmockedModulePathPatterns: string[] | null; +} + +export interface TsJestConfig { + skipBabel?: boolean; + useBabelrc?: boolean; + tsConfigFile?: String; +} diff --git a/src/postprocess.ts b/src/postprocess.ts new file mode 100644 index 0000000000..326b49d6ba --- /dev/null +++ b/src/postprocess.ts @@ -0,0 +1,79 @@ +/** + * Postprocess step. Based on babel-jest: https://github.com/facebook/jest/blob/master/packages/babel-jest/src/index.js + * https://github.com/facebook/jest/blob/9b157c3a7c325c3971b2aabbe4c8ab4ce0b0c56d/packages/babel-jest/src/index.js + */ +import * as babel from 'babel-core'; +import istanbulPlugin from 'babel-plugin-istanbul'; +import * as jestPreset from 'babel-preset-jest'; +import { CompilerOptions } from 'typescript/lib/typescript'; +import { + BabelTransformOptions, + FullJestConfig, + JestConfig, + PostProcessHook, + TransformOptions, + TsJestConfig, +} from './jest-types'; + +function createBabelTransformer(options: BabelTransformOptions) { + options = { + ...options, + plugins: (options && options.plugins) || [], + presets: ((options && options.presets) || []).concat([jestPreset]), + // If retainLines isn't set to true, the line numbers + // are off by 1 + retainLines: true, + // force the sourceMaps property to be 'inline' during testing + // to help generate accurate sourcemaps. + sourceMaps: 'inline', + }; + delete options.cacheDirectory; + delete options.filename; + + return ( + src: string, + filename: string, + config: JestConfig, + transformOptions: TransformOptions): string => { + + const theseOptions = Object.assign({ filename }, options); + if (transformOptions && transformOptions.instrument) { + theseOptions.auxiliaryCommentBefore = ' istanbul ignore next '; + // Copied from jest-runtime transform.js + theseOptions.plugins = theseOptions.plugins.concat([ + [ + istanbulPlugin, + { + // files outside `cwd` will not be instrumented + cwd: config.rootDir, + exclude: [], + }, + ], + ]); + } + + return babel.transform(src, theseOptions).code; + }; +} + +export const getPostProcessHook = ( + tsCompilerOptions: CompilerOptions, + jestConfig: JestConfig, + tsJestConfig: TsJestConfig): PostProcessHook => { + + if (tsJestConfig.skipBabel) { + return (src) => src; // Identity function + } + + const plugins = []; + // If we're not skipping babel + if (tsCompilerOptions.allowSyntheticDefaultImports) { + plugins.push('transform-es2015-modules-commonjs'); + } + + return createBabelTransformer({ + babelrc: tsJestConfig.useBabelrc || false, + plugins, + presets: [], + }); +}; diff --git a/src/preprocessor.ts b/src/preprocessor.ts index 0146a23990..083dcced98 100644 --- a/src/preprocessor.ts +++ b/src/preprocessor.ts @@ -1,59 +1,94 @@ -import * as tsc from 'typescript'; +import * as crypto from 'crypto'; +import * as fs from 'fs-extra'; import * as nodepath from 'path'; -import { getTSConfig, getJestConfig } from './utils'; -// TODO: rework next to ES6 style imports -const glob = require('glob-all'); -const getPackageRoot = require('jest-util').getPackageRoot; - -declare const global: any; - -const root = getPackageRoot(); -const { - testRegex, - collectCoverage, - coverageDirectory, - coverageReporters, - collectCoverageFrom, - testResultsProcessor -} = getJestConfig(root); - -//setting up cache to global object to resultprocessor consume -if (testResultsProcessor) { - global.__ts_coverage__cache__ = {}; - global.__ts_coverage__cache__.sourceCache = {}; - global.__ts_coverage__cache__.coverageConfig = { collectCoverage, coverageDirectory, coverageReporters }; - global.__ts_coverage__cache__.coverageCollectFiles = - collectCoverage && - testResultsProcessor && - collectCoverageFrom && - collectCoverageFrom.length ? - glob.sync(collectCoverageFrom).map(x => nodepath.resolve(root, x)) : []; -} +import * as pkgDir from 'pkg-dir'; +import * as tsc from 'typescript'; +import { JestConfig, Path, TransformOptions } from './jest-types'; +import { getPostProcessHook } from './postprocess'; +import { getTSConfig, getTSJestConfig } from './utils'; + +export function process( + src: string, + path: Path, + config: JestConfig, + transformOptions: TransformOptions = { instrument: false }) { + + // transformOptions.instrument is a proxy for collectCoverage + // https://github.com/kulshekhar/ts-jest/issues/201#issuecomment-300572902 + const compilerOptions = getTSConfig(config.globals, transformOptions.instrument); + const tsJestConfig = getTSJestConfig(config.globals); + + const root = pkgDir.sync(); + + const isTsFile = path.endsWith('.ts') || path.endsWith('.tsx'); + const isJsFile = path.endsWith('.js') || path.endsWith('.jsx'); + const isHtmlFile = path.endsWith('.html'); + + const postHook = getPostProcessHook(compilerOptions, config, tsJestConfig); + + if (isHtmlFile && config.globals.__TRANSFORM_HTML__) { + src = 'module.exports=`' + src + '`;'; + } + + const processFile = compilerOptions.allowJs === true + ? isTsFile || isJsFile + : isTsFile; -export function process(src, path, config) { - if (path.endsWith('.ts') || path.endsWith('.tsx')) { - const transpiled = tsc.transpileModule( + if (processFile) { + const tsTranspiled = tsc.transpileModule( src, { - compilerOptions: getTSConfig(config.globals, collectCoverage), - fileName: path - }); - - //store transpiled code contains source map into cache, except test cases - if (global.__ts_coverage__cache__) { - if (!testRegex || !path.match(testRegex)) { - global.__ts_coverage__cache__.sourceCache[path] = transpiled.outputText; - } + compilerOptions, + fileName: path, + }, + ); + + const outputText = postHook( + tsTranspiled.outputText, + path, + config, + transformOptions, + ); + + // strip root part from path + // this results in a shorter filename which will also make the encoded base64 filename for the cache shorter + // long file names could be problematic in some OS + // see https://github.com/kulshekhar/ts-jest/issues/158 + path = path.startsWith(root) ? path.substr(root.length) : path; + + // store transpiled code contains source map into cache, except test cases + if (!config.testRegex || !path.match(config.testRegex)) { + const outputFilePath = nodepath.join( + config.cacheDirectory, '/ts-jest/', + new Buffer(path).toString('base64')); + + fs.outputFileSync(outputFilePath, outputText); } - const start = transpiled.outputText.length > 12 ? transpiled.outputText.substr(1, 10) : ''; + const start = outputText.length > 12 ? outputText.substr(1, 10) : ''; const modified = start === 'use strict' - ? `'use strict';require('ts-jest').install();${transpiled.outputText}` - : `require('ts-jest').install();${transpiled.outputText}`; + ? `'use strict';require('ts-jest').install();${outputText}` + : `require('ts-jest').install();${outputText}`; return modified; + } return src; -} \ No newline at end of file +} + +export function getCacheKey( + fileData: string, + filePath: Path, + configStr: string, + options: TransformOptions = { instrument: false }): string { + + const jestConfig: JestConfig = JSON.parse(configStr); + const tsConfig = getTSConfig(jestConfig.globals, options.instrument); + + return crypto.createHash('md5') + .update(JSON.stringify(tsConfig), 'utf8') + .update(fileData + filePath + configStr, 'utf8') + .digest('hex'); +} diff --git a/src/transpile-if-ts.ts b/src/transpile-if-ts.ts index 2c9c596ef0..682d900590 100644 --- a/src/transpile-if-ts.ts +++ b/src/transpile-if-ts.ts @@ -1,15 +1,15 @@ import * as tsc from 'typescript'; -import { getTSConfig } from './utils'; +import { getTSConfig, mockGlobalTSConfigSchema } from './utils'; -export function transpileIfTypescript(path, contents) { +export function transpileIfTypescript(path, contents, config?) { if (path && (path.endsWith('.tsx') || path.endsWith('.ts'))) { let transpiled = tsc.transpileModule(contents, { - compilerOptions: getTSConfig({ __TS_CONFIG__: global['__TS_CONFIG__'] }, true), - fileName: path + compilerOptions: getTSConfig(config || mockGlobalTSConfigSchema(global), true), + fileName: path, }); return transpiled.outputText; } return contents; -} \ No newline at end of file +} diff --git a/src/utils.ts b/src/utils.ts index 6706e97d4e..05641da805 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,10 +1,13 @@ -import * as tsc from 'typescript'; -import * as path from 'path'; import * as fs from 'fs'; +import { normalize } from 'jest-config'; +import * as path from 'path'; +import * as tsc from 'typescript'; +import { TsJestConfig } from './jest-types'; +/* tslint:disable */ -const assign = require('lodash.assign'); -const normalize = require('jest-config').normalize; const setFromArgv = require('jest-config/build/setFromArgv'); +// import * as setFromArgv from 'jest-config/build/setfromArgv'; +/* tslint:enable */ function parseConfig(argv) { if (argv.config && typeof argv.config === 'string') { @@ -21,11 +24,13 @@ function loadJestConfigFromFile(filePath, argv) { config.rootDir = config.rootDir ? path.resolve(path.dirname(filePath), config.rootDir) : process.cwd(); - return normalize(config, argv); + return normalize(config, argv); } function loadJestConfigFromPackage(filePath, argv) { - const R_OK = fs.constants && fs.constants.R_OK || fs['R_OK']; + /* tslint:disable */ + const R_OK = fs.constants && fs.constants.R_OK || fs['R_OK'] as number; + /* tslint:enable */ try { fs.accessSync(filePath, R_OK); } catch (e) { @@ -47,7 +52,7 @@ function readRawConfig(argv, root) { } if (typeof rawConfig === 'object') { - const config = assign({}, rawConfig); + const config = Object.assign({}, rawConfig); config.rootDir = config.rootDir || root; return normalize(config, argv); } @@ -57,36 +62,134 @@ function readRawConfig(argv, root) { } export function getJestConfig(root) { - try { - const yargs = require('yargs'); - const argv = yargs(process.argv.slice(2)).argv; - const rawConfig = readRawConfig(argv, root); - return Object.freeze(setFromArgv(rawConfig, argv)); - } catch (e) { - return {}; + const yargs = require('yargs'); + const argv = yargs(process.argv.slice(2)).argv; + const rawConfig = readRawConfig(argv, root); + return Object.freeze(setFromArgv(rawConfig, argv)); +} + +export function getTSJestConfig(globals: any): TsJestConfig { + return (globals && globals['ts-jest']) ? globals['ts-jest'] : {}; +} + +function formatTscParserErrors(errors: tsc.Diagnostic[]) { + return errors.map((s) => JSON.stringify(s, null, 4)).join('\n'); +} + +function readCompilerOptions(configPath: string) { + // First step: Let tsc pick up the config. + const loaded = tsc.readConfigFile(configPath, (file) => { + const read = tsc.sys.readFile(file); + // See + // https://github.com/Microsoft/TypeScript/blob/a757e8428410c2196886776785c16f8f0c2a62d9/src/compiler/sys.ts#L203 : + // `readFile` returns `undefined` in case the file does not exist! + if (!read) { + throw new Error(`ENOENT: no such file or directory, open '${configPath}'`); + } + return read; + }); + // In case of an error, we cannot go further - the config is malformed. + if (loaded.error) { + throw new Error(JSON.stringify(loaded.error, null, 4)); + } + + // Second step: Parse the config, resolving all potential references. + const basePath = path.dirname(configPath); // equal to "getDirectoryPath" from ts, at least in our case. + const parsedConfig = tsc.parseJsonConfigFileContent(loaded.config, tsc.sys, basePath); + // In case the config is present, it already contains possibly merged entries from following the + // 'extends' entry, thus it is not required to follow it manually. + // This procedure does NOT throw, but generates a list of errors that can/should be evaluated. + if (parsedConfig.errors.length > 0) { + const formattedErrors = formatTscParserErrors(parsedConfig.errors); + throw new Error(`Some errors occurred while attempting to read from ${configPath}: ${formattedErrors}`); + } + return parsedConfig.options; +} + +export function getTSConfigOptionFromConfig(globals: any) { + if (!globals) { return 'tsconfig.json'; } + + const tsJestConfig = getTSJestConfig(globals); + + if (globals.__TS_CONFIG__) { + console.warn(`Using globals > __TS_CONFIG__ option for setting TS config is deprecated. +Please set config using this option:\nglobals > ts-jest > tsConfigFile (string). +More information at https://github.com/kulshekhar/ts-jest#tsconfig`); + return globals.__TS_CONFIG__; + } else if (tsJestConfig.tsConfigFile) { + return tsJestConfig.tsConfigFile; } + + return 'tsconfig.json'; +} + +export function mockGlobalTSConfigSchema(globals: any) { + const config = getTSConfigOptionFromConfig(globals); + return (typeof config === 'string') ? + { 'ts-jest': { tsConfigFile: config }} : + { __TS_CONFIG__: config }; } export function getTSConfig(globals, collectCoverage: boolean = false) { - let config = (globals && globals.__TS_CONFIG__) ? globals.__TS_CONFIG__ : undefined; - if (config === undefined) { - config = 'tsconfig.json'; + let config = getTSConfigOptionFromConfig(globals); + const skipBabel = getTSJestConfig(globals).skipBabel; + const isReferencedExternalFile = typeof config === 'string'; + + if (isReferencedExternalFile) { + const configFileName = config; + const configPath = path.resolve(config); + + config = readCompilerOptions(configPath); + + if (configFileName === 'tsconfig.json') { + // hardcode module to 'commonjs' in case the config is being loaded + // from the default tsconfig file. This is to ensure that coverage + // works well. If there's a need to override, it can be done using + // the global __TS_CONFIG__ setting in Jest config + config.module = tsc.ModuleKind.CommonJS; + } } - if (typeof config === 'string') { - config = require(path.resolve(config)).compilerOptions; + + if (config.inlineSourceMap !== false) { + config.inlineSourceMap = true; } - config.module = config.module || tsc.ModuleKind.CommonJS; - config.jsx = config.jsx || tsc.JsxEmit.React; - //inline source with source map for remapping coverage + // inline source with source map for remapping coverage if (collectCoverage) { - if (config.sourceMap) { - delete config.sourceMap; - } + delete config.sourceMap; config.inlineSourceMap = true; config.inlineSources = true; + + // the coverage report is broken if `.outDir` is set + // see https://github.com/kulshekhar/ts-jest/issues/201 + delete config.outDir; } - return tsc.convertCompilerOptionsFromJson(config, undefined).options; -} \ No newline at end of file + // Note: If we had to read the inline configuration, it's required to set the fields + // to their string properties, and convert the result accordingly afterwards. + // In case of an external file, reading the config file already converted it as well, and + // an additional attempt would lead to errors. + if (isReferencedExternalFile) { + config.jsx = config.jsx || tsc.JsxEmit.React; + config.module = config.module || tsc.ModuleKind.CommonJS; + if (config.allowSyntheticDefaultImports && !skipBabel) { + // compile ts to es2015 and transform with babel afterwards + config.module = tsc.ModuleKind.ES2015; + } + return config; + } else { + config.jsx = config.jsx || 'react'; + config.module = config.module || 'commmonjs'; + if (config.allowSyntheticDefaultImports && !skipBabel) { + // compile ts to es2015 and transform with babel afterwards + config.module = 'es2015'; + } + const converted = tsc.convertCompilerOptionsFromJson(config, undefined); + if (converted.errors && converted.errors.length > 0) { + const formattedErrors = formatTscParserErrors(converted.errors); + throw new Error(`Some errors occurred while attempting to convert ${JSON.stringify(config)}: ${formattedErrors}`); + } + return converted.options; + } +} diff --git a/tests/__helpers__/runJest.ts b/tests/__helpers__/runJest.ts index fee8b0ed8a..7800727371 100644 --- a/tests/__helpers__/runJest.ts +++ b/tests/__helpers__/runJest.ts @@ -1,8 +1,8 @@ // from: https://github.com/facebook/jest/blob/master/integration_tests/runJest.js -const {fileExists} = require('./utils'); -const path = require('path'); -const spawnSync = require('cross-spawn').sync; +import { fileExists } from './utils'; +import * as path from 'path'; +import {sync as spawnSync} from 'cross-spawn'; // assuming that jest is installed globally // using `npm i -g jest-cli` @@ -11,7 +11,7 @@ const JEST_PATH = 'jest'; // return the result of the spawned proccess: // [ 'status', 'signal', 'output', 'pid', 'stdout', 'stderr', // 'envPairs', 'options', 'args', 'file' ] -export default function runJest(dir, args) { +export default function runJest(dir: string, args: string[]) { const isRelative = dir[0] !== '/'; if (isRelative) { @@ -27,6 +27,7 @@ export default function runJest(dir, args) { the global package.json, which will send Jest into infinite loop. `); } + const result = spawnSync(JEST_PATH, args || [], { cwd: dir, @@ -36,4 +37,4 @@ export default function runJest(dir, args) { result.stderr = result.stderr && result.stderr.toString(); return result; -} \ No newline at end of file +} diff --git a/tests/__helpers__/runJestInWatchMode.ts b/tests/__helpers__/runJestInWatchMode.ts index de3658fa4f..89a6a97458 100644 --- a/tests/__helpers__/runJestInWatchMode.ts +++ b/tests/__helpers__/runJestInWatchMode.ts @@ -1,7 +1,8 @@ // from: https://github.com/facebook/jest/blob/master/integration_tests/runJest.js import { ChildProcess, SpawnOptions } from 'child_process'; import { fileExists } from './utils'; -const path = require('path'); +import * as path from 'path'; + const spawn: (command: string, args?: string[], options?: SpawnOptions) => ChildProcess = (process.platform === 'win32') ? require('cross-spawn-with-kill') : require('cross-spawn'); @@ -49,4 +50,4 @@ export default function runJestInWatchMode(dir, args?: any[]) { }; return { childProcess, getStderrAsync }; -} \ No newline at end of file +} diff --git a/tests/__helpers__/utils.ts b/tests/__helpers__/utils.ts index 381a22e99d..ad2faa980c 100644 --- a/tests/__helpers__/utils.ts +++ b/tests/__helpers__/utils.ts @@ -1,10 +1,7 @@ -import { } from 'jest'; -import { } from 'node'; import * as fs from 'fs'; // from: https://github.com/facebook/jest/blob/master/integration_tests/utils.js - -const {spawnSync} = require('cross-spawn').sync; -const path = require('path'); +import {sync as spawnSync} from 'cross-spawn'; +import * as path from 'path'; export function run(cmd, cwd) { const args = cmd.split(/\s/).slice(1); @@ -23,7 +20,7 @@ export function run(cmd, cwd) { } return result; -}; +} export function linkJestPackage(packageName, cwd) { const packagesDir = path.resolve(__dirname, '../packages'); @@ -31,7 +28,7 @@ export function linkJestPackage(packageName, cwd) { const destination = path.resolve(cwd, 'node_modules/'); run(`mkdir -p ${destination}`, undefined); return run(`ln -sf ${packagePath} ${destination}`, undefined); -}; +} export function fileExists(filePath) { const F_OK = fs.constants && fs.constants.F_OK || fs['F_OK']; @@ -41,4 +38,4 @@ export function fileExists(filePath) { } catch (e) { return false; } -}; \ No newline at end of file +} diff --git a/tests/__ts-jest-mocks__/path.ts b/tests/__mocks__/path.ts similarity index 70% rename from tests/__ts-jest-mocks__/path.ts rename to tests/__mocks__/path.ts index f3ad8e7735..48c54b993d 100644 --- a/tests/__ts-jest-mocks__/path.ts +++ b/tests/__mocks__/path.ts @@ -1,9 +1,8 @@ -import { } from 'jest'; -import { } from 'node'; - -interface MockedPath { +export interface MockedPath { __setBaseDir(newBaseDir); - resolve(args); + resolve(...args); + dirname(...args); + join(...args); } const path = require.requireActual('path'); @@ -19,11 +18,13 @@ function __setBaseDir(newBaseDir) { // A custom version of `readdirSync` that reads from the special mocked out // file list set via __setMockFiles -function resolve(args) { - return path.resolve(baseDir, args); +function resolve(...args) { + return path.resolve(baseDir, ...args); } mockedPath.__setBaseDir = __setBaseDir; mockedPath.resolve = resolve; +mockedPath.dirname = path.dirname; +mockedPath.join = path.join; -module.exports = mockedPath; \ No newline at end of file +module.exports = mockedPath; diff --git a/tests/__tests__/__snapshots__/html-transform.spec.ts.snap b/tests/__tests__/__snapshots__/html-transform.spec.ts.snap new file mode 100644 index 0000000000..bdea8378b9 --- /dev/null +++ b/tests/__tests__/__snapshots__/html-transform.spec.ts.snap @@ -0,0 +1,13 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Html transforms transforms html if config.globals.__TRANSFORM_HTML__ is set 1`] = ` +"module.exports=\`
+ This is element +
\`;" +`; + +exports[`Html transforms transforms html if config.globals.__TRANSFORM_HTML__ is set 2`] = ` +"
+ This is element +
" +`; diff --git a/tests/__tests__/babelrc.spec.ts b/tests/__tests__/babelrc.spec.ts new file mode 100644 index 0000000000..bfbbac3ed6 --- /dev/null +++ b/tests/__tests__/babelrc.spec.ts @@ -0,0 +1,20 @@ +import runJest from '../__helpers__/runJest'; + +describe('babelrc flag', () => { + + it('should crash on invalid babelrc', () => { + + const result = runJest('../use-babelrc', ['--no-cache', '-u']); + const stderr = result.stderr.toString(); + expect(result.status).toBe(1); + expect(stderr).toContain('ReferenceError: [BABEL]'); + expect(stderr).toContain('Check out http://babeljs.io/docs/usage/options/ for more information about options.'); + }); + + it('Should not crash on invalid babelrc if useBabelrc is not set', () => { + const result = runJest('../skip-babelrc', ['--no-cache', '-u']); + + expect(result.status).toBe(0); + }); + +}); \ No newline at end of file diff --git a/tests/__tests__/dynamic-imports.spec.ts b/tests/__tests__/dynamic-imports.spec.ts new file mode 100644 index 0000000000..6adeb2e6a7 --- /dev/null +++ b/tests/__tests__/dynamic-imports.spec.ts @@ -0,0 +1,21 @@ +import runJest from '../__helpers__/runJest'; + +describe('Dynamic imports', () => { + + it('should work as expected', () => { + + const result = runJest('../dynamic-imports', ['--no-cache']); + + expect(result.status).toBe(0); + + }); + + it('should work with synthetic default imports', () => { + + const result = runJest('../dynamic-imports', ['--no-cache', '--config', 'jest.allowdefaultimports.json']); + + expect(result.status).toBe(0); + + }); + +}); diff --git a/tests/__tests__/get-cache-key.spec.ts b/tests/__tests__/get-cache-key.spec.ts new file mode 100644 index 0000000000..4ea411a067 --- /dev/null +++ b/tests/__tests__/get-cache-key.spec.ts @@ -0,0 +1,40 @@ +import { getCacheKey } from '../../src/preprocessor'; + +describe('getCacheKey', () => { + const src = 'console.log(123);'; + const filepath = '/tmp/filepath'; + const configStr = `{ + "globals": { + "__TS_CONFIG": { + "compilerOptions": { + "target": "ES5", + "module": "commonjs" + } + } + }, + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$" + }`; + const originalHash = getCacheKey(src, filepath, configStr); + + it('should change hash when src changes', () => { + const newSrc = 'console.log(1234);'; + const newHash = getCacheKey(newSrc, filepath, configStr); + expect(newHash).not.toBe(originalHash); + }); + + it('should change hash when filepath changes', () => { + const newPath = '/tmp/newfilepath'; + const newHash = getCacheKey(src, newPath, configStr); + expect(newHash).not.toBe(originalHash); + }); + + it('should change hash when tsconfig changes', () => { + const newConfigStr = configStr.replace(`"ES5"`, `"ES2015"`); + const newHash = getCacheKey(src, filepath, newConfigStr); + expect(newHash).not.toBe(originalHash); + }); + +}); diff --git a/tests/__tests__/html-transform.spec.ts b/tests/__tests__/html-transform.spec.ts new file mode 100644 index 0000000000..d6d0145e9a --- /dev/null +++ b/tests/__tests__/html-transform.spec.ts @@ -0,0 +1,20 @@ +import {process} from '../../src/preprocessor'; + +const source = +`
+ This is element +
`; +const path = '/path/to/file.html'; +const config = { + globals: { + __TRANSFORM_HTML__: true + } +}; + +describe('Html transforms', () => { + it('transforms html if config.globals.__TRANSFORM_HTML__ is set', () => { + expect(process(source, path, config)).toMatchSnapshot(); + delete config.globals.__TRANSFORM_HTML__; + expect(process(source, path, config)).toMatchSnapshot(); + }); +}); \ No newline at end of file diff --git a/tests/__tests__/import.spec.ts b/tests/__tests__/import.spec.ts new file mode 100644 index 0000000000..e48dcfd412 --- /dev/null +++ b/tests/__tests__/import.spec.ts @@ -0,0 +1,27 @@ +import runJest from '../__helpers__/runJest'; + +describe('import with relative and absolute paths', () => { + + it('should run successfully', () => { + + const result = runJest('../imports-test', ['--no-cache']); + + const stderr = result.stderr.toString(); + const output = result.output.toString(); + + expect(result.status).toBe(1); + expect(output).toContain('4 failed, 4 total'); + + expect(stderr).toContain('Hello.ts:11:11)'); + + expect(stderr).toContain('Hello.test.ts:9:19)'); + expect(stderr).toContain('Hello-relative.test.ts:9:19)'); + + expect(stderr).toContain('absolute-import.ts:4:17)'); + expect(stderr).toContain('absolute-import.test.ts:8:9)'); + + expect(stderr).toContain('relative-import.ts:4:17)'); + expect(stderr).toContain('relative-import.test.ts:8:9)'); + }); + +}); diff --git a/tests/__tests__/jest-hoist.spec.ts b/tests/__tests__/jest-hoist.spec.ts new file mode 100644 index 0000000000..e310185fdf --- /dev/null +++ b/tests/__tests__/jest-hoist.spec.ts @@ -0,0 +1,27 @@ +import runJest from '../__helpers__/runJest'; + +describe('Jest.mock() calls', () => { + + it('Should run all tests using jest.mock() underneath the imports succesfully.', () => { + const result = runJest('../hoist-test', ['--no-cache']); + const output = result.output.toString(); + + expect(output).toContain('4 passed, 4 total'); + expect(result.status).toBe(0); + }); + + + it('Should retain proper line endings while hoisting', () => { + const result = runJest('../hoist-errors', ['--no-cache']); + + const stderr = result.stderr.toString(); + + expect(result.status).toBe(1); + expect(stderr).toContain('Hello.ts:22:11'); + + // The actual error occurs at line 16. However, because the mock calls + // are hoisted, this changes - in this case, to 26 + // The column numbers are accurate. + expect(stderr).toContain('Hello.test.ts:26:19'); + }); +}); diff --git a/tests/__tests__/jestconfig-json.spec.ts b/tests/__tests__/jestconfig-json.spec.ts index f7a77d521d..cda6c00886 100644 --- a/tests/__tests__/jestconfig-json.spec.ts +++ b/tests/__tests__/jestconfig-json.spec.ts @@ -1,14 +1,13 @@ -const getPackageRoot = require('jest-util').getPackageRoot; +import * as pkgDir from 'pkg-dir'; +import { getJestConfig } from '../../src/utils'; describe('get json jest config', () => { let yargsMock; - let getJestConfig; beforeEach(() => { jest.resetModules(); yargsMock = jest.fn(); jest.setMock('yargs', yargsMock); - getJestConfig = require('../../src/utils').getJestConfig; }); it('should able to read config from json', () => { @@ -20,7 +19,10 @@ describe('get json jest config', () => { } }); - const { collectCoverage, coverageReporters, coverageDirectory, collectCoverageFrom} = getJestConfig(getPackageRoot()); + const jestConfig = getJestConfig(pkgDir.sync()); + + const { collectCoverage } = jestConfig; + const { coverageReporters, coverageDirectory, collectCoverageFrom } = jestConfig.options; expect(collectCoverage).toBeUndefined(); expect(coverageReporters).toEqual(['html', 'json', 'text']); @@ -38,11 +40,14 @@ describe('get json jest config', () => { } }); - const { collectCoverage, coverageReporters, coverageDirectory, collectCoverageFrom} = getJestConfig(getPackageRoot()); + const jestConfig = getJestConfig(pkgDir.sync()); + + const { collectCoverage } = jestConfig; + const { coverageReporters, coverageDirectory, collectCoverageFrom } = jestConfig.options; expect(collectCoverage).toBeTruthy(); expect(coverageReporters).toEqual(['html', 'json', 'text']); expect(coverageDirectory).toContain('test_coverage_dir'); expect(collectCoverageFrom).toEqual(['src/**/*.tsx', 'src/**/*.ts']); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/jestconfig-package.spec.ts b/tests/__tests__/jestconfig-package.spec.ts index bbbb0472c9..4fa6399897 100644 --- a/tests/__tests__/jestconfig-package.spec.ts +++ b/tests/__tests__/jestconfig-package.spec.ts @@ -1,14 +1,13 @@ -const getPackageRoot = require('jest-util').getPackageRoot; +const pkgDir = require('pkg-dir'); +import { getJestConfig } from '../../src/utils'; describe('get package json config', () => { let yargsMock; - let getJestConfig; beforeEach(() => { jest.resetModules(); yargsMock = jest.fn(); jest.setMock('yargs', yargsMock); - getJestConfig = require('../../src/utils').getJestConfig; }); it('should able to read config from package.json', () => { @@ -19,7 +18,10 @@ describe('get package json config', () => { } }); - const { collectCoverage, coverageReporters, collectCoverageFrom} = getJestConfig(getPackageRoot()); + const jestConfig = getJestConfig(pkgDir.sync()); + + const { collectCoverage } = jestConfig; + const { coverageReporters, coverageDirectory, collectCoverageFrom } = jestConfig.options; expect(collectCoverage).toBeUndefined(); expect(coverageReporters).toEqual(['text']); @@ -35,10 +37,13 @@ describe('get package json config', () => { } }); - const { collectCoverage, coverageReporters, collectCoverageFrom} = getJestConfig(getPackageRoot()); + const jestConfig = getJestConfig(pkgDir.sync()); + + const { collectCoverage } = jestConfig; + const { coverageReporters, coverageDirectory, collectCoverageFrom } = jestConfig.options; expect(collectCoverage).toBeTruthy(); expect(coverageReporters).toEqual(['text']); expect(collectCoverageFrom).toEqual(['src/**/*.tsx', 'src/**/*.ts']); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/synthetic-default-imports.spec.ts b/tests/__tests__/synthetic-default-imports.spec.ts new file mode 100644 index 0000000000..6fc452917a --- /dev/null +++ b/tests/__tests__/synthetic-default-imports.spec.ts @@ -0,0 +1,26 @@ +import runJest from '../__helpers__/runJest'; + +describe('synthetic default imports', () => { + + it('should not work when the compiler option is false', () => { + + const result = runJest('../no-synthetic-default', ['--no-cache']); + + const stderr = result.stderr.toString(); + + expect(result.status).toBe(1); + expect(stderr).toContain(`TypeError: Cannot read property 'someExport' of undefined`); + expect(stderr).toContain('module.test.ts:6:15'); + + }); + + it('should work when the compiler option is true', () => { + + const result = runJest('../synthetic-default', ['--no-cache']); + + expect(result.status).toBe(0); + + }); + + +}); diff --git a/tests/__tests__/transpile-if-ts.spec.ts b/tests/__tests__/transpile-if-ts.spec.ts new file mode 100644 index 0000000000..c366118ebc --- /dev/null +++ b/tests/__tests__/transpile-if-ts.spec.ts @@ -0,0 +1,25 @@ +import { transpileIfTypescript } from '../../src'; + +describe('transpileIfTypescript', () => { + it('should ignore anything non-TS', () => { + const contents = 'unaltered'; + expect(transpileIfTypescript('some.js', contents)).toBe(contents); + }); + it('should be able to transpile some TS', () => { + const ts = 'const x:string = "anything";'; + expect(transpileIfTypescript('some.ts', ts)).toMatch('var x = "anything";'); + expect(transpileIfTypescript('some.tsx', ts)).toMatch('var x = "anything";'); + }); + + it('should be possible to pass a custom config (Deprecated)', () => { + const customTsConfigFile = 'not-existant.json'; + const customConfig = { __TS_CONFIG__: customTsConfigFile }; + expect(() => transpileIfTypescript('some.ts', '', customConfig)).toThrow(new RegExp(customTsConfigFile)); + }); + + it('should be possible to pass a custom config', () => { + const customTsConfigFile = 'not-existant.json'; + const customConfig = { 'ts-jest': { tsConfigFile: customTsConfigFile }}; + expect(() => transpileIfTypescript('some.ts', '', customConfig)).toThrow(new RegExp(customTsConfigFile)); + }); +}); diff --git a/tests/__tests__/ts-compilation.spec.ts b/tests/__tests__/ts-compilation.spec.ts index 23ddf6db38..468c302df9 100644 --- a/tests/__tests__/ts-compilation.spec.ts +++ b/tests/__tests__/ts-compilation.spec.ts @@ -1,10 +1,8 @@ -import { } from 'jest'; -import { } from 'node'; import runJest from '../__helpers__/runJest'; -describe('hello_world', () => { +describe('TS Compilation', () => { - it('should run successfully', () => { + it('should compile typescript succesfully', () => { const result = runJest('../simple', ['--no-cache']); @@ -14,7 +12,7 @@ describe('hello_world', () => { expect(result.status).toBe(1); expect(output).toContain('1 failed, 1 total'); expect(stderr).toContain('Hello Class'); - expect(stderr).toContain('should throw an error on line 11'); + expect(stderr).toContain('should throw an error on line 18'); }); diff --git a/tests/__tests__/ts-coverage-async.spec.ts b/tests/__tests__/ts-coverage-async.spec.ts index b396c73efa..0f5c05ca85 100644 --- a/tests/__tests__/ts-coverage-async.spec.ts +++ b/tests/__tests__/ts-coverage-async.spec.ts @@ -1,26 +1,16 @@ import runJest from '../__helpers__/runJest'; -import * as fs from 'fs'; -import * as path from 'path'; -describe('hello_world', () => { - const snapshot = -`---------------|----------|----------|----------|----------|----------------| -File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines | ----------------|----------|----------|----------|----------|----------------| - simple-async${path.sep} | 90.91 | 50 | 80 | 88.89 | | - Hello.ts | 90.91 | 50 | 80 | 88.89 | 20 | ----------------|----------|----------|----------|----------|----------------| -All files | 90.91 | 50 | 80 | 88.89 | | ----------------|----------|----------|----------|----------|----------------| -`; +describe('Typescript async coverage', () => { - it('should run successfully', () => { - runJest('../simple-async', ['--no-cache', '--coverage']); + it('Should generate the correct async coverage numbers', () => { + const result = runJest('../simple-async', ['--no-cache', '--coverage']); - const coveragePath = path.resolve('./tests/simple-async/coverage/remapped/coverage.txt'); + const output = result.stdout.toString(); - expect(fs.statSync(coveragePath).isFile()).toBeTruthy(); - expect(fs.readFileSync(coveragePath, 'utf-8')).toEqual(snapshot); + expect(output).toContain('Statements : 66.67% ( 10/15 )'); + expect(output).toContain('Branches : 33.33% ( 2/6 )'); + expect(output).toContain('Functions : 66.67% ( 4/6 )'); + expect(output).toContain('Lines : 61.54% ( 8/13 )'); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/ts-coverage.spec.ts b/tests/__tests__/ts-coverage.spec.ts index 8143bc8f4a..e56410f1a0 100644 --- a/tests/__tests__/ts-coverage.spec.ts +++ b/tests/__tests__/ts-coverage.spec.ts @@ -1,26 +1,16 @@ import runJest from '../__helpers__/runJest'; -import * as fs from 'fs'; -import * as path from 'path'; -describe('hello_world', () => { - const snapshot = - `-----------|----------|----------|----------|----------|----------------| -File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines | ------------|----------|----------|----------|----------|----------------| - simple${path.sep} | 90.91 | 50 | 80 | 88.89 | | - Hello.ts | 90.91 | 50 | 80 | 88.89 | 20 | ------------|----------|----------|----------|----------|----------------| -All files | 90.91 | 50 | 80 | 88.89 | | ------------|----------|----------|----------|----------|----------------| -`; +describe('Typescript coverage', () => { - it('should run successfully', () => { - runJest('../simple', ['--no-cache', '--coverage']); + it('Should generate the correct coverage numbers.', () => { + const result = runJest('../simple', ['--no-cache', '--coverage']); - const coveragePath = path.resolve('./tests/simple/coverage/remapped/coverage.txt'); + const output = result.stdout.toString(); - expect(fs.statSync(coveragePath).isFile()).toBeTruthy(); - expect(fs.readFileSync(coveragePath, 'utf-8')).toEqual(snapshot); + expect(output).toContain('Statements : 66.67% ( 10/15 )'); + expect(output).toContain('Branches : 33.33% ( 2/6 )'); + expect(output).toContain('Functions : 66.67% ( 4/6 )'); + expect(output).toContain('Lines : 61.54% ( 8/13 )'); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/ts-errors.spec.ts b/tests/__tests__/ts-errors.spec.ts index cba6f6e988..5a745dc2f9 100644 --- a/tests/__tests__/ts-errors.spec.ts +++ b/tests/__tests__/ts-errors.spec.ts @@ -1,8 +1,6 @@ -import { } from 'jest'; -import { } from 'node'; import runJest from '../__helpers__/runJest'; -describe('hello_world', () => { +describe('Typescript errors', () => { it('should show the correct error locations in the typescript files', () => { @@ -11,9 +9,20 @@ describe('hello_world', () => { const stderr = result.stderr.toString(); expect(result.status).toBe(1); - expect(stderr).toContain('Hello.ts:13:11'); + expect(stderr).toContain('Hello.ts:18:11'); expect(stderr).toContain('Hello.test.ts:9:19'); }); + it('Should show the correct error locations in async typescript files', async () => { + const result = runJest('../simple-async', ['--no-cache']); + + const stderr = result.stderr.toString(); + + expect(result.status).toBe(1); + expect(stderr).toContain('Hello.ts:13:11'); + expect(stderr).toContain('Hello.test.ts:9:21'); + }); + + }); \ No newline at end of file diff --git a/tests/__tests__/tsconfig-comments.spec.ts b/tests/__tests__/tsconfig-comments.spec.ts new file mode 100644 index 0000000000..11561c55b2 --- /dev/null +++ b/tests/__tests__/tsconfig-comments.spec.ts @@ -0,0 +1,85 @@ +import { MockedPath } from '../__mocks__/path'; +jest.mock('path'); +import * as fs from 'fs'; +import {getTSConfig} from '../../src/utils'; +import * as path from 'path'; + + +describe('parse tsconfig with comments', () => { + const configFile1 = './tests/tsconfig-test/allows-comments.json'; + const configFile2 = './tests/tsconfig-test/allows-comments2.json'; + + beforeEach(() => { + // Set up some mocked out file info before each test + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test'); + }); + + it('the two config files should exist', () => { + expect(fs.existsSync(configFile1)).toBe(true); + expect(fs.existsSync(configFile2)).toBe(true); + }); + + it('the two config files should have comments', () => { + // We test for comments by trying to use JSON.parse + // which should fail. + + expect(() => { + JSON.parse(fs.readFileSync(configFile1, 'utf8')); + }).toThrowError(); + + expect(() => { + JSON.parse(fs.readFileSync(configFile2, 'utf8')); + }).toThrowError(); + + }); + + describe('old behaviour (__TS_CONFIG__)', () => { + + it('one config file should extend the other', () => { + const config = getTSConfig({ + __TS_CONFIG__: 'allows-comments.json' + }); + + // allows-comments.json does not contain a "pretty" field, + // while allows-comments2.json does. Default value would be "false". + expect(config.pretty).toEqual(true); + }); + + it('should correctly read allow-comments.json', () => { + expect(() => { + getTSConfig({ + '__TS_CONFIG__': 'allows-comments.json' + }); + }).not.toThrow(); + }); + + }); + + + describe('new behaviour (tsConfigFile & tsConfig)', () => { + + it('one config file should extend the other', () => { + const config = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'allows-comments.json' + } + }); + + // allows-comments.json does not contain a "pretty" field, + // while allows-comments2.json does. Default value would be "false". + expect(config.pretty).toEqual(true); + }); + + it('should correctly read allow-comments.json', () => { + expect(() => { + getTSConfig({ + 'ts-jest': { + tsConfigFile: 'allows-comments.json' + } + }); + }).not.toThrow(); + }); + + }); + +}); diff --git a/tests/__tests__/tsconfig-default.spec.ts b/tests/__tests__/tsconfig-default.spec.ts index cfab95e2af..ae88613934 100644 --- a/tests/__tests__/tsconfig-default.spec.ts +++ b/tests/__tests__/tsconfig-default.spec.ts @@ -1,65 +1,177 @@ -import { } from 'jest'; -import { } from 'node'; - +import { MockedPath } from '../__mocks__/path'; jest.mock('path'); +import * as ts from 'typescript'; +import {getTSConfig} from '../../src/utils'; +import runJest from '../__helpers__/runJest'; +import * as path from 'path'; + describe('get default ts config', () => { beforeEach(() => { // Set up some mocked out file info before each test - require('path').__setBaseDir('./tests/tsconfig-test'); + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test'); }); it('should correctly read tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig(); + const result = getTSConfig(null); - expect(result).toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, 'noEmitOnError': false, - 'jsx': 2 + 'jsx': ts.JsxEmit.React }); }); it('should not read my-tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig(); + const result = getTSConfig(null); - expect(result).not.toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, 'noEmitOnError': true, - 'jsx': 2 + 'jsx': ts.JsxEmit.React }); }); it('should not read inline tsconfig options', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig(); + const result = getTSConfig(null); + + expect(result).not.toEqual({ + 'module': ts.ModuleKind.CommonJS, + 'jsx': ts.JsxEmit.React + }); + }); + + describe('old behaviour (__TS_CONFIG__)', () => { + + it('should show a warning when using deprecated option', () => { + const output = runJest('../deprecated-tsconfig', ['--no-cache']); + expect(output.stderr).toContain(`Using globals > __TS_CONFIG__ option for setting TS config is deprecated. +Please set config using this option:\nglobals > ts-jest > tsConfigFile (string). +More information at https://github.com/kulshekhar/ts-jest#tsconfig`); + }); + + it('should be same results for null/undefined/etc.', () => { + const result = getTSConfig(null); + const resultUndefinedParam = getTSConfig(undefined); + const resultNullParam = getTSConfig(null); + const resultEmptyParam = getTSConfig({}); + const resultUndefinedContent = getTSConfig({ __TS_CONFIG__: undefined }); + const resultNullContent = getTSConfig({ __TS_CONFIG__: null }); + + expect(result).toEqual(resultUndefinedParam); + expect(result).toEqual(resultNullParam); + expect(result).toEqual(resultEmptyParam); + expect(result).toEqual(resultUndefinedContent); + expect(result).toEqual(resultNullContent); + }); - expect(result).not.toEqual ({ - 'module': 1, - 'jsx': 2 + it('should not change the module if it is loaded from the Jest config global', () => { + const config = getTSConfig({ + __TS_CONFIG__: { + module: 'es2015', + }, + }); + + expect(config.module).toBe(ts.ModuleKind.ES2015); + }); + + it('should not change the module if it is loaded from a non-default config file', () => { + const config = getTSConfig({ + '__TS_CONFIG__': 'tsconfig-module/custom-config.json' + }); + + expect(config.module).toBe(ts.ModuleKind.ES2015); }); + + it('should set the module to CommonJS if it is not, when loading from the default tsconfig file', () => { + + // set the base directory such that we can use 'tsconfig.json' as the + // config file name instead of 'dir/tsconfig.json' + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test/tsconfig-module'); + + const config = getTSConfig({ + '__TS_CONFIG__': 'tsconfig.json' + }); + + expect(config.module).toBe(ts.ModuleKind.CommonJS); + }); + }); - it('should be same results for null/undefined/etc.', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig(); - const resultUndefinedParam = getTSConfig(undefined); - const resultNullParam = getTSConfig(null); - const resultEmptyParam = getTSConfig({}); - const resultUndefinedContent = getTSConfig({ __TS_CONFIG__: undefined }); - const resultNullContent = getTSConfig({ __TS_CONFIG__: null }); - - expect(result).toEqual(resultUndefinedParam); - expect(result).toEqual(resultNullParam); - expect(result).toEqual(resultEmptyParam); - expect(result).toEqual(resultUndefinedContent); - expect(result).toEqual(resultNullContent); + describe('new behaviour (tsConfigFile & tsConfig)', () => { + + it('should be same results for null/undefined/etc.', () => { + const result = getTSConfig(null); + const resultUndefinedParam = getTSConfig(undefined); + const resultNullParam = getTSConfig(null); + const resultEmptyParam = getTSConfig({}); + const resultUndefinedContentFile = getTSConfig({ 'ts-jest': { tsConfigFile: undefined }}); + const resultNullContentFile = getTSConfig({ 'ts-jest': { tsConfigFile: null }}); + + expect(result).toEqual(resultUndefinedParam); + expect(result).toEqual(resultNullParam); + expect(result).toEqual(resultEmptyParam); + expect(result).toEqual(resultUndefinedContentFile); + expect(result).toEqual(resultNullContentFile); + }); + + it('should not change the module if it is loaded from a non-default config file', () => { + const config = getTSConfig({ + 'ts-jest': { + 'tsConfigFile': 'tsconfig-module/custom-config.json' + } + }); + + expect(config.module).toBe(ts.ModuleKind.ES2015); + }); + + it('should set the module to CommonJS if it is not, when loading from the default tsconfig file', () => { + + // set the base directory such that we can use 'tsconfig.json' as the + // config file name instead of 'dir/tsconfig.json' + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test/tsconfig-module'); + + const config = getTSConfig({ + 'ts-jest': { + 'tsConfigFile': 'tsconfig.json' + } + }); + + expect(config.module).toBe(ts.ModuleKind.CommonJS); + }); + + }); + + it('should correctly read the ts-jest object within jest settings', () => { + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test/tsconfig-module'); + + const { getTSJestConfig } = require('../../src/utils'); + + const config1 = getTSJestConfig({ + 'ts-jest': { + 'skipBabel': true + }, + }); + + expect(config1.skipBabel).toBe(true); + + const config2 = getTSJestConfig({ + 'ts-jest': { + 'skipBabel': false + }, + }); + + expect(config2.skipBabel).toBe(false); + + expect(getTSJestConfig({ 'ts-jest': {} })).toEqual({}); + expect(getTSJestConfig({})).toEqual({}); + expect(getTSJestConfig()).toEqual({}); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/tsconfig-inline.spec.ts b/tests/__tests__/tsconfig-inline.spec.ts index fe8b6a7fea..90eabbf4a2 100644 --- a/tests/__tests__/tsconfig-inline.spec.ts +++ b/tests/__tests__/tsconfig-inline.spec.ts @@ -1,64 +1,68 @@ -import { } from 'jest'; -import { } from 'node'; - +import { MockedPath } from '../__mocks__/path'; jest.mock('path'); +import * as ts from 'typescript'; +import {getTSConfig} from '../../src/utils'; +import * as path from 'path'; + describe('get inline ts config', () => { beforeEach(() => { // Set up some mocked out file info before each test - require('path').__setBaseDir('./tests/tsconfig-test'); + (path as any as MockedPath).__setBaseDir('./tests/tsconfig-test'); }); - it('should correctly read inline tsconfig options', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': { - 'module': 'commonjs', - 'jsx': 'react' - } - }); + describe('old behaviour (__TS_CONFIG__) /deprecated/', () => { - expect(result).toEqual ({ - 'module': 1, - 'jsx': 2 - }); - }); + it('should correctly read inline tsconfig options', () => { + const result = getTSConfig({ + '__TS_CONFIG__': { + 'module': 'commonjs', + 'jsx': 'react' + } + }); - it('should not read tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': { - 'module': 'commonjs', - 'jsx': 'react' - } + expect(result).toEqual({ + 'inlineSourceMap': true, + 'module': ts.ModuleKind.CommonJS, + 'jsx': ts.JsxEmit.React + }); }); - expect(result).not.toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, - 'noEmitOnError': false, - 'jsx': 2 - }); - }); + it('should not read tsconfig.json', () => { + const result = getTSConfig({ + '__TS_CONFIG__': { + 'module': 'commonjs', + 'jsx': 'react' + } + }); - it('should not read my-tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': { - 'module': 'commonjs', - 'jsx': 'react' - } + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': false, + 'jsx': ts.JsxEmit.React + }); }); - expect(result).not.toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, - 'noEmitOnError': true, - 'jsx': 2 + it('should not read my-tsconfig.json', () => { + const result = getTSConfig({ + '__TS_CONFIG__': { + 'module': 'commonjs', + 'jsx': 'react' + } + }); + + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React + }); }); + }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/tsconfig-string.spec.ts b/tests/__tests__/tsconfig-string.spec.ts index fccc4fb621..0af014c2d1 100644 --- a/tests/__tests__/tsconfig-string.spec.ts +++ b/tests/__tests__/tsconfig-string.spec.ts @@ -1,55 +1,182 @@ -import { } from 'jest'; -import { } from 'node'; - jest.mock('path'); +import {getTSConfig} from '../../dist/utils'; +import * as ts from 'typescript'; +import * as path from 'path'; + + describe('get ts config from string', () => { beforeEach(() => { // Set up some mocked out file info before each test - require('path').__setBaseDir('./tests/tsconfig-test'); + (path as any).__setBaseDir('./tests/tsconfig-test'); }); - it('should correctly read my-tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': 'my-tsconfig.json' + describe('old behaviour (__TS_CONFIG__)', () => { + + it('should correctly read my-tsconfig.json', () => { + const result = getTSConfig({ + '__TS_CONFIG__': 'my-tsconfig.json' + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React + }); }); - expect(result).toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, - 'noEmitOnError': true, - 'jsx': 2 + it('should not read tsconfig.json', () => { + + const result = getTSConfig({ + '__TS_CONFIG__': 'my-tsconfig.json' + }); + + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': false, + 'jsx': ts.JsxEmit.React + }); }); - }); - it('should not read tsconfig.json', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': 'my-tsconfig.json' + it('should not read inline tsconfig options', () => { + + const result = getTSConfig({ + '__TS_CONFIG__': 'my-tsconfig.json' + }); + + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES5, + 'jsx': ts.JsxEmit.React + }); + }); + + it('should correctly resolve the "extends" directive', () => { + + const result = getTSConfig({ + '__TS_CONFIG__': 'extends-tsconfig.json' + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React + }); }); - expect(result).not.toEqual ({ - 'target': 2, - 'module': 1, - 'moduleResolution': 2, - 'noEmitOnError': false, - 'jsx': 2 + it('should correctly override any config in the "extends" directive', () => { + const result = getTSConfig({ + '__TS_CONFIG__': 'extends-with-overrides-tsconfig.json' + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES5, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React, + 'noImplicitAny': true + }); }); + }); - it('should not read inline tsconfig options', () => { - const {getTSConfig} = require('../../src/utils'); - const result = getTSConfig({ - '__TS_CONFIG__': 'my-tsconfig.json' + + describe('new behaviour (tsConfigFile & tsConfig)', () => { + + it('should correctly read my-tsconfig.json', () => { + const result = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'my-tsconfig.json' + } + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React + }); + }); + + it('should not read tsconfig.json', () => { + + const result = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'my-tsconfig.json' + } + }); + + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': false, + 'jsx': ts.JsxEmit.React + }); }); - expect(result).not.toEqual ({ - 'module': 1, - 'jsx': 2 + it('should not read inline tsconfig options', () => { + + const result = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'my-tsconfig.json' + } + }); + + expect(result).not.toEqual({ + 'target': ts.ScriptTarget.ES5, + 'jsx': ts.JsxEmit.React + }); + }); + + it('should correctly resolve the "extends" directive', () => { + + const result = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'extends-tsconfig.json' + } + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES2015, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React + }); + }); + + it('should correctly override any config in the "extends" directive', () => { + const result = getTSConfig({ + 'ts-jest': { + tsConfigFile: 'extends-with-overrides-tsconfig.json' + } + }); + + expect(result).toEqual({ + 'inlineSourceMap': true, + 'target': ts.ScriptTarget.ES5, + 'module': ts.ModuleKind.CommonJS, + 'moduleResolution': ts.ModuleResolutionKind.NodeJs, + 'noEmitOnError': true, + 'jsx': ts.JsxEmit.React, + 'noImplicitAny': true + }); }); + }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/tsx-compilation.spec.ts b/tests/__tests__/tsx-compilation.spec.ts index da67c4b2a3..8360cd3e3a 100644 --- a/tests/__tests__/tsx-compilation.spec.ts +++ b/tests/__tests__/tsx-compilation.spec.ts @@ -1,11 +1,8 @@ -import { } from 'jest'; -import { } from 'node'; - import runJest from '../__helpers__/runJest'; -describe('button', () => { +describe('TSX Compilation', () => { - it('should run successfully', () => { + it('Should compile a button succesfully', () => { const result = runJest('../button', ['--no-cache', '-u']); diff --git a/tests/__tests__/tsx-errors.spec.ts b/tests/__tests__/tsx-errors.spec.ts index 92a50537b7..f2dfd9c716 100644 --- a/tests/__tests__/tsx-errors.spec.ts +++ b/tests/__tests__/tsx-errors.spec.ts @@ -1,9 +1,6 @@ -import { } from 'jest'; -import { } from 'node'; - import runJest from '../__helpers__/runJest'; -describe('button', () => { +describe('TSX Errors', () => { it('should show the correct error locations in the typescript files', () => { @@ -12,7 +9,7 @@ describe('button', () => { const stderr = result.stderr.toString(); expect(result.status).toBe(1); - expect(stderr).toContain('Button.tsx:18:23'); + expect(stderr).toContain('Button.tsx:18:17'); expect(stderr).toContain('Button.test.tsx:15:12'); }); diff --git a/tests/__tests__/use-strict.spec.ts b/tests/__tests__/use-strict.spec.ts index c32a743be5..26fe41f26d 100644 --- a/tests/__tests__/use-strict.spec.ts +++ b/tests/__tests__/use-strict.spec.ts @@ -1,5 +1,3 @@ -import { } from 'jest'; -import { } from 'node'; import runJest from '../__helpers__/runJest'; describe('use strict', () => { @@ -18,10 +16,10 @@ describe('use strict', () => { it('should work with "use strict"', () => { - const result = runJest('../use-strict', ['--no-cache', '-t', 'Valid Strict']); + const result = runJest('../use-strict', ['--no-cache', '-t', 'Strict1']); expect(result.status).toBe(0); }); -}); \ No newline at end of file +}); diff --git a/tests/__tests__/watch.spec.ts b/tests/__tests__/watch.spec.ts index b6d4ada4da..e72b0b0b7e 100644 --- a/tests/__tests__/watch.spec.ts +++ b/tests/__tests__/watch.spec.ts @@ -1,5 +1,3 @@ -import { } from 'jest'; -import { } from 'node'; import { ChildProcess } from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; @@ -46,7 +44,7 @@ describe('Hello Class', () => { }); `; -describe('hello_world', () => { +describe('Typescript watch tests', () => { let result: { childProcess: ChildProcess, getStderrAsync: () => Promise }; let DEFAULT_TIMEOUT_INTERVAL: number; diff --git a/tests/button/__tests__/__snapshots__/Button.test.tsx.snap b/tests/button/__tests__/__snapshots__/Button.test.tsx.snap index 72c2af7af3..7b18c26c11 100644 --- a/tests/button/__tests__/__snapshots__/Button.test.tsx.snap +++ b/tests/button/__tests__/__snapshots__/Button.test.tsx.snap @@ -1,6 +1,9 @@ -exports[`test Button renders correctly 1`] = ` +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Button renders correctly 1`] = `
+ className="button" +> hi!
`; diff --git a/tests/button/node_modules/ts-jest.js b/tests/button/node_modules/ts-jest.js deleted file mode 100644 index 6bb2ded8c1..0000000000 --- a/tests/button/node_modules/ts-jest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../../'); \ No newline at end of file diff --git a/tests/deprecated-tsconfig/Hello.ts b/tests/deprecated-tsconfig/Hello.ts new file mode 100644 index 0000000000..63464cf067 --- /dev/null +++ b/tests/deprecated-tsconfig/Hello.ts @@ -0,0 +1 @@ +export let num: number = 2; diff --git a/tests/deprecated-tsconfig/__tests__/Hello.test.ts b/tests/deprecated-tsconfig/__tests__/Hello.test.ts new file mode 100644 index 0000000000..8b4d6a2b91 --- /dev/null +++ b/tests/deprecated-tsconfig/__tests__/Hello.test.ts @@ -0,0 +1,13 @@ +declare var jest, describe, it, expect; + +import { num } from '../Hello'; + +describe('Hello Class', () => { + + it('should throw warning for deprecated __TS_CONFIG__', () => { + + expect(num).toBe(2); + + }); + +}); diff --git a/tests/deprecated-tsconfig/package.json b/tests/deprecated-tsconfig/package.json new file mode 100644 index 0000000000..19d73db29c --- /dev/null +++ b/tests/deprecated-tsconfig/package.json @@ -0,0 +1,27 @@ +{ + "jest": { + "globals": { + "__TS_CONFIG__": "tsconfig.json" + }, + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "coverageReporters": [ + "json" + ], + "collectCoverageFrom": [ + "Hello.ts", + "NullCoverage.js" + ], + "mapCoverage": true, + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + }, + "dependencies": { + "jest": "^20.0.4" + } +} diff --git a/tests/deprecated-tsconfig/tsconfig.json b/tests/deprecated-tsconfig/tsconfig.json new file mode 100644 index 0000000000..55f8667f97 --- /dev/null +++ b/tests/deprecated-tsconfig/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true + } +} diff --git a/tests/deprecated-tsconfig/yarn.lock b/tests/deprecated-tsconfig/yarn.lock new file mode 100644 index 0000000000..d85ad3e22a --- /dev/null +++ b/tests/deprecated-tsconfig/yarn.lock @@ -0,0 +1,1999 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.1.0.tgz#09c202d5c917ec23188caa5c9cb9179cd9547750" + dependencies: + color-convert "^1.0.0" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.25.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.25.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.25.0" + babel-types "^6.25.0" + babylon "^6.17.2" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.25.0" + babylon "^6.17.2" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.25.0: + version "6.25.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.17.2, babylon@^6.17.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +errno@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.10" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.10.tgz#f27e5e7125c8de13f6a80661af78f512e5439b2b" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.3" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.3.tgz#925b239163eabdd68cc4048f52c2fa4f899ecfa7" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.17.4" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + +js-tokens@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash@^4.14.0, lodash@^4.2.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +remove-trailing-separator@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +safe-buffer@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uuid@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which@^1.2.12: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.3.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.4.1.tgz#a438bc993a7a7d133bcb6547c95eca7cff4897d8" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xtend@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff --git a/tests/dynamic-imports/__tests__/thing.test.ts b/tests/dynamic-imports/__tests__/thing.test.ts new file mode 100644 index 0000000000..781df5948e --- /dev/null +++ b/tests/dynamic-imports/__tests__/thing.test.ts @@ -0,0 +1,17 @@ +// declare var jest, describe, it, expect; + +describe('Dynamically importing thing class', () => { + + it('should work as expected', async () => { + + const t = await import('../thing'); + + const t1 = new t.Thing(); + expect(t1.name).toBe('Default Name'); + + const t2 = new t.Thing('aa'); + expect(t2.name).toBe('aa'); + + }); + +}); diff --git a/tests/dynamic-imports/jest.allowdefaultimports.json b/tests/dynamic-imports/jest.allowdefaultimports.json new file mode 100644 index 0000000000..755deb0cac --- /dev/null +++ b/tests/dynamic-imports/jest.allowdefaultimports.json @@ -0,0 +1,17 @@ +{ + "globals": { + "__TS_CONFIG__": "tsconfig.allowdefaultimports.json", + "ts-jest": { + "skipBabel": true + } + }, + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] +} diff --git a/tests/dynamic-imports/package.json b/tests/dynamic-imports/package.json new file mode 100644 index 0000000000..7599dba9b6 --- /dev/null +++ b/tests/dynamic-imports/package.json @@ -0,0 +1,13 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/dynamic-imports/thing.ts b/tests/dynamic-imports/thing.ts new file mode 100644 index 0000000000..3ce3722399 --- /dev/null +++ b/tests/dynamic-imports/thing.ts @@ -0,0 +1,3 @@ +export class Thing { + constructor(public name: string = 'Default Name') { } +} diff --git a/tests/dynamic-imports/tsconfig.allowdefaultimports.json b/tests/dynamic-imports/tsconfig.allowdefaultimports.json new file mode 100644 index 0000000000..094bb80de7 --- /dev/null +++ b/tests/dynamic-imports/tsconfig.allowdefaultimports.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES5", + "allowSyntheticDefaultImports": true + } +} diff --git a/tests/dynamic-imports/tsconfig.json b/tests/dynamic-imports/tsconfig.json new file mode 100644 index 0000000000..42e12d9c51 --- /dev/null +++ b/tests/dynamic-imports/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "target": "ES5" + } +} diff --git a/tests/hoist-errors/.gitignore b/tests/hoist-errors/.gitignore new file mode 100644 index 0000000000..9e233d795a --- /dev/null +++ b/tests/hoist-errors/.gitignore @@ -0,0 +1 @@ +coverage-custom diff --git a/tests/hoist-errors/Hello.ts b/tests/hoist-errors/Hello.ts new file mode 100644 index 0000000000..0a0534abf2 --- /dev/null +++ b/tests/hoist-errors/Hello.ts @@ -0,0 +1,32 @@ +interface FooInterface { + foo: string, + bar: number, //This interface should be stripped and the line numbers should still fit. +} + +export const foo = () => { + console.log('foo'); +}; + +export class Hello { + constructor() { + const greeting = ` + this + is + a + multiline + greeting + `; + + this.unexcuted(() => { }); + + throw new Error('Hello error!'); + } + + public unexcuted(action: () => void = () => { }): void { + if (action) { + action(); + } else { + console.log('unexcuted'); + } + } +} diff --git a/tests/hoist-errors/NullCoverage.js b/tests/hoist-errors/NullCoverage.js new file mode 100644 index 0000000000..eefe7a0cfb --- /dev/null +++ b/tests/hoist-errors/NullCoverage.js @@ -0,0 +1,6 @@ +function nullCoverageFunction(value) { + if (value) { + return value; + } + return null; +} \ No newline at end of file diff --git a/tests/hoist-errors/__tests__/Hello.test.ts b/tests/hoist-errors/__tests__/Hello.test.ts new file mode 100644 index 0000000000..f08cd4a6e2 --- /dev/null +++ b/tests/hoist-errors/__tests__/Hello.test.ts @@ -0,0 +1,26 @@ +declare var jest, describe, it, expect; + +import { Hello } from '../Hello'; + +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); + +describe('Hello Class', () => { + + it('should throw an error on line 22', () => { + + const hello = new Hello(); + + }); + +}); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); +jest.mock('path'); diff --git a/tests/hoist-errors/package.json b/tests/hoist-errors/package.json new file mode 100644 index 0000000000..c2d9c1f52b --- /dev/null +++ b/tests/hoist-errors/package.json @@ -0,0 +1,21 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "coverageReporters": [ + "json" + ], + "collectCoverageFrom": [ + "Hello.ts", + "NullCoverage.js" + ], + "mapCoverage": true, + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/hoist-errors/tsconfig.json b/tests/hoist-errors/tsconfig.json new file mode 100644 index 0000000000..55f8667f97 --- /dev/null +++ b/tests/hoist-errors/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true + } +} diff --git a/tests/hoist-test/__tests__/jest-hoist.test.ts b/tests/hoist-test/__tests__/jest-hoist.test.ts new file mode 100644 index 0000000000..c773fa7991 --- /dev/null +++ b/tests/hoist-test/__tests__/jest-hoist.test.ts @@ -0,0 +1,27 @@ + +import * as path from 'path'; +import {SomeClass, SomeFunctionDeclaredAsConst, SomeFunction} from '../src/things-to-mock'; + +jest.mock('../src/things-to-mock'); +jest.mock('path'); + + +describe('Global mocks', () => { + it('A global var should be mocked when the jest.mock call is underneath', () => { + expect((path.basename as any).mock).toBeDefined(); + }); +}); + +describe('Local mocks', () => { + it('Jest should be able to mock a local class', () => { + expect((SomeClass as any).mockReturnValue).toBeDefined(); + }); + + it('Jest should be able to mock a local class', () => { + expect((SomeFunction as any).mockReturnValueOnce).toBeDefined(); + }); + + it('Jest should be able to mock a local class', () => { + expect((SomeFunctionDeclaredAsConst as any).mockImplementation).toBeDefined(); + }); +}); diff --git a/tests/hoist-test/package.json b/tests/hoist-test/package.json new file mode 100644 index 0000000000..c2f99eac77 --- /dev/null +++ b/tests/hoist-test/package.json @@ -0,0 +1,14 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "moduleDirectories": ["node_modules", "src"], + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/hoist-test/src/things-to-mock.ts b/tests/hoist-test/src/things-to-mock.ts new file mode 100644 index 0000000000..bb656fdd3e --- /dev/null +++ b/tests/hoist-test/src/things-to-mock.ts @@ -0,0 +1,10 @@ + + +export class SomeClass { +} + +export const SomeFunctionDeclaredAsConst = () => 'originalValue'; + +export function SomeFunction(){ + return 'original'; +} diff --git a/tests/hoist-test/tsconfig.json b/tests/hoist-test/tsconfig.json new file mode 100644 index 0000000000..9af8d1760f --- /dev/null +++ b/tests/hoist-test/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true, + "baseUrl": "src", + "allowSyntheticDefaultImports": false + } +} diff --git a/tests/imports-test/__tests__/absolute-import.test.ts b/tests/imports-test/__tests__/absolute-import.test.ts new file mode 100644 index 0000000000..dd5c6d37e2 --- /dev/null +++ b/tests/imports-test/__tests__/absolute-import.test.ts @@ -0,0 +1,10 @@ +declare var jest, describe, it, expect; + +import { simpleFunction } from 'absolute-import'; + +describe('Simple function absolute', () => { + + it('should throw an error on line 11', () => { + simpleFunction(); + }); +}); \ No newline at end of file diff --git a/tests/imports-test/__tests__/classes/Hello-relative.test.ts b/tests/imports-test/__tests__/classes/Hello-relative.test.ts new file mode 100644 index 0000000000..ace25ead52 --- /dev/null +++ b/tests/imports-test/__tests__/classes/Hello-relative.test.ts @@ -0,0 +1,13 @@ +declare var jest, describe, it, expect; + +import { Hello } from '../../src/classes/Hello'; + +describe('Hello Class relative', () => { + + it('should throw an error on line 11', () => { + + const hello = new Hello(); + + }); + +}); \ No newline at end of file diff --git a/tests/imports-test/__tests__/classes/Hello.test.ts b/tests/imports-test/__tests__/classes/Hello.test.ts new file mode 100644 index 0000000000..6c988f6b95 --- /dev/null +++ b/tests/imports-test/__tests__/classes/Hello.test.ts @@ -0,0 +1,13 @@ +declare var jest, describe, it, expect; + +import { Hello } from 'classes/Hello'; + +describe('Hello Class absolute', () => { + + it('should throw an error on line 11', () => { + + const hello = new Hello(); + + }); + +}); \ No newline at end of file diff --git a/tests/imports-test/__tests__/relative-import.test.ts b/tests/imports-test/__tests__/relative-import.test.ts new file mode 100644 index 0000000000..4f9b9a2f5d --- /dev/null +++ b/tests/imports-test/__tests__/relative-import.test.ts @@ -0,0 +1,10 @@ +declare var jest, describe, it, expect; + +import { simpleFunction } from '../src/relative-import'; + +describe('Simple function relative', () => { + + it('should throw an error on line 11', () => { + simpleFunction(); + }); +}); \ No newline at end of file diff --git a/tests/imports-test/package.json b/tests/imports-test/package.json new file mode 100644 index 0000000000..a4585ceb21 --- /dev/null +++ b/tests/imports-test/package.json @@ -0,0 +1,14 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "moduleDirectories": ["node_modules", "src"], + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} \ No newline at end of file diff --git a/tests/imports-test/src/absolute-import.ts b/tests/imports-test/src/absolute-import.ts new file mode 100644 index 0000000000..7272c3af74 --- /dev/null +++ b/tests/imports-test/src/absolute-import.ts @@ -0,0 +1,5 @@ +import { Hello } from 'classes/Hello'; + +export function simpleFunction() { + const hello = new Hello(); +} \ No newline at end of file diff --git a/tests/imports-test/src/classes/Hello.ts b/tests/imports-test/src/classes/Hello.ts new file mode 100644 index 0000000000..5edeb4c227 --- /dev/null +++ b/tests/imports-test/src/classes/Hello.ts @@ -0,0 +1,13 @@ +export class Hello { + constructor() { + const greeting = ` + this + is + a + multiline + greeting + `; + + throw new Error('Hello error!'); + } +} \ No newline at end of file diff --git a/tests/imports-test/src/relative-import.ts b/tests/imports-test/src/relative-import.ts new file mode 100644 index 0000000000..4300a61e81 --- /dev/null +++ b/tests/imports-test/src/relative-import.ts @@ -0,0 +1,5 @@ +import { Hello } from './classes/Hello'; + +export function simpleFunction() { + const hello = new Hello(); +} \ No newline at end of file diff --git a/tests/imports-test/tsconfig.json b/tests/imports-test/tsconfig.json new file mode 100644 index 0000000000..6a8b14571b --- /dev/null +++ b/tests/imports-test/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true, + "baseUrl": "src" + } +} \ No newline at end of file diff --git a/tests/jestconfig-test/jest.json b/tests/jestconfig-test/jest.json index 2418d90057..7aef3047c9 100644 --- a/tests/jestconfig-test/jest.json +++ b/tests/jestconfig-test/jest.json @@ -3,7 +3,7 @@ "transform": { ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" }, - "testResultsProcessor": "/node_modules/ts-jest/coverageprocessor.js", + "mapCoverage": true, "testRegex": "/specs/.*\\.spec\\.(ts|tsx|js)$", "testEnvironment": "jsdom", "coverageReporters": [ @@ -27,4 +27,4 @@ "statements": 95 } } -} \ No newline at end of file +} diff --git a/tests/no-synthetic-default/__tests__/module.test.ts b/tests/no-synthetic-default/__tests__/module.test.ts new file mode 100644 index 0000000000..1e1356f216 --- /dev/null +++ b/tests/no-synthetic-default/__tests__/module.test.ts @@ -0,0 +1,8 @@ +import mod from '../module'; +import 'jest'; + +describe('the module which has no default export', () => { + it('should return funky junk when trying to access its exports', () => { + expect(mod.someExport).toBe('someExport'); + }); +}); diff --git a/tests/no-synthetic-default/module.js b/tests/no-synthetic-default/module.js new file mode 100644 index 0000000000..2ff9520dd0 --- /dev/null +++ b/tests/no-synthetic-default/module.js @@ -0,0 +1,3 @@ +module.exports = { + someExport: 'someExport' +} diff --git a/tests/no-synthetic-default/package.json b/tests/no-synthetic-default/package.json new file mode 100644 index 0000000000..c2f99eac77 --- /dev/null +++ b/tests/no-synthetic-default/package.json @@ -0,0 +1,14 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "moduleDirectories": ["node_modules", "src"], + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/no-synthetic-default/tsconfig.json b/tests/no-synthetic-default/tsconfig.json new file mode 100644 index 0000000000..595e0b034e --- /dev/null +++ b/tests/no-synthetic-default/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": false + } +} diff --git a/tests/simple-async/__tests__/Hello.test.ts b/tests/simple-async/__tests__/Hello.test.ts index c5e07503ce..9c6544edb8 100644 --- a/tests/simple-async/__tests__/Hello.test.ts +++ b/tests/simple-async/__tests__/Hello.test.ts @@ -4,7 +4,7 @@ import { Hello } from '../Hello'; describe('Hello Class', () => { - it('should throw an error on line 11', () => { + it('should throw an error on line 13', () => { return new Promise((resolve: () => void) => { const hello = new Hello(); resolve(); diff --git a/tests/simple-async/node_modules/ts-jest.js b/tests/simple-async/node_modules/ts-jest.js deleted file mode 100644 index 6bb2ded8c1..0000000000 --- a/tests/simple-async/node_modules/ts-jest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../../'); \ No newline at end of file diff --git a/tests/simple-async/package.json b/tests/simple-async/package.json index e83dd791e6..91cdc1d17d 100644 --- a/tests/simple-async/package.json +++ b/tests/simple-async/package.json @@ -4,7 +4,6 @@ "transform": { ".(ts|tsx)": "../../preprocessor.js" }, - "testResultsProcessor": "../../coverageprocessor.js", "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", "coverageReporters": [ "json" @@ -13,10 +12,11 @@ "Hello.ts", "NullCoverage.js" ], + "mapCoverage": true, "moduleFileExtensions": [ "ts", "tsx", "js" ] } -} \ No newline at end of file +} diff --git a/tests/simple/.gitignore b/tests/simple/.gitignore new file mode 100644 index 0000000000..9e233d795a --- /dev/null +++ b/tests/simple/.gitignore @@ -0,0 +1 @@ +coverage-custom diff --git a/tests/simple/Hello.ts b/tests/simple/Hello.ts index 1f497bce4b..2761d2e6cb 100644 --- a/tests/simple/Hello.ts +++ b/tests/simple/Hello.ts @@ -1,3 +1,8 @@ +interface FooInterface { + foo: string, + bar: number, //This interface should be stripped and the line numbers should still fit. +} + export class Hello { constructor() { const greeting = ` @@ -13,11 +18,11 @@ export class Hello { throw new Error('Hello error!'); } - public unexcuted(action: () => void = () => {}): void { + public unexcuted(action: () => void = () => { }): void { if (action) { - action(); + action(); } else { - console.log('unexcuted'); + console.log('unexcuted'); } } } \ No newline at end of file diff --git a/tests/simple/__tests__/Hello.test.ts b/tests/simple/__tests__/Hello.test.ts index b562d489c9..6c8637fe71 100644 --- a/tests/simple/__tests__/Hello.test.ts +++ b/tests/simple/__tests__/Hello.test.ts @@ -1,10 +1,10 @@ declare var jest, describe, it, expect; -import {Hello} from '../Hello'; +import { Hello } from '../Hello'; describe('Hello Class', () => { - it('should throw an error on line 11', () => { + it('should throw an error on line 18', () => { const hello = new Hello(); diff --git a/tests/simple/node_modules/ts-jest.js b/tests/simple/node_modules/ts-jest.js deleted file mode 100644 index 6bb2ded8c1..0000000000 --- a/tests/simple/node_modules/ts-jest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../../'); \ No newline at end of file diff --git a/tests/simple/package.json b/tests/simple/package.json index a856e07cf4..c2d9c1f52b 100644 --- a/tests/simple/package.json +++ b/tests/simple/package.json @@ -3,17 +3,19 @@ "transform": { ".(ts|tsx)": "../../preprocessor.js" }, - "testResultsProcessor": "../../coverageprocessor.js", "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "coverageReporters": ["json"], + "coverageReporters": [ + "json" + ], "collectCoverageFrom": [ "Hello.ts", "NullCoverage.js" ], + "mapCoverage": true, "moduleFileExtensions": [ "ts", "tsx", "js" ] } -} \ No newline at end of file +} diff --git a/tests/simple/tsconfig.json b/tests/simple/tsconfig.json index 5e2c68f9ff..55f8667f97 100644 --- a/tests/simple/tsconfig.json +++ b/tests/simple/tsconfig.json @@ -7,4 +7,4 @@ "jsx": "react", "allowJs": true } -} \ No newline at end of file +} diff --git a/tests/skip-babelrc/.babelrc b/tests/skip-babelrc/.babelrc new file mode 100644 index 0000000000..460b5331d2 --- /dev/null +++ b/tests/skip-babelrc/.babelrc @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/tests/skip-babelrc/.gitignore b/tests/skip-babelrc/.gitignore new file mode 100644 index 0000000000..9e233d795a --- /dev/null +++ b/tests/skip-babelrc/.gitignore @@ -0,0 +1 @@ +coverage-custom diff --git a/tests/skip-babelrc/Hello.ts b/tests/skip-babelrc/Hello.ts new file mode 100644 index 0000000000..2fec0b9d74 --- /dev/null +++ b/tests/skip-babelrc/Hello.ts @@ -0,0 +1,21 @@ +export class Hello { + constructor() { + const greeting = ` + this + is + a + multiline + greeting + `; + + this.unexcuted(() => { }); + } + + public unexcuted(action: () => void = () => { }): void { + if (action) { + action(); + } else { + console.log('unexcuted'); + } + } +} diff --git a/tests/skip-babelrc/NullCoverage.js b/tests/skip-babelrc/NullCoverage.js new file mode 100644 index 0000000000..c59dbbdef3 --- /dev/null +++ b/tests/skip-babelrc/NullCoverage.js @@ -0,0 +1,6 @@ +function nullCoverageFunction(value) { + if (value) { + return value; + } + return null; +} diff --git a/tests/skip-babelrc/__tests__/Hello.test.ts b/tests/skip-babelrc/__tests__/Hello.test.ts new file mode 100644 index 0000000000..c1bda7d29a --- /dev/null +++ b/tests/skip-babelrc/__tests__/Hello.test.ts @@ -0,0 +1,10 @@ +import { Hello } from '../Hello'; + +describe('Hello Class', () => { + + it('should throw an error on line 11', () => { + + const hello = new Hello(); + }); + +}); diff --git a/tests/skip-babelrc/package.json b/tests/skip-babelrc/package.json new file mode 100644 index 0000000000..c2d9c1f52b --- /dev/null +++ b/tests/skip-babelrc/package.json @@ -0,0 +1,21 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "coverageReporters": [ + "json" + ], + "collectCoverageFrom": [ + "Hello.ts", + "NullCoverage.js" + ], + "mapCoverage": true, + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/skip-babelrc/tsconfig.json b/tests/skip-babelrc/tsconfig.json new file mode 100644 index 0000000000..55f8667f97 --- /dev/null +++ b/tests/skip-babelrc/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true + } +} diff --git a/tests/synthetic-default/__tests__/module.test.ts b/tests/synthetic-default/__tests__/module.test.ts new file mode 100644 index 0000000000..5856b0b3b4 --- /dev/null +++ b/tests/synthetic-default/__tests__/module.test.ts @@ -0,0 +1,22 @@ +import mod from '../module'; +import 'jest'; + + +describe('the module which has no default export', () => { + it('should return sensible values when trying to access its exports', () => { + expect(mod.someExport).toBe('someExport'); + }); +}); + +async function noop() { + return Promise.resolve('noop'); +} + +describe('async-await stuff', () => { + it('should be compiled by TS not Babel', async (done) => { + const g = await noop(); + + expect(g).toBe('noop'); + done(); + }); +}); diff --git a/tests/synthetic-default/module.js b/tests/synthetic-default/module.js new file mode 100644 index 0000000000..2ff9520dd0 --- /dev/null +++ b/tests/synthetic-default/module.js @@ -0,0 +1,3 @@ +module.exports = { + someExport: 'someExport' +} diff --git a/tests/synthetic-default/package.json b/tests/synthetic-default/package.json new file mode 100644 index 0000000000..e7468a7f19 --- /dev/null +++ b/tests/synthetic-default/package.json @@ -0,0 +1,17 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "moduleDirectories": [ + "node_modules", + "src" + ], + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ] + } +} diff --git a/tests/synthetic-default/tsconfig.json b/tests/synthetic-default/tsconfig.json new file mode 100644 index 0000000000..abd78f479f --- /dev/null +++ b/tests/synthetic-default/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true + } +} diff --git a/tests/tsconfig-test/allows-comments.json b/tests/tsconfig-test/allows-comments.json new file mode 100644 index 0000000000..c74d470ac9 --- /dev/null +++ b/tests/tsconfig-test/allows-comments.json @@ -0,0 +1,6 @@ +{ + "extends": "./allows-comments2.json", + "compilerOptions": { + // some comments + } +} diff --git a/tests/tsconfig-test/allows-comments2.json b/tests/tsconfig-test/allows-comments2.json new file mode 100644 index 0000000000..e5b406f1ca --- /dev/null +++ b/tests/tsconfig-test/allows-comments2.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + //some comments + "pretty": true + } +} diff --git a/tests/tsconfig-test/empty.ts b/tests/tsconfig-test/empty.ts new file mode 100644 index 0000000000..e228bfe327 --- /dev/null +++ b/tests/tsconfig-test/empty.ts @@ -0,0 +1 @@ +// Dummy file to ensure the ts config loader does not complain about a missing input file. \ No newline at end of file diff --git a/tests/tsconfig-test/extends-tsconfig.json b/tests/tsconfig-test/extends-tsconfig.json new file mode 100644 index 0000000000..d0251e982d --- /dev/null +++ b/tests/tsconfig-test/extends-tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "./my-tsconfig.json" +} diff --git a/tests/tsconfig-test/extends-with-overrides-tsconfig.json b/tests/tsconfig-test/extends-with-overrides-tsconfig.json new file mode 100644 index 0000000000..8b6bfd641e --- /dev/null +++ b/tests/tsconfig-test/extends-with-overrides-tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./my-tsconfig.json", + "compilerOptions": { + "target": "ES5", + "noImplicitAny": true + } +} diff --git a/tests/tsconfig-test/tsconfig-module/custom-config.json b/tests/tsconfig-test/tsconfig-module/custom-config.json new file mode 100644 index 0000000000..8b536811db --- /dev/null +++ b/tests/tsconfig-test/tsconfig-module/custom-config.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "module": "es2015" + } +} diff --git a/tests/tsconfig-test/tsconfig-module/empty.ts b/tests/tsconfig-test/tsconfig-module/empty.ts new file mode 100644 index 0000000000..e228bfe327 --- /dev/null +++ b/tests/tsconfig-test/tsconfig-module/empty.ts @@ -0,0 +1 @@ +// Dummy file to ensure the ts config loader does not complain about a missing input file. \ No newline at end of file diff --git a/tests/tsconfig-test/tsconfig-module/tsconfig.json b/tests/tsconfig-test/tsconfig-module/tsconfig.json new file mode 100644 index 0000000000..8b536811db --- /dev/null +++ b/tests/tsconfig-test/tsconfig-module/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "module": "es2015" + } +} diff --git a/tests/use-babelrc/.babelrc b/tests/use-babelrc/.babelrc new file mode 100644 index 0000000000..460b5331d2 --- /dev/null +++ b/tests/use-babelrc/.babelrc @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} diff --git a/tests/use-babelrc/.gitignore b/tests/use-babelrc/.gitignore new file mode 100644 index 0000000000..9e233d795a --- /dev/null +++ b/tests/use-babelrc/.gitignore @@ -0,0 +1 @@ +coverage-custom diff --git a/tests/use-babelrc/Hello.ts b/tests/use-babelrc/Hello.ts new file mode 100644 index 0000000000..8c080f9c6a --- /dev/null +++ b/tests/use-babelrc/Hello.ts @@ -0,0 +1,23 @@ +export class Hello { + constructor() { + const greeting = ` + this + is + a + multiline + greeting + `; + + this.unexcuted(() => { }); + + throw new Error('Hello error!'); + } + + public unexcuted(action: () => void = () => { }): void { + if (action) { + action(); + } else { + console.log('unexcuted'); + } + } +} diff --git a/tests/use-babelrc/NullCoverage.js b/tests/use-babelrc/NullCoverage.js new file mode 100644 index 0000000000..c59dbbdef3 --- /dev/null +++ b/tests/use-babelrc/NullCoverage.js @@ -0,0 +1,6 @@ +function nullCoverageFunction(value) { + if (value) { + return value; + } + return null; +} diff --git a/tests/use-babelrc/__tests__/Hello.test.ts b/tests/use-babelrc/__tests__/Hello.test.ts new file mode 100644 index 0000000000..88dfdaf4e0 --- /dev/null +++ b/tests/use-babelrc/__tests__/Hello.test.ts @@ -0,0 +1,11 @@ +import { Hello } from '../Hello'; + +describe('Hello Class', () => { + + it('should throw an error on line 11', () => { + + const hello = new Hello(); + + }); + +}); diff --git a/tests/use-babelrc/package.json b/tests/use-babelrc/package.json new file mode 100644 index 0000000000..2e4f78a72a --- /dev/null +++ b/tests/use-babelrc/package.json @@ -0,0 +1,22 @@ +{ + "jest": { + "transform": { + ".(ts|tsx)": "../../preprocessor.js" + }, + "moduleDirectories": [ + "node_modules", + "src" + ], + "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", + "moduleFileExtensions": [ + "ts", + "tsx", + "js" + ], + "globals": { + "ts-jest": { + "useBabelrc": true + } + } + } +} diff --git a/tests/use-babelrc/tsconfig.json b/tests/use-babelrc/tsconfig.json new file mode 100644 index 0000000000..55f8667f97 --- /dev/null +++ b/tests/use-babelrc/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + "noEmitOnError": false, + "jsx": "react", + "allowJs": true + } +} diff --git a/tests/use-strict/__tests__/Strict-valid.test.ts b/tests/use-strict/__tests__/Strict-valid.test.ts index c2e48250a0..aa1dee7678 100644 --- a/tests/use-strict/__tests__/Strict-valid.test.ts +++ b/tests/use-strict/__tests__/Strict-valid.test.ts @@ -2,7 +2,7 @@ declare var jest, describe, it, expect; import { checkStrictValid } from '../Strict-valid'; -describe('Valid Strict', () => { +describe('Strict1', () => { it('should not throw an error', () => { diff --git a/tests/use-strict/node_modules/ts-jest.js b/tests/use-strict/node_modules/ts-jest.js deleted file mode 100644 index 6bb2ded8c1..0000000000 --- a/tests/use-strict/node_modules/ts-jest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../../'); \ No newline at end of file diff --git a/tests/use-strict/package.json b/tests/use-strict/package.json index 5d69a11426..fbc5d42c81 100644 --- a/tests/use-strict/package.json +++ b/tests/use-strict/package.json @@ -3,7 +3,7 @@ "transform": { ".(ts|tsx)": "../../preprocessor.js" }, - "testResultsProcessor": "../../coverageprocessor.js", + "mapCoverage": true, "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", "moduleFileExtensions": [ "ts", @@ -11,4 +11,4 @@ "js" ] } -} \ No newline at end of file +} diff --git a/tests/watch-test/node_modules/ts-jest.js b/tests/watch-test/node_modules/ts-jest.js deleted file mode 100644 index 6bb2ded8c1..0000000000 --- a/tests/watch-test/node_modules/ts-jest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../../../'); \ No newline at end of file diff --git a/tests/watch-test/package.json b/tests/watch-test/package.json index f1c98a98c6..60a1e9547e 100644 --- a/tests/watch-test/package.json +++ b/tests/watch-test/package.json @@ -3,13 +3,15 @@ "transform": { ".(ts|tsx)": "../../preprocessor.js" }, - "testResultsProcessor": "../../coverageprocessor.js", + "mapCoverage": true, "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", - "coverageReporters": ["json"], + "coverageReporters": [ + "json" + ], "moduleFileExtensions": [ "ts", "tsx", "js" ] } -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 7e68d74989..92f6d74376 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,7 +17,8 @@ "experimentalDecorators": true, "allowSyntheticDefaultImports": false, "outDir": "dist", - "rootDir": "src" + "rootDir": "src", + "skipLibCheck": true }, "include": [ "src/**/*.ts", @@ -26,4 +27,4 @@ "exclude": [ "node_modules" ] -} \ No newline at end of file +} diff --git a/tslint.json b/tslint.json index 1fa307a302..309216d9e9 100644 --- a/tslint.json +++ b/tslint.json @@ -1,58 +1,21 @@ { - "rules": { - "class-name": true, - "forin": true, - "indent": [ - false + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" ], - "label-position": true, - "label-undefined": true, - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-variable": true, - "no-empty": false, - "no-eval": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-unused-variable": [ - true, - "react" - ], - "no-unreachable": true, - "no-use-before-declare": true, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else" - ], - "quotemark": [ - true, - "single", - "jsx-double" - ], - "radix": true, - "semicolon": [ - true - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "variable-name": [ - true, - "allow-pascal-case" - ] - } -} \ No newline at end of file + "rules": { + "quotemark": [ + true, + "single", + "jsx-double" + ], + "semicolon": [ + true, + "always" + ], + "interface-name": [ + true, + "never-prefix" + ] + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..37c69e102b --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2777 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/babel-core@^6.7.14": + version "6.7.14" + resolved "https://registry.yarnpkg.com/@types/babel-core/-/babel-core-6.7.14.tgz#a08c900a98e8987c1a98d2ea4fa0a1805a7d131f" + dependencies: + "@types/babel-template" "*" + "@types/babel-traverse" "*" + "@types/babel-types" "*" + +"@types/babel-template@*": + version "6.7.14" + resolved "https://registry.yarnpkg.com/@types/babel-template/-/babel-template-6.7.14.tgz#8088a56f9d697d620d3d079c3ef66025b7a08d02" + dependencies: + "@types/babel-types" "*" + "@types/babylon" "*" + +"@types/babel-traverse@*": + version "6.7.16" + resolved "https://registry.yarnpkg.com/@types/babel-traverse/-/babel-traverse-6.7.16.tgz#52f475893b8633f653499d745302fa5572a7bd05" + dependencies: + "@types/babel-types" "*" + +"@types/babel-types@*": + version "6.7.16" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-6.7.16.tgz#e2602896636858a0067971f7ca4bb8678038293f" + +"@types/babylon@*": + version "6.16.1" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.1.tgz#e4d10ab9e43a73703a17c6f41438bede28769340" + dependencies: + "@types/babel-types" "*" + +"@types/es6-shim@latest": + version "0.31.33" + resolved "https://registry.yarnpkg.com/@types/es6-shim/-/es6-shim-0.31.33.tgz#4792bdecc8c7f09a7e086968cfbb8058e459379d" + +"@types/fs-extra@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.2.tgz#00cbf48563f377f9ce5cf24237b21b3d9779e055" + dependencies: + "@types/node" "*" + +"@types/jest@latest": + version "19.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-19.2.3.tgz#61748040e8589a891dfc2ec1d16a2dd74482980e" + +"@types/node@*", "@types/node@latest": + version "7.0.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.22.tgz#4593f4d828bdd612929478ea40c67b4f403ca255" + +"@types/react@latest": + version "15.0.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-15.0.25.tgz#d396949cccc9a90b61755def9781e5aced9b2261" + +"@types/source-map-support@latest": + version "0.2.28" + resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.2.28.tgz#ce6497dfa9c9fbd21a753955b4a51d8993d759dd" + dependencies: + "@types/node" "*" + +abab@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + +acorn-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +anchor-markdown-header@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" + dependencies: + emoji-regex "~6.1.0" + +ansi-escapes@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0, ansi-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" + dependencies: + color-convert "^1.0.0" + +anymatch@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" + dependencies: + arrify "^1.0.0" + micromatch "^2.1.5" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-code-frame@^6.20.0, babel-code-frame@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" + dependencies: + chalk "^1.1.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +babel-core@^6.0.0, babel-core@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" + dependencies: + babel-code-frame "^6.22.0" + babel-generator "^6.24.1" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-generator@^6.18.0, babel-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.2" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-register@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" + dependencies: + babel-core "^6.24.1" + babel-runtime "^6.22.0" + core-js "^2.4.0" + home-or-tmp "^2.0.0" + lodash "^4.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.2" + +babel-runtime@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + +babel-template@^6.16.0, babel-template@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babylon "^6.11.0" + lodash "^4.2.0" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" + dependencies: + babel-code-frame "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + babylon "^6.15.0" + debug "^2.2.0" + globals "^9.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + +babel-types@^6.18.0, babel-types@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" + dependencies: + babel-runtime "^6.22.0" + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^1.0.1" + +babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: + version "6.17.1" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f" + +bail@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.1.tgz#912579de8b391aadf3c5fdf4cd2a0fc225df3bc2" + +balanced-match@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + +brace-expansion@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + dependencies: + balanced-match "^0.4.1" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +bser@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" + dependencies: + node-int64 "^0.4.0" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +ccount@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.1.tgz#665687945168c218ec77ff61a4155ae00227a96c" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +character-entities-html4@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.0.tgz#1ab08551d3ce1fa1df08d00fb9ca1defb147a06c" + +character-entities-legacy@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.0.tgz#b18aad98f6b7bcc646c1e4c81f9f1956376a561a" + +character-entities@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.0.tgz#a683e2cf75dbe8b171963531364e58e18a1b155f" + +character-reference-invalid@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.0.tgz#dec9ad1dfb9f8d06b4fcdaa2adc3c4fd97af1e68" + +ci-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collapse-white-space@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.2.tgz#9c463fb9c6d190d2dcae21a356a01bcae9eeef6d" + +color-convert@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" + +colors@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +content-type-parser@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cross-spawn-with-kill@latest: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cross-spawn-with-kill/-/cross-spawn-with-kill-1.0.0.tgz#6d76b7bbfd148eb10bd0322fceb180ea9b0477a8" + dependencies: + cross-spawn "^4.0.0" + ps-tree "^1.1.0" + +cross-spawn@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@latest: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.3: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +diff@^3.0.1, diff@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +doctoc@latest: + version "1.3.0" + resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.3.0.tgz#7f0839851dd58c808a2cae55d9504e012d08ee30" + dependencies: + anchor-markdown-header "^0.5.5" + htmlparser2 "~3.9.2" + markdown-to-ast "~3.4.0" + minimist "~1.2.0" + underscore "~1.8.3" + update-section "^0.3.0" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +emoji-regex@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +"errno@>=0.1.1 <0.2.0-0": + version "0.1.4" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@^1.6.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-stream@~3.3.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +exec-sh@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + dependencies: + merge "^1.1.3" + +execa@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" + dependencies: + cross-spawn "^4.0.0" + get-stream "^2.2.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@^3.0.0, extend@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fb-watchman@^1.8.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" + dependencies: + bser "1.0.2" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +fbjs@^0.8.9: + version "0.8.12" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +findup-sync@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + dependencies: + glob "~5.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-extra@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.0.0: + version "9.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handlebars@^4.0.3: + version "4.0.10" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" + +html-encoding-sniffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + dependencies: + whatwg-encoding "^1.0.1" + +htmlparser2@~3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.13, iconv-lite@~0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +invariant@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +is-alphabetical@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.0.tgz#e2544c13058255f2144cb757066cd3342a1c8c46" + +is-alphanumerical@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.0.tgz#e06492e719c1bf15dec239e4f1af5f67b4d6e7bf" + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-ci@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + dependencies: + ci-info "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.0.tgz#940579b6ea63c628080a69e62bda88c8470b4fe0" + +is-dotfile@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-hexadecimal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.0.tgz#5c459771d2af9a2e3952781fd54fcb1bcfe4113c" + +is-number@^2.0.2, is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.1: + version "1.1.9" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.2" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" + dependencies: + debug "^2.6.3" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" + +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" + dependencies: + ansi-escapes "^1.4.0" + callsites "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^2.3.0" + slash "^1.0.0" + string-length "^1.0.1" + throat "^3.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^7.0.2" + +jest-config@^20.0.0, jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" + dependencies: + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + dependencies: + chalk "^1.1.3" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" + +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" + +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" + +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" + +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" + micromatch "^2.3.11" + sane "~1.6.0" + worker-farm "^1.3.1" + +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" + +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" + dependencies: + chalk "^1.1.3" + pretty-format "^20.0.3" + +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" + dependencies: + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" + +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" + +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" + dependencies: + jest-regex-util "^20.0.3" + +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" + dependencies: + browser-resolve "^1.11.2" + is-builtin-module "^1.0.0" + resolve "^1.3.2" + +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" + dependencies: + babel-core "^6.0.0" + babel-jest "^20.0.3" + babel-plugin-istanbul "^4.0.0" + chalk "^1.1.3" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + strip-bom "3.0.0" + yargs "^7.0.2" + +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" + dependencies: + chalk "^1.1.3" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" + natural-compare "^1.4.0" + pretty-format "^20.0.3" + +jest-util@^20.0.0, jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" + dependencies: + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" + mkdirp "^0.5.1" + +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" + dependencies: + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" + +jest@^20.0.0: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" + dependencies: + jest-cli "^20.0.4" + +jodid25519@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" + dependencies: + jsbn "~0.1.0" + +js-tokens@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + +js-yaml@^3.7.0: + version "3.8.4" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" + dependencies: + argparse "^1.0.7" + esprima "^3.1.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + dependencies: + assert-plus "1.0.0" + extsprintf "1.0.2" + json-schema "0.2.3" + verror "1.3.6" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash@^4.14.0, lodash@^4.2.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest-streak@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-1.0.0.tgz#d06597c4d4c31b52ccb1f5d8f8fe7148eafd6965" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +lru-cache@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +markdown-table@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-0.4.0.tgz#890c2c1b3bfe83fb00e4129b8e4cfe645270f9d1" + +markdown-to-ast@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz#0e2cba81390b0549a9153ec3b0d915b61c164be7" + dependencies: + debug "^2.1.3" + remark "^5.0.1" + structured-source "^3.0.2" + traverse "^0.6.6" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.15" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + dependencies: + mime-db "~1.27.0" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.1, minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +node-fetch@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.0.tgz#3ff6c56544f9b7fb00682338bb55ee6f54a8a0ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +normalize-package-data@^2.3.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.0.0.tgz#15918ded510522b81ee7ae5a309d54f639fc39a4" + dependencies: + execa "^0.5.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + +parse-entities@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.0.tgz#4bc58f35fdc8e65dded35a12f2e40223ca24a3f7" + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + has "^1.0.1" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + +private@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +promise@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.7: + version "15.5.10" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + +prr@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +ps-tree@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +randomatic@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" + dependencies: + is-number "^2.0.2" + kind-of "^3.0.2" + +react-test-renderer@latest: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.5.4.tgz#d4ebb23f613d685ea8f5390109c2d20fbf7c83bc" + dependencies: + fbjs "^0.8.9" + object-assign "^4.1.0" + +react@latest: + version "15.5.4" + resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.7" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.2: + version "2.2.9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +remark-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-1.1.0.tgz#c3ca10f9a8da04615c28f09aa4e304510526ec21" + dependencies: + collapse-white-space "^1.0.0" + extend "^3.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + +remark-stringify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-1.1.0.tgz#a7105e25b9ee2bf9a49b75d2c423f11b06ae2092" + dependencies: + ccount "^1.0.0" + extend "^3.0.0" + longest-streak "^1.0.0" + markdown-table "^0.4.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + stringify-entities "^1.0.1" + unherit "^1.0.4" + +remark@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-5.1.0.tgz#cb463bd3dbcb4b99794935eee1cf71d7a8e3068c" + dependencies: + remark-parse "^1.1.0" + remark-stringify "^1.1.0" + unified "^4.1.1" + +remove-trailing-separator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2, repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@^2.79.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.7, resolve@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@^2.6.1, rimraf@latest: + version "2.6.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" + dependencies: + glob "^7.0.5" + +safe-buffer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" + +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^1.8.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + +sax@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shellwords@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +source-map-support@^0.4.2, source-map-support@^0.4.4: + version "0.4.15" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jodid25519 "^1.0.0" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +string-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" + dependencies: + strip-ansi "^3.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^3.0.0" + +string_decoder@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" + dependencies: + safe-buffer "^5.0.1" + +stringify-entities@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.0.tgz#2244a516c4f1e8e01b73dad01023016776abd917" + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + has "^1.0.1" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +stringstream@~0.0.4: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + dependencies: + boundary "^1.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +to-fast-properties@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +trim-trailing-lines@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + +trough@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.0.tgz#6bdedfe7f2aa49a6f3c432257687555957f342fd" + +ts-jest@latest: + version "20.0.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-20.0.6.tgz#39c2810c05d6f6908dac15929dae206b494b73f4" + dependencies: + "@types/babel-core" "^6.7.14" + babel-core "^6.24.1" + babel-plugin-istanbul "^4.1.4" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-preset-jest "^20.0.3" + fs-extra "^3.0.0" + jest-config "^20.0.0" + jest-util "^20.0.0" + pkg-dir "^2.0.0" + source-map-support "^0.4.4" + tsconfig "^6.0.0" + yargs "^8.0.1" + +tsconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" + dependencies: + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslint@next: + version "5.0.0-dev.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.0.0-dev.0.tgz#d7fc5dfd5304b17fd7f97ad5755852ba8607f6e9" + dependencies: + babel-code-frame "^6.20.0" + colors "^1.1.2" + diff "^3.0.1" + findup-sync "~0.3.0" + glob "^7.1.1" + optimist "~0.6.0" + resolve "^1.1.7" + tsutils "^1.1.0" + +tsutils@^1.1.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +typescript@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" + +ua-parser-js@^0.7.9: + version "0.7.12" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" + +uglify-js@^2.6: + version "2.8.27" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +unherit@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-4.2.1.tgz#76ff43aa8da430f6e7e4a55c84ebac2ad2cfcd2e" + dependencies: + bail "^1.0.0" + extend "^3.0.0" + has "^1.0.1" + once "^1.3.3" + trough "^1.0.0" + vfile "^1.0.0" + +unist-util-remove-position@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.0.tgz#2444fedc344bc5f540dab6353e013b6d78101dc2" + dependencies: + unist-util-visit "^1.1.0" + +unist-util-visit@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.1.1.tgz#e917a3b137658b335cb4420c7da2e74d928e4e94" + +universalify@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" + +update-section@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" + dependencies: + extsprintf "1.0.2" + +vfile-location@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.1.tgz#0bf8816f732b0f8bd902a56fda4c62c8e935dc52" + +vfile@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-1.4.0.tgz#c0fd6fa484f8debdb771f68c31ed75d88da97fe7" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + +whatwg-encoding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + dependencies: + iconv-lite "0.4.13" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.12, which@^1.2.9: + version "1.2.14" + resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" + dependencies: + errno ">=0.1.1 <0.2.0-0" + xtend ">=4.0.0 <4.1.0-0" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yargs@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"