From acb26a99fe05de75818f38ccda9f42fec476365f Mon Sep 17 00:00:00 2001 From: Mikhail Bodrov Date: Mon, 15 Oct 2018 15:10:12 +0300 Subject: [PATCH 01/76] Simpify getting object type name (#7159) * Simpify getting object type name * Add info to changelog --- CHANGELOG.md | 4 ++ packages/jest-mock/src/index.js | 69 ++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c680882335d..f57621c8bcfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,10 @@ - `[docs]` Removed useless expect.assertions in `TestingAsyncCode.md` ([#7131](https://github.com/facebook/jest/pull/7131)) - `[docs]` Remove references to `@providesModule` which isn't supported anymore ([#7147](https://github.com/facebook/jest/pull/7147)) +### Performance + +- `[jest-mock]` Improve `getType` function performance. ([#7159](https://github.com/facebook/jest/pull/7159)) + ## 23.6.0 ### Features diff --git a/packages/jest-mock/src/index.js b/packages/jest-mock/src/index.js index e97ccbcfb3c9..4bde745a3c25 100644 --- a/packages/jest-mock/src/index.js +++ b/packages/jest-mock/src/index.js @@ -173,31 +173,36 @@ function matchArity(fn: any, length: number): any { return mockConstructor; } -function isA(typeName: string, value: any): boolean { - return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; +function getObjectType(value: any): string { + return Object.prototype.toString.apply(value).slice(8, -1); } function getType(ref?: any): string | null { + const typeName = getObjectType(ref); if ( - isA('Function', ref) || - isA('AsyncFunction', ref) || - isA('GeneratorFunction', ref) + typeName === 'Function' || + typeName === 'AsyncFunction' || + typeName === 'GeneratorFunction' ) { return 'function'; } else if (Array.isArray(ref)) { return 'array'; - } else if (isA('Object', ref)) { + } else if (typeName === 'Object') { return 'object'; } else if ( - isA('Number', ref) || - isA('String', ref) || - isA('Boolean', ref) || - isA('Symbol', ref) + typeName === 'Number' || + typeName === 'String' || + typeName === 'Boolean' || + typeName === 'Symbol' ) { return 'constant'; - } else if (isA('Map', ref) || isA('WeakMap', ref) || isA('Set', ref)) { + } else if ( + typeName === 'Map' || + typeName === 'WeakMap' || + typeName === 'Set' + ) { return 'collection'; - } else if (isA('RegExp', ref)) { + } else if (typeName === 'RegExp') { return 'regexp'; } else if (ref === undefined) { return 'undefined'; @@ -209,21 +214,31 @@ function getType(ref?: any): string | null { } function isReadonlyProp(object: any, prop: string): boolean { - return ( - ((prop === 'arguments' || - prop === 'caller' || - prop === 'callee' || - prop === 'name' || - prop === 'length') && - (isA('Function', object) || - isA('AsyncFunction', object) || - isA('GeneratorFunction', object))) || - ((prop === 'source' || - prop === 'global' || - prop === 'ignoreCase' || - prop === 'multiline') && - isA('RegExp', object)) - ); + if ( + prop === 'arguments' || + prop === 'caller' || + prop === 'callee' || + prop === 'name' || + prop === 'length' + ) { + const typeName = getObjectType(object); + return ( + typeName === 'Function' || + typeName === 'AsyncFunction' || + typeName === 'GeneratorFunction' + ); + } + + if ( + prop === 'source' || + prop === 'global' || + prop === 'ignoreCase' || + prop === 'multiline' + ) { + return getObjectType(object) === 'RegExp'; + } + + return false; } class ModuleMockerClass { From b55a980e9d7aaf8bf87055675f8fd287a03c1f7b Mon Sep 17 00:00:00 2001 From: Nik Graf Date: Mon, 15 Oct 2018 14:25:18 +0200 Subject: [PATCH 02/76] add export to custom test environment example (#7140) --- docs/Configuration.md | 2 ++ website/versioned_docs/version-23.6/Configuration.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/Configuration.md b/docs/Configuration.md index 3891c68377e8..0c70b41ed22d 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -777,6 +777,8 @@ class CustomEnvironment extends NodeEnvironment { return super.runScript(script); } } + +module.exports = CustomEnvironment; ``` ```js diff --git a/website/versioned_docs/version-23.6/Configuration.md b/website/versioned_docs/version-23.6/Configuration.md index ee584888cbfe..616e51e4497a 100644 --- a/website/versioned_docs/version-23.6/Configuration.md +++ b/website/versioned_docs/version-23.6/Configuration.md @@ -755,6 +755,8 @@ class CustomEnvironment extends NodeEnvironment { return super.runScript(script); } } + +module.exports = CustomEnvironment; ``` ```js From 3157c8afde04d58638ec137472b2a72178ee402e Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Mon, 15 Oct 2018 16:30:29 +0200 Subject: [PATCH 03/76] Throw explicit errors for common moduleFileExtension failures (#7160) ## Summary Inspired by #7158, I finally decided to throw a better error in the cases where people have custom `moduleFileExtension` resulting in more or less obscure errors. I've tackled 2 different issues here (in separate commits, happy to split them up into separate PRs if you want). 1. If you require a file without the file extension, we try to look for files matching _with_ a file extension and list them out. Also tell the user to either include file extension in the `require` or update `moduleFileExtension`. 2. If `js` is missing from `moduleFileExtension`, jest is unable to inject into the runtime. I decided to throw an explicit configuration error rather than fixing `jest-jasmine`'s `require`, as we'd also need all of our dependencies to do the same (e.g. `source-map` throws if we do `moduleFileExtension: []` now). Fixes #4025. ## Test plan Integration tests added --- CHANGELOG.md | 2 + .../resolve_no_file_extensions.test.js.snap | 38 + .../resolve_no_file_extensions.test.js | 53 + e2e/resolve_no_extensions/__tests__/test.js | 5 + e2e/resolve_no_extensions/index.js | 1 + e2e/resolve_no_extensions/package.json | 7 + e2e/resolve_no_extensions/some-json-file.json | 3 + flow-typed/npm/glob_v7.1.x.js | 87 + .../src/__tests__/SearchSource.test.js | 14 +- .../src/__tests__/normalize.test.js | 20 + packages/jest-config/src/normalize.js | 28 +- packages/jest-runtime/package.json | 1 + ...runtime_require_module_no_ext.test.js.snap | 12 + .../runtime_require_module_no_ext.test.js | 28 + .../test_root/RegularModuleWithWrongExt.txt | 1 + packages/jest-runtime/src/helpers.js | 51 + packages/jest-runtime/src/index.js | 24 +- yarn.lock | 1862 +++++++++++++++++ 18 files changed, 2228 insertions(+), 9 deletions(-) create mode 100644 e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap create mode 100644 e2e/__tests__/resolve_no_file_extensions.test.js create mode 100644 e2e/resolve_no_extensions/__tests__/test.js create mode 100644 e2e/resolve_no_extensions/index.js create mode 100644 e2e/resolve_no_extensions/package.json create mode 100644 e2e/resolve_no_extensions/some-json-file.json create mode 100644 flow-typed/npm/glob_v7.1.x.js create mode 100644 packages/jest-runtime/src/__tests__/__snapshots__/runtime_require_module_no_ext.test.js.snap create mode 100644 packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js create mode 100644 packages/jest-runtime/src/__tests__/test_root/RegularModuleWithWrongExt.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index f57621c8bcfe..74882e2ce6b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - `[jest-haste-map]` [**BREAKING**] Remove support for `@providesModule` ([#6104](https://github.com/facebook/jest/pull/6104)) - `[pretty-format]` Support HTMLCollection and NodeList in DOMCollection plugin ([#7125](https://github.com/facebook/jest/pull/7125)) - `[jest-runtime]` Pass the normalized configuration to script transformers ([#7148](https://github.com/facebook/jest/pull/7148)) +- `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) ### Fixes @@ -37,6 +38,7 @@ - `[jest-cli]` Fix unhandled error when a bad revision is provided to `changedSince` ([#7115](https://github.com/facebook/jest/pull/7115)) - `[jest-config]` Moved dynamically assigned `cwd` from `jest-cli` to default configuration in `jest-config` ([#7146](https://github.com/facebook/jest/pull/7146)) - `[jest-config]` Fix `getMaxWorkers` on termux ([#7154](https://github.com/facebook/jest/pull/7154)) +- `[jest-runtime]` Throw an explicit error if `js` is missing from `moduleFileExtensions` ([#7160](https://github.com/facebook/jest/pull/7160)) ### Chore & Maintenance diff --git a/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap new file mode 100644 index 000000000000..c662c494bf71 --- /dev/null +++ b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap @@ -0,0 +1,38 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`show error message when no js moduleFileExtensions 1`] = ` +"● Validation Error: + + moduleFileExtensions must include 'js': + but instead received: + [\\"jsx\\"] + Please change your configuration to include 'js'. + + Configuration Documentation: + https://jestjs.io/docs/configuration.html + +" +`; + +exports[`show error message with matching files 1`] = ` +"FAIL __tests__/test.js + ● Test suite failed to run + + Cannot find module './some-json-file' from 'index.js' + + However, Jest was able to find: + './some-json-file.json' + + You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js']. + + See https://jestjs.io/docs/en/configuration#modulefileextensions-array-string + + > 1 | module.exports = require('./some-json-file'); + | ^ + 2 | + + at packages/jest-resolve/build/index.js:221:17 + at index.js:1:18 + +" +`; diff --git a/e2e/__tests__/resolve_no_file_extensions.test.js b/e2e/__tests__/resolve_no_file_extensions.test.js new file mode 100644 index 000000000000..2c805ce60034 --- /dev/null +++ b/e2e/__tests__/resolve_no_file_extensions.test.js @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ +'use strict'; + +import path from 'path'; +import runJest from '../runJest'; +import {cleanup, extractSummary, writeFiles} from '../Utils'; + +const DIR = path.resolve(__dirname, '../resolve_no_extensions-no-js'); + +beforeEach(() => cleanup(DIR)); +afterAll(() => cleanup(DIR)); + +test('show error message with matching files', () => { + const {status, stderr} = runJest('resolve_no_extensions'); + const {rest} = extractSummary(stderr); + + expect(status).toBe(1); + expect(rest).toMatchSnapshot(); +}); + +test('show error message when no js moduleFileExtensions', () => { + writeFiles(DIR, { + 'index.jsx': ` + module.exports ={found: true}; + `, + 'package.json': ` + { + "jest": { + "moduleFileExtensions": ["jsx"] + } + } + `, + 'test.jsx': ` + const m = require('../'); + + test('some test', () => { + expect(m.found).toBe(true); + }); + `, + }); + + const {status, stderr} = runJest('resolve_no_extensions-no-js'); + + expect(status).toBe(1); + expect(stderr).toMatchSnapshot(); +}); diff --git a/e2e/resolve_no_extensions/__tests__/test.js b/e2e/resolve_no_extensions/__tests__/test.js new file mode 100644 index 000000000000..8d8a7458f04f --- /dev/null +++ b/e2e/resolve_no_extensions/__tests__/test.js @@ -0,0 +1,5 @@ +const m = require('../'); + +test('some test', () => { + expect(m.found).toBe(true); +}); diff --git a/e2e/resolve_no_extensions/index.js b/e2e/resolve_no_extensions/index.js new file mode 100644 index 000000000000..2b58763ab165 --- /dev/null +++ b/e2e/resolve_no_extensions/index.js @@ -0,0 +1 @@ +module.exports = require('./some-json-file'); diff --git a/e2e/resolve_no_extensions/package.json b/e2e/resolve_no_extensions/package.json new file mode 100644 index 000000000000..5df016092624 --- /dev/null +++ b/e2e/resolve_no_extensions/package.json @@ -0,0 +1,7 @@ +{ + "jest": { + "moduleFileExtensions": [ + "js" + ] + } +} diff --git a/e2e/resolve_no_extensions/some-json-file.json b/e2e/resolve_no_extensions/some-json-file.json new file mode 100644 index 000000000000..83bea4014672 --- /dev/null +++ b/e2e/resolve_no_extensions/some-json-file.json @@ -0,0 +1,3 @@ +{ + "found": true +} diff --git a/flow-typed/npm/glob_v7.1.x.js b/flow-typed/npm/glob_v7.1.x.js new file mode 100644 index 000000000000..b1d523f8ec54 --- /dev/null +++ b/flow-typed/npm/glob_v7.1.x.js @@ -0,0 +1,87 @@ +// flow-typed signature: 7c09aef8ac07163d6ef9e3f50c6bc35c +// flow-typed version: a12a42a747/glob_v7.1.x/flow_>=v0.42.x + +declare module "glob" { + declare type MinimatchOptions = {| + debug?: boolean, + nobrace?: boolean, + noglobstar?: boolean, + dot?: boolean, + noext?: boolean, + nocase?: boolean, + nonull?: boolean, + matchBase?: boolean, + nocomment?: boolean, + nonegate?: boolean, + flipNegate?: boolean + |}; + + declare type Options = {| + ...MinimatchOptions, + cwd?: string, + root?: string, + nomount?: boolean, + mark?: boolean, + nosort?: boolean, + stat?: boolean, + silent?: boolean, + strict?: boolean, + cache?: { + [path: string]: boolean | "DIR" | "FILE" | $ReadOnlyArray + }, + statCache?: { + [path: string]: boolean | { isDirectory(): boolean } | void + }, + symlinks?: { [path: string]: boolean | void }, + realpathCache?: { [path: string]: string }, + sync?: boolean, + nounique?: boolean, + nodir?: boolean, + ignore?: string | $ReadOnlyArray, + follow?: boolean, + realpath?: boolean, + absolute?: boolean + |}; + + /** + * Called when an error occurs, or matches are found + * err + * matches: filenames found matching the pattern + */ + declare type CallBack = (err: ?Error, matches: Array) => void; + + declare class Glob extends events$EventEmitter { + constructor(pattern: string): this; + constructor(pattern: string, callback: CallBack): this; + constructor(pattern: string, options: Options, callback: CallBack): this; + + minimatch: {}; + options: Options; + aborted: boolean; + cache: { + [path: string]: boolean | "DIR" | "FILE" | $ReadOnlyArray + }; + statCache: { + [path: string]: boolean | { isDirectory(): boolean } | void + }; + symlinks: { [path: string]: boolean | void }; + realpathCache: { [path: string]: string }; + found: Array; + + pause(): void; + resume(): void; + abort(): void; + } + + declare class GlobModule { + Glob: Class; + + (pattern: string, callback: CallBack): void; + (pattern: string, options: Options, callback: CallBack): void; + + hasMagic(pattern: string, options?: Options): boolean; + sync(pattern: string, options?: Options): Array; + } + + declare module.exports: GlobModule; +} diff --git a/packages/jest-cli/src/__tests__/SearchSource.test.js b/packages/jest-cli/src/__tests__/SearchSource.test.js index ee88081a6e77..1e3ea1d2561b 100644 --- a/packages/jest-cli/src/__tests__/SearchSource.test.js +++ b/packages/jest-cli/src/__tests__/SearchSource.test.js @@ -260,7 +260,7 @@ describe('SearchSource', () => { it('finds tests with similar but custom file extensions', () => { const {options: config} = normalize( { - moduleFileExtensions: ['jsx'], + moduleFileExtensions: ['js', 'jsx'], name, rootDir, testMatch, @@ -271,14 +271,17 @@ describe('SearchSource', () => { const relPaths = toPaths(data.tests).map(absPath => path.relative(rootDir, absPath), ); - expect(relPaths).toEqual([path.normalize('__testtests__/test.jsx')]); + expect(relPaths.sort()).toEqual([ + path.normalize('__testtests__/test.js'), + path.normalize('__testtests__/test.jsx'), + ]); }); }); it('finds tests with totally custom foobar file extensions', () => { const {options: config} = normalize( { - moduleFileExtensions: ['foobar'], + moduleFileExtensions: ['js', 'foobar'], name, rootDir, testMatch, @@ -289,7 +292,10 @@ describe('SearchSource', () => { const relPaths = toPaths(data.tests).map(absPath => path.relative(rootDir, absPath), ); - expect(relPaths).toEqual([path.normalize('__testtests__/test.foobar')]); + expect(relPaths.sort()).toEqual([ + path.normalize('__testtests__/test.foobar'), + path.normalize('__testtests__/test.js'), + ]); }); }); diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 9fea83c1b07b..801ab1f0318b 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -1273,3 +1273,23 @@ describe('testPathPattern', () => { expect(options.onlyChanged).toBe(false); }); }); + +describe('moduleFileExtensions', () => { + it('defaults to something useful', () => { + const {options} = normalize({rootDir: '/root'}, {}); + + expect(options.moduleFileExtensions).toEqual(['js', 'json', 'jsx', 'node']); + }); + + it('throws if missing `js`', () => { + expect(() => + normalize( + { + rootDir: '/root/', + moduleFileExtensions: ['json', 'jsx'], + }, + {}, + ), + ).toThrowError("moduleFileExtensions must include 'js'"); + }); +}); diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 8f41c357190f..a7da8a1a41d7 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -36,6 +36,7 @@ import DEFAULT_CONFIG from './Defaults'; import DEPRECATED_CONFIG from './Deprecated'; import setFromArgv from './setFromArgv'; import VALID_CONFIG from './ValidConfig'; + const ERROR = `${BULLET}Validation Error`; const PRESET_EXTENSIONS = ['.json', '.js']; const PRESET_NAME = 'jest-preset'; @@ -548,6 +549,32 @@ export default function normalize(options: InitialOptions, argv: Argv) { case 'testRegex': value = options[key] && replacePathSepForRegex(options[key]); break; + case 'moduleFileExtensions': { + value = options[key]; + + // If it's the wrong type, it can throw at a later time + if (Array.isArray(value) && !value.includes('js')) { + const errorMessage = + ` moduleFileExtensions must include 'js':\n` + + ` but instead received:\n` + + ` ${chalk.bold.red(JSON.stringify(value))}`; + + // If `js` is not included, any dependency Jest itself injects into + // the environment, like jasmine or sourcemap-support, will need to + // `require` its modules with a file extension. This is not plausible + // in the long run, so it's way easier to just fail hard early. + // We might consider throwing if `json` is missing as well, as it's a + // fair assumption from modules that they can do + // `require('some-package/package') without the trailing `.json` as it + // works in Node normally. + throw createConfigError( + errorMessage + + "\n Please change your configuration to include 'js'.", + ); + } + + break; + } case 'automock': case 'bail': case 'browser': @@ -571,7 +598,6 @@ export default function normalize(options: InitialOptions, argv: Argv) { case 'listTests': case 'logHeapUsage': case 'mapCoverage': - case 'moduleFileExtensions': case 'name': case 'noStackTrace': case 'notify': diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 434745966146..5422e2da6ae5 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -14,6 +14,7 @@ "convert-source-map": "^1.4.0", "exit": "^0.1.2", "fast-json-stable-stringify": "^2.0.0", + "glob": "^7.1.3", "graceful-fs": "^4.1.11", "jest-config": "^23.6.0", "jest-haste-map": "^23.6.0", diff --git a/packages/jest-runtime/src/__tests__/__snapshots__/runtime_require_module_no_ext.test.js.snap b/packages/jest-runtime/src/__tests__/__snapshots__/runtime_require_module_no_ext.test.js.snap new file mode 100644 index 000000000000..5ca57a5456cb --- /dev/null +++ b/packages/jest-runtime/src/__tests__/__snapshots__/runtime_require_module_no_ext.test.js.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Runtime requireModule with no extension throws error pointing out file with extension 1`] = ` +"Cannot find module 'RegularModuleWithWrongExt' from 'root.js' + +However, Jest was able to find: + './RegularModuleWithWrongExt.txt' + +You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'json', 'jsx', 'node']. + +See https://jestjs.io/docs/en/configuration#modulefileextensions-array-string" +`; diff --git a/packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js b/packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js new file mode 100644 index 000000000000..d3fb3a09e8a3 --- /dev/null +++ b/packages/jest-runtime/src/__tests__/runtime_require_module_no_ext.test.js @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +'use strict'; + +let createRuntime; + +describe('Runtime requireModule with no extension', () => { + beforeEach(() => { + createRuntime = require('createRuntime'); + }); + + it('throws error pointing out file with extension', async () => { + const runtime = await createRuntime(__filename); + + expect(() => + runtime.requireModuleOrMock( + runtime.__mockRootPath, + 'RegularModuleWithWrongExt', + ), + ).toThrowErrorMatchingSnapshot(); + }); +}); diff --git a/packages/jest-runtime/src/__tests__/test_root/RegularModuleWithWrongExt.txt b/packages/jest-runtime/src/__tests__/test_root/RegularModuleWithWrongExt.txt new file mode 100644 index 000000000000..7a1c6130c652 --- /dev/null +++ b/packages/jest-runtime/src/__tests__/test_root/RegularModuleWithWrongExt.txt @@ -0,0 +1 @@ +some file diff --git a/packages/jest-runtime/src/helpers.js b/packages/jest-runtime/src/helpers.js index cd213528093c..1cca4c6326c7 100644 --- a/packages/jest-runtime/src/helpers.js +++ b/packages/jest-runtime/src/helpers.js @@ -1,5 +1,12 @@ // @flow + +import type {Path} from 'types/Config'; + +import path from 'path'; import chalk from 'chalk'; +import slash from 'slash'; +import glob from 'glob'; + const DOT = ' \u2022 '; export const enhanceUnexpectedTokenMessage = (e: Error) => { @@ -30,3 +37,47 @@ ${chalk.bold.red('Details:')} return e; }; + +export const findSiblingsWithFileExtension = ( + moduleFileExtensions: Array, + from: Path, + moduleName: string, +): string => { + if (!path.isAbsolute(moduleName) && path.extname(moduleName) === '') { + const dirname = path.dirname(from); + const pathToModule = path.resolve(dirname, moduleName); + + try { + const slashedDirname = slash(dirname); + + const matches = glob + .sync(`${pathToModule}.*`) + .map(match => slash(match)) + .map(match => { + const relativePath = path.posix.relative(slashedDirname, match); + + return path.posix.dirname(match) === slashedDirname + ? `./${relativePath}` + : relativePath; + }) + .map(match => `\t'${match}'`) + .join('\n'); + + if (matches) { + const foundMessage = `\n\nHowever, Jest was able to find:\n${matches}`; + + const mappedModuleFileExtensions = moduleFileExtensions + .map(ext => `'${ext}'`) + .join(', '); + + return ( + foundMessage + + "\n\nYou might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently " + + `[${mappedModuleFileExtensions}].\n\nSee https://jestjs.io/docs/en/configuration#modulefileextensions-array-string` + ); + } + } catch (ignored) {} + } + + return ''; +}; diff --git a/packages/jest-runtime/src/index.js b/packages/jest-runtime/src/index.js index bea9ef463f98..b73b64287c71 100644 --- a/packages/jest-runtime/src/index.js +++ b/packages/jest-runtime/src/index.js @@ -30,6 +30,7 @@ import ScriptTransformer from './script_transformer'; import shouldInstrument from './should_instrument'; import {run as cliRun} from './cli'; import {options as cliOptions} from './cli/args'; +import {findSiblingsWithFileExtension} from './helpers'; type Module = {| children: Array, @@ -412,10 +413,25 @@ class Runtime { } requireModuleOrMock(from: Path, moduleName: string) { - if (this._shouldMock(from, moduleName)) { - return this.requireMock(from, moduleName); - } else { - return this.requireModule(from, moduleName); + try { + if (this._shouldMock(from, moduleName)) { + return this.requireMock(from, moduleName); + } else { + return this.requireModule(from, moduleName); + } + } catch (e) { + if (e.code === 'MODULE_NOT_FOUND') { + const appendedMessage = findSiblingsWithFileExtension( + this._config.moduleFileExtensions, + from, + moduleName, + ); + + if (appendedMessage) { + e.message += appendedMessage; + } + } + throw e; } } diff --git a/yarn.lock b/yarn.lock index ac1c80f06ea9..ebd0dd37655e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,18 +5,21 @@ "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" + integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== dependencies: "@babel/highlight" "7.0.0-beta.44" "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== dependencies: "@babel/highlight" "^7.0.0" "@babel/core@*": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.0.tgz#08958f1371179f62df6966d8a614003d11faeb04" + integrity sha512-9EWmD0cQAbcXSc+31RIoYgEHx3KQ2CCSMDBhnXrShWvo45TMw+3/55KVxlhkG53kw9tl87DqINgHDgFVhZJV/Q== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.0.0" @@ -36,6 +39,7 @@ "@babel/core@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" + integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.1.2" @@ -55,6 +59,7 @@ "@babel/generator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" + integrity sha512-/BM2vupkpbZXq22l1ALO7MqXJZH2k8bKVv8Y+pABFnzWdztDB/ZLveP5At21vLz5c2YtSE6p7j2FZEsqafMz5Q== dependencies: "@babel/types" "^7.0.0" jsesc "^2.5.1" @@ -65,6 +70,7 @@ "@babel/generator@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630" + integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig== dependencies: "@babel/types" "^7.1.2" jsesc "^2.5.1" @@ -75,12 +81,14 @@ "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== dependencies: "@babel/types" "^7.0.0" "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== dependencies: "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" @@ -88,6 +96,7 @@ "@babel/helper-builder-react-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" + integrity sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw== dependencies: "@babel/types" "^7.0.0" esutils "^2.0.0" @@ -95,6 +104,7 @@ "@babel/helper-call-delegate@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" + integrity sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ== dependencies: "@babel/helper-hoist-variables" "^7.0.0" "@babel/traverse" "^7.1.0" @@ -103,6 +113,7 @@ "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" + integrity sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/types" "^7.0.0" @@ -111,6 +122,7 @@ "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== dependencies: "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" @@ -118,6 +130,7 @@ "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== dependencies: "@babel/helper-get-function-arity" "^7.0.0" "@babel/template" "^7.1.0" @@ -126,30 +139,35 @@ "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== dependencies: "@babel/types" "^7.0.0" "@babel/helper-hoist-variables@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + integrity sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w== dependencies: "@babel/types" "^7.0.0" "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + integrity sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg== dependencies: "@babel/types" "^7.0.0" "@babel/helper-module-imports@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== dependencies: "@babel/types" "^7.0.0" "@babel/helper-module-transforms@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz#470d4f9676d9fad50b324cdcce5fbabbc3da5787" + integrity sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" @@ -161,22 +179,26 @@ "@babel/helper-optimise-call-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== dependencies: "@babel/types" "^7.0.0" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== "@babel/helper-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + integrity sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg== dependencies: lodash "^4.17.10" "@babel/helper-remap-async-to-generator@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-wrap-function" "^7.1.0" @@ -187,6 +209,7 @@ "@babel/helper-replace-supers@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" + integrity sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ== dependencies: "@babel/helper-member-expression-to-functions" "^7.0.0" "@babel/helper-optimise-call-expression" "^7.0.0" @@ -196,6 +219,7 @@ "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== dependencies: "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" @@ -203,12 +227,14 @@ "@babel/helper-split-export-declaration@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== dependencies: "@babel/types" "^7.0.0" "@babel/helper-wrap-function@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" + integrity sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/template" "^7.1.0" @@ -218,6 +244,7 @@ "@babel/helpers@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.0.tgz#429bf0f0020be56a4242883432084e3d70a8a141" + integrity sha512-V1jXUTNdTpBn37wqqN73U+eBpzlLHmxA4aDaghJBggmzly/FpIJMHXse9lgdzQQT4gs5jZ5NmYxOL8G3ROc29g== dependencies: "@babel/template" "^7.1.0" "@babel/traverse" "^7.1.0" @@ -226,6 +253,7 @@ "@babel/helpers@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" + integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== dependencies: "@babel/template" "^7.1.2" "@babel/traverse" "^7.1.0" @@ -234,6 +262,7 @@ "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" + integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -242,6 +271,7 @@ "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -250,24 +280,29 @@ "@babel/parser@^7.0.0", "@babel/parser@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.0.tgz#a7cd42cb3c12aec52e24375189a47b39759b783e" + integrity sha512-SmjnXCuPAlai75AFtzv+KCBcJ3sDDWbIn+WytKw1k+wAtEy6phqI2RqKh/zAnw53i1NR8su3Ep/UoqaKcimuLg== "@babel/parser@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409" + integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ== "@babel/plugin-check-constants@^7.0.0-beta.38": version "7.0.0-beta.38" resolved "https://registry.yarnpkg.com/@babel/plugin-check-constants/-/plugin-check-constants-7.0.0-beta.38.tgz#bbda6306d45a4f097ccb416c0b52d6503f6502cf" + integrity sha512-MjdGn/2sMLu0fnNFbkILut0OsegzRTeCOJ/uGHH88TwTXPzxONx2cTVJ36i3cTQXHMiIOUT3hX6HqzWM99Q6vA== "@babel/plugin-external-helpers@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0.tgz#61ee7ba5dba27d7cad72a13d46bec23c060b762e" + integrity sha512-tZKTMdhZvTy0KCEX5EGQQm1RHr7jUa36q/yax1baEA0yZapVYmu10yW7LTqijITgSq416gPVjrcexiA6y4pJlA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz#41c1a702e10081456e23a7b74d891922dd1bb6ce" + integrity sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" @@ -276,6 +311,7 @@ "@babel/plugin-proposal-class-properties@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.1.0.tgz#9af01856b1241db60ec8838d84691aa0bd1e8df4" + integrity sha512-/PCJWN+CKt5v1xcGn4vnuu13QDoV+P7NcICP44BoonAJoPSGwVkgrXihFIQGiEjjPlUDBIw1cM7wYFLARS2/hw== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.0.0" @@ -287,6 +323,7 @@ "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz#a057bbfd4649facfe39f33a537e18554bdd2b5da" + integrity sha512-cWhkx6SyjZ4caFOanoPmDNgQCuYYTmou4QXy886JsyLTw/vhWQbop2gLKsWyyswrJkKTB7fSNxVYbP/oEsoySA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-export-default-from" "^7.0.0" @@ -294,6 +331,7 @@ "@babel/plugin-proposal-json-strings@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" + integrity sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.0.0" @@ -301,6 +339,7 @@ "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz#b72ec31adf612d062dc0348316246127a451e45f" + integrity sha512-QIN3UFo1ul4ruAsjIqK43PeXedo1qY74zeGrODJl1KfCGeMc6qJC4rb5Ylml/smzxibqsDeVZGH+TmWHCldRQQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" @@ -308,6 +347,7 @@ "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" + integrity sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" @@ -315,6 +355,7 @@ "@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" + integrity sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" @@ -322,6 +363,7 @@ "@babel/plugin-proposal-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz#3d344d4152253379b8758e7d041148e8787c4a9d" + integrity sha512-7x8HLa71OzNiofbQUVakS0Kmg++6a+cXNfS7QKHbbv03SuSaumJyaWsfNgw+T7aqrJlqurYpZqrkPgXu0iZK0w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" @@ -329,6 +371,7 @@ "@babel/plugin-proposal-unicode-property-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" + integrity sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" @@ -337,84 +380,98 @@ "@babel/plugin-syntax-async-generators@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" + integrity sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-class-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634" + integrity sha512-cR12g0Qzn4sgkjrbrzWy2GE7m9vMl/sFkqZ3gIpAQdrvPDnLM8180i+ANDFIXfjHo9aqp0ccJlQ0QNZcFUbf9w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-dynamic-import@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0.tgz#6dfb7d8b6c3be14ce952962f658f3b7eb54c33ee" + integrity sha512-Gt9xNyRrCHCiyX/ZxDGOcBnlJl0I3IWicpZRC4CdC0P5a/I07Ya2OAMEBU+J7GmRFVmIetqEYRko6QYRuKOESw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz#084b639bce3d42f3c5bf3f68ccb42220bb2d729d" + integrity sha512-HNnjg/fFFbnuLAqr/Ocp1Y3GB4AjmXcu1xxn3ql3bS2kGrB/qi+Povshb8i3hOkE5jNozzh8r/0/lq1w8oOWbQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-flow@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" + integrity sha512-zGcuZWiWWDa5qTZ6iAnpG0fnX/GOu49pGR5PFvkQ9GmKNaSphXQnlNXh/LG20sqWtNrx/eB6krzfEzcwvUyeFA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" + integrity sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" + integrity sha512-PdmL2AoPsCLWxhIr3kG2+F9v4WH06Q3z+NoGVpQgnUNGcagXHq5sB3OXxkSahKq9TLdNMN/AJzFYSOo8UKDMHg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz#b60931d5a15da82625fff6657c39419969598743" + integrity sha512-oAJmMsAvTSIk9y0sZdU2S/nY44PEUuHN7EzNDMgbuR4e/OwyfR9lSmoBJBZ2lslFZIqhksrTt4i+av7uKfNYDw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" + integrity sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" + integrity sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz#1e6ecba124310b5d3a8fc1e00d50b1c4c2e05e68" + integrity sha512-QXedQsZf8yua1nNrXSePT0TsGSQH9A1iK08m9dhCMdZeJaaxYcQfXdgHWVV6Cp7WE/afPVvSKIsAHK5wP+yxDA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.0.0.tgz#90f4fe0a741ae9c0dcdc3017717c05a0cbbd5158" + integrity sha512-5fxmdqiAQVQTIS+KSvYeZuTt91wKtBTYi6JlIkvbQ6hmO+9fZE81ezxmMiFMIsxE7CdRSgzn7nQ1BChcvK9OpA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-arrow-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" + integrity sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" + integrity sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -423,12 +480,14 @@ "@babel/plugin-transform-block-scoped-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" + integrity sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-block-scoping@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" + integrity sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" @@ -436,6 +495,7 @@ "@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" + integrity sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-define-map" "^7.1.0" @@ -449,18 +509,21 @@ "@babel/plugin-transform-computed-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" + integrity sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-destructuring@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a" + integrity sha512-Fr2GtF8YJSXGTyFPakPFB4ODaEKGU04bPsAllAIabwoXdFrPxL0LVXQX5dQWoxOjjgozarJcC9eWGsj0fD6Zsg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-dotall-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" + integrity sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" @@ -469,12 +532,14 @@ "@babel/plugin-transform-duplicate-keys@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" + integrity sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" + integrity sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -482,6 +547,7 @@ "@babel/plugin-transform-flow-strip-types@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01" + integrity sha512-WhXUNb4It5a19RsgKKbQPrjmy4yWOY1KynpEbNw7bnd1QTcrT/EIl3MJvnGgpgvrKyKbqX7nUNOJfkpLOnoDKA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-flow" "^7.0.0" @@ -489,12 +555,14 @@ "@babel/plugin-transform-for-of@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" + integrity sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" + integrity sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -502,18 +570,21 @@ "@babel/plugin-transform-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" + integrity sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-member-expression-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.0.0.tgz#96a265bf61a9ed6f75c39db0c30d41ef7aabf072" + integrity sha512-kgAGWcjVdflNPSaRb9rDPdGJ9/gF80VPmxx80gdKz6NSofHvxA2LofECQ+7GrDVzzH8zBJzTn1xlV4xnmWj/nw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-modules-amd@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz#f9e0a7072c12e296079b5a59f408ff5b97bf86a8" + integrity sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -521,6 +592,7 @@ "@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" + integrity sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -529,6 +601,7 @@ "@babel/plugin-transform-modules-systemjs@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" + integrity sha512-8EDKMAsitLkiF/D4Zhe9CHEE2XLh4bfLbb9/Zf3FgXYQOZyZYyg7EAel/aT2A7bHv62jwHf09q2KU/oEexr83g== dependencies: "@babel/helper-hoist-variables" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -536,6 +609,7 @@ "@babel/plugin-transform-modules-umd@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz#a29a7d85d6f28c3561c33964442257cc6a21f2a8" + integrity sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig== dependencies: "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -543,18 +617,21 @@ "@babel/plugin-transform-new-target@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" + integrity sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-object-assign@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0.tgz#fca6d7500d9675c42868b8f3882979201b9a5ad8" + integrity sha512-Dag8mxx7/03oj8F8PkNso8GEMhwGfeT0TL6KfMsa9Brjx4IpwZVl3WBvEmYks8BMhPmrvM5NQ/tjaMbwEj5ijA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz#b1ae194a054b826d8d4ba7ca91486d4ada0f91bb" + integrity sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" @@ -562,6 +639,7 @@ "@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" + integrity sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw== dependencies: "@babel/helper-call-delegate" "^7.1.0" "@babel/helper-get-function-arity" "^7.0.0" @@ -570,18 +648,21 @@ "@babel/plugin-transform-property-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.0.0.tgz#0b95a91dbd1f0be5b5a99ed86571ef5b5ae77009" + integrity sha512-7HK6/jB4MLpwQUJQ3diaX0pbCRcoL9asJscQfU3D1HpDwYdrH6yAUKleUNFHFyGNYBI9UeJrS2Jpx2JhtPKu5g== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-react-display-name@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" + integrity sha512-BX8xKuQTO0HzINxT6j/GiCwoJB0AOMs0HmLbEnAvcte8U8rSkNa/eSCAY+l1OA4JnCVq2jw2p6U8QQryy2fTPg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-react-jsx-source@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c" + integrity sha512-OSeEpFJEH5dw/TtxTg4nijl4nHBbhqbKL94Xo/Y17WKIf2qJWeIk/QeXACF19lG1vMezkxqruwnTjVizaW7u7w== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-jsx" "^7.0.0" @@ -589,6 +670,7 @@ "@babel/plugin-transform-react-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" + integrity sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ== dependencies: "@babel/helper-builder-react-jsx" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -597,12 +679,14 @@ "@babel/plugin-transform-regenerator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" + integrity sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw== dependencies: regenerator-transform "^0.13.3" "@babel/plugin-transform-runtime@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz#9f76920d42551bb577e2dc594df229b5f7624b63" + integrity sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -612,18 +696,21 @@ "@babel/plugin-transform-shorthand-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" + integrity sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" + integrity sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-sticky-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" + integrity sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" @@ -631,6 +718,7 @@ "@babel/plugin-transform-template-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" + integrity sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg== dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -638,12 +726,14 @@ "@babel/plugin-transform-typeof-symbol@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" + integrity sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.1.0.tgz#81e7b4be90e7317cbd04bf1163ebf06b2adee60b" + integrity sha512-TOTtVeT+fekAesiCHnPz+PSkYSdOSLyLn42DI45nxg6iCdlQY6LIj/tYqpMB0y+YicoTUiYiXqF8rG6SKfhw6Q== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.0.0" @@ -651,6 +741,7 @@ "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" + integrity sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" @@ -659,6 +750,7 @@ "@babel/preset-env@*": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11" + integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -705,6 +797,7 @@ "@babel/register@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" + integrity sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g== dependencies: core-js "^2.5.7" find-cache-dir "^1.0.0" @@ -717,12 +810,14 @@ "@babel/runtime@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.2.tgz#81c89935f4647706fc54541145e6b4ecfef4b8e3" + integrity sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg== dependencies: regenerator-runtime "^0.12.0" "@babel/template@^7.0.0", "@babel/template@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.1.2" @@ -731,6 +826,7 @@ "@babel/template@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.0.tgz#58cc9572e1bfe24fe1537fdf99d839d53e517e22" + integrity sha512-yZ948B/pJrwWGY6VxG6XRFsVTee3IQ7bihq9zFpM00Vydu6z5Xwg0C3J644kxI9WOTzd+62xcIsQ+AT1MGhqhA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.1.0" @@ -739,6 +835,7 @@ "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2" + integrity sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/generator" "^7.0.0" @@ -753,6 +850,7 @@ "@babel/types@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" + integrity sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q== dependencies: esutils "^2.0.2" lodash "^4.17.10" @@ -761,6 +859,7 @@ "@babel/types@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0" + integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg== dependencies: esutils "^2.0.2" lodash "^4.17.10" @@ -769,6 +868,7 @@ "@lerna/add@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.3.2.tgz#767a879ecb117be06414e7e76d4d93bb9934fa57" + integrity sha512-nKRRRKb4wt/GAywi8P++NY1TUiyhMs2g2KHSb41I4/qiCFQnTj2zkeshPyNmtBGjKzFXnOqrmc/8Wa2vmHHZVg== dependencies: "@lerna/bootstrap" "^3.3.2" "@lerna/command" "^3.3.0" @@ -784,6 +884,7 @@ "@lerna/batch-packages@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.1.2.tgz#74b5312a01a8916204cbc71237ffbe93144b99df" + integrity sha512-HAkpptrYeUVlBYbLScXgeCgk6BsNVXxDd53HVWgzzTWpXV4MHpbpeKrByyt7viXlNhW0w73jJbipb/QlFsHIhQ== dependencies: "@lerna/package-graph" "^3.1.2" "@lerna/validation-error" "^3.0.0" @@ -792,6 +893,7 @@ "@lerna/bootstrap@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.3.2.tgz#01e894295dea89dcc0c62ee188f49f78873e08c9" + integrity sha512-f0/FZ6iCXHNpHoUiM3wfmiJebHetrquP9mdNT7t//2iTGm1nz8iuKSLhfu9APazDXtqo3aDFx7JvuYKMg+GiXQ== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/command" "^3.3.0" @@ -820,6 +922,7 @@ "@lerna/changed@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.3.2.tgz#679c9fd353a82d00e2a27847c79f061d5abdea67" + integrity sha512-wLH6RzYPQAryrsJakc9I3k0aFWE/cJyWoUD8dQy186jxwtLgeQdVc0+NegNyab7MIPi7Hsv9A3hx6lM1rPH94A== dependencies: "@lerna/collect-updates" "^3.3.2" "@lerna/command" "^3.3.0" @@ -830,6 +933,7 @@ "@lerna/check-working-tree@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.3.0.tgz#2118f301f28ccb530812e5b27a341b1e6b3c84e2" + integrity sha512-oeEP1dNhiiKUaO0pmcIi73YXJpaD0n5JczNctvVNZ8fGZmrALZtEnmC28o6Z7JgQaqq5nd2kO7xbnjoitrC51g== dependencies: "@lerna/describe-ref" "^3.3.0" "@lerna/validation-error" "^3.0.0" @@ -837,6 +941,7 @@ "@lerna/child-process@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.3.0.tgz#71184a763105b6c8ece27f43f166498d90fe680f" + integrity sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g== dependencies: chalk "^2.3.1" execa "^1.0.0" @@ -845,6 +950,7 @@ "@lerna/clean@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.3.2.tgz#9a7e8a1e400e580de260fa124945b2939a025069" + integrity sha512-mvqusgSp2ou5SGqQgTEoTvGJpGfH4+L6XSeN+Ims+eNFGXuMazmKCf+rz2PZBMFufaHJ/Os+JF0vPCcWI1Fzqg== dependencies: "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" @@ -857,6 +963,7 @@ "@lerna/cli@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.2.0.tgz#3ed25bcbc0b8f0878bc6a102ee0296f01476cfdf" + integrity sha512-JdbLyTxHqxUlrkI+Ke+ltXbtyA+MPu9zR6kg/n8Fl6uaez/2fZWtReXzYi8MgLxfUFa7+1OHWJv4eAMZlByJ+Q== dependencies: "@lerna/global-options" "^3.1.3" dedent "^0.7.0" @@ -866,6 +973,7 @@ "@lerna/collect-updates@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.3.2.tgz#54df5ce59ca05e8aa04ff8a9299f89cc253a9304" + integrity sha512-9WyBJI2S5sYgEZEScu525Lbi6nknNrdBKop35sCDIC9y6AIGvH6Dr5tkTd+Kg3n1dE+kHwW/xjERkx3+h7th3w== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/describe-ref" "^3.3.0" @@ -876,6 +984,7 @@ "@lerna/command@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.3.0.tgz#e81c4716a676b02dbe9d3f548d5f45b4ba32c25a" + integrity sha512-NTOkLEKlWcBLHSvUr9tzVpV7RJ4GROLeOuZ6RfztGOW/31JPSwVVBD2kPifEXNZunldOx5GVWukR+7+NpAWhsg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/package-graph" "^3.1.2" @@ -891,6 +1000,7 @@ "@lerna/conventional-commits@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.3.0.tgz#68302b6ca58b3ab7e91807664deeda2eac025ab0" + integrity sha512-nUFardc5G4jG5LI/Jlw0kblzlRLJ08ut6uJjHXTnUE/QJuKYaqBZm6goGG8OSxp/WltklndkQUOtThyZpefviA== dependencies: "@lerna/validation-error" "^3.0.0" conventional-changelog-angular "^1.6.6" @@ -906,6 +1016,7 @@ "@lerna/create-symlink@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.3.0.tgz#91de00fd576018ba4251f0c6a5b4b7f768f22a82" + integrity sha512-0lb88Nnq1c/GG+fwybuReOnw3+ah4dB81PuWwWwuqUNPE0n50qUf/M/7FfSb5JEh/93fcdbZI0La8t3iysNW1w== dependencies: cmd-shim "^2.0.2" fs-extra "^7.0.0" @@ -914,6 +1025,7 @@ "@lerna/create@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.3.1.tgz#cfd7e0cb30d1f45133691165e103d26318d90ebf" + integrity sha512-4VASkTLvN66euTcWMPN2vIzEoP07hgutx7V70CXSOc+DiWV8S22z0PjXATi2yli83TC/Qj4gHYtU2futQrdY1A== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -935,6 +1047,7 @@ "@lerna/describe-ref@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.3.0.tgz#d373adb530d5428ab91e303ccbfcf51a98374a3a" + integrity sha512-4t7M4OupnYMSPNLrLUau8qkS+dgLEi4w+DkRkV0+A+KNYga1W0jVgNLPIIsxta7OHfodPkCNAqZCzNCw/dmAwA== dependencies: "@lerna/child-process" "^3.3.0" npmlog "^4.1.2" @@ -942,6 +1055,7 @@ "@lerna/diff@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.3.0.tgz#c8130a5f508b47fad5fec81404498bc3acdf9cb5" + integrity sha512-sIoMjsm3NVxvmt6ofx8Uu/2fxgldQqLl0zmC9X1xW00j831o5hBffx1EoKj9CnmaEvoSP6j/KFjxy2RWjebCIg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -951,6 +1065,7 @@ "@lerna/exec@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.3.2.tgz#95ecaca617fd85abdb91e9a378ed06ec1763d665" + integrity sha512-mN6vGxNir7JOGvWLwKr3DW3LNy1ecCo2ziZj5rO9Mw5Rew3carUu1XLmhF/4judtsvXViUY+rvGIcqHe0vvb+w== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/child-process" "^3.3.0" @@ -962,6 +1077,7 @@ "@lerna/filter-options@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.3.2.tgz#ac90702b7876ff4980dcdeaeac049c433dd01773" + integrity sha512-0WHqdDgAnt5WKoByi1q+lFw8HWt5tEKP2DnLlGqWv3YFwVF5DsPRlO7xbzjY9sJgvyJtZcnkMtccdBPFhGGyIQ== dependencies: "@lerna/collect-updates" "^3.3.2" "@lerna/filter-packages" "^3.0.0" @@ -970,6 +1086,7 @@ "@lerna/filter-packages@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f" + integrity sha512-zwbY1J4uRjWRZ/FgYbtVkq7I3Nduwsg2V2HwLKSzwV2vPglfGqgovYOVkND6/xqe2BHwDX4IyA2+e7OJmLaLSA== dependencies: "@lerna/validation-error" "^3.0.0" multimatch "^2.1.0" @@ -978,16 +1095,19 @@ "@lerna/get-npm-exec-opts@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb" + integrity sha512-arcYUm+4xS8J3Palhl+5rRJXnZnFHsLFKHBxznkPIxjwGQeAEw7df38uHdVjEQ+HNeFmHnBgSqfbxl1VIw5DHg== dependencies: npmlog "^4.1.2" "@lerna/global-options@^3.1.3": version "3.1.3" resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.1.3.tgz#cf85e24655a91d04d4efc9a80c1f83fc768d08ae" + integrity sha512-LVeZU/Zgc0XkHdGMRYn+EmHfDmmYNwYRv3ta59iCVFXLVp7FRFWF7oB1ss/WRa9x/pYU0o6L8as/5DomLUGASA== "@lerna/has-npm-version@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz#8a73c2c437a0e1e68a19ccbd0dd3c014d4d39135" + integrity sha512-GX7omRep1eBRZHgjZLRw3MpBJSdA5gPZFz95P7rxhpvsiG384Tdrr/cKFMhm0A09yq27Tk/nuYTaZIj7HsVE6g== dependencies: "@lerna/child-process" "^3.3.0" semver "^5.5.0" @@ -995,6 +1115,7 @@ "@lerna/import@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.3.1.tgz#deca8c93c9cc03c5844b975c6da9937dd7530440" + integrity sha512-2OzTQDkYKbBPpyP2iOI1sWfcvMjNLjjHjmREq/uOWJaSIk5J3Ukt71OPpcOHh4V2CBOlXidCcO+Hyb4FVIy8fw== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -1007,6 +1128,7 @@ "@lerna/init@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.3.0.tgz#998f3497da3d891867c593b808b6db4b8fc4ccb9" + integrity sha512-HvgRLkIG6nDIeAO6ix5sUVIVV+W9UMk2rSSmFT66CDOefRi7S028amiyYnFUK1QkIAaUbVUyOnYaErtbJwICuw== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/command" "^3.3.0" @@ -1017,6 +1139,7 @@ "@lerna/link@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.3.0.tgz#c0c05ff52d0f0c659fcf221627edfcd58e477a5c" + integrity sha512-8CeXzGL7okrsVXsy2sHXI2KuBaczw3cblAnA2+FJPUqSKMPNbUTRzeU3bOlCjYtK0LbxC4ngENJTL3jJ8RaYQQ== dependencies: "@lerna/command" "^3.3.0" "@lerna/package-graph" "^3.1.2" @@ -1027,6 +1150,7 @@ "@lerna/list@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.3.2.tgz#1412b3cce2a83b1baa4ff6fb962d50b46c28ec98" + integrity sha512-XXEVy7w+i/xx8NeJmGirw4upEoEF9OfD6XPLjISNQc24VgQV+frXdVJ02QcP7Y/PkY1rdIVrOjvo3ipKVLUxaQ== dependencies: "@lerna/command" "^3.3.0" "@lerna/filter-options" "^3.3.2" @@ -1036,6 +1160,7 @@ "@lerna/listable@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199" + integrity sha512-HX/9hyx1HLg2kpiKXIUc1EimlkK1T58aKQ7ovO7rQdTx9ForpefoMzyLnHE1n4XrUtEszcSWJIICJ/F898M6Ag== dependencies: chalk "^2.3.1" columnify "^1.5.4" @@ -1043,6 +1168,7 @@ "@lerna/log-packed@^3.0.4": version "3.0.4" resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.4.tgz#6d1f6ce5ca68b9971f2a27f0ecf3c50684be174a" + integrity sha512-vVQHgMagE2wnbxhNY9nFkdu+Cx2TsyWalkJfkxbNzmo6gOCrDsxCBDj9vTEV8Q+4aWx0C0Bsc0sB2Eb8y/+ofA== dependencies: byte-size "^4.0.3" columnify "^1.5.4" @@ -1052,6 +1178,7 @@ "@lerna/npm-conf@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.0.0.tgz#7a4b8304a0ecd1e366208f656bd3d7f4dcb3b5e7" + integrity sha512-xXG7qt349t+xzaHTQELmIDjbq8Q49HOMR8Nx/gTDBkMl02Fno91LXFnA4A7ErPiyUSGqNSfLw+zgij0hgpeN7w== dependencies: config-chain "^1.1.11" pify "^3.0.0" @@ -1059,6 +1186,7 @@ "@lerna/npm-dist-tag@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz#e1c5ab67674216d901266a16846b21cc81ff6afd" + integrity sha512-EtZJXzh3w5tqXEev+EBBPrWKWWn0WgJfxm4FihfS9VgyaAW8udIVZHGkIQ3f+tBtupcAzA9Q8cQNUkGF2efwmA== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -1067,6 +1195,7 @@ "@lerna/npm-install@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.3.0.tgz#16d00ffd668d11b2386b3ac68bdac2cf8320e533" + integrity sha512-WoVvKdS8ltROTGSNQwo6NDq0YKnjwhvTG4li1okcN/eHKOS3tL9bxbgPx7No0wOq5DKBpdeS9KhAfee6LFAZ5g== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -1079,6 +1208,7 @@ "@lerna/npm-publish@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.3.1.tgz#30384665d7ee387343332ece62ca231207bbabea" + integrity sha512-bVTlWIcBL6Zpyzqvr9C7rxXYcoPw+l7IPz5eqQDNREj1R39Wj18OWB2KTJq8l7LIX7Wf4C2A1uT5hJaEf9BuvA== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -1091,6 +1221,7 @@ "@lerna/npm-run-script@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz#3c79601c27c67121155b20e039be53130217db72" + integrity sha512-YqDguWZzp4jIomaE4aWMUP7MIAJAFvRAf6ziQLpqwoQskfWLqK5mW0CcszT1oLjhfb3cY3MMfSTFaqwbdKmICg== dependencies: "@lerna/child-process" "^3.3.0" "@lerna/get-npm-exec-opts" "^3.0.0" @@ -1099,12 +1230,14 @@ "@lerna/output@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35" + integrity sha512-EFxnSbO0zDEVKkTKpoCUAFcZjc3gn3DwPlyTDxbeqPU7neCfxP4rA4+0a6pcOfTlRS5kLBRMx79F2TRCaMM3DA== dependencies: npmlog "^4.1.2" "@lerna/package-graph@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.1.2.tgz#b70298a3a8c82e12090da33233bf242223a38f20" + integrity sha512-9wIWb49I1IJmyjPdEVZQ13IAi9biGfH/OZHOC04U2zXGA0GLiY+B3CAx6FQvqkZ8xEGfqzmXnv3LvZ0bQfc1aQ== dependencies: "@lerna/validation-error" "^3.0.0" npm-package-arg "^6.0.0" @@ -1113,6 +1246,7 @@ "@lerna/package@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5" + integrity sha512-djzEJxzn212wS8d9znBnlXkeRlPL7GqeAYBykAmsuq51YGvaQK67Umh5ejdO0uxexF/4r7yRwgrlRHpQs8Rfqg== dependencies: npm-package-arg "^6.0.0" write-pkg "^3.1.0" @@ -1120,6 +1254,7 @@ "@lerna/project@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0.tgz#4320d2a2b4080cabcf95161d9c48475217d8a545" + integrity sha512-XhDFVfqj79jG2Speggd15RpYaE8uiR25UKcQBDmumbmqvTS7xf2cvl2pq2UTvDafaJ0YwFF3xkxQZeZnFMwdkw== dependencies: "@lerna/package" "^3.0.0" "@lerna/validation-error" "^3.0.0" @@ -1137,6 +1272,7 @@ "@lerna/prompt@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.3.1.tgz#ec53f9034a7a02a671627241682947f65078ab88" + integrity sha512-eJhofrUCUaItMIH6et8kI7YqHfhjWqGZoTsE+40NRCfAraOMWx+pDzfRfeoAl3qeRAH2HhNj1bkYn70FbUOxuQ== dependencies: inquirer "^6.2.0" npmlog "^4.1.2" @@ -1144,6 +1280,7 @@ "@lerna/publish@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.4.0.tgz#d2665f7b16eb3b2b8962c47fcf31fe901ff9a288" + integrity sha512-wcqWDKbkDjyj6F9Mw4/LL2CtpCN61RazNKxYm+fyJ20P2zfcAwLEwxttA6ZWIO8xUiLXkCTFIhwOulHyAPAq3w== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/check-working-tree" "^3.3.0" @@ -1175,6 +1312,7 @@ "@lerna/resolve-symlink@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz#c5d99a60cb17e2ea90b3521a0ba445478d194a44" + integrity sha512-KmoPDcFJ2aOK2inYHbrsiO9SodedUj0L1JDvDgirVNIjMUaQe2Q6Vi4Gh+VCJcyB27JtfHioV9R2NxU72Pk2hg== dependencies: fs-extra "^7.0.0" npmlog "^4.1.2" @@ -1183,6 +1321,7 @@ "@lerna/rimraf-dir@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz#687e9bb3668a9e540e281302a52d9a573860f5db" + integrity sha512-vSqOcZ4kZduiSprbt+y40qziyN3VKYh+ygiCdnbBbsaxpdKB6CfrSMUtrLhVFrqUfBHIZRzHIzgjTdtQex1KLw== dependencies: "@lerna/child-process" "^3.3.0" npmlog "^4.1.2" @@ -1192,6 +1331,7 @@ "@lerna/run-lifecycle@^3.3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.3.1.tgz#13a03f353aab6c1639bf8953f58f0c45585785ac" + integrity sha512-xy4K3amlXk0LjSa5d3VqmrW9SsxMyvI7lw2dHDMb5PqjjcjMQgb6+nFbycwyJMhCP8u7MwQIZ4hFYF9XYbWSzQ== dependencies: "@lerna/npm-conf" "^3.0.0" npm-lifecycle "^2.0.0" @@ -1200,6 +1340,7 @@ "@lerna/run-parallel-batches@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840" + integrity sha512-Mj1ravlXF7AkkewKd9YFq9BtVrsStNrvVLedD/b2wIVbNqcxp8lS68vehXVOzoL/VWNEDotvqCQtyDBilCodGw== dependencies: p-map "^1.2.0" p-map-series "^1.0.0" @@ -1207,6 +1348,7 @@ "@lerna/run@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.3.2.tgz#f521f4a22585c90758f34a584cb1871f8bb2a83e" + integrity sha512-cruwRGZZWnQ5I0M+AqcoT3Xpq2wj3135iVw4n59/Op6dZu50sMFXZNLiTTTZ15k8rTKjydcccJMdPSpTHbH7/A== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/command" "^3.3.0" @@ -1220,6 +1362,7 @@ "@lerna/symlink-binary@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz#99ea570b21baabd61ecab27582eeb1d7b2c5f9cf" + integrity sha512-zRo6CimhvH/VJqCFl9T4IC6syjpWyQIxEfO2sBhrapEcfwjtwbhoGgKwucsvt4rIpFazCw63jQ/AXMT27KUIHg== dependencies: "@lerna/create-symlink" "^3.3.0" "@lerna/package" "^3.0.0" @@ -1230,6 +1373,7 @@ "@lerna/symlink-dependencies@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz#13bcaed3e37986ab01b13498a459c7f609397dc3" + integrity sha512-IRngSNCmuD5uBKVv23tHMvr7Mplti0lKHilFKcvhbvhAfu6m/Vclxhkfs/uLyHzG+DeRpl/9o86SQET3h4XDhg== dependencies: "@lerna/create-symlink" "^3.3.0" "@lerna/resolve-symlink" "^3.3.0" @@ -1242,12 +1386,14 @@ "@lerna/validation-error@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4" + integrity sha512-5wjkd2PszV0kWvH+EOKZJWlHEqCTTKrWsvfHnHhcUaKBe/NagPZFWs+0xlsDPZ3DJt5FNfbAPAnEBQ05zLirFA== dependencies: npmlog "^4.1.2" "@lerna/version@^3.3.2": version "3.3.2" resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.3.2.tgz#b1f4be43f61edf97428efca09dddc47ffd769bb4" + integrity sha512-2MHP6mA1f0t3UdzqPpfgAhsT1L64HOedlJxrQUoHrkou/G25Od4wjmKr9OZ0Oc4CLDbXD/sYEmE/9fZi1GGgKg== dependencies: "@lerna/batch-packages" "^3.1.2" "@lerna/check-working-tree" "^3.3.0" @@ -1274,6 +1420,7 @@ "@lerna/write-log-file@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2" + integrity sha512-SfbPp29lMeEVOb/M16lJwn4nnx5y+TwCdd7Uom9umd7KcZP0NOvpnX0PHehdonl7TyHZ1Xx2maklYuCLbQrd/A== dependencies: npmlog "^4.1.2" write-file-atomic "^2.3.0" @@ -1281,6 +1428,7 @@ "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" @@ -1288,26 +1436,32 @@ "@nodelib/fs.stat@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" + integrity sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw== "@types/cheerio@^0.22.8": version "0.22.9" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.9.tgz#b5990152604c2ada749b7f88cab3476f21f39d7b" + integrity sha512-q6LuBI0t5u04f0Q4/R+cGBqIbZMtJkVvCSF+nTfFBBdQqQvJR/mNHeWjRkszyLl7oyf2rDoKUYMEjTw5AV0hiw== "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/jest@^23.1.1": version "23.3.2" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.2.tgz#07b90f6adf75d42c34230c026a2529e56c249dbb" + integrity sha512-D1xlXHZpDonVX+VJ28XtcD5xlu8ex6Fc4cQNnrm2wJvlQnbec9RedhCrhQr6kRAE9XWHSec+JPuTmqJ9jC0qsA== "@types/node@*": version "10.10.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.10.1.tgz#d5c96ca246a418404914d180b7fdd625ad18eca6" + integrity sha512-nzsx28VwfaIykfzMAG9TB3jxF5Nn+1/WMKnmVZc8TsB+LMIVvwUscVn7PAq+LFaY5ng5u4jp5mRROSswo76PPA== JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e" + integrity sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -1315,24 +1469,29 @@ JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@^1.3.4: abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== absolute-path@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" + integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= abstract-leveldown@~0.12.0, abstract-leveldown@~0.12.1: version "0.12.4" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410" + integrity sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA= dependencies: xtend "~3.0.0" accepts@~1.3.3, accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= dependencies: mime-types "~2.1.18" negotiator "0.6.1" @@ -1340,12 +1499,14 @@ accepts@~1.3.3, accepts@~1.3.4, accepts@~1.3.5: acorn-dynamic-import@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + integrity sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg== dependencies: acorn "^5.0.0" acorn-globals@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" + integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" @@ -1353,12 +1514,14 @@ acorn-globals@^4.1.0: acorn-jsx@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" + integrity sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw== dependencies: acorn "^5.0.3" acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.5.2.tgz#2ca723df19d997b05824b69f6c7fb091fc42c322" + integrity sha512-krFKvw/d1F17AN3XZbybIUzEY4YEPNiGo05AfP3dBlfVKrMHETKpgjpuZkSF8qDNt9UkQcqj7am8yJLseklCMg== dependencies: acorn "^5.7.1" acorn-dynamic-import "^3.0.0" @@ -1367,42 +1530,51 @@ acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2: acorn-walk@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.0.1.tgz#c7827bdbb8e21aa97b609adfa225400d9ae348ba" + integrity sha512-PqVQ8c6a3kyqdsUZlC7nljp3FFuxipBRHKu+7C1h8QygBFlzTaDX5HD383jej3Peed+1aDG8HwkfB1Z1HMNPkw== acorn@^5.0.0, acorn@^5.0.3, acorn@^5.5.3, acorn@^5.6.0, acorn@^5.7.1, acorn@^5.7.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== acorn@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.1.tgz#66e6147e1027704479dc6d9b20d884c572db3cc1" + integrity sha512-SiwgrRuRD2D1R6qjwwoopKcCTkmmIWjy1M15Wv+Nk/7VUsBad4P8GOPft2t6coDZG0TuR5dq9o1v0g8wo7F6+A== address@1.0.3, address@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4" + integrity sha512-Cte/sTY9/XcygXjJ0q58v//SnEQ7ViWExKyJpLJlLqomDbQyMLh6Is4KuWJ/wmxzhiwkGRple7Gqv1zf6Syz5w== dependencies: humanize-ms "^1.2.1" ajv-keywords@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo= ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -1412,6 +1584,7 @@ ajv@^5.3.0: ajv@^6.0.1, ajv@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" + integrity sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -1421,76 +1594,92 @@ ajv@^6.0.1, ajv@^6.5.3: alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= ansi-colors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: ansi-wrap "^0.1.0" ansi-cyan@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= dependencies: ansi-wrap "0.1.0" ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= ansi-escapes@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + integrity sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs= ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw== ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= dependencies: ansi-wrap "0.1.0" ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= dependencies: ansi-wrap "0.1.0" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= ansi@^0.3.0, ansi@~0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" + integrity sha1-DELU+xcWDVqa8eSEus4cZpIsGyE= anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" @@ -1498,6 +1687,7 @@ anymatch@^1.3.0: anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" @@ -1505,26 +1695,31 @@ anymatch@^2.0.0: append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= dependencies: default-require-extensions "^1.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archive-type@^3.0.0, archive-type@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-3.2.0.tgz#9cd9c006957ebe95fadad5bd6098942a813737f6" + integrity sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y= dependencies: file-type "^3.1.0" are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -1532,12 +1727,14 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@~0.1.15: version "0.1.16" resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + integrity sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw= dependencies: underscore "~1.7.0" underscore.string "~2.4.0" @@ -1545,10 +1742,12 @@ argparse@~0.1.15: argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" + integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= aria-query@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: ast-types-flow "0.0.7" commander "^2.11.0" @@ -1556,6 +1755,7 @@ aria-query@^3.0.0: arr-diff@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= dependencies: arr-flatten "^1.0.1" array-slice "^0.2.3" @@ -1563,52 +1763,64 @@ arr-diff@^1.0.1: arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" @@ -1616,36 +1828,44 @@ array-includes@^3.0.3: array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= array-slice@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.0, array-uniq@^1.0.1, array-uniq@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.flat@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" + integrity sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw== dependencies: define-properties "^1.1.2" es-abstract "^1.10.0" @@ -1654,22 +1874,27 @@ array.prototype.flat@^1.2.1: arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= art@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/art/-/art-0.10.3.tgz#b01d84a968ccce6208df55a733838c96caeeaea2" + integrity sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ== asap@^2.0.0, asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -1678,64 +1903,78 @@ asn1.js@^4.0.0: asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" 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" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= dependencies: util "0.10.3" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== async-each-series@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-1.1.0.tgz#f42fd8155d38f21a5b8ea07c28e063ed1700b138" + integrity sha1-9C/YFV048hpbjqB8KOBj7RcAsTg= async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async@^2.1.4, async@^2.4.0, async@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== dependencies: lodash "^4.17.10" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autolinker@~0.15.0: version "0.15.3" resolved "https://registry.yarnpkg.com/autolinker/-/autolinker-0.15.3.tgz#342417d8f2f3461b14cf09088d5edf8791dc9832" + integrity sha1-NCQX2PLzRhsUzwkIjV7fh5HcmDI= autoprefixer@^6.3.1: version "6.7.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= dependencies: browserslist "^1.7.6" caniuse-db "^1.0.30000634" @@ -1747,6 +1986,7 @@ autoprefixer@^6.3.1: autoprefixer@^9.1.5: version "9.1.5" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.1.5.tgz#8675fd8d1c0d43069f3b19a2c316f3524e4f6671" + integrity sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw== dependencies: browserslist "^4.1.0" caniuse-lite "^1.0.30000884" @@ -1758,20 +1998,24 @@ autoprefixer@^9.1.5: aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== axobject-query@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.1.tgz#05dfa705ada8ad9db993fa6896f22d395b0b0a07" + integrity sha1-Bd+nBa2orZ25k/polvItOVsLCgc= dependencies: ast-types-flow "0.0.7" babel-code-frame@6.26.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -1780,10 +2024,12 @@ babel-code-frame@6.26.0, babel-code-frame@^6.26.0: babel-core@7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== babel-core@^6.0.0, babel-core@^6.23.1, babel-core@^6.26.0, babel-core@^6.7.2: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -1808,6 +2054,7 @@ babel-core@^6.0.0, babel-core@^6.23.1, babel-core@^6.26.0, babel-core@^6.7.2: babel-eslint@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" + integrity sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.0.0" @@ -1819,6 +2066,7 @@ babel-eslint@^9.0.0: babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -1832,6 +2080,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -1840,6 +2089,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -1848,6 +2098,7 @@ babel-helper-builder-react-jsx@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -1857,6 +2108,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -1866,6 +2118,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -1874,6 +2127,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -1884,6 +2138,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1891,6 +2146,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1898,6 +2154,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1905,6 +2162,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -1913,6 +2171,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -1923,6 +2182,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -1934,6 +2194,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -1941,24 +2202,28 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0, babel-plugin-check-es2015-constants@^6.5.0, babel-plugin-check-es2015-constants@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= dependencies: babel-runtime "^6.22.0" babel-plugin-external-helpers@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + integrity sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E= dependencies: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== dependencies: babel-plugin-syntax-object-rest-spread "^6.13.0" find-up "^2.1.0" @@ -1968,48 +2233,59 @@ babel-plugin-istanbul@^4.1.6: babel-plugin-react-transform@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz#402f25137b7bb66e9b54ead75557dfbc7ecaaa74" + integrity sha512-4vJGddwPiHAOgshzZdGwYy4zRjjIr5SMY7gkOaCyIASjgpcsyLTlZNuB5rHOFoaTvGlhfo8/g4pobXPyHqm/3w== dependencies: lodash "^4.6.1" babel-plugin-syntax-async-functions@^6.5.0, babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= babel-plugin-syntax-class-properties@^6.5.0, babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.5.0, babel-plugin-syntax-flow@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.5.0, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= babel-plugin-syntax-trailing-function-commas@^6.13.0, babel-plugin-syntax-trailing-function-commas@^6.22.0, babel-plugin-syntax-trailing-function-commas@^6.5.0, babel-plugin-syntax-trailing-function-commas@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" + integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -2018,6 +2294,7 @@ babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async- babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= dependencies: babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" @@ -2027,18 +2304,21 @@ babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-pr babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.5.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.5.0, babel-plugin-transform-es2015-block-scoping@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -2049,6 +2329,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.5.0, babel-plugin-transform-es2015-classes@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -2063,6 +2344,7 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.5.0, babel-plugin-transform-es2015-computed-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2070,12 +2352,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transfor babel-plugin-transform-es2015-destructuring@^6.23.0, babel-plugin-transform-es2015-destructuring@^6.5.0, babel-plugin-transform-es2015-destructuring@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2083,12 +2367,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-plugin-transform-es2015-for-of@^6.23.0, babel-plugin-transform-es2015-for-of@^6.5.0, babel-plugin-transform-es2015-for-of@^6.8.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2097,12 +2383,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es20 babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.5.0, babel-plugin-transform-es2015-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -2111,6 +2399,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1, babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.5.0, babel-plugin-transform-es2015-modules-commonjs@^6.8.0: version "6.26.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -2120,6 +2409,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2128,6 +2418,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -2136,6 +2427,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -2143,6 +2435,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es201 babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.5.0, babel-plugin-transform-es2015-parameters@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -2154,6 +2447,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015- babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1, babel-plugin-transform-es2015-shorthand-properties@^6.5.0, babel-plugin-transform-es2015-shorthand-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2161,12 +2455,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transfo babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.5.0, babel-plugin-transform-es2015-spread@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2175,18 +2471,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.5.0, babel-plugin-transform-es2015-template-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2195,18 +2494,21 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-es3-member-expression-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + integrity sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es3-property-literals@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + integrity sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.5.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -2215,6 +2517,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e babel-plugin-transform-flow-strip-types@^6.18.0, babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.5.0, babel-plugin-transform-flow-strip-types@^6.8.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" @@ -2222,6 +2525,7 @@ babel-plugin-transform-flow-strip-types@^6.18.0, babel-plugin-transform-flow-str babel-plugin-transform-inline-imports-commonjs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-imports-commonjs/-/babel-plugin-transform-inline-imports-commonjs-1.2.0.tgz#20c7d192bafc54c8727386e3387d8ee4ef19e6a5" + integrity sha1-IMfRkrr8VMhyc4bjOH2O5O8Z5qU= dependencies: babel-plugin-transform-strict-mode "^6.8.0" builtin-modules "^1.1.1" @@ -2229,12 +2533,14 @@ babel-plugin-transform-inline-imports-commonjs@^1.2.0: babel-plugin-transform-object-assign@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba" + integrity sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.26.0, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -2242,12 +2548,14 @@ babel-plugin-transform-object-rest-spread@^6.26.0, babel-plugin-transform-object babel-plugin-transform-react-display-name@^6.23.0, babel-plugin-transform-react-display-name@^6.5.0, babel-plugin-transform-react-display-name@^6.8.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -2255,6 +2563,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-transform-react-jsx-source@^6.22.0, babel-plugin-transform-react-jsx-source@^6.5.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -2262,6 +2571,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0, babel-plugin-transform-react-js babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5.0, babel-plugin-transform-react-jsx@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= dependencies: babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" @@ -2270,18 +2580,21 @@ babel-plugin-transform-react-jsx@^6.24.1, babel-plugin-transform-react-jsx@^6.5. babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.5.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-runtime@*, babel-plugin-transform-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-strict-mode@^6.24.1, babel-plugin-transform-strict-mode@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2289,6 +2602,7 @@ babel-plugin-transform-strict-mode@^6.24.1, babel-plugin-transform-strict-mode@^ babel-polyfill@6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + integrity sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0= dependencies: babel-runtime "^6.22.0" core-js "^2.4.0" @@ -2297,6 +2611,7 @@ babel-polyfill@6.23.0: babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" @@ -2305,6 +2620,7 @@ babel-polyfill@^6.26.0: babel-preset-env@*, babel-preset-env@^1.4.0, babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -2340,6 +2656,7 @@ babel-preset-env@*, babel-preset-env@^1.4.0, babel-preset-env@^1.7.0: babel-preset-fbjs@^2.1.2: version "2.3.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-2.3.0.tgz#92ff81307c18b926895114f9828ae1674c097f80" + integrity sha512-ZOpAI1/bN0Y3J1ZAK9gRsFkHy9gGgJoDRUjtUCla/129LC7uViq9nIK22YdHfey8szohYoZY3f9L2lGOv0Edqw== dependencies: babel-plugin-check-es2015-constants "^6.8.0" babel-plugin-syntax-class-properties "^6.8.0" @@ -2373,6 +2690,7 @@ babel-preset-fbjs@^2.1.2: babel-preset-fbjs@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.0.1.tgz#0be99c39367d6fb5bbcf1f6c33be0321b5234c1c" + integrity sha512-Fc0t7v8T1tBwv5AVyDDZEnS3T7OQ97qV0XawVZg1ouarlM9xCHL994C5tU8TBIKPk3yZXG+SaEM1YQcx/yLlcg== dependencies: "@babel/plugin-check-constants" "^7.0.0-beta.38" "@babel/plugin-proposal-class-properties" "^7.0.0" @@ -2406,12 +2724,14 @@ babel-preset-fbjs@^3.0.1: babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react-native@*, babel-preset-react-native@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/babel-preset-react-native/-/babel-preset-react-native-4.0.1.tgz#14ff07bdb6c8df9408082c0c18b2ce8e3392e76a" + integrity sha512-uhFXnl1WbEWNG4W8QB/jeQaVXkd0a0AD+wh4D2VqtdRnEyvscahqyHExnwKLU9N0sXRYwDyed4JfbiBtiOSGgA== dependencies: babel-plugin-check-es2015-constants "^6.5.0" babel-plugin-react-transform "^3.0.0" @@ -2449,6 +2769,7 @@ babel-preset-react-native@*, babel-preset-react-native@^4.0.0: babel-preset-react@*, babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= dependencies: babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-react-display-name "^6.23.0" @@ -2460,6 +2781,7 @@ babel-preset-react@*, babel-preset-react@^6.24.1: babel-register@^6.24.1, babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -2472,6 +2794,7 @@ babel-register@^6.24.1, babel-register@^6.26.0: babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -2479,6 +2802,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -2489,6 +2813,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.0.0, babel-traverse@^6.14.1, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -2503,6 +2828,7 @@ babel-traverse@^6.0.0, babel-traverse@^6.14.1, babel-traverse@^6.18.0, babel-tra babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -2512,42 +2838,52 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24. babylon@^6.14.1, babylon@^6.15.0, babylon@^6.17.4, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= bail@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" + integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= base64-js@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.1.2.tgz#d6400cac1c4c660976d90d07a04351d89395f5e8" + integrity sha1-1kAMrBxMZgl22Q0HoENR2JOV9eg= base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.3: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -2560,32 +2896,38 @@ base@^0.11.1: basic-auth@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + integrity sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak= better-assert@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= dependencies: callsite "1.0.0" big-integer@^1.6.7: version "1.6.36" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== bin-build@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-2.2.0.tgz#11f8dd61f70ffcfa2bdcaa5b46f5e8fedd4221cc" + integrity sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw= dependencies: archive-type "^3.0.1" decompress "^3.0.0" @@ -2598,12 +2940,14 @@ bin-build@^2.0.0: bin-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-2.0.0.tgz#86f8e6f4253893df60dc316957f5af02acb05930" + integrity sha1-hvjm9CU4k99g3DFpV/WvAqywWTA= dependencies: executable "^1.0.0" bin-version-check@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0" + integrity sha1-5OXfKQuQaffRETJAMe/BP90RpbA= dependencies: bin-version "^1.0.0" minimist "^1.1.0" @@ -2613,12 +2957,14 @@ bin-version-check@^2.1.0: bin-version@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e" + integrity sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144= dependencies: find-versions "^1.0.0" bin-wrapper@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-3.0.2.tgz#67d3306262e4b1a5f2f88ee23464f6a655677aeb" + integrity sha1-Z9MwYmLksaXy+I7iNGT2plVneus= dependencies: bin-check "^2.0.0" bin-version-check "^2.1.0" @@ -2630,14 +2976,17 @@ bin-wrapper@^3.0.0: binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" + integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg== bindings@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + integrity sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw== bl@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" @@ -2645,30 +2994,36 @@ bl@^1.0.0: bl@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e" + integrity sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4= dependencies: readable-stream "~1.0.26" blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE= block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" bluebird@^3.3.0, bluebird@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" + integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== body-parser@1.18.2, body-parser@^1.16.1: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + integrity sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ= dependencies: bytes "3.0.0" content-type "~1.0.4" @@ -2684,6 +3039,7 @@ body-parser@1.18.2, body-parser@^1.16.1: body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= dependencies: continuable-cache "^0.3.1" error "^7.0.0" @@ -2693,22 +3049,26 @@ body@^5.1.0: boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= bplist-creator@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.7.tgz#37df1536092824b87c42f957b01344117372ae45" + integrity sha1-N98VNgkoJLh8QvlXsBNEEXNyrkU= dependencies: stream-buffers "~2.2.0" bplist-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.1.1.tgz#d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6" + integrity sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= dependencies: big-integer "^1.6.7" brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -2716,12 +3076,14 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7: braces@^0.1.2: version "0.1.5" resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" + integrity sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY= dependencies: expand-range "^0.1.0" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -2730,6 +3092,7 @@ braces@^1.8.2: braces@^2.3.0, braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -2745,10 +3108,12 @@ braces@^2.3.0, braces@^2.3.1: brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-pack@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== dependencies: JSONStream "^1.0.3" combine-source-map "~0.8.0" @@ -2760,20 +3125,24 @@ browser-pack@^6.0.1: browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + integrity sha1-Ql1opY00R/AqBKqJQYf86K+Le44= browser-resolve@^1.11.0, browser-resolve@^1.11.3, browser-resolve@^1.7.0: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -2785,6 +3154,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -2793,6 +3163,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== dependencies: cipher-base "^1.0.1" des.js "^1.0.0" @@ -2802,6 +3173,7 @@ browserify-des@^1.0.0: browserify-fs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browserify-fs/-/browserify-fs-1.0.0.tgz#f075aa8a729d4d1716d066620e386fcc1311a96f" + integrity sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8= dependencies: level-filesystem "^1.0.1" level-js "^2.1.3" @@ -2810,6 +3182,7 @@ browserify-fs@^1.0.0: browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -2817,6 +3190,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -2829,12 +3203,14 @@ browserify-sign@^4.0.0: browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserify@^16.1.0: version "16.2.2" resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.2.tgz#4b1f66ba0e54fa39dbc5aa4be9629142143d91b0" + integrity sha512-fMES05wq1Oukts6ksGUU2TMVHHp06LyQt0SIwbXIHm7waSrQmNBZePsU0iM/4f94zbvb/wHma+D1YrdzWYnF/A== dependencies: JSONStream "^1.0.3" assert "^1.4.0" @@ -2888,6 +3264,7 @@ browserify@^16.1.0: browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: version "1.7.7" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= dependencies: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" @@ -2895,6 +3272,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== dependencies: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" @@ -2902,6 +3280,7 @@ browserslist@^3.2.6: browserslist@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" + integrity sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q== dependencies: caniuse-lite "^1.0.30000884" electron-to-chromium "^1.3.62" @@ -2910,16 +3289,19 @@ browserslist@^4.1.0: bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= dependencies: node-int64 "^0.4.0" buffer-alloc-unsafe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== buffer-alloc@^1.1.0, buffer-alloc@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== dependencies: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" @@ -2927,26 +3309,32 @@ buffer-alloc@^1.1.0, buffer-alloc@^1.2.0: buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= buffer-es6@^4.9.2, buffer-es6@^4.9.3: version "4.9.3" resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" + integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= buffer-from@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0" + integrity sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg== buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-to-vinyl@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz#00f15faee3ab7a1dda2cde6d9121bffdd07b2262" + integrity sha1-APFfruOreh3aLN5tkSG//dB7ImI= dependencies: file-type "^3.1.0" readable-stream "^2.0.2" @@ -2956,10 +3344,12 @@ buffer-to-vinyl@^1.0.0: buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^5.0.2: version "5.2.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -2967,38 +3357,47 @@ buffer@^5.0.2: builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= byte-size@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd" + integrity sha512-JGC3EV2bCzJH/ENSh3afyJrH4vwxbHTuO5ljLoI5+2iJOcEpMgP8T782jH9b5qGxf2mSUIp1lfGnfKNrRHpvVg== bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= cacache@^11.0.1, cacache@^11.0.2: version "11.2.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.2.0.tgz#617bdc0b02844af56310e411c0878941d5739965" + integrity sha512-IFWl6lfK6wSeYCHUXh+N1lY72UDrpyrYQJNIVQf48paDuWbv5RbAtJYf/4gUQFObTCHZwdZ5sI8Iw7nqwP6nlQ== dependencies: bluebird "^3.5.1" chownr "^1.0.1" @@ -3018,6 +3417,7 @@ cacache@^11.0.1, cacache@^11.0.2: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -3032,32 +3432,39 @@ cache-base@^1.0.1: cached-path-relative@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + integrity sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc= call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= dependencies: callsites "^0.2.0" callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= dependencies: camelcase "^2.0.0" map-obj "^1.0.0" @@ -3065,6 +3472,7 @@ camelcase-keys@^2.0.0: camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: camelcase "^4.1.0" map-obj "^2.0.0" @@ -3073,14 +3481,17 @@ camelcase-keys@^4.0.0: camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= caniuse-api@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= dependencies: browserslist "^1.3.6" caniuse-db "^1.0.30000529" @@ -3090,28 +3501,34 @@ caniuse-api@^1.5.2: caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000885" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000885.tgz#cdc98dd168ed59678650071f7f6a70910e275bc8" + integrity sha512-Hy1a+UIXooG+tRlt3WnT9avMf+l999bR9J1MqlQdYKgbsYjKxV4a4rgcmiyMmdCLPBFsiRoDxdl9tnNyaq2RXw== caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000884: version "1.0.30000885" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz#e889e9f8e7e50e769f2a49634c932b8aee622984" + integrity sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ== capture-exit@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= dependencies: rsvp "^3.3.3" capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= caw@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034" + integrity sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ= dependencies: get-proxy "^1.0.1" is-obj "^1.0.0" @@ -3121,6 +3538,7 @@ caw@^1.0.1: chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -3131,6 +3549,7 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -3139,26 +3558,32 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1: character-entities-legacy@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== character-entities@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== character-reference-invalid@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== cheerio@0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" @@ -3180,6 +3605,7 @@ cheerio@0.22.0: cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" @@ -3191,6 +3617,7 @@ cheerio@^1.0.0-rc.2: chokidar@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -3206,6 +3633,7 @@ chokidar@^1.0.0: chokidar@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -3225,14 +3653,17 @@ chokidar@^2.0.3: chownr@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== ci-info@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.5.1.tgz#17e8eb5de6f8b2b6038f0cbb714d410bfa9f3030" + integrity sha512-fKFIKXaYiL1exImwJ0AhR/6jxFPSKQBk2ayV5NiNoruUs2+rxC2kNw0EG+1Z9dugZRdCrppskQ8DN2cyaUM1Hw== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -3240,20 +3671,24 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== circular-json@^0.5.5: version "0.5.7" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.7.tgz#b8be478d72ea58c7eeda26bf1cf1fba43d188842" + integrity sha512-/pXoV1JA847qRKPrHbBK6YIBGFF8GOP4wzSgUOA7q0ew0vAv0iJswP+2/nZQ9uzA3Azi7eTrg9L2yzXc/7ZMIA== clap@^1.0.9: version "1.2.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== dependencies: chalk "^1.1.3" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -3263,20 +3698,24 @@ class-utils@^0.3.5: classnames@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= clipboard@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + integrity sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ== dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -3285,6 +3724,7 @@ clipboard@^2.0.0: cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -3293,6 +3733,7 @@ cliui@^3.2.0: cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -3301,26 +3742,32 @@ cliui@^4.0.0: clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + integrity sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= clone@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + integrity sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8= clone@^1.0.0, clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@~0.1.9: version "0.1.19" resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" + integrity sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= closest-file-data@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/closest-file-data/-/closest-file-data-0.1.4.tgz#975f87c132f299d24a0375b9f63ca3fb88f72b3a" + integrity sha1-l1+HwTLymdJKA3W59jyj+4j3Kzo= cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= dependencies: graceful-fs "^4.1.2" mkdirp "~0.5.0" @@ -3328,30 +3775,36 @@ cmd-shim@^2.0.2: co@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" + integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g= co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= coa@~1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= dependencies: q "^1.1.2" coa@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.1.tgz#f3f8b0b15073e35d70263fb1042cb2c023db38af" + integrity sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ== dependencies: q "^1.1.2" 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" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codecov@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.1.0.tgz#340bd968d361f256976b5af782dd8ba9f82bc849" + integrity sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA== dependencies: argv "^0.0.2" ignore-walk "^3.0.1" @@ -3362,14 +3815,17 @@ codecov@^3.0.0: coffee-script@^1.12.4: version "1.12.7" resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" + integrity sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw== collapse-white-space@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3377,22 +3833,26 @@ collection-visit@^1.0.0: color-convert@^1.3.0, color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3, color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= dependencies: color-name "^1.0.0" color-string@^1.5.2: version "1.5.3" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -3400,10 +3860,12 @@ color-string@^1.5.2: color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= dependencies: clone "^1.0.2" color-convert "^1.3.0" @@ -3412,6 +3874,7 @@ color@^0.11.0: color@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color/-/color-2.0.1.tgz#e4ed78a3c4603d0891eba5430b04b86314f4c839" + integrity sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw== dependencies: color-convert "^1.9.1" color-string "^1.5.2" @@ -3419,6 +3882,7 @@ color@^2.0.1: colormin@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= dependencies: color "^0.11.0" css-color-names "0.0.4" @@ -3427,18 +3891,22 @@ colormin@^1.0.5: colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + integrity sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q= colors@^1.1.0: version "1.3.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" + integrity sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ== colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: strip-ansi "^3.0.0" wcwidth "^1.0.0" @@ -3446,12 +3914,14 @@ columnify@^1.5.4: combine-lists@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" + integrity sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y= dependencies: lodash "^4.5.0" combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" @@ -3461,38 +3931,46 @@ combine-source-map@^0.8.0, combine-source-map@~0.8.0: combined-stream@1.0.6, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= dependencies: delayed-stream "~1.0.0" commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== commander@^2.11.0, commander@^2.15.1, commander@^2.18.0, commander@^2.9.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== commander@~2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= dependencies: graceful-readlink ">= 1.0.0" commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" dot-prop "^3.0.0" @@ -3500,24 +3978,29 @@ compare-func@^1.3.1: component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= component-emitter@1.2.1, component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= compressible@~2.0.14: version "2.0.15" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" + integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw== dependencies: mime-db ">= 1.36.0 < 2" compression@^1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== dependencies: accepts "~1.3.5" bytes "3.0.0" @@ -3530,10 +4013,12 @@ compression@^1.7.1: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.4.4, concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" @@ -3543,6 +4028,7 @@ concat-stream@^1.4.4, concat-stream@^1.4.6, concat-stream@^1.4.7, concat-stream@ config-chain@^1.1.11: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -3550,6 +4036,7 @@ config-chain@^1.1.11: connect@^3.6.0, connect@^3.6.5: version "3.6.6" resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= dependencies: debug "2.6.9" finalhandler "1.1.0" @@ -3559,40 +4046,49 @@ connect@^3.6.0, connect@^3.6.5: console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= console-stream@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" + integrity sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ= constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= conventional-changelog-angular@^1.6.6: version "1.6.6" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" + integrity sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg== dependencies: compare-func "^1.3.1" q "^1.5.1" @@ -3600,6 +4096,7 @@ conventional-changelog-angular@^1.6.6: conventional-changelog-core@^2.0.5: version "2.0.11" resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287" + integrity sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg== dependencies: conventional-changelog-writer "^3.0.9" conventional-commits-parser "^2.1.7" @@ -3618,10 +4115,12 @@ conventional-changelog-core@^2.0.5: conventional-changelog-preset-loader@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373" + integrity sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw== conventional-changelog-writer@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz#4aecdfef33ff2a53bb0cf3b8071ce21f0e994634" + integrity sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q== dependencies: compare-func "^1.3.1" conventional-commits-filter "^1.1.6" @@ -3637,6 +4136,7 @@ conventional-changelog-writer@^3.0.9: conventional-commits-filter@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831" + integrity sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q== dependencies: is-subset "^0.1.1" modify-values "^1.0.0" @@ -3644,6 +4144,7 @@ conventional-commits-filter@^1.1.6: conventional-commits-parser@^2.1.7: version "2.1.7" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" + integrity sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" @@ -3656,6 +4157,7 @@ conventional-commits-parser@^2.1.7: conventional-recommended-bump@^2.0.6: version "2.0.9" resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93" + integrity sha512-YE6/o+648qkX3fTNvfBsvPW3tSnbZ6ec3gF0aBahCPgyoVHU2Mw0nUAZ1h1UN65GazpORngrgRC8QCltNYHPpQ== dependencies: concat-stream "^1.6.0" conventional-changelog-preset-loader "^1.1.8" @@ -3669,24 +4171,29 @@ conventional-recommended-bump@^2.0.6: convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.1.3, convert-source-map@^1.4.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== dependencies: safe-buffer "~5.1.1" convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -3698,22 +4205,27 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.2.0, core-js@^2.2.2, core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw== core-util-is@1.0.2, 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" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.2, cosmiconfig@^5.0.5: version "5.0.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" @@ -3722,6 +4234,7 @@ cosmiconfig@^5.0.2, cosmiconfig@^5.0.5: create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: bn.js "^4.1.0" elliptic "^6.0.0" @@ -3729,12 +4242,14 @@ create-ecdh@^4.0.0: create-error-class@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= dependencies: capture-stack-trace "^1.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -3745,6 +4260,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -3756,6 +4272,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: create-react-class@^15.6.3: version "15.6.3" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.3.tgz#2d73237fb3f970ae6ebe011a9e66f46dbca80036" + integrity sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg== dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" @@ -3764,6 +4281,7 @@ create-react-class@^15.6.3: cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -3772,6 +4290,7 @@ cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -3782,6 +4301,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: crowdin-cli@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/crowdin-cli/-/crowdin-cli-0.3.0.tgz#eac9989a6fe7feaaf33090397afc187c67b46191" + integrity sha1-6smYmm/n/qrzMJA5evwYfGe0YZE= dependencies: request "^2.53.0" yamljs "^0.2.1" @@ -3790,6 +4310,7 @@ crowdin-cli@^0.3.0: crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -3806,14 +4327,17 @@ crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: css-color-names@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= css-select-base-adapter@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz#0102b3d14630df86c3eb9fa9f5456270106cf990" + integrity sha1-AQKz0UYw34bD65+p9UVicBBs+ZA= css-select@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.0.tgz#7aa2921392114831f68db175c0b6a555df74bbd5" + integrity sha512-MGhoq1S9EyPgZIGnts8Yz5WwUOyHmPMdlqeifsYs/xFX7AAm3hY0RJe1dqVlXtYPI66Nsk39R/sa5/ree6L2qg== dependencies: boolbase "^1.0.0" css-what "2.1" @@ -3823,6 +4347,7 @@ css-select@^2.0.0: css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= dependencies: boolbase "~1.0.0" css-what "2.1" @@ -3832,6 +4357,7 @@ css-select@~1.2.0: css-tree@1.0.0-alpha.28: version "1.0.0-alpha.28" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f" + integrity sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w== dependencies: mdn-data "~1.1.0" source-map "^0.5.3" @@ -3839,6 +4365,7 @@ css-tree@1.0.0-alpha.28: css-tree@1.0.0-alpha.29: version "1.0.0-alpha.29" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== dependencies: mdn-data "~1.1.0" source-map "^0.5.3" @@ -3846,14 +4373,17 @@ css-tree@1.0.0-alpha.29: css-url-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec" + integrity sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w= css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= dependencies: autoprefixer "^6.3.1" decamelize "^1.1.2" @@ -3891,12 +4421,14 @@ cssnano@^3.10.0: csso@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== dependencies: css-tree "1.0.0-alpha.29" csso@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= dependencies: clap "^1.0.9" source-map "^0.5.3" @@ -3904,46 +4436,55 @@ csso@~2.3.1: cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== cssstyle@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== dependencies: cssom "0.3.x" currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: array-find-index "^1.0.1" custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= damerau-levenshtein@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ= dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" + integrity sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg== dependencies: abab "^2.0.0" whatwg-mimetype "^2.1.0" @@ -3952,54 +4493,65 @@ data-urls@^1.0.0: date-format@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" + integrity sha1-YV6CjiM90aubua4JUODOzPpuytg= date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI= dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" + integrity sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk= debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@3.1.0, debug@=3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" debug@^3.1.0: version "3.2.5" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" + integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg== dependencies: ms "^2.1.1" debug@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.0.1.tgz#f9bb36d439b8d1f0dd52d8fb6b46e4ebb8c1cd5b" + integrity sha512-K23FHJ/Mt404FSlp6gSZCevIbTMLX0j3fmHhUEhQ3Wq0FMODW3+cUSoLdy1Gx4polAf4t/lphhmHH35BB8cLYw== dependencies: ms "^2.1.1" debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -4007,20 +4559,24 @@ decamelize-keys@^1.0.0: decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decamelize@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + integrity sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg== dependencies: xregexp "4.0.0" decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-tar@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466" + integrity sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY= dependencies: is-tar "^1.0.0" object-assign "^2.0.0" @@ -4032,6 +4588,7 @@ decompress-tar@^3.0.0: decompress-tarbz2@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz#8b23935681355f9f189d87256a0f8bdd96d9666d" + integrity sha1-iyOTVoE1X58YnYclag+L3ZbZZm0= dependencies: is-bzip2 "^1.0.0" object-assign "^2.0.0" @@ -4044,6 +4601,7 @@ decompress-tarbz2@^3.0.0: decompress-targz@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-3.1.0.tgz#b2c13df98166268991b715d6447f642e9696f5a0" + integrity sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA= dependencies: is-gzip "^1.0.0" object-assign "^2.0.0" @@ -4055,6 +4613,7 @@ decompress-targz@^3.0.0: decompress-unzip@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-3.4.0.tgz#61475b4152066bbe3fee12f9d629d15fe6478eeb" + integrity sha1-YUdbQVIGa74/7hL51inRX+ZHjus= dependencies: is-zip "^1.0.0" read-all-stream "^3.0.0" @@ -4067,6 +4626,7 @@ decompress-unzip@^3.0.0: decompress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/decompress/-/decompress-3.0.0.tgz#af1dd50d06e3bfc432461d37de11b38c0d991bed" + integrity sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0= dependencies: buffer-to-vinyl "^1.0.0" concat-stream "^1.4.6" @@ -4081,62 +4641,74 @@ decompress@^3.0.0: dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.2.tgz#9ced65ea0bc0b09f42a6d79c1b1903f9d913cc18" + integrity sha1-nO1l6gvAsJ9CptecGxkD+dkTzBg= deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768" + integrity sha512-urQxA1smbLZ2cBbXbaYObM1dJ82aJ2H57A1C/Kklfh/ZN1bgH4G/n5KWhdNfOK11W98gqZfyYj7W4frJJRwA2w== 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" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= dependencies: strip-bom "^2.0.0" defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" deferred-leveldown@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4" + integrity sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ= dependencies: abstract-leveldown "~0.12.1" define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -4144,10 +4716,12 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" @@ -4160,30 +4734,37 @@ del@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= denodeify@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + integrity sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k= depd@~1.1.1, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= deps-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + integrity sha1-CRckkC6EZYJg65EHSMzNGvbiH7U= dependencies: JSONStream "^1.0.3" shasum "^1.0.0" @@ -4193,6 +4774,7 @@ deps-sort@^2.0.0: des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -4200,28 +4782,34 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= dependencies: repeating "^2.0.0" detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= detect-port-alt@1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== dependencies: address "^1.0.1" debug "^2.6.0" @@ -4229,6 +4817,7 @@ detect-port-alt@1.1.6: detective@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/detective/-/detective-5.1.0.tgz#7a20d89236d7b331ccea65832e7123b5551bb7cb" + integrity sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ== dependencies: acorn-node "^1.3.0" defined "^1.0.0" @@ -4237,6 +4826,7 @@ detective@^5.0.2: dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" wrappy "1" @@ -4244,18 +4834,22 @@ dezalgo@^1.0.0: di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= diacritics-map@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/diacritics-map/-/diacritics-map-0.1.0.tgz#6dfc0ff9d01000a2edf2865371cac316e94977af" + integrity sha1-bfwP+dAQAKLt8oZTccrDFulJd68= diff@3.5.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -4264,6 +4858,7 @@ diffie-hellman@^5.0.0: dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: arrify "^1.0.1" path-type "^3.0.0" @@ -4271,10 +4866,12 @@ dir-glob@^2.0.0: discontinuous-range@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" @@ -4282,12 +4879,14 @@ doctrine@1.5.0: doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" docusaurus@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-1.4.0.tgz#b4e547841178a3229f155d78edfbe96dbd9adaab" + integrity sha512-o/ZhgnKApGUHKjK4b3XAcdSoqRjECKc41R74rLq+bYn0sD0hQw997mJ9PPxhs4JhzooOXpFFaE6BcD8FxYOp9g== dependencies: autoprefixer "^9.1.5" babel-plugin-transform-class-properties "^6.24.1" @@ -4338,6 +4937,7 @@ docusaurus@^1.3.2: dom-serialize@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= dependencies: custom-event "~1.0.0" ent "~2.2.0" @@ -4347,6 +4947,7 @@ dom-serialize@^2.2.0: dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= dependencies: domelementtype "~1.1.1" entities "~1.1.1" @@ -4354,34 +4955,41 @@ dom-serializer@0, dom-serializer@~0.1.0: dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== dependencies: domelementtype "1" domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= dependencies: dom-serializer "0" domelementtype "1" @@ -4389,6 +4997,7 @@ domutils@1.5.1: domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" @@ -4396,18 +5005,21 @@ domutils@^1.5.1, domutils@^1.7.0: dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" download@^4.0.0, download@^4.1.2: version "4.4.3" resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" + integrity sha1-qlX9rTktldS2jowr4D4MKqIbqaw= dependencies: caw "^1.0.1" concat-stream "^1.4.7" @@ -4428,22 +5040,26 @@ download@^4.0.0, download@^4.1.2: duplexer2@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds= dependencies: readable-stream "~1.1.9" duplexer2@^0.1.2, duplexer2@^0.1.4, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + integrity sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -4453,6 +5069,7 @@ duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0: each-async@^1.0.0, each-async@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" + integrity sha1-3uUim98KtrogEqOV4bhpq/iBNHM= dependencies: onetime "^1.0.0" set-immediate-shim "^1.0.0" @@ -4460,6 +5077,7 @@ each-async@^1.0.0, each-async@^1.1.1: ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4467,14 +5085,17 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62: version "1.3.69" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.69.tgz#0fd5d4bfd89ba6a431a144375245aea65073e3ca" + integrity sha512-BXOfu4dyeouzx9CuSnU2fV6ElZYUlVxADxkJI4jUl1DlmkmaaEqDhgm7balB5yR0jMtk2p+h68geOv9z1/F10g== elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -4487,26 +5108,31 @@ elliptic@^6.0.0: emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ== encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" engine.io-client@~3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== dependencies: component-emitter "1.2.1" component-inherit "0.0.3" @@ -4523,6 +5149,7 @@ engine.io-client@~3.2.0: engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" + integrity sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw== dependencies: after "0.8.2" arraybuffer.slice "~0.0.7" @@ -4533,6 +5160,7 @@ engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: engine.io@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.0.tgz#54332506f42f2edc71690d2f2a42349359f3bf7d" + integrity sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw== dependencies: accepts "~1.3.4" base64id "1.0.0" @@ -4544,18 +5172,22 @@ engine.io@~3.2.0: ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= envinfo@^5.7.0: version "5.10.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + integrity sha512-rXbzXWvnQxy+TcqZlARbWVQwgGVVouVJgFZhLVN5htjLxl1thstrP2ZGi0pXC309AbK7gVOPU+ulz/tmpCI7iw== enzyme-adapter-react-16@*: version "1.5.0" resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.5.0.tgz#50af8d76a45fe0915de932bd95d34cdca75c0be3" + integrity sha512-R2LcVvMB2UwPH763d5jDtVedAIcEj+uZjOnq0nd1sOUs6z8TDbyHDvt8VwfrS4wMt7CawoyPmH0XzC8MtEqqDw== dependencies: enzyme-adapter-utils "^1.8.0" function.prototype.name "^1.1.0" @@ -4568,6 +5200,7 @@ enzyme-adapter-react-16@*: enzyme-adapter-utils@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.0.tgz#ee9f07250663a985f1f2caaf297720787da559f1" + integrity sha512-K9U2RGr1pvWPGEAIRQRVH4UdlqzpfLsKonuHyAK6lxu46yfGsMDVlO3+YvQwQpVjVw8eviEVIOmlFAnMbIhv/w== dependencies: function.prototype.name "^1.1.0" object.assign "^4.1.0" @@ -4576,6 +5209,7 @@ enzyme-adapter-utils@^1.8.0: enzyme@*: version "3.6.0" resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.6.0.tgz#d213f280a258f61e901bc663d4cc2d6fd9a9dec8" + integrity sha512-onsINzVLGqKIapTVfWkkw6bYvm1o4CyJ9s8POExtQhAkVa4qFDW6DGCQGRy/5bfZYk+gmUbMNyayXiWDzTkHFQ== dependencies: array.prototype.flat "^1.2.1" cheerio "^1.0.0-rc.2" @@ -4600,22 +5234,26 @@ enzyme@*: err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1, errno@~0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= dependencies: string-template "~0.2.1" xtend "~4.0.0" @@ -4623,6 +5261,7 @@ error@^7.0.0: errorhandler@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.0.tgz#eaba64ca5d542a311ac945f582defc336165d9f4" + integrity sha1-6rpkyl1UKjEayUX1gt78M2Fl2fQ= dependencies: accepts "~1.3.3" escape-html "~1.0.3" @@ -4630,6 +5269,7 @@ errorhandler@^1.5.0: es-abstract@^1.10.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -4640,6 +5280,7 @@ es-abstract@^1.10.0, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.6.1, es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + integrity sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0= dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" @@ -4648,24 +5289,29 @@ es-to-primitive@^1.1.1: es6-promise@^4.0.3: version "4.2.5" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg== es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -4677,16 +5323,19 @@ escodegen@^1.9.1: eslint-config-fbjs@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-config-fbjs/-/eslint-config-fbjs-2.1.0.tgz#bfe4f8c2d2282bfe515359553905d830e3a5d12f" + integrity sha512-wh7Lveo51V3/SUydWtR2VEU8wNfSHt5V7YzIUKTRkHF3kvkCwFtM6Jgsn+xBNkjxZGpfWgNJN/drk1LLx64Dww== eslint-config-prettier@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.0.1.tgz#479214f64c1a4b344040924bfb97543db334b7b1" + integrity sha512-vA0TB8HCx/idHXfKHYcg9J98p0Q8nkfNwNAoP7e+ywUidn6ScaFS5iqncZAHPz+/a0A/tp657ulFHFx/2JDP4Q== dependencies: get-stdin "^6.0.0" eslint-formatter-pretty@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-formatter-pretty/-/eslint-formatter-pretty-1.3.0.tgz#985d9e41c1f8475f4a090c5dbd2dfcf2821d607e" + integrity sha512-5DY64Y1rYCm7cfFDHEGUn54bvCnK+wSUVF07N8oXeqUJFSd+gnYOTXbzelQ1HurESluY6gnEQPmXOIkB4Wa+gA== dependencies: ansi-escapes "^2.0.0" chalk "^2.1.0" @@ -4697,6 +5346,7 @@ eslint-formatter-pretty@^1.3.0: eslint-import-resolver-node@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" @@ -4704,6 +5354,7 @@ eslint-import-resolver-node@^0.3.1: eslint-module-utils@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= dependencies: debug "^2.6.8" pkg-dir "^1.0.0" @@ -4711,18 +5362,21 @@ eslint-module-utils@^2.2.0: eslint-plugin-babel@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.2.0.tgz#3041a0c26aa3ca4a0e0f2aa11591f0396790d981" + integrity sha512-9pNH/e214SN3r2nEwwTLRI27jUN4+nuLMv1+qxfDv8Za9cJ3F+aPkNinYiVeUmAmiEtOttbS32yuwRG2DREvJg== dependencies: eslint-rule-composer "^0.3.0" eslint-plugin-flowtype@^2.35.0: version "2.50.1" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz#36d4c961ac8b9e9e1dc091d3fba0537dad34ae8a" + integrity sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ== dependencies: lodash "^4.17.10" eslint-plugin-import@^2.6.0: version "2.14.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== dependencies: contains-path "^0.1.0" debug "^2.6.8" @@ -4738,10 +5392,12 @@ eslint-plugin-import@^2.6.0: eslint-plugin-jest@^21.0.0: version "21.22.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.22.0.tgz#1b9e49b3e5ce9a3d0a51af4579991d517f33726e" + integrity sha512-0TzGIZ5moLR9orka/J9lg+7Ezv+S0TsnkavrMmI5xPFnbyIDjc2jLlwtBsaBbdZuOSCl+kcofh9ojknTI9L32Q== eslint-plugin-jsx-a11y@^6.0.2: version "6.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz#7bf56dbe7d47d811d14dbb3ddff644aa656ce8e1" + integrity sha512-JsxNKqa3TwmPypeXNnI75FntkUktGzI1wSa1LgNZdSOMI+B4sxnr1lSF8m8lPiz4mKiC+14ysZQM4scewUrP7A== dependencies: aria-query "^3.0.0" array-includes "^3.0.3" @@ -4755,6 +5411,7 @@ eslint-plugin-jsx-a11y@^6.0.2: eslint-plugin-markdown@^1.0.0-beta.6: version "1.0.0-beta.6" resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-1.0.0-beta.6.tgz#d9e62666eea4e76387e85f502df668abdfbd4395" + integrity sha1-2eYmZu6k52OH6F9QLfZoq9+9Q5U= dependencies: object-assign "^4.0.1" remark-parse "^3.0.0" @@ -4763,6 +5420,7 @@ eslint-plugin-markdown@^1.0.0-beta.6: eslint-plugin-prettier@^2.2.0, eslint-plugin-prettier@^2.3.1: version "2.6.2" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.2.tgz#71998c60aedfa2141f7bfcbf9d1c459bf98b4fad" + integrity sha512-tGek5clmW5swrAx1mdPYM8oThrBE83ePh7LeseZHBWfHVGrHPhKn7Y5zgRMbU/9D5Td9K4CEmUPjGxA7iw98Og== dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" @@ -4770,6 +5428,7 @@ eslint-plugin-prettier@^2.2.0, eslint-plugin-prettier@^2.3.1: eslint-plugin-react@^7.1.0: version "7.11.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" + integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== dependencies: array-includes "^3.0.3" doctrine "^2.1.0" @@ -4780,16 +5439,19 @@ eslint-plugin-react@^7.1.0: eslint-plugin-relay@~0.0.19: version "0.0.28" resolved "https://registry.yarnpkg.com/eslint-plugin-relay/-/eslint-plugin-relay-0.0.28.tgz#dd9ba7dc03fd21f3a30e053d21d90e5bf2ecff34" + integrity sha512-CvyT/WxEQmcUKE4lVqjxgioTj3zSvHnT9bvR4cISgs9j2z4J5Ojsurjcv/kWe4I6gf6L+lV6zcVuZ2LkiRIO6g== dependencies: graphql "^14.0.0" eslint-rule-composer@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" + integrity sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg== eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -4797,6 +5459,7 @@ eslint-scope@3.7.1: eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -4804,14 +5467,17 @@ eslint-scope@^4.0.0: eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== eslint@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.6.0.tgz#b6f7806041af01f71b3f1895cbb20971ea4b6223" + integrity sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.5.3" @@ -4855,6 +5521,7 @@ eslint@^5.6.0: espree@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" + integrity sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg== dependencies: acorn "^5.6.0" acorn-jsx "^4.1.1" @@ -4862,68 +5529,83 @@ espree@^4.0.0: esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= estree-walker@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + integrity sha1-va/oCVOD2EFNXcLs9MkXO225QS4= estree-walker@^0.5.1, estree-walker@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" + integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= event-target-shim@^1.0.5: version "1.1.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-1.1.1.tgz#a86e5ee6bdaa16054475da797ccddf0c55698491" + integrity sha1-qG5e5r2qFgVEddp5fM3fDFVphJE= eventemitter3@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== events@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== eventsource@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= dependencies: original ">=0.0.5" evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -4931,6 +5613,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: exec-buffer@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b" + integrity sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA== dependencies: execa "^0.7.0" p-finally "^1.0.0" @@ -4941,6 +5624,7 @@ exec-buffer@^3.0.0: exec-series@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/exec-series/-/exec-series-1.0.3.tgz#6d257a9beac482a872c7783bc8615839fc77143a" + integrity sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo= dependencies: async-each-series "^1.1.0" object-assign "^4.1.0" @@ -4948,12 +5632,14 @@ exec-series@^1.0.0: exec-sh@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== dependencies: merge "^1.2.0" execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== dependencies: cross-spawn "^6.0.0" get-stream "^3.0.0" @@ -4966,6 +5652,7 @@ execa@^0.10.0: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -4978,6 +5665,7 @@ execa@^0.7.0: execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" @@ -4990,16 +5678,19 @@ execa@^1.0.0: executable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/executable/-/executable-1.1.0.tgz#877980e9112f3391066da37265de7ad8434ab4d9" + integrity sha1-h3mA6REvM5EGbaNyZd562ENKtNk= dependencies: meow "^3.1.0" exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-braces@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" + integrity sha1-SIsdHSRRyz06axks/AMPRMWFX+o= dependencies: array-slice "^0.2.3" array-unique "^0.2.1" @@ -5008,12 +5699,14 @@ expand-braces@^0.1.1: expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5026,6 +5719,7 @@ expand-brackets@^2.1.4: expand-range@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" + integrity sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ= dependencies: is-number "^0.1.1" repeat-string "^0.2.2" @@ -5033,18 +5727,21 @@ expand-range@^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" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" express@^4.15.3: version "4.16.3" resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + integrity sha1-avilAjUNsyRuzEvs9rWjTSL37VM= dependencies: accepts "~1.3.5" array-flatten "1.1.1" @@ -5080,18 +5777,21 @@ express@^4.15.3: extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= dependencies: kind-of "^1.1.0" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -5099,10 +5799,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^2.0.1, external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" @@ -5111,6 +5813,7 @@ external-editor@^2.0.1, external-editor@^2.0.4: external-editor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -5119,12 +5822,14 @@ external-editor@^3.0.0: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -5138,10 +5843,12 @@ extglob@^2.0.4: extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= fancy-log@^1.1.0, fancy-log@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + integrity sha1-9BEl49hPLn2JpD0G2VjI94vha+E= dependencies: ansi-gray "^0.1.1" color-support "^1.1.3" @@ -5150,18 +5857,22 @@ fancy-log@^1.1.0, fancy-log@^1.3.2: fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-diff@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig== fast-glob@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + integrity sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.0.1" @@ -5173,36 +5884,43 @@ fast-glob@^2.0.2: fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" faye-websocket@~0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= dependencies: websocket-driver ">=0.5.1" fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= dependencies: bser "^2.0.0" fbjs-css-vars@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.1.tgz#836d876e887d702f45610f5ebd2fbeef649527fc" + integrity sha512-IM+v/C40MNZWqsLErc32e0TyIk/NhkkQZL0QmjBh6zi1eXv0/GeVKmKmueQX7nn9SXQBQbTUcB8zuexIF3/88w== fbjs-scripts@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-0.8.3.tgz#b854de7a11e62a37f72dab9aaf4d9b53c4a03174" + integrity sha512-aUJ/uEzMIiBYuj/blLp4sVNkQQ7ZEB/lyplG1IzzOmZ83meiWecrGg5jBo4wWrxXmO4RExdtsSV1QkTjPt2Gag== dependencies: ansi-colors "^1.0.1" babel-core "^6.7.2" @@ -5218,6 +5936,7 @@ fbjs-scripts@^0.8.1: fbjs@0.8.17, fbjs@^0.8.16, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -5230,6 +5949,7 @@ fbjs@0.8.17, fbjs@^0.8.16, fbjs@^0.8.9: fbjs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" + integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== dependencies: core-js "^2.4.1" fbjs-css-vars "^1.0.0" @@ -5243,22 +5963,26 @@ fbjs@^1.0.0: fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= dependencies: pend "~1.2.0" feed@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/feed/-/feed-1.1.1.tgz#914897517e94fa327cc6f73bb585a47c4a9ed321" + integrity sha1-kUiXUX6U+jJ8xvc7tYWkfEqe0yE= dependencies: xml "^1.0.1" figgy-pudding@^3.1.0, figgy-pudding@^3.2.1, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" @@ -5266,12 +5990,14 @@ figures@^1.3.5: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" @@ -5279,22 +6005,27 @@ file-entry-cache@^2.0.0: file-type@^3.1.0: version "3.9.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= file-type@^4.1.0: version "4.4.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= filename-reserved-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" + integrity sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q= filenamify@^1.0.1: version "1.2.1" resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5" + integrity sha1-qfL/0RxQO+0wABUCknI3jx8TZaU= dependencies: filename-reserved-regex "^1.0.0" strip-outer "^1.0.0" @@ -5303,6 +6034,7 @@ filenamify@^1.0.1: fileset@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= dependencies: glob "^7.0.3" minimatch "^3.0.3" @@ -5310,10 +6042,12 @@ fileset@^2.0.2: filesize@3.5.11: version "3.5.11" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" + integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g== fill-range@^2.1.0: version "2.2.4" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -5324,6 +6058,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5333,6 +6068,7 @@ fill-range@^4.0.0: finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= dependencies: debug "2.6.9" encodeurl "~1.0.1" @@ -5345,6 +6081,7 @@ finalhandler@1.1.0: finalhandler@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== dependencies: debug "2.6.9" encodeurl "~1.0.2" @@ -5357,6 +6094,7 @@ finalhandler@1.1.1: find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= dependencies: commondir "^1.0.1" make-dir "^1.0.0" @@ -5365,6 +6103,7 @@ find-cache-dir@^1.0.0: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -5372,18 +6111,21 @@ find-up@^1.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" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-versions@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62" + integrity sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I= dependencies: array-uniq "^1.0.0" get-stdin "^4.0.1" @@ -5393,10 +6135,12 @@ find-versions@^1.0.0: first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + integrity sha1-Wb+1DNkF9g18OUzT2ayqtOatk04= flat-cache@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= dependencies: circular-json "^0.3.1" del "^2.0.2" @@ -5406,14 +6150,17 @@ flat-cache@^1.2.1: flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= flow-bin@^0.80.0: version "0.80.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.80.0.tgz#04cc1ee626a6f50786f78170c92ebe1745235403" + integrity sha512-0wRnqvXErQRPrx6GBLB5swgndfWkotd9MgfePgT7Z+VsE046c8Apzl7KKTCypB/pzn0pZF2g5Jurxxb2umET8g== flow-remove-types@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" + integrity sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q== dependencies: babylon "^6.15.0" vlq "^0.2.1" @@ -5421,6 +6168,7 @@ flow-remove-types@^1.1.0: flush-write-stream@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -5428,30 +6176,36 @@ flush-write-stream@^1.0.0: follow-redirects@^1.0.0: version "1.5.8" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.8.tgz#1dbfe13e45ad969f813e86c00e5296f525c885a1" + integrity sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg== dependencies: debug "=3.1.0" for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" foreach@~2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= dependencies: asynckit "^0.4.0" combined-stream "1.0.6" @@ -5460,20 +6214,24 @@ form-data@~2.3.2: forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -5481,16 +6239,19 @@ from2@^2.1.0: fs-access@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= dependencies: null-check "^1.0.0" fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + integrity sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -5499,6 +6260,7 @@ fs-extra@6.0.1: fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" + integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -5507,6 +6269,7 @@ fs-extra@^1.0.0: fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -5515,6 +6278,7 @@ fs-extra@^5.0.0: fs-extra@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.0.tgz#8cc3f47ce07ef7b3593a11b9fb245f7e34c041d6" + integrity sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -5523,12 +6287,14 @@ fs-extra@^7.0.0: fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -5538,10 +6304,12 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0, fsevents@^1.2.2, fsevents@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== dependencies: nan "^2.9.2" node-pre-gyp "^0.10.0" @@ -5549,6 +6317,7 @@ fsevents@^1.0.0, fsevents@^1.2.2, fsevents@^1.2.3: fstream@^1.0.0, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -5558,10 +6327,12 @@ fstream@^1.0.0, fstream@^1.0.2: function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" + integrity sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -5570,16 +6341,19 @@ function.prototype.name@^1.1.0: functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= fwd-stream@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" + integrity sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= dependencies: readable-stream "~1.0.26-4" gauge@~1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" + integrity sha1-6c7FSD09TuDvRLYKfZnkk14TbZM= dependencies: ansi "^0.3.0" has-unicode "^2.0.0" @@ -5590,6 +6364,7 @@ gauge@~1.2.5: gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -5603,24 +6378,29 @@ gauge@~2.7.3: gaze@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== dependencies: globule "^1.0.0" genfun@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" + integrity sha1-7RAEHy5KfxsKOEZtF6XD4n3x38E= get-assigned-identifiers@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" + integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= dependencies: hosted-git-info "^2.1.4" meow "^3.3.0" @@ -5631,44 +6411,53 @@ get-pkg-repo@^1.0.0: get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= get-proxy@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb" + integrity sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus= dependencies: rc "^1.1.2" get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-stream@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.0.0.tgz#9e074cb898bd2b9ebabb445a1766d7f43576d977" + integrity sha512-FneLKMENeOR7wOK0/ZXCh+lwqtnPwkeunJjRN28LPqzGvNAhYvrTAhXv6xDm4vsJ0M7lcRbIYHQudKsSy2RtSQ== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" gifsicle@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-3.0.4.tgz#f45cb5ed10165b665dc929e0e9328b6c821dfa3b" + integrity sha1-9Fy17RAWW2ZdySng6TKLbIId+js= dependencies: bin-build "^2.0.0" bin-wrapper "^3.0.0" @@ -5677,6 +6466,7 @@ gifsicle@^3.0.0: git-raw-commits@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff" + integrity sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg== dependencies: dargs "^4.0.1" lodash.template "^4.0.2" @@ -5687,6 +6477,7 @@ git-raw-commits@^1.3.6: git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" @@ -5694,6 +6485,7 @@ git-remote-origin-url@^2.0.0: git-semver-tags@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5" + integrity sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig== dependencies: meow "^4.0.0" semver "^5.5.0" @@ -5701,12 +6493,14 @@ git-semver-tags@^1.3.6: gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= dependencies: ini "^1.3.2" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -5714,12 +6508,14 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" glob-parent@^3.0.0, glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -5727,6 +6523,7 @@ glob-parent@^3.0.0, glob-parent@^3.1.0: glob-stream@^5.3.2: version "5.3.5" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" + integrity sha1-pVZlqajM3EGRWofHAeMtTgFvrSI= dependencies: extend "^3.0.0" glob "^5.0.3" @@ -5740,10 +6537,12 @@ glob-stream@^5.3.2: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5755,6 +6554,7 @@ glob@7.1.2: glob@^5.0.3: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" @@ -5765,6 +6565,7 @@ glob@^5.0.3: glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5776,6 +6577,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, gl global-modules@1.0.0, global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" @@ -5784,6 +6586,7 @@ global-modules@1.0.0, global-modules@^1.0.0: global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -5794,6 +6597,7 @@ global-prefix@^1.0.1: global@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + integrity sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8= dependencies: min-document "^2.19.0" process "~0.5.1" @@ -5801,14 +6605,17 @@ global@^4.3.0: globals@^11.1.0, globals@^11.7.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + integrity sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg== globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: array-union "^1.0.1" arrify "^1.0.0" @@ -5820,6 +6627,7 @@ globby@^5.0.0: globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -5830,6 +6638,7 @@ globby@^6.1.0: globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -5842,6 +6651,7 @@ globby@^8.0.1: globule@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" + integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== dependencies: glob "~7.1.1" lodash "~4.17.10" @@ -5850,18 +6660,21 @@ globule@^1.0.0: glogg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" + integrity sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw== dependencies: sparkles "^1.0.0" good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: delegate "^3.1.2" got@^5.0.0: version "5.7.1" resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" + integrity sha1-X4FjWmHkplifGAVp6k44FoClHzU= dependencies: create-error-class "^3.0.1" duplexer2 "^0.1.4" @@ -5882,20 +6695,24 @@ got@^5.0.0: graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= graphql@^14.0.0: version "14.0.2" resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.0.2.tgz#7dded337a4c3fd2d075692323384034b357f5650" + integrity sha512-gUC4YYsaiSJT1h40krG3J+USGlwhzNTXSb4IOZljn9ag5Tj+RkoXrWp+Kh7WyE3t1NCfab5kzCuxBIvOMERMXw== dependencies: iterall "^1.2.2" gray-matter@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-2.1.1.tgz#3042d9adec2a1ded6a7707a9ed2380f8a17a430e" + integrity sha1-MELZrewqHe1qdwep7SOA+KF6Qw4= dependencies: ansi-red "^0.1.1" coffee-script "^1.12.4" @@ -5906,14 +6723,17 @@ gray-matter@^2.1.0: growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= gulp-decompress@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7" + integrity sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc= dependencies: archive-type "^3.0.0" decompress "^3.0.0" @@ -5923,10 +6743,12 @@ gulp-decompress@^1.2.0: gulp-rename@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd" + integrity sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg== gulp-sourcemaps@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" + integrity sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw= dependencies: convert-source-map "^1.1.1" graceful-fs "^4.1.2" @@ -5937,6 +6759,7 @@ gulp-sourcemaps@1.6.0: gulp-util@^3.0.1: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08= dependencies: array-differ "^1.0.0" array-uniq "^1.0.2" @@ -5960,18 +6783,21 @@ gulp-util@^3.0.1: gulplog@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + integrity sha1-4oxNRdBey77YGDY86PnFkmIp/+U= dependencies: glogg "^1.0.0" gzip-size@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= dependencies: duplexer "^0.1.1" handlebars@^4.0.2, handlebars@^4.0.3: version "4.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== dependencies: async "^2.5.0" optimist "^0.6.1" @@ -5982,10 +6808,12 @@ handlebars@^4.0.2, handlebars@^4.0.3: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== dependencies: ajv "^5.3.0" har-schema "^2.0.0" @@ -5993,44 +6821,53 @@ har-validator@~5.1.0: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-binary2@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== dependencies: isarray "2.0.1" has-cors@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + integrity sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4= dependencies: sparkles "^1.0.0" has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -6039,6 +6876,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -6047,10 +6885,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -6058,12 +6898,14 @@ has-values@^1.0.0: has@^1.0.0, has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -6071,6 +6913,7 @@ hash-base@^3.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.5" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + integrity sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" @@ -6078,18 +6921,22 @@ hash.js@^1.0.0, hash.js@^1.0.3: hat@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo= he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= highlight.js@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -6098,6 +6945,7 @@ hmac-drbg@^1.0.0: 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" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -6105,34 +6953,41 @@ home-or-tmp@^2.0.0: home-or-tmp@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb" + integrity sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs= homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw= dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + integrity sha1-ZouTd26q5V696POtRkswekljYl4= html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" @@ -6144,10 +6999,12 @@ htmlparser2@^3.9.1: http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-errors@1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= dependencies: depd "1.1.1" inherits "2.0.3" @@ -6157,6 +7014,7 @@ http-errors@1.6.2: http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -6166,10 +7024,12 @@ http-errors@~1.6.2: http-parser-js@>=0.4.0: version "0.4.13" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" + integrity sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc= http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: agent-base "4" debug "3.1.0" @@ -6177,6 +7037,7 @@ http-proxy-agent@^2.1.0: http-proxy@^1.13.0: version "1.17.0" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== dependencies: eventemitter3 "^3.0.0" follow-redirects "^1.0.0" @@ -6185,6 +7046,7 @@ http-proxy@^1.13.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -6193,10 +7055,12 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== dependencies: agent-base "^4.1.0" debug "^3.1.0" @@ -6204,58 +7068,70 @@ https-proxy-agent@^2.2.1: humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== iconv-lite@0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" idb-wrapper@^1.5.0: version "1.7.2" resolved "https://registry.yarnpkg.com/idb-wrapper/-/idb-wrapper-1.7.2.tgz#8251afd5e77fe95568b1c16152eb44b396767ea2" + integrity sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg== ieee754@^1.1.4: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: minimatch "^3.0.4" ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" + integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== imagemin-gifsicle@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz#3781524c457612ef04916af34241a2b42bfcb40a" + integrity sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ== dependencies: exec-buffer "^3.0.0" gifsicle "^3.0.0" @@ -6264,6 +7140,7 @@ imagemin-gifsicle@^5.2.0: imagemin-jpegtran@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz#e6882263b8f7916fddb800640cf75d2e970d2ad6" + integrity sha1-5ogiY7j3kW/duABkDPddLpcNKtY= dependencies: exec-buffer "^3.0.0" is-jpg "^1.0.0" @@ -6272,6 +7149,7 @@ imagemin-jpegtran@^5.0.2: imagemin-optipng@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz#d22da412c09f5ff00a4339960b98a88b1dbe8695" + integrity sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU= dependencies: exec-buffer "^3.0.0" is-png "^1.0.0" @@ -6280,6 +7158,7 @@ imagemin-optipng@^5.2.1: imagemin-svgo@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz#2dd8c82946be42a8e2cbcae3c5bf007bc2b8b9e8" + integrity sha512-xwjBZQKpbkklHtJYnCOwRJjTRJA/nR0hQzKMh+CUZRvm/L0QwKKPJQ9tkPWQHrg+cydPu2i1vLgHuy2E0hKEkg== dependencies: buffer-from "^0.1.1" is-svg "^2.0.0" @@ -6288,6 +7167,7 @@ imagemin-svgo@^6.0.0: imagemin@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-5.3.1.tgz#f19c2eee1e71ba6c6558c515f9fc96680189a6d4" + integrity sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ= dependencies: file-type "^4.1.0" globby "^6.1.0" @@ -6299,10 +7179,12 @@ imagemin@^5.3.1: immutable@^4.0.0-rc.9: version "4.0.0-rc.9" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.9.tgz#1e6e0094e649013ec3742d2b5aeeca5eeda4f0bf" + integrity sha512-uw4u9Jy3G2Y1qkIFtEGy9NgJxFJT1l3HKgeSFHfrvy91T8W54cJoQ+qK3fTwhil8XkEHuc2S+MI+fbD0vKObDA== import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== dependencies: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" @@ -6310,6 +7192,7 @@ import-local@^1.0.0: import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" @@ -6317,28 +7200,34 @@ import-local@^2.0.0: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= indexof@0.0.1, indexof@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -6346,18 +7235,22 @@ inflight@^1.0.4: inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== init-package-json@^1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== dependencies: glob "^7.1.1" npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" @@ -6371,12 +7264,14 @@ init-package-json@^1.10.3: inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= dependencies: source-map "~0.5.3" inquirer@3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" + integrity sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c= dependencies: ansi-escapes "^1.1.0" chalk "^1.0.0" @@ -6395,6 +7290,7 @@ inquirer@3.0.6: inquirer@3.3.0, inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -6414,6 +7310,7 @@ inquirer@3.3.0, inquirer@^3.0.6: inquirer@^6.1.0, inquirer@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -6432,6 +7329,7 @@ inquirer@^6.1.0, inquirer@^6.2.0: insert-module-globals@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" + integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== dependencies: JSONStream "^1.0.3" acorn-node "^1.5.2" @@ -6447,66 +7345,80 @@ insert-module-globals@^7.0.0: interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== ip-regex@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" + integrity sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0= ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ipaddr.js@1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= irregular-plurals@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766" + integrity sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y= is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= is-absolute@^0.1.5: version "0.1.7" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f" + integrity sha1-hHSREZ/MtftDYhfMc39/qtUPYD8= dependencies: is-relative "^0.1.0" is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-alphabetical@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== is-alphanumerical@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -6514,68 +7426,82 @@ is-alphanumerical@^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" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-arrayish@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" + integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 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" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= dependencies: builtin-modules "^1.0.0" is-bzip2@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc" + integrity sha1-XuWOqlounIDiFAe+3yOuWsCRs/w= is-callable@^1.1.1, is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== dependencies: ci-info "^1.5.0" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-decimal@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -6584,6 +7510,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -6592,318 +7519,388 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= 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" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= 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" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 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" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= is-gif@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-gif/-/is-gif-1.0.0.tgz#a6d2ae98893007bffa97a1d8c01d63205832097e" + integrity sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4= 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" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= dependencies: is-extglob "^2.1.1" is-gzip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" + integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM= is-hexadecimal@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== is-jpg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-1.0.1.tgz#296d57fdd99ce010434a7283e346ab9a1035e975" + integrity sha1-KW1X/dmc4BBDSnKD40armhA16XU= is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-natural-number@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7" + integrity sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec= is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" + integrity sha1-8mWrian0RQNO9q/xWo8AsA9VF5k= is-number@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" + integrity sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY= is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= 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" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-object@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" + integrity sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-png@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-png/-/is-png-1.1.0.tgz#d574b12bf275c0350455570b0e5b57ab062077ce" + integrity sha1-1XSxK/J1wDUEVVcLDltXqwYgd84= 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" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-relative@^0.1.0: version "0.1.3" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82" + integrity sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI= is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= is-root@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU= is-stream@^1.0.0, 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" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" + integrity sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ= is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= dependencies: html-comment-regex "^1.1.0" is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + integrity sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI= is-tar@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d" + integrity sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0= is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-url@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-valid-glob@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" + integrity sha1-1LVcafUYhvm2XHDWwmItN+KfSP4= is-whitespace-character@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" + integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" + integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is-zip@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325" + integrity sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU= is2@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/is2/-/is2-0.0.9.tgz#119556d1d1651a41ba105af803267c80b299f629" + integrity sha1-EZVW0dFlGkG6EFr4AyZ8gLKZ9ik= dependencies: deep-is "0.1.2" is@~0.2.6: version "0.2.7" resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" + integrity sha1-OzSixI81mXLzUEKEkZOucmS2NWI= isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isarray@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= isarray@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" + integrity sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA== isbinaryfile@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== dependencies: buffer-alloc "^1.2.0" isbuffer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/isbuffer/-/isbuffer-0.0.0.tgz#38c146d9df528b8bf9b0701c3d43cf12df3fc39b" + integrity sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" @@ -6911,10 +7908,12 @@ isomorphic-fetch@^2.1.1: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-api@^1.3.1: version "1.3.7" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== dependencies: async "^2.1.4" fileset "^2.0.2" @@ -6931,16 +7930,19 @@ istanbul-api@^1.3.1: istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== istanbul-lib-hook@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== dependencies: append-transform "^0.4.0" istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -6953,6 +7955,7 @@ istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: istanbul-lib-report@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== dependencies: istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" @@ -6962,6 +7965,7 @@ istanbul-lib-report@^1.1.5: istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== dependencies: debug "^3.1.0" istanbul-lib-coverage "^1.2.1" @@ -6972,16 +7976,19 @@ istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: istanbul-reports@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== dependencies: handlebars "^4.0.3" iterall@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" + integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== jasmine-reporters@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/jasmine-reporters/-/jasmine-reporters-2.3.2.tgz#898818ffc234eb8b3f635d693de4586f95548d43" + integrity sha512-u/7AT9SkuZsUfFBLLzbErohTGNsEUCKaQbsVYnLFW1gEuL2DzmBL4n8v90uZsqIqlWvWUgian8J6yOt5Fyk/+A== dependencies: mkdirp "^0.5.1" xmldom "^0.1.22" @@ -6989,10 +7996,12 @@ jasmine-reporters@^2.2.0: jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== jest-haste-map@23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.5.0.tgz#d4ca618188bd38caa6cb20349ce6610e194a8065" + integrity sha512-bt9Swigb6KZ6ZQq/fQDUwdUeHenVvZ6G/lKwJjwRGp+Fap8D4B3bND3FaeJg7vXVsLX8hXshRArbVxLop/5wLw== dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" @@ -7006,6 +8015,7 @@ jest-haste-map@23.5.0: jest-junit@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-5.1.0.tgz#e8e497d810a829bf02783125aab74b5df6caa8fe" + integrity sha512-3EVf1puv2ox5wybQDfLX3AEn3IKOgDV4E76y4pO2hBu46DEtAFZZAm//X1pzPQpqKji0zqgMIzqzF/K+uGAX9A== dependencies: jest-validate "^23.0.1" mkdirp "^0.5.1" @@ -7015,6 +8025,7 @@ jest-junit@^5.1.0: jest-silent-reporter@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/jest-silent-reporter/-/jest-silent-reporter-0.1.1.tgz#2580704abf6245009f486fbea68f697dd7db2f48" + integrity sha512-nrRzOV4151hG354tnVWfyZbFGJdylpadRWYWWPSD+WeOz2hQOjUGxvIFODnaY9cKQ7JWCtG+5LgSss22ccRhBg== dependencies: chalk "^2.3.1" jest-util "^23.0.0" @@ -7022,6 +8033,7 @@ jest-silent-reporter@^0.1.1: jpegtran-bin@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz#f60ecf4ae999c0bdad2e9fbcdf2b6f0981e7a29b" + integrity sha1-9g7PSumZwL2tLp+83ytvCYHnops= dependencies: bin-build "^2.0.0" bin-wrapper "^3.0.0" @@ -7030,30 +8042,37 @@ jpegtran-bin@^3.0.0: jquery@*, jquery@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" + integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== js-base64@^2.1.9: version "2.4.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" + integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ== js-levenshtein@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5" + integrity sha512-/812MXr9RBtMObviZ8gQBhHO8MOrGj8HlEE+4ccMTElNA/6I3u39u+bhny55Lk921yn44nSZFy9naNLElL5wgQ== js-string-escape@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.8.1, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -7061,6 +8080,7 @@ js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.8.1, js-yaml@^3.9.0: js-yaml@~3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= dependencies: argparse "^1.0.7" esprima "^2.6.0" @@ -7068,10 +8088,12 @@ js-yaml@~3.7.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: abab "^2.0.0" acorn "^5.5.3" @@ -7103,82 +8125,100 @@ jsdom@^11.5.1: jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= jsesc@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stable-stringify@^1.0.0, 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" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: jsonify "~0.0.0" json-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= dependencies: jsonify "~0.0.0" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json3@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -7188,12 +8228,14 @@ jsprim@^1.2.2: jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= dependencies: array-includes "^3.0.3" karma-browserify@^5.1.1: version "5.3.0" resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-5.3.0.tgz#9001796dfd1196cbc0327b022a00c6345a28e5dd" + integrity sha512-EMaUd1RNyQVGTETI80dtX/fEtYs57/A5sl3rClvzJFImPW1s3EtsbESfqNtk7/OkzfYuAHLh4RSZSSbVgvhNdQ== dependencies: convert-source-map "^1.1.3" hat "^0.0.3" @@ -7205,6 +8247,7 @@ karma-browserify@^5.1.1: karma-chrome-launcher@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== dependencies: fs-access "^1.0.0" which "^1.2.1" @@ -7212,12 +8255,14 @@ karma-chrome-launcher@^2.1.1: karma-mocha@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf" + integrity sha1-7qrH/8DiAetjxGdEDStpx883eL8= dependencies: minimist "1.2.0" karma@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/karma/-/karma-3.0.0.tgz#6da83461a8a28d8224575c3b5b874e271b4730c3" + integrity sha512-ZTjyuDXVXhXsvJ1E4CnZzbCjSxD6sEdzEsFYogLuZM0yqvg/mgz+O+R1jb0J7uAQeuzdY8kJgx6hSNXLwFuHIQ== dependencies: bluebird "^3.3.0" body-parser "^1.16.1" @@ -7250,40 +8295,48 @@ karma@^3.0.0: kind-of@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 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" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= optionalDependencies: graceful-fs "^4.1.9" kleur@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" + integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== labeled-stream-splicer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" + integrity sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg== dependencies: inherits "^2.0.1" isarray "^2.0.4" @@ -7292,38 +8345,45 @@ labeled-stream-splicer@^2.0.0: lazy-cache@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= dependencies: set-getter "^0.1.0" lazy-req@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" + integrity sha1-va6+rTD42CQDnODOFJ1Nqge6H6w= lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= dependencies: readable-stream "^2.0.5" lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: invert-kv "^2.0.0" left-pad@^1.1.1, left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== lerna@3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.4.0.tgz#c1403852b4b3fa986072de11d7f549604fd41775" + integrity sha512-RCLm0gMi8PESEF8PzMxo35foA2NGGC/NKnKiUmJyRrhLybOIUfVPdPStSAWCjW1c+DYCgLZCbxu57/KWt4ZWZA== dependencies: "@lerna/add" "^3.3.2" "@lerna/bootstrap" "^3.3.2" @@ -7346,6 +8406,7 @@ lerna@3.4.0: level-blobs@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" + integrity sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= dependencies: level-peek "1.0.6" once "^1.3.0" @@ -7354,6 +8415,7 @@ level-blobs@^0.1.7: level-filesystem@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" + integrity sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= dependencies: concat-stream "^1.4.4" errno "^0.1.1" @@ -7368,22 +8430,26 @@ level-filesystem@^1.0.1: level-fix-range@2.0: version "2.0.0" resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" + integrity sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= dependencies: clone "~0.1.9" level-fix-range@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" + integrity sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= "level-hooks@>=4.4.0 <5": version "4.5.0" resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" + integrity sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= dependencies: string-range "~1.2" level-js@^2.1.3: version "2.2.4" resolved "https://registry.yarnpkg.com/level-js/-/level-js-2.2.4.tgz#bc055f4180635d4489b561c9486fa370e8c11697" + integrity sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc= dependencies: abstract-leveldown "~0.12.0" idb-wrapper "^1.5.0" @@ -7395,12 +8461,14 @@ level-js@^2.1.3: level-peek@1.0.6, level-peek@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" + integrity sha1-vsUccqgu5GTTNkNMfIdsP8vM538= dependencies: level-fix-range "~1.0.2" level-sublevel@^5.2.0: version "5.2.3" resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" + integrity sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= dependencies: level-fix-range "2.0" level-hooks ">=4.4.0 <5" @@ -7410,6 +8478,7 @@ level-sublevel@^5.2.0: levelup@^0.18.2: version "0.18.6" resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.18.6.tgz#e6a01cb089616c8ecc0291c2a9bd3f0c44e3e5eb" + integrity sha1-5qAcsIlhbI7MApHCqb0/DETj5es= dependencies: bl "~0.8.1" deferred-leveldown "~0.2.0" @@ -7422,10 +8491,12 @@ levelup@^0.18.2: leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -7433,6 +8504,7 @@ levn@^0.3.0, levn@~0.3.0: libnpmaccess@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.0.tgz#33cc9c8a5cb53e87d06bf2e547c2eba974f619af" + integrity sha512-SiE4AZAzMpD7pmmXHfgD7rof8QIQGoKaeyAS8exgx2CKA6tzRTbRljq1xM4Tgj8/tIg+KBJPJWkR0ifqKT3irQ== dependencies: aproba "^2.0.0" get-stream "^4.0.0" @@ -7442,10 +8514,12 @@ libnpmaccess@^3.0.0: lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= list-item@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/list-item/-/list-item-1.1.1.tgz#0c65d00e287cb663ccb3cb3849a77e89ec268a56" + integrity sha1-DGXQDih8tmPMs8s4Sad+iewmilY= dependencies: expand-range "^1.8.1" extend-shallow "^2.0.1" @@ -7455,10 +8529,12 @@ list-item@^1.1.1: livereload-js@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.3.0.tgz#c3ab22e8aaf5bf3505d80d098cbad67726548c9a" + integrity sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg== 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" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -7469,6 +8545,7 @@ load-json-file@^1.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" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -7478,6 +8555,7 @@ load-json-file@^2.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -7487,6 +8565,7 @@ load-json-file@^4.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" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -7494,6 +8573,7 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" @@ -7501,96 +8581,119 @@ locate-path@^3.0.0: lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + integrity sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U= lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= lodash._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= lodash._reescape@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + integrity sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo= lodash._reevaluate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + integrity sha1-WLx0xAZklTrgsSTYBpltrKQx4u0= lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= lodash.bind@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + integrity sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg= dependencies: lodash._root "^3.0.0" lodash.escape@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= lodash.isequal@^4.0.0, lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" @@ -7599,58 +8702,72 @@ lodash.keys@^3.0.0: lodash.map@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= lodash.merge@^4.4.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" + integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== lodash.pad@^4.1.0: version "4.5.1" resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + integrity sha1-QzCUmoM6fI2iLMIPaibE1Z3runA= lodash.padend@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4= lodash.padstart@^4.1.0: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= lodash.reject@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8= dependencies: lodash._basecopy "^3.0.0" lodash._basetostring "^3.0.0" @@ -7665,6 +8782,7 @@ lodash.template@^3.0.0: lodash.template@^4.0.2: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= dependencies: lodash._reinterpolate "~3.0.0" lodash.templatesettings "^4.0.0" @@ -7672,6 +8790,7 @@ lodash.template@^4.0.2: lodash.templatesettings@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + integrity sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= dependencies: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" @@ -7679,30 +8798,36 @@ lodash.templatesettings@^3.0.0: lodash.templatesettings@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= dependencies: lodash._reinterpolate "~3.0.0" lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== log-symbols@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" log4js@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/log4js/-/log4js-3.0.5.tgz#b80146bfebad68b430d4f3569556d8a6edfef303" + integrity sha512-IX5c3G/7fuTtdr0JjOT2OIR12aTESVhsH6cEsijloYwKgcPRlO6DgOU72v0UFhWcoV1HN6+M3dwT89qVPLXm0w== dependencies: circular-json "^0.5.5" date-format "^1.2.0" @@ -7713,6 +8838,7 @@ log4js@^3.0.0: logalot@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552" + integrity sha1-X46MkNME7fElMJUaVVSruMXj9VI= dependencies: figures "^1.3.5" squeak "^1.0.0" @@ -7720,16 +8846,19 @@ logalot@^2.0.0: longest@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" @@ -7737,10 +8866,12 @@ loud-rejection@^1.0.0: lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lpad-align@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e" + integrity sha1-IfYArBwwlcPG5JfuZyce4ISB/p4= dependencies: get-stdin "^4.0.1" indent-string "^2.1.0" @@ -7750,10 +8881,12 @@ lpad-align@^1.0.1: lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" + integrity sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0= lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -7761,22 +8894,26 @@ lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: ltgt@^2.1.2: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= magic-string@^0.22.4, magic-string@^0.22.5: version "0.22.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" + integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== dependencies: vlq "^0.2.2" make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" make-fetch-happen@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" + integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ== dependencies: agentkeepalive "^3.4.1" cacache "^11.0.1" @@ -7793,44 +8930,53 @@ make-fetch-happen@^4.0.1: makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" map-age-cleaner@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" + integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ== dependencies: p-defer "^1.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" markdown-escapes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" + integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== markdown-link@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/markdown-link/-/markdown-link-0.1.1.tgz#32c5c65199a6457316322d1e4229d13407c8c7cf" + integrity sha1-MsXGUZmmRXMWMi0eQinRNAfIx88= markdown-toc@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/markdown-toc/-/markdown-toc-1.2.0.tgz#44a15606844490314afc0444483f9e7b1122c339" + integrity sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg== dependencies: concat-stream "^1.5.2" diacritics-map "^0.1.0" @@ -7848,14 +8994,17 @@ markdown-toc@^1.2.0: math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= math-random@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0= dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -7863,20 +9012,24 @@ md5.js@^1.3.4: mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" mem@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" + integrity sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA== dependencies: map-age-cleaner "^0.1.1" mimic-fn "^1.0.0" @@ -7885,6 +9038,7 @@ mem@^4.0.0: meow@^3.1.0, meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" @@ -7900,6 +9054,7 @@ meow@^3.1.0, meow@^3.3.0, meow@^3.5.0, meow@^3.7.0: meow@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" @@ -7914,28 +9069,34 @@ meow@^4.0.0: merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= merge-stream@^1.0.0, merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= dependencies: readable-stream "^2.0.1" merge2@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + integrity sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg== merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo= methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= metro-babel-register@^0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.47.1.tgz#b1ceb07e4904cba7d0de807f49404fa95e874acd" + integrity sha512-yp7Z55VrpO3ZJLgFTcBNlhYmPCfstvBDRbj0S/d6IAk9YQeI10XSFOsVJcRgbrEfihrU/un7VXc3QC8PIkjxlQ== dependencies: "@babel/core" "^7.0.0" "@babel/plugin-proposal-class-properties" "^7.0.0" @@ -7953,12 +9114,14 @@ metro-babel-register@^0.47.1: metro-babel7-plugin-react-transform@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.47.1.tgz#83cc3fa73bc42f8ab054235c1d538baed36660a1" + integrity sha512-b7drnNbVww/AastsGlVBy3o5HJUGgjEMB1UrXHYh8Me5dVqirH5uEdy0d3cQAnMaq4lv5PBmcaoX/FP0bdLI5A== dependencies: "@babel/helper-module-imports" "^7.0.0" metro-cache@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.47.1.tgz#a0a4726dc46fae0b5594ad10b6c1725abea37674" + integrity sha512-pMW9soKT2adcTLLPX52aJADPVl1u0NYKNBXG+B3J2vB4OZmtAQq66PlG+sl0sjqGoq4PoUW+Oq+L3J5RcAMTmQ== dependencies: jest-serializer "23.0.1" metro-core "0.47.1" @@ -7968,6 +9131,7 @@ metro-cache@0.47.1: metro-config@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.47.1.tgz#950a4db847d691beca91e1e8ce7c96bc978f4983" + integrity sha512-TqVGWCfD8OHqdSmQn7hEmEYxGlATim6rnhOEp5hJvqPPdVnN8iU/5qRdTl8FR7sH7Axx5TeV1pi8G86M8m0djg== dependencies: cosmiconfig "^5.0.5" metro "0.47.1" @@ -7978,6 +9142,7 @@ metro-config@0.47.1: metro-core@0.47.1, metro-core@^0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.47.1.tgz#890722cb4dd9c248be811dd3952a8be3dcb82337" + integrity sha512-xO/vP3jNd8GD2nZw7rJq+dQ/UEJ4pniHmP3rV0a8jIMRMIsknHaf8EX/C66H8bcYV0eTkRoY1MZH2AV1cCGTAw== dependencies: jest-haste-map "23.5.0" lodash.throttle "^4.1.1" @@ -7987,16 +9152,19 @@ metro-core@0.47.1, metro-core@^0.47.1: metro-memory-fs@^0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-memory-fs/-/metro-memory-fs-0.47.1.tgz#f3e21846d13ac50b46dfed877d9f593a8f35e0fc" + integrity sha512-C+QSofDZvPlWvFKMn0aYFYWpOT8t28i6TfdIhWY5AkXECUr0W8a7POgSIx022G4fWyF/SxSqccXpp7zSjn6EZA== metro-minify-uglify@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.47.1.tgz#0ef6ab8d72031a88b2468f0c4ae11f2c7afaf721" + integrity sha512-7AKb8wZJr4TiJMV5xyeV67ZGhhvh0s9tV56zCM1DIMuJVuFbqcKHJUPghiiA+zL6m1MgRMTxaIzjeNh3eM+xoA== dependencies: uglify-es "^3.1.9" metro-react-native-babel-preset@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.47.1.tgz#b74ecdafbcbac23b90d07a5bc552c22960e1ad29" + integrity sha512-p5qrbcECeZ/PYQm3Sv7cxMtVdUz4TZrhjjGFkAdmSWlhveztALYzk0lNn6fL3DCRcFRiO0NvS90JO5XXOJFk3w== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" @@ -8037,18 +9205,21 @@ metro-react-native-babel-preset@0.47.1: metro-resolver@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.47.1.tgz#fec75534c083fc50105667ee28689f0bed88dbbd" + integrity sha512-eb6i2tnVi+wASPxWk71P4lsJ7ndbRsv8qEijgTDaOBXYZliDEJW5uHC41JJK0IeRLYu+N3eGc/EdhOjTUGJj1A== dependencies: absolute-path "^0.0.0" metro-source-map@0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.47.1.tgz#54bb5b9b315d0fc695974338850dcd58d74b56ca" + integrity sha512-E3mM+CVC4m9QMCQWgHOf2iapjZbt7KeKu1AorRt5pDbWk6bPxbmdO7y+mvaZWktqveB5qTi7CCoBhvS7E7Qonw== dependencies: source-map "^0.5.6" metro@0.47.1, metro@^0.47.1: version "0.47.1" resolved "https://registry.yarnpkg.com/metro/-/metro-0.47.1.tgz#ec6e1b44a9b9a0dbc44798507e18b80478831a14" + integrity sha512-39o0ZLHNWOi8+Pc2zB/gG0bito7BEmjUF4AKZLkOSGMuQw4JF/WcgN20v3XRR4hCL8SEQr6YSFw2Vpzw8OSYyA== dependencies: "@babel/core" "^7.0.0" "@babel/generator" "^7.0.0" @@ -8103,6 +9274,7 @@ metro@0.47.1, metro@^0.47.1: micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -8121,6 +9293,7 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -8139,6 +9312,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" @@ -8146,68 +9320,82 @@ miller-rabin@^4.0.0: "mime-db@>= 1.36.0 < 2", mime-db@~1.36.0: version "1.36.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + integrity sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw== mime-db@~1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" + integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= mime-types@2.1.11: version "2.1.11" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" + integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= dependencies: mime-db "~1.23.0" mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19: version "2.1.20" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + integrity sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A== dependencies: mime-db "~1.36.0" mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= dependencies: dom-walk "^0.1.0" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= "minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= dependencies: brace-expansion "^1.0.0" minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" @@ -8215,18 +9403,22 @@ minimist-options@^3.0.1: minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + integrity sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" @@ -8234,12 +9426,14 @@ minipass@^2.2.1, minipass@^2.3.3: minizlib@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA== dependencies: minipass "^2.2.1" mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -8255,6 +9449,7 @@ mississippi@^3.0.0: mixin-deep@^1.1.3, mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -8262,12 +9457,14 @@ mixin-deep@^1.1.3, mixin-deep@^1.2.0: mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" mocha@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== dependencies: browser-stdout "1.3.1" commander "2.15.1" @@ -8284,14 +9481,17 @@ mocha@^5.0.1: mock-fs@^4.4.1: version "4.7.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.7.0.tgz#9f17e219cacb8094f4010e0a8c38589e2b33c299" + integrity sha512-WlQNtUlzMRpvLHf8dqeUmNqfdPjGY29KrJF50Ldb4AcL+vQeR8QH3wQcFMgrhTwb1gHjZn9xggho+84tBskLgA== modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== module-deps@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.1.0.tgz#d1e1efc481c6886269f7112c52c3236188e16479" + integrity sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ== dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" @@ -8312,10 +9512,12 @@ module-deps@^6.0.0: moo@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" + integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw== morgan@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== dependencies: basic-auth "~2.0.0" debug "2.6.9" @@ -8326,6 +9528,7 @@ morgan@^1.9.0: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -8337,14 +9540,17 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multimatch@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= dependencies: array-differ "^1.0.0" array-union "^1.0.1" @@ -8354,20 +9560,24 @@ multimatch@^2.1.0: multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + integrity sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s= dependencies: duplexer2 "0.0.2" mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.0.5, nan@^2.9.2: version "2.11.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" + integrity sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -8384,10 +9594,12 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nearley@^2.7.10: version "2.15.1" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.15.1.tgz#965e4e6ec9ed6b80fc81453e161efbcebb36d247" + integrity sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw== dependencies: moo "^0.4.3" nomnom "~1.6.2" @@ -8398,6 +9610,7 @@ nearley@^2.7.10: needle@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.3.tgz#c1b04da378cd634d8befe2de965dc2cfb0fd65ca" + integrity sha512-GPL22d/U9cai87FcCPO6e+MT3vyHS2j+zwotakDc7kE2DtUAqFKMXLJCTtRp+5S75vXIwQPvIxkvlctxf9q4gQ== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" @@ -8406,14 +9619,17 @@ needle@^2.2.1: negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" @@ -8422,6 +9638,7 @@ node-fetch-npm@^2.0.2: node-fetch@1.6.3, node-fetch@^1.0.1: version "1.6.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + integrity sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ= dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -8429,10 +9646,12 @@ node-fetch@1.6.3, node-fetch@^1.0.1: node-fetch@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" + integrity sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA== node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -8450,14 +9669,17 @@ node-gyp@^3.8.0: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + integrity sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg== dependencies: growly "^1.3.0" semver "^5.4.1" @@ -8467,6 +9689,7 @@ node-notifier@^5.2.1: node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -8482,16 +9705,19 @@ node-pre-gyp@^0.10.0: node-releases@^1.0.0-alpha.11: version "1.0.0-alpha.11" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" + integrity sha512-CaViu+2FqTNYOYNihXa5uPS/zry92I3vPU4nCB6JB3OeZ2UGtOpF5gRwuN4+m3hbEcL47bOXyun1jX2iC+3uEQ== dependencies: semver "^5.3.0" node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" + integrity sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8= nomnom@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + integrity sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE= dependencies: colors "0.5.x" underscore "~1.4.4" @@ -8499,12 +9725,14 @@ nomnom@~1.6.2: "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -8512,6 +9740,7 @@ nopt@^4.0.1: normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -8521,16 +9750,19 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= dependencies: object-assign "^4.0.1" prepend-http "^1.0.0" @@ -8540,10 +9772,12 @@ normalize-url@^1.4.0: npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g== npm-lifecycle@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569" + integrity sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g== dependencies: byline "^5.0.0" graceful-fs "^4.1.11" @@ -8557,6 +9791,7 @@ npm-lifecycle@^2.0.0: "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" + integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== dependencies: hosted-git-info "^2.6.0" osenv "^0.1.5" @@ -8566,6 +9801,7 @@ npm-lifecycle@^2.0.0: npm-packlist@^1.1.10, npm-packlist@^1.1.6: version "1.1.11" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -8573,6 +9809,7 @@ npm-packlist@^1.1.10, npm-packlist@^1.1.6: npm-pick-manifest@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5" + integrity sha512-q9zLP8cTr8xKPmMZN3naxp1k/NxVFsjxN6uWuO1tiw9gxg7wZWQ/b5UTfzD0ANw2q1lQxdLKTeCCksq+bPSgbQ== dependencies: npm-package-arg "^6.0.0" semver "^5.4.1" @@ -8580,6 +9817,7 @@ npm-pick-manifest@^2.1.0: npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz#aa7d9a7c92aff94f48dba0984bdef4bd131c88cc" + integrity sha512-hrw8UMD+Nob3Kl3h8Z/YjmKamb1gf7D1ZZch2otrIXM3uFLB5vjEY6DhMlq80z/zZet6eETLbOXcuQudCB3Zpw== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -8591,12 +9829,14 @@ npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -8606,6 +9846,7 @@ npm-run-path@^2.0.0: npmlog@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" + integrity sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI= dependencies: ansi "~0.3.1" are-we-there-yet "~1.1.2" @@ -8614,52 +9855,64 @@ npmlog@^2.0.4: nth-check@^1.0.1, nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= dependencies: boolbase "~1.0.0" null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= nullthrows@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.0.tgz#832bb19ef7fedab989f81675c846e2858a3917a2" + integrity sha512-YoigDq49JRqVCUlb4XlwZirXQiNCoXdwoyfklXJAEYHN+XKHWgDkrcWxNgxEtP7N+XF9Akp7Lr6wLq8HZxLttw== num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= 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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.7: version "2.0.9" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo= object-assign@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I= object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-component@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -8668,18 +9921,22 @@ object-copy@^0.1.0: object-inspect@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= object-keys@^1.0.11, object-keys@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== object-keys@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" + integrity sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= dependencies: foreach "~2.0.1" indexof "~0.0.1" @@ -8688,16 +9945,19 @@ object-keys@~0.2.0: object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -8707,6 +9967,7 @@ object.assign@^4.1.0: object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" @@ -8716,6 +9977,7 @@ object.entries@^1.0.4: object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" @@ -8723,6 +9985,7 @@ object.getownpropertydescriptors@^2.0.3: object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" @@ -8730,12 +9993,14 @@ object.omit@^2.0.0: object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" object.values@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + integrity sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" @@ -8745,36 +10010,43 @@ object.values@^1.0.4: octal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" + integrity sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opencollective@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" + integrity sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE= dependencies: babel-polyfill "6.23.0" chalk "1.1.3" @@ -8786,6 +10058,7 @@ opencollective@^1.0.3: opn@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + integrity sha1-erwi5kTf9jsKltWrfyeQwPAavJU= dependencies: object-assign "^4.0.1" pinkie-promise "^2.0.0" @@ -8793,18 +10066,21 @@ opn@4.0.2: opn@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + integrity sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ== dependencies: is-wsl "^1.1.0" opn@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a" + integrity sha1-ttmec5n3jWXDuq/+8fsojpuFJDo= dependencies: object-assign "^4.0.1" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -8812,6 +10088,7 @@ optimist@^0.6.1: optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -8823,10 +10100,12 @@ optionator@^0.8.1, optionator@^0.8.2: options@>=0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= optipng-bin@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/optipng-bin/-/optipng-bin-3.1.4.tgz#95d34f2c488704f6fd70606bfea0c659f1d95d84" + integrity sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ= dependencies: bin-build "^2.0.0" bin-wrapper "^3.0.0" @@ -8835,6 +10114,7 @@ optipng-bin@^3.0.0: ordered-read-streams@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" + integrity sha1-cTfmmzKYuzQiR6G77jiByA4v14s= dependencies: is-stream "^1.0.1" readable-stream "^2.0.1" @@ -8842,24 +10122,29 @@ ordered-read-streams@^0.3.0: original@>=0.0.5: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== dependencies: url-parse "^1.4.3" os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-filter-obj@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-1.0.3.tgz#5915330d90eced557d2d938a31c6dd214d9c63ad" + integrity sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60= os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" @@ -8868,6 +10153,7 @@ os-locale@^2.0.0: os-locale@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" + integrity sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw== dependencies: execa "^0.10.0" lcid "^2.0.0" @@ -8876,14 +10162,17 @@ os-locale@^3.0.0: os-shim@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@0, osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -8891,80 +10180,96 @@ osenv@0, osenv@^0.1.4, osenv@^0.1.5: outpipe@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + integrity sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I= dependencies: shell-quote "^1.4.2" p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= dependencies: p-reduce "^1.0.0" p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-pipe@^1.1.0, p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== p-waterfall@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= dependencies: p-reduce "^1.0.0" pacote@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.1.0.tgz#59810859bbd72984dcb267269259375d32f391e5" + integrity sha512-AFXaSWhOtQf3jHqEvg+ZYH/dfT8TKq6TKspJ4qEFwVVuh5aGvMIk6SNF8vqfzz+cBceDIs9drOcpBbrPai7i+g== dependencies: bluebird "^3.5.1" cacache "^11.0.2" @@ -8997,10 +10302,12 @@ pacote@^9.1.0: pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== parallel-transform@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= dependencies: cyclist "~0.2.2" inherits "^2.0.3" @@ -9009,12 +10316,14 @@ parallel-transform@^1.1.0: parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= dependencies: path-platform "~0.11.15" parse-asn1@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -9025,6 +10334,7 @@ parse-asn1@^5.0.0: parse-entities@^1.0.2: version "1.1.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.2.tgz#9eaf719b29dc3bd62246b4332009072e01527777" + integrity sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -9036,10 +10346,12 @@ parse-entities@^1.0.2: parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -9049,12 +10361,14 @@ parse-glob@^3.0.4: parse-json@^2.1.0, parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -9062,82 +10376,100 @@ parse-json@^4.0.0: parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== parse5@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== dependencies: "@types/node" "*" parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= dependencies: better-assert "~1.0.0" parseuri@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= dependencies: better-assert "~1.0.0" parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 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" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -9146,18 +10478,21 @@ path-type@^1.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" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" pbkdf2@^3.0.3: version "3.0.16" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + integrity sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -9168,60 +10503,72 @@ pbkdf2@^3.0.3: pegjs@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 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" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.0.tgz#850b18781b4ac6ec58a43c9ed9ec5fe6796addbd" + integrity sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA== dependencies: node-modules-regexp "^1.0.0" pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: find-up "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" plist@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b" + integrity sha1-CjLKlIGxw2TpLhjcVch23p0B2os= dependencies: base64-js "1.1.2" xmlbuilder "8.2.2" @@ -9230,6 +10577,7 @@ plist@2.0.1: plist@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== dependencies: base64-js "^1.2.3" xmlbuilder "^9.0.7" @@ -9238,6 +10586,7 @@ plist@^3.0.0: plugin-error@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= dependencies: ansi-cyan "^0.1.1" ansi-red "^0.1.1" @@ -9248,24 +10597,29 @@ plugin-error@^0.1.2: plur@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" + integrity sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo= dependencies: irregular-plurals "^1.0.0" pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= dependencies: postcss "^5.0.2" postcss-message-helpers "^2.0.0" @@ -9274,6 +10628,7 @@ postcss-calc@^5.2.0: postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= dependencies: colormin "^1.0.5" postcss "^5.0.13" @@ -9282,6 +10637,7 @@ postcss-colormin@^2.1.8: postcss-convert-values@^2.3.4: version "2.6.1" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= dependencies: postcss "^5.0.11" postcss-value-parser "^3.1.2" @@ -9289,30 +10645,35 @@ postcss-convert-values@^2.3.4: postcss-discard-comments@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= dependencies: postcss "^5.0.14" postcss-discard-duplicates@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= dependencies: postcss "^5.0.4" postcss-discard-empty@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= dependencies: postcss "^5.0.14" postcss-discard-overridden@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= dependencies: postcss "^5.0.16" postcss-discard-unused@^2.2.1: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= dependencies: postcss "^5.0.14" uniqs "^2.0.0" @@ -9320,12 +10681,14 @@ postcss-discard-unused@^2.2.1: postcss-filter-plugins@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== dependencies: postcss "^5.0.4" postcss-merge-idents@^2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= dependencies: has "^1.0.1" postcss "^5.0.10" @@ -9334,12 +10697,14 @@ postcss-merge-idents@^2.1.5: postcss-merge-longhand@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= dependencies: postcss "^5.0.4" postcss-merge-rules@^2.0.3: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= dependencies: browserslist "^1.5.2" caniuse-api "^1.5.2" @@ -9350,10 +10715,12 @@ postcss-merge-rules@^2.0.3: postcss-message-helpers@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= postcss-minify-font-values@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= dependencies: object-assign "^4.0.1" postcss "^5.0.4" @@ -9362,6 +10729,7 @@ postcss-minify-font-values@^1.0.2: postcss-minify-gradients@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= dependencies: postcss "^5.0.12" postcss-value-parser "^3.3.0" @@ -9369,6 +10737,7 @@ postcss-minify-gradients@^1.0.1: postcss-minify-params@^1.0.4: version "1.2.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.2" @@ -9378,6 +10747,7 @@ postcss-minify-params@^1.0.4: postcss-minify-selectors@^2.0.4: version "2.1.1" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= dependencies: alphanum-sort "^1.0.2" has "^1.0.1" @@ -9387,12 +10757,14 @@ postcss-minify-selectors@^2.0.4: postcss-normalize-charset@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= dependencies: postcss "^5.0.5" postcss-normalize-url@^3.0.7: version "3.0.8" resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= dependencies: is-absolute-url "^2.0.0" normalize-url "^1.4.0" @@ -9402,6 +10774,7 @@ postcss-normalize-url@^3.0.7: postcss-ordered-values@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.1" @@ -9409,6 +10782,7 @@ postcss-ordered-values@^2.1.0: postcss-reduce-idents@^2.2.2: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= dependencies: postcss "^5.0.4" postcss-value-parser "^3.0.2" @@ -9416,12 +10790,14 @@ postcss-reduce-idents@^2.2.2: postcss-reduce-initial@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= dependencies: postcss "^5.0.4" postcss-reduce-transforms@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= dependencies: has "^1.0.1" postcss "^5.0.8" @@ -9430,6 +10806,7 @@ postcss-reduce-transforms@^1.0.3: postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= dependencies: flatten "^1.0.2" indexes-of "^1.0.1" @@ -9438,6 +10815,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: postcss-svgo@^2.1.1: version "2.1.6" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= dependencies: is-svg "^2.0.0" postcss "^5.0.14" @@ -9447,6 +10825,7 @@ postcss-svgo@^2.1.1: postcss-unique-selectors@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= dependencies: alphanum-sort "^1.0.1" postcss "^5.0.4" @@ -9455,10 +10834,12 @@ postcss-unique-selectors@^2.0.2: postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= postcss-zindex@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= dependencies: has "^1.0.1" postcss "^5.0.4" @@ -9467,6 +10848,7 @@ postcss-zindex@^2.0.1: postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -9476,6 +10858,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 postcss@^7.0.1, postcss@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.2.tgz#7b5a109de356804e27f95a960bef0e4d5bc9bb18" + integrity sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw== dependencies: chalk "^2.4.1" source-map "^0.6.1" @@ -9484,26 +10867,32 @@ postcss@^7.0.1, postcss@^7.0.2: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= prettier@^1.13.3, prettier@^1.13.4: version "1.14.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" + integrity sha512-McHPg0n1pIke+A/4VcaS2en+pTNjy4xF+Uuq86u/5dyDO59/TtFZtQ708QIRkEZ3qwKz3GVkVa6mpxK/CpB8Rg== pretty-format@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d" + integrity sha1-UwvlxCs8BbNkFKeipDN6qArNDo0= prettylint@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettylint/-/prettylint-1.0.0.tgz#b71720ad9733e098fdd8ebea90c61cda33371aa1" + integrity sha512-IjIAoGeIve8NQR6WbslnMs5rcnEVbJkZN/IXm302wNlSEo+3pIyxroy+3bkEFLP14prz1Aq1GGlKsX0UXHXuEQ== dependencies: eslint-formatter-pretty "^1.3.0" eslint-plugin-prettier "^2.2.0" @@ -9516,40 +10905,49 @@ prettylint@^1.0.0: prismjs@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + integrity sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA== optionalDependencies: clipboard "^2.0.0" private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-es6@^0.11.2, process-es6@^0.11.6: version "0.11.6" resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" + integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" retry "^0.10.0" @@ -9557,18 +10955,21 @@ promise-retry@^1.1.1: promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" promise@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.2.tgz#9dcd0672192c589477d56891271bdc27547ae9f0" + integrity sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw== dependencies: asap "~2.0.6" prompts@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-1.1.0.tgz#8a8b33030943e8355e06f81bebc436f7aa669d42" + integrity sha512-VbHgVvxagRhlvKA/y3UXdYZnvD9A5CMmBmqnxqW/UY6vLSnG7QaB7w+gZeZ5m0ZXUCY66fBCS1Qp9fn8BsZhNw== dependencies: kleur "^2.0.1" sisteransi "^1.0.0" @@ -9576,12 +10977,14 @@ prompts@^1.1.0: promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== dependencies: loose-envify "^1.3.1" object-assign "^4.1.1" @@ -9589,16 +10992,19 @@ prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2: proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= protoduck@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70" + integrity sha512-agsGWD8/RZrS4ga6v82Fxb0RHIS2RZnbsSue6A9/MBRhB/jcqOANAMNrqM9900b8duj+Gx+T/JMy5IowDoO/hQ== dependencies: genfun "^4.0.1" proxy-addr@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== dependencies: forwarded "~0.1.2" ipaddr.js "1.8.0" @@ -9606,22 +11012,27 @@ proxy-addr@~2.0.3: prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + integrity sha1-GoS4WQgyVQFBGFPQCB7j+obikmo= prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: version "1.1.29" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== public-encrypt@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + integrity sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q== dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -9632,6 +11043,7 @@ public-encrypt@^4.0.0: pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -9639,6 +11051,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -9646,6 +11059,7 @@ pump@^3.0.0: pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -9654,38 +11068,47 @@ pumpify@^1.3.3: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== q@0.9.7: version "0.9.7" resolved "https://registry.yarnpkg.com/q/-/q-0.9.7.tgz#4de2e6cb3b29088c9e4cbc03bf9d42fb96ce2f75" + integrity sha1-TeLmyzspCIyeTLwDv51C+5bOL3U= q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qjobs@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A== qs@^6.4.0, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= dependencies: object-assign "^4.1.0" strict-uri-encode "^1.0.0" @@ -9693,32 +11116,39 @@ query-string@^4.1.0: querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= querystringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" + integrity sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw== quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + integrity sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw== dependencies: performance-now "^2.1.0" railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= randexp@0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== dependencies: discontinuous-range "1.0.0" ret "~0.1.10" @@ -9726,6 +11156,7 @@ randexp@0.4.6: randomatic@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + integrity sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ== dependencies: is-number "^4.0.0" kind-of "^6.0.0" @@ -9734,12 +11165,14 @@ randomatic@^3.0.0: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -9747,10 +11180,12 @@ randomfill@^1.0.3: range-parser@^1.2.0, range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= raw-body@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + integrity sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k= dependencies: bytes "3.0.0" http-errors "1.6.2" @@ -9760,6 +11195,7 @@ raw-body@2.3.2: raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= dependencies: bytes "1" string_decoder "0.10" @@ -9767,6 +11203,7 @@ raw-body@~1.1.0: rc@^1.1.2, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -9776,14 +11213,17 @@ rc@^1.1.2, rc@^1.2.7: react-clone-referenced-element@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/react-clone-referenced-element/-/react-clone-referenced-element-1.1.0.tgz#9cdda7f2aeb54fea791f3ab8c6ab96c7a77d0158" + integrity sha512-FKOsfKbBkPxYE8576EM6uAfHC4rnMpLyH6/TJUL4WcHUEB3EUn8AxPjnnV/IiwSSzsClvHYK+sDELKN/EJ0WYg== react-deep-force-update@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" + integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA== react-dev-utils@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.2.tgz#7bb68d2c4f6ffe7ed1184c5b0124fcad692774d2" + integrity sha512-d2FbKvYe4XAQx5gjHBoWG+ADqC3fGZzjb7i9vxd/Y5xfLkBGtQyX7aOb8lBRQPYUhjngiD3d49LevjY1stUR0Q== dependencies: address "1.0.3" babel-code-frame "6.26.0" @@ -9807,6 +11247,7 @@ react-dev-utils@^5.0.2: react-devtools-core@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.4.0.tgz#6b61594dce01b129a9e0b44b5bc4952f8f59ceec" + integrity sha512-yV3LLhoRwbfcQyVPNwb1EZ9W7CGu+kX2EqyZ3Cl5C+cbXcb6FJ3YSeeBt9BQB+hjyjRMBjQSKqnpPS6OMSEUow== dependencies: shell-quote "^1.6.1" ws "^3.3.1" @@ -9814,6 +11255,7 @@ react-devtools-core@^3.4.0: react-dom@*, react-dom@^16.5.0: version "16.5.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.5.2.tgz#b69ee47aa20bab5327b2b9d7c1fe2a30f2cfa9d7" + integrity sha512-RC8LDw8feuZOHVgzEf7f+cxBr/DnKdqp56VU0lAs1f4UfKc4cU8wU4fTq/mgnvynLQo8OtlPC19NUFh/zjZPuA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -9823,6 +11265,7 @@ react-dom@*, react-dom@^16.5.0: react-dom@16.4.1: version "16.4.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.1.tgz#7f8b0223b3a5fbe205116c56deb85de32685dad6" + integrity sha512-1Gin+wghF/7gl4Cqcvr1DxFX2Osz7ugxSwl6gBqCMpdrxHjIFUS7GYxrFftZ9Ln44FHw0JxCFD9YtZsrbR5/4A== dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -9832,14 +11275,17 @@ react-dom@16.4.1: react-error-overlay@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.1.tgz#417addb0814a90f3a7082eacba7cee588d00da89" + integrity sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw== react-is@^16.4.2, react-is@^16.5.2: version "16.5.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.2.tgz#e2a7b7c3f5d48062eb769fcb123505eb928722e3" + integrity sha512-hSl7E6l25GTjNEZATqZIuWOgSnpXb3kD0DVCujmg46K5zLxsbiKaaT6VO9slkSBDPZfYs30lwfJwbOFOnoEnKQ== react-native@0.57.2: version "0.57.2" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.57.2.tgz#6beb2985bd94686087613af8d2af653f5fb61ffa" + integrity sha512-UbFbyt0rfrNLOtBXn3EmtHJ3EqL0/PhGCfGGZIg7vHn/U4K+2wZNvrLwzhqiZYSjvtmJluA1vMiQTvWBupCx8w== dependencies: "@babel/runtime" "^7.0.0" absolute-path "^0.0.0" @@ -9897,6 +11343,7 @@ react-native@0.57.2: react-proxy@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/react-proxy/-/react-proxy-1.1.8.tgz#9dbfd9d927528c3aa9f444e4558c37830ab8c26a" + integrity sha1-nb/Z2SdSjDqp9ETkVYw3gwq4wmo= dependencies: lodash "^4.6.1" react-deep-force-update "^1.0.0" @@ -9904,6 +11351,7 @@ react-proxy@^1.1.7: react-test-renderer@*, react-test-renderer@^16.0.0-0: version "16.5.2" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae" + integrity sha512-AGbJYbCVx1J6jdUgI4s0hNp+9LxlgzKvXl0ROA3DHTrtjAr00Po1RhDZ/eAq2VC/ww8AHgpDXULh5V2rhEqqJg== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" @@ -9913,10 +11361,12 @@ react-test-renderer@*, react-test-renderer@^16.0.0-0: react-timer-mixin@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" + integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== react-transform-hmr@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb" + integrity sha1-4aQL0Krvxy6N/Xp82gmvhQZjl7s= dependencies: global "^4.3.0" react-proxy "^1.1.7" @@ -9924,6 +11374,7 @@ react-transform-hmr@^1.0.4: react@*, react@^16.5.0: version "16.5.2" resolved "https://registry.yarnpkg.com/react/-/react-16.5.2.tgz#19f6b444ed139baa45609eee6dc3d318b3895d42" + integrity sha512-FDCSVd3DjVTmbEAjUNX6FgfAmQ+ypJfHUsqUJOYNCBUp1h8lqmtC+0mXJ+JjsWx4KAVTkk1vKd1hLQPvEviSuw== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -9933,6 +11384,7 @@ react@*, react@^16.5.0: react@16.4.1: version "16.4.1" resolved "https://registry.yarnpkg.com/react/-/react-16.4.1.tgz#de51ba5764b5dbcd1f9079037b862bd26b82fe32" + integrity sha512-3GEs0giKp6E0Oh/Y9ZC60CmYgUPnp7voH9fbjWsvXtYFb4EWtgQub0ADSq0sJR0BbHc4FThLLtzlcFaFXIorwg== dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -9942,6 +11394,7 @@ react@16.4.1: react@16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/react/-/react-16.5.0.tgz#f2c1e754bf9751a549d9c6d9aca41905beb56575" + integrity sha512-nw/yB/L51kA9PsAy17T1JrzzGRk+BlFCJwFF7p+pwVxgqwPjYNeZEkkH7LXn9dmflolrYMXLWMTkQ77suKPTNQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -9951,6 +11404,7 @@ react@16.5.0: read-all-stream@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" + integrity sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po= dependencies: pinkie-promise "^2.0.0" readable-stream "^2.0.0" @@ -9958,18 +11412,21 @@ read-all-stream@^3.0.0: read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" + integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= dependencies: graceful-fs "^4.1.2" read-only-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= dependencies: readable-stream "^2.0.2" "read-package-json@1 || 2", read-package-json@^2.0.0: version "2.0.13" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" + integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" @@ -9981,6 +11438,7 @@ read-only-stream@^2.0.0: read-package-tree@^5.1.6: version "5.2.1" resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" + integrity sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -9991,6 +11449,7 @@ read-package-tree@^5.1.6: 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" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -9998,6 +11457,7 @@ read-pkg-up@^1.0.1: 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" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" @@ -10005,6 +11465,7 @@ read-pkg-up@^2.0.0: read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" @@ -10012,6 +11473,7 @@ read-pkg-up@^3.0.0: read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -10020,6 +11482,7 @@ read-pkg@^1.0.0, read-pkg@^1.1.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -10028,6 +11491,7 @@ read-pkg@^2.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -10036,12 +11500,14 @@ read-pkg@^3.0.0: read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -10054,6 +11520,7 @@ read@1, read@~1.0.1: "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.26, readable-stream@~1.0.26-4: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -10063,6 +11530,7 @@ read@1, read@~1.0.1: readable-stream@^1.0.26-4, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -10072,6 +11540,7 @@ readable-stream@^1.0.26-4, readable-stream@~1.1.9: readable-stream@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.3.tgz#a4db8813e3e0b87abdc01d5d5dbae828e59744b5" + integrity sha512-CzN1eAu5Pmh4EaDlJp1g5E37LIHR24b82XlMWRQlPFjhvOYKa4HhClRsQO21zhdDWUpdWfiKt9/L/ZL2+vwxCw== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -10080,6 +11549,7 @@ readable-stream@^3.0.3: readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -10089,6 +11559,7 @@ readdir-scoped-modules@^1.0.0: readdirp@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: graceful-fs "^4.1.11" micromatch "^3.1.10" @@ -10097,24 +11568,28 @@ readdirp@^2.0.0: realpath-native@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" + integrity sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g== dependencies: util.promisify "^1.0.0" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" recursive-readdir@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk= dependencies: minimatch "3.0.3" redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" @@ -10122,6 +11597,7 @@ redent@^1.0.0: redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: indent-string "^3.0.0" strip-indent "^2.0.0" @@ -10129,6 +11605,7 @@ redent@^2.0.0: reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= dependencies: balanced-match "^0.4.2" math-expression-evaluator "^1.2.14" @@ -10137,34 +11614,41 @@ reduce-css-calc@^1.2.6: reduce-function-call@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk= dependencies: balanced-match "^0.4.2" regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + integrity sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw== dependencies: regenerate "^1.4.0" regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regenerator-runtime@*, regenerator-runtime@^0.12.0: version "0.12.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -10173,18 +11657,21 @@ regenerator-transform@^0.10.0: regenerator-transform@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" + integrity sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA== dependencies: private "^0.1.6" regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -10192,10 +11679,12 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexpp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365" + integrity sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA== regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -10204,6 +11693,7 @@ regexpu-core@^2.0.0: regexpu-core@^4.1.3, regexpu-core@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + integrity sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^7.0.0" @@ -10215,26 +11705,31 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0: regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsgen@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + integrity sha512-X51Lte1gCYUdlwhF28+2YMO0U6WeN0GLpgpA7LK7mbdDnkQYiwvEpmpe0F/cv5L14EbxgrdayAG3JETBv0dbXA== regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= dependencies: jsesc "~0.5.0" regjsparser@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + integrity sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA== dependencies: jsesc "~0.5.0" remark-parse@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-3.0.1.tgz#1b9f841a44d8f4fbf2246850265459a4eb354c80" + integrity sha1-G5+EGkTY9PvyJGhQJlRZpOs1TIA= dependencies: collapse-white-space "^1.0.2" has "^1.0.1" @@ -10256,6 +11751,7 @@ remark-parse@^3.0.0: remarkable@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/remarkable/-/remarkable-1.7.1.tgz#aaca4972100b66a642a63a1021ca4bac1be3bff6" + integrity sha1-qspJchALZqZCpjoQIcpLrBvjv/Y= dependencies: argparse "~0.1.15" autolinker "~0.15.0" @@ -10263,46 +11759,56 @@ remarkable@^1.7.1: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" + integrity sha1-x6jTI2BoNiBZp+RlH8aITosftK4= repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" repl@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/repl/-/repl-0.1.3.tgz#2f05d42b0c88b43d05ccbda10ed14aeff5699b60" + integrity sha1-LwXUKwyItD0FzL2hDtFK7/Vpm2A= replace-ext@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= request-promise-core@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= dependencies: lodash "^4.13.1" request-promise-native@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= dependencies: request-promise-core "1.1.1" stealthy-require "^1.1.0" @@ -10311,6 +11817,7 @@ request-promise-native@^1.0.5: request@^2.53.0, request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -10336,14 +11843,17 @@ request@^2.53.0, request@^2.87.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 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" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" @@ -10351,16 +11861,19 @@ require-uncached@^1.0.3: requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" resolve-dir@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" @@ -10368,32 +11881,39 @@ resolve-dir@^1.0.0: resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@^1.1.4, resolve@^1.1.6, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== dependencies: path-parse "^1.0.5" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -10401,28 +11921,34 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= rfdc@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" + integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -10430,12 +11956,14 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: rollup-plugin-babel@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz#5b13611f1ab8922497e9d15197ae5d8a23fe3b1e" + integrity sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA== dependencies: rollup-pluginutils "^1.5.0" rollup-plugin-commonjs@^9.1.6: version "9.1.8" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.8.tgz#4113ed94e6054b5f8a3501d8811f934cadde3246" + integrity sha512-c3nAfVVyEwbq9OohIeQudfQQdGV9Cl1RE8MUc90fH9UdtCiWAYpI+au3HxGwNf1DdV51HfBjCDbT4fwjsZEUUg== dependencies: estree-walker "^0.5.1" magic-string "^0.22.4" @@ -10445,6 +11973,7 @@ rollup-plugin-commonjs@^9.1.6: rollup-plugin-flow@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz#6ce568f1dd559666b77ab76b4bae251407528db6" + integrity sha1-bOVo8d1Vlma3erdrS64lFAdSjbY= dependencies: flow-remove-types "^1.1.0" rollup-pluginutils "^1.5.1" @@ -10452,12 +11981,14 @@ rollup-plugin-flow@^1.1.1: rollup-plugin-json@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz#7c1daf60c46bc21021ea016bd00863561a03321b" + integrity sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw== dependencies: rollup-pluginutils "^2.3.1" rollup-plugin-node-builtins@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz#24a1fed4a43257b6b64371d8abc6ce1ab14597e9" + integrity sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k= dependencies: browserify-fs "^1.0.0" buffer-es6 "^4.9.2" @@ -10467,6 +11998,7 @@ rollup-plugin-node-builtins@^2.1.1: rollup-plugin-node-globals@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" + integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== dependencies: acorn "^5.7.3" buffer-es6 "^4.9.3" @@ -10478,6 +12010,7 @@ rollup-plugin-node-globals@^1.1.0: rollup-plugin-node-resolve@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== dependencies: builtin-modules "^2.0.0" is-module "^1.0.0" @@ -10486,6 +12019,7 @@ rollup-plugin-node-resolve@^3.0.0: rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + integrity sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg= dependencies: estree-walker "^0.2.1" minimatch "^3.0.2" @@ -10493,6 +12027,7 @@ rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1: rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.1: version "2.3.3" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" + integrity sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA== dependencies: estree-walker "^0.5.2" micromatch "^2.3.11" @@ -10500,6 +12035,7 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.1: rollup@^0.66.0: version "0.66.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.0.tgz#697acc008f4b613695b17222c7626affddf4a506" + integrity sha512-WOkVBSdod3phCSAri5Q579JufeAzJTi43L4oAHzFtjRWJTv2LIszYCU3K9TLMEsVksMY93EwgWCb+hpKRhQwGg== dependencies: "@types/estree" "0.0.39" "@types/node" "*" @@ -10507,6 +12043,7 @@ rollup@^0.66.0: rst-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= dependencies: lodash.flattendeep "^4.4.0" nearley "^2.7.10" @@ -10514,64 +12051,77 @@ rst-selector-parser@^2.2.3: rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= rx@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= rxjs@^6.1.0: version "6.3.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f" + integrity sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw== dependencies: tslib "^1.9.0" safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^2.0.0: version "2.5.2" resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= dependencies: anymatch "^2.0.0" capture-exit "^1.2.0" @@ -10587,6 +12137,7 @@ sane@^2.0.0: sane@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/sane/-/sane-3.0.0.tgz#32e88d110b32dcd0ae3b88bdc58d8e4762cdf49a" + integrity sha512-KGvk4zLXD2ZlgZgKB/SfQ1vjWkjqIEnNUXa5+w1NKG6nZztydyI7JYC03Xa9HcpR9QjW5TjY29V1gZKDmCMaJA== dependencies: anymatch "^2.0.0" capture-exit "^1.2.0" @@ -10602,62 +12153,75 @@ sane@^3.0.0: sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== sax@~1.1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/sax/-/sax-1.1.6.tgz#5d616be8a5e607d54e114afae55b7eaf2fcc3240" + integrity sha1-XWFr6KXmB9VOEUr65Vt+ry/MMkA= schedule@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.3.0.tgz#1be2ab2fc2e768536269ce7326efb478d6c045e8" + integrity sha512-20+1KVo517sR7Nt+bYBN8a+bEJDKLPEx7Ohtts1kX05E4/HY53YUNuhfkVNItmWAnBYHcpG9vsd2/CJxG+aPCQ== dependencies: object-assign "^4.1.1" schedule@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.5.0.tgz#c128fffa0b402488b08b55ae74bb9df55cc29cc8" + integrity sha512-HUcJicG5Ou8xfR//c2rPT0lPIRR09vVvN81T9fqfVgBmhERUbDEQoYKjpBxbueJnCPpSu2ujXzOnRQt6x9o/jw== dependencies: object-assign "^4.1.1" seek-bzip@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= dependencies: commander "~2.8.1" select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= semver-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" + integrity sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk= semver-truncate@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8" + integrity sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g= dependencies: semver "^5.3.0" "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw== semver@^4.0.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= semver@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-2.3.2.tgz#b9848f25d6cf36333073ec9ef8856d42f1233e52" + integrity sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI= semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" depd "~1.1.2" @@ -10676,10 +12240,12 @@ send@0.16.2: serialize-error@^2.1.0: version "2.1.0" resolved "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" + integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= serve-static@1.13.2, serve-static@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -10689,20 +12255,24 @@ serve-static@1.13.2, serve-static@^1.13.1: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-getter@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= dependencies: to-object-path "^0.3.0" set-immediate-shim@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -10712,6 +12282,7 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -10721,18 +12292,22 @@ set-value@^2.0.0: setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -10740,6 +12315,7 @@ sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: shasum@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= dependencies: json-stable-stringify "~0.0.0" sha.js "~2.4.4" @@ -10747,16 +12323,19 @@ shasum@^1.0.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 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" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shell-quote@1.6.1, shell-quote@^1.4.2, shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= dependencies: array-filter "~0.0.0" array-map "~0.0.0" @@ -10766,6 +12345,7 @@ shell-quote@1.6.1, shell-quote@^1.4.2, shell-quote@^1.6.1: shelljs@^0.7.8: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + integrity sha1-3svPh0sNHl+3LhSxZKloMEjprLM= dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -10774,18 +12354,22 @@ shelljs@^0.7.8: shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= simple-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= simple-plist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723" + integrity sha1-cXZts1IyaSjPOoByQrp2IyJjZyM= dependencies: bplist-creator "0.0.7" bplist-parser "0.1.1" @@ -10794,16 +12378,19 @@ simple-plist@^0.2.1: simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: is-arrayish "^0.3.1" sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== sitemap@^1.13.0: version "1.13.0" resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-1.13.0.tgz#569cbe2180202926a62a266cd3de09c9ceb43f83" + integrity sha1-Vpy+IYAgKSamKiZs094Jyc60P4M= dependencies: underscore "^1.7.0" url-join "^1.1.0" @@ -10811,28 +12398,34 @@ sitemap@^1.13.0: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== dependencies: is-fullwidth-code-point "^2.0.0" slide@^1.1.5, slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= smart-buffer@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" + integrity sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg== snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -10841,12 +12434,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -10860,10 +12455,12 @@ snapdragon@^0.8.1: socket.io-adapter@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= socket.io-client@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== dependencies: backo2 "1.0.2" base64-arraybuffer "0.1.5" @@ -10883,6 +12480,7 @@ socket.io-client@2.1.1: socket.io-parser@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== dependencies: component-emitter "1.2.1" debug "~3.1.0" @@ -10891,6 +12489,7 @@ socket.io-parser@~3.2.0: socket.io@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== dependencies: debug "~3.1.0" engine.io "~3.2.0" @@ -10902,6 +12501,7 @@ socket.io@2.1.1: sockjs-client@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" + integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM= dependencies: debug "^2.6.6" eventsource "0.1.6" @@ -10913,6 +12513,7 @@ sockjs-client@1.1.5: socks-proxy-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" + integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== dependencies: agent-base "~4.2.0" socks "~2.2.0" @@ -10920,6 +12521,7 @@ socks-proxy-agent@^4.0.0: socks@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" + integrity sha512-0GabKw7n9mI46vcNrVfs0o6XzWzjVa3h6GaSo2UPxtWAROXUWavfJWh1M4PR5tnE0dcnQXZIDFP4yrAysLze/w== dependencies: ip "^1.1.5" smart-buffer "^4.0.1" @@ -10927,18 +12529,21 @@ socks@~2.2.0: sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= dependencies: is-plain-obj "^1.0.0" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" @@ -10949,12 +12554,14 @@ source-map-resolve@^0.5.0: source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-support@^0.5.6, source-map-support@^0.5.9: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -10962,22 +12569,27 @@ source-map-support@^0.5.6, source-map-support@^0.5.9: source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sparkles@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + integrity sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -10985,10 +12597,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + integrity sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" @@ -10996,32 +12610,38 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" + integrity sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== dependencies: through2 "^2.0.2" split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= squeak@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3" + integrity sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM= dependencies: chalk "^1.0.0" console-stream "^0.1.1" @@ -11030,6 +12650,7 @@ squeak@^1.0.0: sshpk@^1.7.0: version "1.14.2" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + integrity sha1-xvxhZIo9nE52T9P8306hBeSSupg= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -11045,32 +12666,39 @@ sshpk@^1.7.0: ssri@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= stacktrace-parser@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz#01397922e5f62ecf30845522c95c4fe1d25e7d4e" + integrity sha1-ATl5IuX2Ls8whFUiyVxP4dJefU4= stat-mode@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" + integrity sha1-5sgLYjEj19gM8TLOU480YokHJQI= state-toggle@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -11078,22 +12706,27 @@ static-extend@^0.1.1: "statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-browserify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -11101,10 +12734,12 @@ stream-browserify@^2.0.0: stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" @@ -11112,6 +12747,7 @@ stream-combiner2@^1.1.1: stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -11119,6 +12755,7 @@ stream-each@^1.1.0: stream-http@^2.0.0: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -11129,10 +12766,12 @@ stream-http@^2.0.0: stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= stream-splicer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + integrity sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM= dependencies: inherits "^2.0.1" readable-stream "^2.0.2" @@ -11140,6 +12779,7 @@ stream-splicer@^2.0.0: streamroller@0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" + integrity sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ== dependencies: date-format "^1.2.0" debug "^3.1.0" @@ -11149,10 +12789,12 @@ streamroller@0.7.0: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= dependencies: astral-regex "^1.0.0" strip-ansi "^4.0.0" @@ -11160,14 +12802,17 @@ string-length@^2.0.0: string-range@~1.2, string-range@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" + integrity sha1-qJPtNH5yKZvIO++78qaSqNI51d0= string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -11176,6 +12821,7 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -11183,6 +12829,7 @@ string-width@^1.0.1: string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= dependencies: define-properties "^1.1.2" es-abstract "^1.5.0" @@ -11191,34 +12838,40 @@ string.prototype.trim@^1.1.2: string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@3.0.1, 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" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-ansi@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== dependencies: ansi-regex "^4.0.0" strip-bom-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" + integrity sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4= dependencies: first-chunk-stream "^1.0.0" strip-bom "^2.0.0" @@ -11226,20 +12879,24 @@ strip-bom-stream@^1.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" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-color@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/strip-color/-/strip-color-0.1.0.tgz#106f65d3d3e6a2d9401cac0eb0ce8b8a702b4f7b" + integrity sha1-EG9l09PmotlAHKwOsM6LinArT3s= strip-dirs@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0" + integrity sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA= dependencies: chalk "^1.0.0" get-stdin "^4.0.1" @@ -11251,30 +12908,36 @@ strip-dirs@^1.0.0: strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: get-stdin "^4.0.1" strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= strip-outer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: escape-string-regexp "^1.0.2" strong-log-transformer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz#fa6d8e0a9e62b3c168c3cad5ae5d00dc97ba26cc" + integrity sha512-FQmNqAXJgOX8ygOcvPLlGWBNT41mvNJ9ALoYf0GTwVt9t30mGTqpmp/oJx5gLcu52DXK10kS7dVWhx8aPXDTlg== dependencies: byline "^5.0.0" duplexer "^0.1.1" @@ -11284,40 +12947,47 @@ strong-log-transformer@^2.0.0: subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= dependencies: minimist "^1.1.0" sum-up@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e" + integrity sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4= dependencies: chalk "^1.0.0" supports-color@5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== dependencies: has-flag "^3.0.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= dependencies: coa "~1.0.1" colors "~1.1.2" @@ -11330,6 +13000,7 @@ svgo@^0.7.0: svgo@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" + integrity sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g== dependencies: coa "~2.0.1" colors "~1.1.2" @@ -11349,16 +13020,19 @@ svgo@^1.0.0: symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== dependencies: acorn-node "^1.2.0" table@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg== dependencies: ajv "^6.0.1" ajv-keywords "^3.0.0" @@ -11370,6 +13044,7 @@ table@^4.0.3: tar-stream@^1.1.1: version "1.6.1" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" + integrity sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA== dependencies: bl "^1.0.0" buffer-alloc "^1.1.0" @@ -11382,6 +13057,7 @@ tar-stream@^1.1.1: tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" @@ -11390,6 +13066,7 @@ tar@^2.0.0: tar@^4, tar@^4.4.3: version "4.4.6" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" @@ -11402,6 +13079,7 @@ tar@^4, tar@^4.4.3: tcp-port-used@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-0.1.2.tgz#9450e8768c83b416fd4d1a6a9449eeccbf496c29" + integrity sha1-lFDodoyDtBb9TRpqlEnuzL9JbCk= dependencies: debug "0.7.4" is2 "0.0.9" @@ -11410,10 +13088,12 @@ tcp-port-used@^0.1.2: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp-write@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= dependencies: graceful-fs "^4.1.2" is-stream "^1.1.0" @@ -11425,6 +13105,7 @@ temp-write@^3.4.0: temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" @@ -11432,6 +13113,7 @@ temp@0.8.3: tempfile@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" + integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I= dependencies: os-tmpdir "^1.0.0" uuid "^2.0.1" @@ -11439,6 +13121,7 @@ tempfile@^1.0.0: tempfile@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265" + integrity sha1-awRGhWqbERTRhW/8vlCczLCXcmU= dependencies: temp-dir "^1.0.0" uuid "^3.0.1" @@ -11446,6 +13129,7 @@ tempfile@^2.0.0: test-exclude@^4.2.1: version "4.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -11456,18 +13140,22 @@ test-exclude@^4.2.1: text-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.8.0.tgz#6f343c62268843019b21a616a003557bdb952d2b" + integrity sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A== text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= through2-filter@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" + integrity sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw= dependencies: through2 "~2.0.0" xtend "~4.0.0" @@ -11475,6 +13163,7 @@ through2-filter@^2.0.0: through2@^0.6.0, through2@^0.6.1: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" @@ -11482,6 +13171,7 @@ through2@^0.6.0, through2@^0.6.1: through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= dependencies: readable-stream "^2.1.5" xtend "~4.0.1" @@ -11489,28 +13179,34 @@ through2@^2.0.0, through2@^2.0.2, through2@~2.0.0: through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= time-stamp@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= timed-out@^3.0.0: version "3.1.3" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" + integrity sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc= timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= dependencies: process "~0.11.0" tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== tiny-lr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== dependencies: body "^5.1.0" debug "^3.1.0" @@ -11522,48 +13218,58 @@ tiny-lr@^1.1.1: tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-absolute-glob@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" + integrity sha1-HN+kcqnvUMI57maZm2YsoOs5k38= dependencies: extend-shallow "^2.0.1" to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-buffer@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -11571,6 +13277,7 @@ to-regex-range@^2.1.0: to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -11580,10 +13287,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: toml@^2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" + integrity sha512-O7L5hhSQHxuufWUdcTRPfuTh3phKfAZ/dqfxZFoxPCj2RYmpaSGLEIs016FCXItQwNr08yefUB5TSjzRYnajTA== tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: psl "^1.1.24" punycode "^1.4.1" @@ -11591,52 +13300,63 @@ tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" tree-node-cli@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/tree-node-cli/-/tree-node-cli-1.2.5.tgz#afd75437976bbf2cc0c52b9949798e7530e8fd8c" + integrity sha512-Yhv4bfLa3WYdJLS4FkCj0h72duPGMUjC6Ld8eBlT9BA3CfjeQyHNBfgtzQvDrw1OkQva2JSpUyslZHuweCRtGQ== dependencies: commander "^2.15.1" trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= dependencies: escape-string-regexp "^1.0.2" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= trim-trailing-lines@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== truncate-html@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/truncate-html/-/truncate-html-1.0.1.tgz#6f1d03cbb2308bfda266f9ce8f25e62c66919d4f" + integrity sha512-4Yw02HZAhGTGZsW2aNB7GtoF/SG4yPVlS4V42tehY1ZorZhIIZpdUuocdGB7W30J8WHzgOYmyhBzMTx/362Cew== dependencies: "@types/cheerio" "^0.22.8" cheerio "0.22.0" @@ -11644,6 +13364,7 @@ truncate-html@^1.0.1: ts-jest@*: version "23.1.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.1.4.tgz#66ac1d8d3fbf8f9a98432b11aa377aa850664b2b" + integrity sha512-9rCSxbWfoZxxeXnSoEIzRNr9hDIQ8iEJAWmSRsWhDHDT8OeuGfURhJQUE8jtJlkyEygs6rngH8RYtHz9cfjmEA== dependencies: closest-file-data "^0.1.4" fs-extra "6.0.1" @@ -11653,34 +13374,41 @@ ts-jest@*: tslib@^1.8.0, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== tunnel-agent@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 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" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-is@~1.6.15, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== dependencies: media-typer "0.3.0" mime-types "~2.1.18" @@ -11688,22 +13416,27 @@ type-is@~1.6.15, type-is@~1.6.16: typedarray-to-buffer@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz#9bb8ba0e841fb3f4cf1fe7c245e9f3fa8a5fe99c" + integrity sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw= typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@*, typescript@^2.2.2, typescript@^2.5.3: version "2.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== ua-parser-js@^0.7.18: version "0.7.18" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" + integrity sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA== uglify-es@^3.1.9: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== dependencies: commander "~2.13.0" source-map "~0.6.1" @@ -11711,6 +13444,7 @@ uglify-es@^3.1.9: uglify-js@^3.1.4: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== dependencies: commander "~2.17.1" source-map "~0.6.1" @@ -11718,26 +13452,32 @@ uglify-js@^3.1.4: uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== umask@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= umd@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== undeclared-identifiers@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz#7d850a98887cff4bd0bf64999c014d08ed6d1acc" + integrity sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ== dependencies: acorn-node "^1.3.0" get-assigned-identifiers "^1.2.0" @@ -11747,22 +13487,27 @@ undeclared-identifiers@^1.1.2: underscore.string@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + integrity sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs= underscore@^1.7.0: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== underscore@~1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= underscore@~1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + integrity sha1-a7rwh3UA02vjTsqlhODbn+8DUgk= unherit@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== dependencies: inherits "^2.0.1" xtend "^4.0.1" @@ -11770,10 +13515,12 @@ unherit@^1.0.4: unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" @@ -11781,14 +13528,17 @@ unicode-match-property-ecmascript@^1.0.4: unicode-match-property-value-ecmascript@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== unicode-property-aliases-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== unified@^6.1.2: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -11800,6 +13550,7 @@ unified@^6.1.2: union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -11809,26 +13560,31 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= unique-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + integrity sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM= dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + integrity sha1-22Z258fMBimHj/GWCXx4hVrp9Ks= dependencies: imurmurhash "^0.1.4" unique-stream@^2.0.2: version "2.2.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" + integrity sha1-WqADz76Uxf+GbE59ZouxxNuts2k= dependencies: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" @@ -11836,44 +13592,53 @@ unique-stream@^2.0.2: unist-util-is@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== unist-util-remove-position@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== dependencies: unist-util-visit "^1.1.0" unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-visit-parents@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== dependencies: unist-util-is "^2.1.2" unist-util-visit@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== dependencies: unist-util-visit-parents "^2.0.0" universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -11881,34 +13646,41 @@ unset-value@^1.0.0: unzip-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" + integrity sha1-uYTwh3/AqJwsdzzB73tbIytbBv4= upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-join@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" + integrity sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg= url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: prepend-http "^1.0.1" url-parse@^1.1.8, url-parse@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" + integrity sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw== dependencies: querystringify "^2.0.0" requires-port "^1.0.0" @@ -11916,12 +13688,14 @@ url-parse@^1.1.8, url-parse@^1.4.3: url-regex@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724" + integrity sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ= dependencies: ip-regex "^1.0.1" url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" @@ -11929,14 +13703,17 @@ url@~0.11.0: urlgrey@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" + integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== useragent@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e" + integrity sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4= dependencies: lru-cache "2.2.x" tmp "0.0.x" @@ -11944,10 +13721,12 @@ useragent@2.2.1: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" @@ -11955,32 +13734,39 @@ util.promisify@^1.0.0, util.promisify@~1.0.0: util@0.10.3, util@~0.10.1: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" + integrity sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE= uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== vali-date@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" + integrity sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY= validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -11988,20 +13774,24 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= vendors@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -12010,16 +13800,19 @@ verror@1.10.0: vfile-location@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.3.tgz#083ba80e50968e8d420be49dd1ea9a992131df77" + integrity sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A== vfile-message@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.1.tgz#51a2ccd8a6b97a7980bb34efb9ebde9632e93677" + integrity sha512-vSGCkhNvJzO6VcWC6AlJW4NtYOVtS+RgCaqFIYUjoGIlHnFL+i0LbtYvonDWOMcB97uTPT4PRsyYY7REWC9vug== dependencies: unist-util-stringify-position "^1.1.1" vfile@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== dependencies: is-buffer "^1.1.4" replace-ext "1.0.0" @@ -12029,6 +13822,7 @@ vfile@^2.0.0: vinyl-assign@^1.0.1: version "1.2.1" resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45" + integrity sha1-TRmIkbVRWRHXcajNnFSApGoHSkU= dependencies: object-assign "^4.0.1" readable-stream "^2.0.0" @@ -12036,6 +13830,7 @@ vinyl-assign@^1.0.1: vinyl-fs@^2.2.0: version "2.4.4" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" + integrity sha1-vm/zJwy1Xf19MGNkDegfJddTIjk= dependencies: duplexify "^3.2.0" glob-stream "^5.3.2" @@ -12058,6 +13853,7 @@ vinyl-fs@^2.2.0: vinyl@^0.4.3: version "0.4.6" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + integrity sha1-LzVsh6VQolVGHza76ypbqL94SEc= dependencies: clone "^0.2.0" clone-stats "^0.0.1" @@ -12065,6 +13861,7 @@ vinyl@^0.4.3: vinyl@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + integrity sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4= dependencies: clone "^1.0.0" clone-stats "^0.0.1" @@ -12073,6 +13870,7 @@ vinyl@^0.5.0: vinyl@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + integrity sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ= dependencies: clone "^1.0.0" clone-stats "^0.0.1" @@ -12081,36 +13879,43 @@ vinyl@^1.0.0: vlq@^0.2.1, vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== vm-browserify@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: browser-process-hrtime "^0.1.2" walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" ware@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4" + integrity sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q= dependencies: wrap-fn "^0.1.0" watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= dependencies: exec-sh "^0.2.0" minimist "^1.2.0" @@ -12118,6 +13923,7 @@ watch@~0.18.0: watchify@^3.9.0: version "3.11.0" resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.0.tgz#03f1355c643955e7ab8dcbf399f624644221330f" + integrity sha512-7jWG0c3cKKm2hKScnSAMUEUjRJKXUShwMPk0ASVhICycQhwND3IMAdhJYmc1mxxKzBUJTSF5HZizfrKrS6BzkA== dependencies: anymatch "^1.3.0" browserify "^16.1.0" @@ -12130,12 +13936,14 @@ watchify@^3.9.0: wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" weak@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e" + integrity sha1-q5mqswcGlZqgIAy4z1RbucszuZ4= dependencies: bindings "^1.2.1" nan "^2.0.5" @@ -12143,10 +13951,12 @@ weak@^1.0.1: webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= dependencies: http-parser-js ">=0.4.0" websocket-extensions ">=0.1.1" @@ -12154,24 +13964,29 @@ websocket-driver@>=0.5.1: websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" + integrity sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg== dependencies: iconv-lite "0.4.23" whatwg-fetch@>=0.10.0: version "1.1.1" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.1.1.tgz#ac3c9d39f320c6dce5339969d054ef43dd333319" + integrity sha1-rDydOfMgxtzlM5lp0FTvQ90zMxk= whatwg-mimetype@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171" + integrity sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw== whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -12180,6 +13995,7 @@ whatwg-url@^6.4.1: whatwg-url@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -12188,38 +14004,46 @@ whatwg-url@^7.0.0: whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1, which@^1.2.1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: string-width "^1.0.2 || 2" wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -12227,16 +14051,19 @@ wrap-ansi@^2.0.0: wrap-fn@^0.1.0: version "0.1.5" resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845" + integrity sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU= dependencies: co "3.1.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^1.2.0: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -12245,6 +14072,7 @@ write-file-atomic@^1.2.0: write-file-atomic@^2.0.0, write-file-atomic@^2.1.0, write-file-atomic@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -12253,6 +14081,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.1.0, write-file-atomic@^2.3.0: write-json-file@^2.2.0, write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= dependencies: detect-indent "^5.0.0" graceful-fs "^4.1.2" @@ -12264,6 +14093,7 @@ write-json-file@^2.2.0, write-json-file@^2.3.0: write-pkg@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== dependencies: sort-keys "^2.0.0" write-json-file "^2.2.0" @@ -12271,12 +14101,14 @@ write-pkg@^3.1.0: write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= dependencies: mkdirp "^0.5.1" ws@^1.1.0: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== dependencies: options ">=0.0.5" ultron "1.0.x" @@ -12284,6 +14116,7 @@ ws@^1.1.0: ws@^3.3.1, ws@~3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" @@ -12292,16 +14125,19 @@ ws@^3.3.1, ws@~3.3.1: ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== dependencies: async-limiter "~1.0.0" x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= xcode@^0.9.1: version "0.9.3" resolved "https://registry.yarnpkg.com/xcode/-/xcode-0.9.3.tgz#910a89c16aee6cc0b42ca805a6d0b4cf87211cf3" + integrity sha1-kQqJwWrubMC0LKgFptC0z4chHPM= dependencies: pegjs "^0.10.0" simple-plist "^0.2.1" @@ -12310,52 +14146,64 @@ xcode@^0.9.1: xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= xmlbuilder@8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" + integrity sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M= xmlbuilder@^9.0.7: version "9.0.7" resolved "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= xmldoc@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xmldoc/-/xmldoc-0.4.0.tgz#d257224be8393eaacbf837ef227fd8ec25b36888" + integrity sha1-0lciS+g5PqrL+DfvIn/Y7CWzaIg= dependencies: sax "~1.1.1" xmldom@0.1.x, xmldom@^0.1.22: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" + integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= xpipe@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" + integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= xregexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + integrity sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg== "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= xtend@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" + integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= xtend@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" + integrity sha1-XqZXptukRwacLlnFihE4ywxebO4= dependencies: is-object "~0.1.2" object-keys "~0.2.0" @@ -12363,32 +14211,39 @@ xtend@~2.0.4: xtend@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= dependencies: object-keys "~0.4.0" xtend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" + integrity sha1-XM50B7r2Qsunvs2laBEcST9ZZlo= y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= yamljs@^0.2.1: version "0.2.10" resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.2.10.tgz#481cc7c25ca73af59f591f0c96e3ce56c757a40f" + integrity sha1-SBzHwlynOvWfWR8MluPOVsdXpA8= dependencies: argparse "^1.0.7" glob "^7.0.5" @@ -12396,18 +14251,21 @@ yamljs@^0.2.1: yargs-parser@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== dependencies: camelcase "^4.1.0" yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= dependencies: camelcase "^4.1.0" yargs@^12.0.1, yargs@^12.0.2: version "12.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + integrity sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ== dependencies: cliui "^4.0.0" decamelize "^2.0.0" @@ -12425,12 +14283,14 @@ yargs@^12.0.1, yargs@^12.0.2: yargs@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-2.3.0.tgz#e900c87250ec5cd080db6009fe3dd63156f1d7fb" + integrity sha1-6QDIclDsXNCA22AJ/j3WMVbx1/s= dependencies: wordwrap "0.0.2" yargs@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -12449,6 +14309,7 @@ yargs@^9.0.0: yauzl@^2.2.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" @@ -12456,3 +14317,4 @@ yauzl@^2.2.1: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= From 87a5a67c483b4bd37cc8e351d8a145d7bcbd1690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Botineau?= Date: Mon, 15 Oct 2018 22:18:16 +0200 Subject: [PATCH 04/76] Fix 'Good First Issue' url in README (#7171) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f1fd0900822..0c452b9af738 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ Read our [contributing guide](CONTRIBUTING.md) to learn about our development pr ### [Good First Issues](https://github.com/facebook/jest/labels/%3Awave%3A%20Good%20First%20Issue) -To help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/facebook/jest/labels/Good%20First%20Issue%20%3Awave%3A) that contain bugs which have a relatively limited scope. This is a great place to get started. +To help you get your feet wet and get you familiar with our contribution process, we have a list of [good first issues](https://github.com/facebook/jest/labels/%3Awave%3A%20Good%20First%20Issue) that contain bugs which have a relatively limited scope. This is a great place to get started. ## Credits From ec87f3d1e99d40cf9d34bb75e996b86cab1b5b5d Mon Sep 17 00:00:00 2001 From: Gabriel Harel Date: Mon, 15 Oct 2018 20:24:24 -0400 Subject: [PATCH 05/76] Fix "should_instrument" decision when given negative testMatch pattern (#7170) ## Summary Files that match with the `testFiles` configuration aren't instrumented for test coverage. This check was being done with `multimatch.any` which behaves unexpectedly when given an inverse glob pattern (`!**/dont/**/*.js`). Reproduction: https://github.com/g-harel/jest-7165 Fixes #7165 ## Test plan I've modified an existing test case to verify that the fix works. I also linked my local fork to the reproduction project to confirm that the change had the intended effect. --- CHANGELOG.md | 1 + packages/jest-runtime/src/__tests__/should_instrument.test.js | 3 +-- packages/jest-runtime/src/should_instrument.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74882e2ce6b7..4c6d5caaebcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - `[jest-config]` Moved dynamically assigned `cwd` from `jest-cli` to default configuration in `jest-config` ([#7146](https://github.com/facebook/jest/pull/7146)) - `[jest-config]` Fix `getMaxWorkers` on termux ([#7154](https://github.com/facebook/jest/pull/7154)) - `[jest-runtime]` Throw an explicit error if `js` is missing from `moduleFileExtensions` ([#7160](https://github.com/facebook/jest/pull/7160)) +- `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) ### Chore & Maintenance diff --git a/packages/jest-runtime/src/__tests__/should_instrument.test.js b/packages/jest-runtime/src/__tests__/should_instrument.test.js index f1965b05f6c6..a6891c48f15d 100644 --- a/packages/jest-runtime/src/__tests__/should_instrument.test.js +++ b/packages/jest-runtime/src/__tests__/should_instrument.test.js @@ -35,14 +35,13 @@ describe('should_instrument', () => { it('when testMatch is provided and file is not a test file', () => { testShouldInstrument('source_file.js', defaultOptions, { - testMatch: ['**/?(*.)(test).js'], + testMatch: ['**/?(*.)(test).js', '!**/dont/**/*.js'], }); }); it('should return true when file is in collectCoverageOnlyFrom when provided', () => { testShouldInstrument( 'collect/only/from/here.js', - { collectCoverage: true, collectCoverageOnlyFrom: {'collect/only/from/here.js': true}, diff --git a/packages/jest-runtime/src/should_instrument.js b/packages/jest-runtime/src/should_instrument.js index 0a663ee56378..7d9f76e6ee90 100644 --- a/packages/jest-runtime/src/should_instrument.js +++ b/packages/jest-runtime/src/should_instrument.js @@ -42,7 +42,7 @@ export default function shouldInstrument( if ( config.testMatch && config.testMatch.length && - micromatch.any(filename, config.testMatch) + micromatch([filename], config.testMatch).length ) { return false; } From 4e39e56c74bb7dc7acaf68bcd0c6b78ea50d0f47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 16 Oct 2018 09:57:20 +0200 Subject: [PATCH 06/76] Update info about how rootDir is set (if not explicitly specified) (#7173) --- docs/CLI.md | 2 +- packages/jest-cli/src/cli/args.js | 6 +++--- website/versioned_docs/version-22.0/CLI.md | 2 +- website/versioned_docs/version-22.2/CLI.md | 2 +- website/versioned_docs/version-22.3/CLI.md | 2 +- website/versioned_docs/version-22.4/CLI.md | 2 +- website/versioned_docs/version-23.0/CLI.md | 2 +- website/versioned_docs/version-23.1/CLI.md | 2 +- website/versioned_docs/version-23.2/CLI.md | 2 +- website/versioned_docs/version-23.3/CLI.md | 2 +- website/versioned_docs/version-23.5/CLI.md | 2 +- website/versioned_docs/version-23.6/CLI.md | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/CLI.md b/docs/CLI.md index 55fd24e9ceb8..9c15b7273f59 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -131,7 +131,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/packages/jest-cli/src/cli/args.js b/packages/jest-cli/src/cli/args.js index 25716500f378..c758ff14e56e 100644 --- a/packages/jest-cli/src/cli/args.js +++ b/packages/jest-cli/src/cli/args.js @@ -177,9 +177,9 @@ export const options = { alias: 'c', description: 'The path to a jest config file specifying how to find ' + - 'and execute tests. If no rootDir is set in the config, the current ' + - 'directory is assumed to be the rootDir for the project. This can also ' + - 'be a JSON encoded value which Jest will use as configuration.', + 'and execute tests. If no rootDir is set in the config, the directory ' + + 'containing the config file is assumed to be the rootDir for the project.' + + 'This can also be a JSON encoded value which Jest will use as configuration.', type: 'string', }, coverage: { diff --git a/website/versioned_docs/version-22.0/CLI.md b/website/versioned_docs/version-22.0/CLI.md index 243a47485720..00b3e5a6e812 100644 --- a/website/versioned_docs/version-22.0/CLI.md +++ b/website/versioned_docs/version-22.0/CLI.md @@ -112,7 +112,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-22.2/CLI.md b/website/versioned_docs/version-22.2/CLI.md index 583b1cbf5f89..598d63f09fbd 100644 --- a/website/versioned_docs/version-22.2/CLI.md +++ b/website/versioned_docs/version-22.2/CLI.md @@ -114,7 +114,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-22.3/CLI.md b/website/versioned_docs/version-22.3/CLI.md index 0fc4afa2573c..a0cf7bcb5290 100644 --- a/website/versioned_docs/version-22.3/CLI.md +++ b/website/versioned_docs/version-22.3/CLI.md @@ -114,7 +114,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-22.4/CLI.md b/website/versioned_docs/version-22.4/CLI.md index af4b6c06c783..383379957838 100644 --- a/website/versioned_docs/version-22.4/CLI.md +++ b/website/versioned_docs/version-22.4/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.0/CLI.md b/website/versioned_docs/version-23.0/CLI.md index adabd0e54aae..512d5e1cb234 100644 --- a/website/versioned_docs/version-23.0/CLI.md +++ b/website/versioned_docs/version-23.0/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.1/CLI.md b/website/versioned_docs/version-23.1/CLI.md index c3487f6a06b6..015f3e88f3cf 100644 --- a/website/versioned_docs/version-23.1/CLI.md +++ b/website/versioned_docs/version-23.1/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.2/CLI.md b/website/versioned_docs/version-23.2/CLI.md index 78ead5fc140d..e112cdd986ef 100644 --- a/website/versioned_docs/version-23.2/CLI.md +++ b/website/versioned_docs/version-23.2/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.3/CLI.md b/website/versioned_docs/version-23.3/CLI.md index d54560131968..1db02022b85e 100644 --- a/website/versioned_docs/version-23.3/CLI.md +++ b/website/versioned_docs/version-23.3/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.5/CLI.md b/website/versioned_docs/version-23.5/CLI.md index adf0576d6933..d1d2a11e1f93 100644 --- a/website/versioned_docs/version-23.5/CLI.md +++ b/website/versioned_docs/version-23.5/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` diff --git a/website/versioned_docs/version-23.6/CLI.md b/website/versioned_docs/version-23.6/CLI.md index e29ccb22ef8e..99c984ae9f23 100644 --- a/website/versioned_docs/version-23.6/CLI.md +++ b/website/versioned_docs/version-23.6/CLI.md @@ -132,7 +132,7 @@ Forces test results output highlighting even if stdout is not a TTY. ### `--config=` -Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the current directory is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. +Alias: `-c`. The path to a Jest config file specifying how to find and execute tests. If no `rootDir` is set in the config, the directory containing the config file is assumed to be the rootDir for the project. This can also be a JSON-encoded value which Jest will use as configuration. ### `--coverage` From 081e155587503e64703d4673b687f2b92390296b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 16 Oct 2018 10:11:10 +0100 Subject: [PATCH 07/76] Make ignorePattern optional in HasteMap (#7166) --- CHANGELOG.md | 2 ++ .../jest-haste-map/src/__tests__/index.test.js | 14 ++++++++++---- packages/jest-haste-map/src/index.js | 10 +++++----- packages/jest-runtime/src/index.js | 12 +++++++++--- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c6d5caaebcd..3f899df9a6f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ - `[pretty-format]` Support HTMLCollection and NodeList in DOMCollection plugin ([#7125](https://github.com/facebook/jest/pull/7125)) - `[jest-runtime]` Pass the normalized configuration to script transformers ([#7148](https://github.com/facebook/jest/pull/7148)) - `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) +- `[jest-haste-map]` Make `ignorePattern` optional ([#7166](https://github.com/facebook/jest/pull/7166)) +- `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) ### Fixes diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index b67f5ec3dbaa..efd8a10aa6ed 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -144,9 +144,6 @@ describe('HasteMap', () => { '/project/fruits/Banana.js': ` const Strawberry = require("Strawberry"); `, - '/project/fruits/Kiwi.js': ` - // Kiwi! - `, '/project/fruits/Pear.js': ` const Banana = require("Banana"); const Strawberry = require("Strawberry"); @@ -189,7 +186,6 @@ describe('HasteMap', () => { defaultConfig = { extensions: ['js', 'json'], hasteImplModulePath: require.resolve('./haste_impl.js'), - ignorePattern: /Kiwi/, maxWorkers: 1, name: 'haste-map-test', platforms: ['ios', 'android'], @@ -237,6 +233,16 @@ describe('HasteMap', () => { ]); })); + it('ignores files given a pattern', () => { + const config = Object.assign({}, defaultConfig, {ignorePattern: /Kiwi/}); + mockFs['/project/fruits/Kiwi.js'] = ` + // Kiwi! + `; + return new HasteMap(config).build().then(({hasteFS}) => { + expect(hasteFS.matchFiles(/Kiwi/)).toEqual([]); + }); + }); + it('builds a haste map on a fresh cache', () => { // Include these files in the map mockFs['/project/fruits/node_modules/react/React.js'] = ` diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 77d7fb17ef99..5ea1cac2386a 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -54,7 +54,7 @@ type Options = { extensions: Array, forceNodeFilesystemAPI?: boolean, hasteImplModulePath?: string, - ignorePattern: HasteRegExp, + ignorePattern?: ?HasteRegExp, maxWorkers: number, mocksPattern?: string, name: string, @@ -76,7 +76,7 @@ type InternalOptions = { extensions: Array, forceNodeFilesystemAPI: boolean, hasteImplModulePath?: string, - ignorePattern: HasteRegExp, + ignorePattern: ?HasteRegExp, maxWorkers: number, mocksPattern: ?RegExp, name: string, @@ -249,7 +249,7 @@ class HasteMap extends EventEmitter { watch: !!options.watch, }; this._console = options.console || global.console; - if (!(options.ignorePattern instanceof RegExp)) { + if (options.ignorePattern && !(options.ignorePattern instanceof RegExp)) { this._console.warn( 'jest-haste-map: the `ignorePattern` options as a function is being ' + 'deprecated. Provide a RegExp instead. See https://github.com/facebook/jest/pull/4063.', @@ -270,7 +270,7 @@ class HasteMap extends EventEmitter { this._options.platforms.join(':'), this._options.computeSha1.toString(), options.mocksPattern || '', - options.ignorePattern.toString(), + (options.ignorePattern || '').toString(), ); this._whitelist = getWhiteList(options.providesModuleNodeModules); this._buildPromise = null; @@ -966,7 +966,7 @@ class HasteMap extends EventEmitter { const ignoreMatched = ignorePattern instanceof RegExp ? ignorePattern.test(filePath) - : ignorePattern(filePath); + : ignorePattern && ignorePattern(filePath); return ( ignoreMatched || diff --git a/packages/jest-runtime/src/index.js b/packages/jest-runtime/src/index.js index b73b64287c71..8adede5ec442 100644 --- a/packages/jest-runtime/src/index.js +++ b/packages/jest-runtime/src/index.js @@ -224,9 +224,15 @@ class Runtime { config: ProjectConfig, options?: HasteMapOptions, ): HasteMap { - const ignorePattern = new RegExp( - [config.cacheDirectory].concat(config.modulePathIgnorePatterns).join('|'), - ); + const ignorePatternParts = [ + ...config.modulePathIgnorePatterns, + config.cacheDirectory.startsWith(config.rootDir + path.sep) && + config.cacheDirectory, + ].filter(Boolean); + const ignorePattern = + ignorePatternParts.length > 0 + ? new RegExp(ignorePatternParts.join('|')) + : null; return new HasteMap({ cacheDirectory: config.cacheDirectory, From e5441f941c70af804d48ae128c883bb135aa7021 Mon Sep 17 00:00:00 2001 From: biomedia-thomas Date: Tue, 16 Oct 2018 19:24:08 +0200 Subject: [PATCH 08/76] Use at least one worker by default (fixes #7181) (#7182) --- packages/jest-runtime/src/cli/index.js | 2 +- packages/jest-worker/src/index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/jest-runtime/src/cli/index.js b/packages/jest-runtime/src/cli/index.js index 8deebe378335..a81a2d7da629 100644 --- a/packages/jest-runtime/src/cli/index.js +++ b/packages/jest-runtime/src/cli/index.js @@ -76,7 +76,7 @@ export function run(cliArgv?: Argv, cliInfo?: Array) { unmockedModulePathPatterns: null, }); Runtime.createContext(config, { - maxWorkers: os.cpus().length - 1, + maxWorkers: Math.max(os.cpus().length - 1, 1), watchman: globalConfig.watchman, }) .then(hasteMap => { diff --git a/packages/jest-worker/src/index.js b/packages/jest-worker/src/index.js index 0b787d7e57b6..0cb636c2fc6c 100644 --- a/packages/jest-worker/src/index.js +++ b/packages/jest-worker/src/index.js @@ -57,7 +57,7 @@ export default class { _offset: number; constructor(workerPath: string, options?: FarmOptions = {}) { - const numWorkers = options.numWorkers || os.cpus().length - 1; + const numWorkers = options.numWorkers || Math.max(os.cpus().length - 1, 1); const workers = new Array(numWorkers); const stdout = mergeStream(); const stderr = mergeStream(); From ee9fc73963b0f6706e97c434f0c74b75d9c8a8b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 16 Oct 2018 18:31:08 +0100 Subject: [PATCH 09/76] Add entry in the changelog for min maxWorkers value fix --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f899df9a6f7..494d0b5f05b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ - `[jest-config]` Fix `getMaxWorkers` on termux ([#7154](https://github.com/facebook/jest/pull/7154)) - `[jest-runtime]` Throw an explicit error if `js` is missing from `moduleFileExtensions` ([#7160](https://github.com/facebook/jest/pull/7160)) - `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) +- `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) ### Chore & Maintenance From 7a64497a2e91cf6d271e2397c8669ea4a6f8badb Mon Sep 17 00:00:00 2001 From: Sven Liebig Date: Wed, 17 Oct 2018 07:52:48 +0200 Subject: [PATCH 10/76] Adding xit and fit to the test result locations (#6482) --- CHANGELOG.md | 1 + e2e/__tests__/location_in_results.test.js | 37 ++++++++++++++++++++--- e2e/location-in-results/__tests__/test.js | 22 ++++++++++++-- packages/jest-jasmine2/src/index.js | 20 ++++++++++++ 4 files changed, 73 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 494d0b5f05b3..bafd4801eef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ - `[jest-jasmine2]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) - `[jest-jasmine2]` Pending calls inside async tests are reported as pending not failed ([#6782](https://github.com/facebook/jest/pull/6782)) - `[jest-circus]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) +- `[jest-jasmine2]` Add missing testLocationResults for `xit` and `fit`([#6482](https://github.com/facebook/jest/pull/6482)) - `[jest-cli]` Fix unhandled error when a bad revision is provided to `changedSince` ([#7115](https://github.com/facebook/jest/pull/7115)) - `[jest-config]` Moved dynamically assigned `cwd` from `jest-cli` to default configuration in `jest-config` ([#7146](https://github.com/facebook/jest/pull/7146)) - `[jest-config]` Fix `getMaxWorkers` on termux ([#7154](https://github.com/facebook/jest/pull/7154)) diff --git a/e2e/__tests__/location_in_results.test.js b/e2e/__tests__/location_in_results.test.js index 4413863b98b1..653451ad3f34 100644 --- a/e2e/__tests__/location_in_results.test.js +++ b/e2e/__tests__/location_in_results.test.js @@ -16,9 +16,13 @@ it('defaults to null for location', () => { const assertions = result.testResults[0].assertionResults; expect(result.success).toBe(true); - expect(result.numTotalTests).toBe(2); + expect(result.numTotalTests).toBe(6); expect(assertions[0].location).toBeNull(); expect(assertions[1].location).toBeNull(); + expect(assertions[2].location).toBeNull(); + expect(assertions[3].location).toBeNull(); + expect(assertions[4].location).toBeNull(); + expect(assertions[5].location).toBeNull(); }); it('adds correct location info when provided with flag', () => { @@ -28,13 +32,36 @@ it('adds correct location info when provided with flag', () => { const assertions = result.testResults[0].assertionResults; expect(result.success).toBe(true); - expect(result.numTotalTests).toBe(2); - expect(assertions[0].location).toEqual({column: 1, line: 10}); + expect(result.numTotalTests).toBe(6); + expect(assertions[0].location).toEqual({ + column: 1, + line: 12, + }); + + expect(assertions[1].location).toEqual({ + column: 1, + line: 16, + }); + + expect(assertions[2].location).toEqual({ + column: 1, + line: 20, + }); // Technically the column should be 3, but callsites is not correct. // jest-circus uses stack-utils + asyncErrors which resolves this. - expect(assertions[1].location).toEqual({ + expect(assertions[3].location).toEqual({ + column: isJestCircusRun() ? 3 : 2, + line: 25, + }); + + expect(assertions[4].location).toEqual({ + column: isJestCircusRun() ? 3 : 2, + line: 29, + }); + + expect(assertions[5].location).toEqual({ column: isJestCircusRun() ? 3 : 2, - line: 15, + line: 33, }); }); diff --git a/e2e/location-in-results/__tests__/test.js b/e2e/location-in-results/__tests__/test.js index 810c033d474a..1d412cc9b883 100644 --- a/e2e/location-in-results/__tests__/test.js +++ b/e2e/location-in-results/__tests__/test.js @@ -7,12 +7,30 @@ // This file is missing 'use strict' to force babel into doing something // as we have `transform-strict-mode` -it('no ancestors', () => { +/* eslint jest/no-focused-tests: 0 */ + +it('it no ancestors', () => { + expect(true).toBeTruthy(); +}); + +xit('xit no ancestors', () => { + expect(true).toBeTruthy(); +}); + +fit('fit no ancestors', () => { expect(true).toBeTruthy(); }); describe('nested', () => { - it('also works', () => { + it('it nested', () => { + expect(true).toBeTruthy(); + }); + + xit('xit nested', () => { + expect(true).toBeTruthy(); + }); + + fit('fit nested', () => { expect(true).toBeTruthy(); }); }); diff --git a/packages/jest-jasmine2/src/index.js b/packages/jest-jasmine2/src/index.js index b93eab79d10c..a21f98a376cb 100644 --- a/packages/jest-jasmine2/src/index.js +++ b/packages/jest-jasmine2/src/index.js @@ -54,6 +54,26 @@ async function jasmine2( return it; }; + + const originalXit = environment.global.xit; + environment.global.xit = (...args) => { + const stack = getCallsite(1, runtime.getSourceMaps()); + const xit = originalXit(...args); + + xit.result.__callsite = stack; + + return xit; + }; + + const originalFit = environment.global.fit; + environment.global.fit = (...args) => { + const stack = getCallsite(1, runtime.getSourceMaps()); + const fit = originalFit(...args); + + fit.result.__callsite = stack; + + return fit; + }; } jasmineAsyncInstall(environment.global); From 8a7b4a9df0759142d148cf2f69ec3f23457c542e Mon Sep 17 00:00:00 2001 From: Rafael de Oleza Date: Wed, 17 Oct 2018 11:34:36 +0100 Subject: [PATCH 11/76] Fix cache of transformed files with multiple projects (#7186) --- CHANGELOG.md | 1 + e2e/__tests__/multi_project_runner.test.js | 50 ++++++++++++ .../src/__tests__/script_transformer.test.js | 21 +++++ .../jest-runtime/src/script_transformer.js | 77 +++++++++++-------- 4 files changed, 118 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bafd4801eef9..3e6546b2eca9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ - `[jest-runtime]` Throw an explicit error if `js` is missing from `moduleFileExtensions` ([#7160](https://github.com/facebook/jest/pull/7160)) - `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) - `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) +- `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) ### Chore & Maintenance diff --git a/e2e/__tests__/multi_project_runner.test.js b/e2e/__tests__/multi_project_runner.test.js index 4be2778bff5b..237df8794c7b 100644 --- a/e2e/__tests__/multi_project_runner.test.js +++ b/e2e/__tests__/multi_project_runner.test.js @@ -350,3 +350,53 @@ test('resolves projects and their properly', () => { ); expect(stderr).toMatch(/banana/); }); + +test('Does transform files with the corresponding project transformer', () => { + writeFiles(DIR, { + '.watchmanconfig': '', + 'file.js': SAMPLE_FILE_CONTENT, + 'package.json': '{}', + 'project1/__tests__/project1.test.js': ` + const file = require('../../file.js'); + test('file', () => expect(file).toBe('PROJECT1')); + `, + 'project1/jest.config.js': ` + module.exports = { + rootDir: './', + transform: {'file\.js': './transformer.js'}, + };`, + 'project1/transformer.js': ` + module.exports = { + process: () => 'module.exports = "PROJECT1";', + getCacheKey: () => 'PROJECT1_CACHE_KEY', + } + `, + 'project2/__tests__/project2.test.js': ` + const file = require('../../file.js'); + test('file', () => expect(file).toBe('PROJECT2')); + `, + 'project2/jest.config.js': ` + module.exports = { + rootDir: './', + transform: {'file\.js': './transformer.js'}, + };`, + 'project2/transformer.js': ` + module.exports = { + process: () => 'module.exports = "PROJECT2";', + getCacheKey: () => 'PROJECT2_CACHE_KEY', + } + `, + }); + + const {stderr} = runJest(DIR, [ + '--no-watchman', + '-i', + '--projects', + 'project1', + 'project2', + ]); + + expect(stderr).toMatch('Ran all test suites in 2 projects.'); + expect(stderr).toMatch('PASS project1/__tests__/project1.test.js'); + expect(stderr).toMatch('PASS project2/__tests__/project2.test.js'); +}); diff --git a/packages/jest-runtime/src/__tests__/script_transformer.test.js b/packages/jest-runtime/src/__tests__/script_transformer.test.js index cd867cf1deba..da20831c6c18 100644 --- a/packages/jest-runtime/src/__tests__/script_transformer.test.js +++ b/packages/jest-runtime/src/__tests__/script_transformer.test.js @@ -509,4 +509,25 @@ describe('ScriptTransformer', () => { expect(fs.readFileSync).not.toBeCalledWith(cachePath, 'utf8'); expect(writeFileAtomic.sync).toBeCalled(); }); + + it('does not reuse the in-memory cache between different projects', () => { + const scriptTransformer = new ScriptTransformer( + Object.assign({}, config, { + transform: [['^.+\\.js$', 'test_preprocessor']], + }), + ); + + scriptTransformer.transform('/fruits/banana.js', {}); + + const anotherScriptTransformer = new ScriptTransformer( + Object.assign({}, config, { + transform: [['^.+\\.js$', 'css-preprocessor']], + }), + ); + + anotherScriptTransformer.transform('/fruits/banana.js', {}); + + expect(fs.readFileSync.mock.calls.length).toBe(2); + expect(fs.readFileSync).toBeCalledWith('/fruits/banana.js', 'utf8'); + }); }); diff --git a/packages/jest-runtime/src/script_transformer.js b/packages/jest-runtime/src/script_transformer.js index 046a8d30ca5c..96014c5ba088 100644 --- a/packages/jest-runtime/src/script_transformer.js +++ b/packages/jest-runtime/src/script_transformer.js @@ -40,31 +40,47 @@ export type Options = {| isInternalModule?: boolean, |}; -const cache: Map = new Map(); -const configToJsonMap = new Map(); -// Cache regular expressions to test whether the file needs to be preprocessed -const ignoreCache: WeakMap = new WeakMap(); +type ProjectCache = {| + configString: string, + ignorePatternsRegExp: ?RegExp, + transformedFiles: Map, +|}; + +// This data structure is used to avoid recalculating some data every time that +// we need to transform a file. Since ScriptTransformer is instantiated for each +// file we need to keep this object in the local scope of this module. +const projectCaches: WeakMap = new WeakMap(); // To reset the cache for specific changesets (rather than package version). const CACHE_VERSION = '1'; export default class ScriptTransformer { static EVAL_RESULT_VARIABLE: string; + _cache: ProjectCache; _config: ProjectConfig; _transformCache: Map; constructor(config: ProjectConfig) { this._config = config; this._transformCache = new Map(); + + let projectCache = projectCaches.get(config); + + if (!projectCache) { + projectCache = { + configString: stableStringify(this._config), + ignorePatternsRegExp: calcIgnorePatternRegexp(this._config), + transformedFiles: new Map(), + }; + + projectCaches.set(config, projectCache); + } + + this._cache = projectCache; } _getCacheKey(fileData: string, filename: Path, instrument: boolean): string { - if (!configToJsonMap.has(this._config)) { - // We only need this set of config options that can likely influence - // cached output instead of all config options. - configToJsonMap.set(this._config, stableStringify(this._config)); - } - const configString = configToJsonMap.get(this._config) || ''; + const configString = this._cache.configString; const transformer = this._getTransformer(filename); if (transformer && typeof transformer.getCacheKey === 'function') { @@ -188,8 +204,7 @@ export default class ScriptTransformer { // Ignore cache if `config.cache` is set (--no-cache) let code = this._config.cache ? readCodeCacheFile(cacheFilePath) : null; - const shouldCallTransform = - transform && shouldTransform(filename, this._config); + const shouldCallTransform = transform && this._shouldTransform(filename); // That means that the transform has a custom instrumentation // logic and will handle it based on `config.collectCoverage` option @@ -287,7 +302,7 @@ export default class ScriptTransformer { const willTransform = !isInternalModule && !isCoreModule && - (shouldTransform(filename, this._config) || instrument); + (this._shouldTransform(filename) || instrument); try { if (willTransform) { @@ -341,7 +356,7 @@ export default class ScriptTransformer { if (!options.isCoreModule) { instrument = shouldInstrument(filename, options, this._config); scriptCacheKey = getScriptCacheKey(filename, instrument); - result = cache.get(scriptCacheKey); + result = this._cache.transformedFiles.get(scriptCacheKey); } if (result) { @@ -356,11 +371,20 @@ export default class ScriptTransformer { ); if (scriptCacheKey) { - cache.set(scriptCacheKey, result); + this._cache.transformedFiles.set(scriptCacheKey, result); } return result; } + + _shouldTransform(filename: Path): boolean { + const ignoreRegexp = this._cache.ignorePatternsRegExp; + const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false; + + return ( + !!this._config.transform && !!this._config.transform.length && !isIgnored + ); + } } const removeFile = (path: Path) => { @@ -482,24 +506,15 @@ const getScriptCacheKey = (filename, instrument: boolean) => { return filename + '_' + mtime.getTime() + (instrument ? '_instrumented' : ''); }; -const shouldTransform = (filename: Path, config: ProjectConfig): boolean => { - if (!ignoreCache.has(config)) { - if ( - !config.transformIgnorePatterns || - config.transformIgnorePatterns.length === 0 - ) { - ignoreCache.set(config, null); - } else { - ignoreCache.set( - config, - new RegExp(config.transformIgnorePatterns.join('|')), - ); - } +const calcIgnorePatternRegexp = (config: ProjectConfig): ?RegExp => { + if ( + !config.transformIgnorePatterns || + config.transformIgnorePatterns.length === 0 + ) { + return null; } - const ignoreRegexp = ignoreCache.get(config); - const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false; - return !!config.transform && !!config.transform.length && !isIgnored; + return new RegExp(config.transformIgnorePatterns.join('|')); }; const wrap = content => From ed671678796d4ceb7a6744e36490316ceedff5c2 Mon Sep 17 00:00:00 2001 From: Brian Ambielli Date: Wed, 17 Oct 2018 09:59:58 -0500 Subject: [PATCH 12/76] fixes iss #7174 : update setupfiles documentation for improved clarity around expected setupfile behavior (#7187) --- CHANGELOG.md | 1 + docs/Configuration.md | 4 ++-- website/versioned_docs/version-23.6/Configuration.md | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e6546b2eca9..5270873cbc59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ - `[docs]` Add missing export statement in `puppeteer_environment.js` under `docs/Puppeteer.md` ([#7127](https://github.com/facebook/jest/pull/7127)) - `[docs]` Removed useless expect.assertions in `TestingAsyncCode.md` ([#7131](https://github.com/facebook/jest/pull/7131)) - `[docs]` Remove references to `@providesModule` which isn't supported anymore ([#7147](https://github.com/facebook/jest/pull/7147)) +- `[docs]` Update `setupFiles` documentation for clarity ([#7187](https://github.com/facebook/jest/pull/7187)) ### Performance diff --git a/docs/Configuration.md b/docs/Configuration.md index 0c70b41ed22d..4cb938e87af2 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -628,9 +628,9 @@ If you need to restrict your test-runner to only run in serial rather then being Default: `[]` -The paths to modules that run some code to configure or set up the testing environment before each test. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. +The paths to modules that run some code to configure or set up the testing environment. Each setupFile will be run once per test file. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. -It's worth noting that this code will execute _before_ [`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). +It's also worth noting that `setupFiles` will execute _before_ [`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). ### `setupTestFrameworkScriptFile` [string] diff --git a/website/versioned_docs/version-23.6/Configuration.md b/website/versioned_docs/version-23.6/Configuration.md index 616e51e4497a..430741801ac9 100644 --- a/website/versioned_docs/version-23.6/Configuration.md +++ b/website/versioned_docs/version-23.6/Configuration.md @@ -629,9 +629,9 @@ If you need to restrict your test-runner to only run in serial rather then being Default: `[]` -The paths to modules that run some code to configure or set up the testing environment before each test. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. +The paths to modules that run some code to configure or set up the testing environment. Each setupFile will be run once per test file. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. -It's worth noting that this code will execute _before_ [`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). +It's also worth noting that `setupFiles` will execute _before_ [`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). ### `setupTestFrameworkScriptFile` [string] From 6a7e6d66115a2ffe855bdf9b86936fdc52829966 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 18 Oct 2018 10:56:11 +0200 Subject: [PATCH 13/76] feat: export babel-preset-jest as a function (#7203) --- CHANGELOG.md | 1 + e2e/coverage-transform-instrumented/Preprocessor.js | 2 +- packages/babel-jest/src/index.js | 4 ++-- packages/babel-preset-jest/index.js | 9 ++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5270873cbc59..d7aa88032d88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) - `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) - `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) +- `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) ### Chore & Maintenance diff --git a/e2e/coverage-transform-instrumented/Preprocessor.js b/e2e/coverage-transform-instrumented/Preprocessor.js index a708eab7bc3d..830a9494d364 100644 --- a/e2e/coverage-transform-instrumented/Preprocessor.js +++ b/e2e/coverage-transform-instrumented/Preprocessor.js @@ -5,9 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -const jestPreset = require('babel-preset-jest'); const {transform: babelTransform} = require('babel-core'); const {default: babelIstanbulPlugin} = require('babel-plugin-istanbul'); +const jestPreset = require.resolve('babel-preset-jest'); const options = { presets: ['env', jestPreset], diff --git a/packages/babel-jest/src/index.js b/packages/babel-jest/src/index.js index 5484019e2f4f..0fc77b7c2733 100644 --- a/packages/babel-jest/src/index.js +++ b/packages/babel-jest/src/index.js @@ -18,7 +18,6 @@ import type { import crypto from 'crypto'; import fs from 'fs'; import path from 'path'; -import jestPreset from 'babel-preset-jest'; import {transform as babelTransform, util as babelUtil} from 'babel-core'; import babelIstanbulPlugin from 'babel-plugin-istanbul'; @@ -28,6 +27,7 @@ const BABEL_CONFIG_JS_FILENAME = 'babel.config.js'; const BABEL_CONFIG_KEY = 'babel'; const PACKAGE_JSON = 'package.json'; const THIS_FILE = fs.readFileSync(__filename); +const jestPresetPath = require.resolve('babel-preset-jest'); const createTransformer = (options: any): Transformer => { const cache = Object.create(null); @@ -81,7 +81,7 @@ const createTransformer = (options: any): Transformer => { options = Object.assign({}, options, { compact: false, plugins: (options && options.plugins) || [], - presets: ((options && options.presets) || []).concat([jestPreset]), + presets: ((options && options.presets) || []).concat(jestPresetPath), sourceMaps: 'both', }); delete options.cacheDirectory; diff --git a/packages/babel-preset-jest/index.js b/packages/babel-preset-jest/index.js index c5f6a3d60bc8..cdcf121d6062 100644 --- a/packages/babel-preset-jest/index.js +++ b/packages/babel-preset-jest/index.js @@ -5,10 +5,9 @@ * LICENSE file in the root directory of this source tree. */ -module.exports = { +module.exports = () => ({ plugins: [ - // Cannot be `import` as this file is not compiled - require('babel-plugin-jest-hoist'), - require('babel-plugin-syntax-object-rest-spread'), + require.resolve('babel-plugin-jest-hoist'), + require.resolve('babel-plugin-syntax-object-rest-spread'), ], -}; +}); From 0ac3a0e7f623394d558937cbb46d096a6b29d8ad Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 18 Oct 2018 12:45:05 +0200 Subject: [PATCH 14/76] chore: upgrade eslint plugin (#7205) --- e2e/each/__tests__/describe-only.test.js | 2 ++ e2e/each/__tests__/each-only.test.js | 2 ++ yarn.lock | 6 +++--- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/e2e/each/__tests__/describe-only.test.js b/e2e/each/__tests__/describe-only.test.js index ad0068cbead9..6214ef4581f7 100644 --- a/e2e/each/__tests__/describe-only.test.js +++ b/e2e/each/__tests__/describe-only.test.js @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +/* eslint-disable jest/no-focused-tests */ + describe.only.each([[true, true], [true, true]])( 'passes all rows expected %s == %s', (left, right) => { diff --git a/e2e/each/__tests__/each-only.test.js b/e2e/each/__tests__/each-only.test.js index a434a48f2b78..719348880409 100644 --- a/e2e/each/__tests__/each-only.test.js +++ b/e2e/each/__tests__/each-only.test.js @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +/* eslint-disable jest/no-focused-tests */ + it.only.each([[true, true], [true, true]])( 'passes one row expected %s == %s', (left, right) => { diff --git a/yarn.lock b/yarn.lock index ebd0dd37655e..c7eeba68063a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5390,9 +5390,9 @@ eslint-plugin-import@^2.6.0: resolve "^1.6.0" eslint-plugin-jest@^21.0.0: - version "21.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.22.0.tgz#1b9e49b3e5ce9a3d0a51af4579991d517f33726e" - integrity sha512-0TzGIZ5moLR9orka/J9lg+7Ezv+S0TsnkavrMmI5xPFnbyIDjc2jLlwtBsaBbdZuOSCl+kcofh9ojknTI9L32Q== + version "21.25.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-21.25.1.tgz#166c6b9d33bd7bc5b8ece62cff878ba207600bb6" + integrity sha512-mmphmAD/WihjFGq1IUHLSZWQPcd8U9w/SeFCHf3p0V3Q3MBxmj1ZKnh41hID44guIACLuwos/LhVWIr4phN4yg== eslint-plugin-jsx-a11y@^6.0.2: version "6.1.1" From 7d5de68444c9dd302d1beea2a6a5ffca5336d178 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 18 Oct 2018 12:45:29 +0200 Subject: [PATCH 15/76] chore: transpile everything for browsers (#7204) --- packages/jest-message-util/package.json | 2 +- scripts/browserBuild.js | 44 +++++++++++-------------- yarn.lock | 26 +++------------ 3 files changed, 25 insertions(+), 47 deletions(-) diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index d14b0d5e4d6e..d8e34d972d0f 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -8,7 +8,7 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "@babel/code-frame": "7.0.0-beta.44", + "@babel/code-frame": "^7.0.0", "chalk": "^2.0.1", "micromatch": "^2.3.11", "slash": "^2.0.0", diff --git a/scripts/browserBuild.js b/scripts/browserBuild.js index 8c6bb548a0ea..c7f0414c7aa5 100644 --- a/scripts/browserBuild.js +++ b/scripts/browserBuild.js @@ -16,32 +16,26 @@ const rollupJson = require('rollup-plugin-json'); const rollupBabel = require('rollup-plugin-babel'); const rollupFlow = require('rollup-plugin-flow'); -const babelEs5Options = Object.assign( - {}, - { - babelrc: false, - exclude: 'node_modules/!(ansi-styles|chalk|ansi-regex|slash)/**', - plugins: [ - 'syntax-trailing-function-commas', - 'transform-flow-strip-types', - 'transform-es2015-destructuring', - 'transform-es2015-parameters', - 'transform-async-to-generator', - 'transform-strict-mode', - 'external-helpers', - 'transform-runtime', - ], - presets: [ - [ - 'env', - { - modules: false, - }, - ], +const babelEs5Options = { + babelrc: false, + plugins: [ + 'transform-flow-strip-types', + 'transform-strict-mode', + 'external-helpers', + ], + presets: [ + [ + 'env', + { + // Required for Rollup + modules: false, + // Target ES5 + targets: 'IE 11', + }, ], - runtimeHelpers: true, - } -); + ], + runtimeHelpers: true, +}; function browserBuild(pkgName, entryPath, destination) { return rollup({ diff --git a/yarn.lock b/yarn.lock index c7eeba68063a..eec0d052fed6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" - integrity sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g== - dependencies: - "@babel/highlight" "7.0.0-beta.44" - "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -259,15 +252,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.1.2" -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" - integrity sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -8059,16 +8043,16 @@ js-string-escape@^1.0.0: resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.8.1, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" From 7ef22a9456623583a1c52582c480afc4ab02b3ca Mon Sep 17 00:00:00 2001 From: Mikhail Bodrov Date: Thu, 18 Oct 2018 17:02:29 +0300 Subject: [PATCH 16/76] Use regexp instead of split-map-join (#7206) * Use regexp instead of split-map-join * Rename constant --- packages/jest-message-util/src/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/jest-message-util/src/index.js b/packages/jest-message-util/src/index.js index 67bd810f795d..1f8f4d5f62ba 100644 --- a/packages/jest-message-util/src/index.js +++ b/packages/jest-message-util/src/index.js @@ -63,12 +63,10 @@ const STACK_TRACE_COLOR = chalk.dim; const STACK_PATH_REGEXP = /\s*at.*\(?(\:\d*\:\d*|native)\)?/; const EXEC_ERROR_MESSAGE = 'Test suite failed to run'; const ERROR_TEXT = 'Error: '; +const NOT_EMPTY_LINE_REGEXP = /^(?!$)/gm; const indentAllLines = (lines: string, indent: string) => - lines - .split('\n') - .map(line => (line ? indent + line : line)) - .join('\n'); + lines.replace(NOT_EMPTY_LINE_REGEXP, indent); const trim = string => (string || '').trim(); From a12806e8595e6fc36aa0692b05927a19c4ea1704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Thu, 18 Oct 2018 17:11:25 +0100 Subject: [PATCH 17/76] Fix dependency clash test modified in #6104 (#7208) --- e2e/__tests__/dependency_clash.test.js | 77 ++++++++++++++------------ 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/e2e/__tests__/dependency_clash.test.js b/e2e/__tests__/dependency_clash.test.js index 1303024357bb..c298ee3aacb4 100644 --- a/e2e/__tests__/dependency_clash.test.js +++ b/e2e/__tests__/dependency_clash.test.js @@ -8,29 +8,22 @@ */ import path from 'path'; -import { - cleanup, - createEmptyPackage, - linkJestPackage, - writeFiles, -} from '../Utils'; +import {cleanup, createEmptyPackage, writeFiles} from '../Utils'; import runJest from '../runJest'; import os from 'os'; -import mkdirp from 'mkdirp'; -import fs from 'fs'; import {skipSuiteOnWindows} from '../../scripts/ConditionalTest'; skipSuiteOnWindows(); // doing test in a temp directory because we don't want jest node_modules affect it const tempDir = path.resolve(os.tmpdir(), 'clashing-dependencies-test'); -const thirdPartyDir = path.resolve(tempDir, 'third-party'); +const hasteImplModulePath = path.resolve( + './packages/jest-haste-map/src/__tests__/haste_impl.js', +); beforeEach(() => { cleanup(tempDir); createEmptyPackage(tempDir); - mkdirp(path.join(thirdPartyDir, 'node_modules')); - linkJestPackage('babel-jest', thirdPartyDir); }); // This test case is checking that when having both @@ -38,39 +31,51 @@ beforeEach(() => { // module we can still require the right invariant. This is pretty specific // use case and in the future we should probably delete this test. // see: https://github.com/facebook/jest/pull/6687 -test('fails with syntax error on flow types', () => { - const babelFileThatRequiresInvariant = require.resolve( - 'babel-traverse/lib/path/index.js', - ); - - expect(fs.existsSync(babelFileThatRequiresInvariant)).toBe(true); - // make sure the babel depenency that depends on `invariant` from npm still - // exists, otherwise the test will pass regardless of whether the bug still - // exists or no. - expect(fs.readFileSync(babelFileThatRequiresInvariant).toString()).toMatch( - /invariant/, - ); +test('does not require project modules from inside node_modules', () => { writeFiles(tempDir, { - '.babelrc': ` - { - "plugins": [ - "${require.resolve('babel-plugin-transform-flow-strip-types')}" - ] - } - `, '__tests__/test.js': ` - const invariant = require('../invariant'); + const invariant = require('invariant'); test('haii', () => expect(invariant(false, 'haii')).toBe('haii')); `, - 'invariant.js': `/** - * @flow - */ - const invariant = (condition: boolean, message: string) => message; + 'invariant.js': ` + INVALID CODE FRAGMENT THAT WILL BE REMOVED BY THE TRANSFORMER + const invariant = (condition, message) => message; module.exports = invariant; `, 'jest.config.js': `module.exports = { - transform: {'.*\\.js': './third-party/node_modules/babel-jest'}, + haste: { + hasteImplModulePath: '${hasteImplModulePath}', + }, + transform: {'.*\\.js': './third-party/node_modules/transform'}, };`, + 'third-party/node_modules/invariant/index.js': ` + const invariant = (condition, message) => { + if (!condition) { + throw new Error(message); + } + }; + module.exports = invariant; + `, + 'third-party/node_modules/transform/index.js': ` + const invariant = require('invariant'); + module.exports = { + process: script => { + let threw = false; + try { + invariant(false, 'this should throw'); + } catch (e) { + threw = true; + } + if (!threw) { + throw new Error('It used the wrong invariant module!'); + } + return script.replace( + 'INVALID CODE FRAGMENT THAT WILL BE REMOVED BY THE TRANSFORMER', + '' + ); + }, + }; + `, }); const {stderr, status} = runJest(tempDir, ['--no-cache', '--no-watchman']); // make sure there are no errors that lead to invariant.js (if we were to From 1b3f2f8618f8d41934a9740e8a41a2fa718baff9 Mon Sep 17 00:00:00 2001 From: James Treworgy Date: Thu, 18 Oct 2018 13:40:27 -0400 Subject: [PATCH 18/76] Allow multilple valid types (#7207) ## Summary Split from https://github.com/facebook/jest/pull/7194 Prerequisite to resolving https://github.com/facebook/jest/issues/7180 This PR provides a syntax for `jest-validate` to accept more than one example for a single config value, which can be of different types. This allows overloading config options to accept multiple types. ## Test plan - existing unit tests pass (except as expected where internal config changed types) - added unit tests to cover new valid and error conditions --- CHANGELOG.md | 1 + packages/jest-validate/README.md | 45 ++++++++++++++ .../__snapshots__/validate.test.js.snap | 50 ++++++++++++++++ .../src/__tests__/validate.test.js | 60 +++++++++++++++++++ packages/jest-validate/src/condition.js | 26 ++++++-- packages/jest-validate/src/default_config.js | 2 +- packages/jest-validate/src/errors.js | 26 ++++++-- packages/jest-validate/src/index.js | 2 + 8 files changed, 201 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7aa88032d88..5bec3ba38444 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) - `[jest-haste-map]` Make `ignorePattern` optional ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) +- `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) ### Fixes diff --git a/packages/jest-validate/README.md b/packages/jest-validate/README.md index 178bb7c486da..f846b615fbc3 100644 --- a/packages/jest-validate/README.md +++ b/packages/jest-validate/README.md @@ -73,6 +73,16 @@ Almost anything can be overwritten to suite your needs. You will find examples of `condition`, `deprecate`, `error`, `unknown`, and `deprecatedConfig` inside source of this repository, named respectively. +## exampleConfig syntax + +`exampleConfig` should be an object with key/value pairs that contain an example of a valid value for each key. A configuration value is considered valid when: + +- it matches the JavaScript type of the example value, e.g. `string`, `number`, `array`, `boolean`, `function`, or `object` +- it is `null` or `undefined` +- it matches the Javascript type of any of arguments passed to `MultipleValidOptions(...)` + +The last condition is a special syntax that allows validating where more than one type is permissible; see example below. It's acceptable to have multiple values of the same type in the example, so you can also use this syntax to provide more than one example. When a validation failure occurs, the error message will show all other values in the array as examples. + ## Examples Minimal example: @@ -128,6 +138,41 @@ This will output: Documentation: http://custom-docs.com ``` +## Example validating multiple types + +```js +import {MultipleValidOptions} from 'jest-validate'; + +validate(config, { + // `bar` will accept either a string or a number + bar: MultipleValidOptions('string is ok', 2), +}); +``` + +#### Error: + +```bash +● Validation Error: + + Option foo must be of type: + string or number + but instead received: + array + + Example: + { + "bar": "string is ok" + } + + or + + { + "bar": 2 + } + + Documentation: http://custom-docs.com +``` + #### Deprecation Based on `deprecatedConfig` object with proper deprecation messages. Note custom title: diff --git a/packages/jest-validate/src/__tests__/__snapshots__/validate.test.js.snap b/packages/jest-validate/src/__tests__/__snapshots__/validate.test.js.snap index 2571b7454576..5b92cbe4f751 100644 --- a/packages/jest-validate/src/__tests__/__snapshots__/validate.test.js.snap +++ b/packages/jest-validate/src/__tests__/__snapshots__/validate.test.js.snap @@ -1,5 +1,32 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`Repeated types within multiple valid examples are coalesced in error report 1`] = ` +" Validation Error: + + Option \\"foo\\" must be of type: + string or number + but instead received: + boolean + + Example: + { + \\"foo\\": \\"foo\\" + } + + or + + { + \\"foo\\": \\"bar\\" + } + + or + + { + \\"foo\\": 2 + } +" +`; + exports[`displays warning for deprecated config options 1`] = ` " Deprecation Warning: @@ -107,6 +134,29 @@ exports[`pretty prints valid config for String 1`] = ` " `; +exports[`reports errors nicely when failing with multiple valid options 1`] = ` +" Validation Error: + + Option \\"foo\\" must be of type: + string or array + but instead received: + number + + Example: + { + \\"foo\\": \\"text\\" + } + + or + + { + \\"foo\\": [ + \\"text\\" + ] + } +" +`; + exports[`works with custom deprecations 1`] = ` "My Custom Deprecation Warning: diff --git a/packages/jest-validate/src/__tests__/validate.test.js b/packages/jest-validate/src/__tests__/validate.test.js index ec4de4d38b92..59aed5ace5d1 100644 --- a/packages/jest-validate/src/__tests__/validate.test.js +++ b/packages/jest-validate/src/__tests__/validate.test.js @@ -9,6 +9,7 @@ 'use strict'; import validate from '../validate'; +import {MultipleValidOptions} from '../condition'; import jestValidateExampleConfig from '../example_config'; import jestValidateDefaultConfig from '../default_config'; @@ -206,3 +207,62 @@ test('works with custom deprecations', () => { expect(console.warn.mock.calls[0][0]).toMatchSnapshot(); console.warn = warn; }); + +test('works with multiple valid types', () => { + const exampleConfig = { + foo: MultipleValidOptions('text', ['text']), + }; + + expect( + validate( + {foo: 'foo'}, + { + exampleConfig, + }, + ), + ).toEqual({ + hasDeprecationWarnings: false, + isValid: true, + }); + expect( + validate( + {foo: ['foo']}, + { + exampleConfig, + }, + ), + ).toEqual({ + hasDeprecationWarnings: false, + isValid: true, + }); +}); + +test('reports errors nicely when failing with multiple valid options', () => { + const exampleConfig = { + foo: MultipleValidOptions('text', ['text']), + }; + + expect(() => + validate( + {foo: 2}, + { + exampleConfig, + }, + ), + ).toThrowErrorMatchingSnapshot(); +}); + +test('Repeated types within multiple valid examples are coalesced in error report', () => { + const exampleConfig = { + foo: MultipleValidOptions('foo', 'bar', 2), + }; + + expect(() => + validate( + {foo: false}, + { + exampleConfig, + }, + ), + ).toThrowErrorMatchingSnapshot(); +}); diff --git a/packages/jest-validate/src/condition.js b/packages/jest-validate/src/condition.js index 20d1ed545fde..d3dc05c36d55 100644 --- a/packages/jest-validate/src/condition.js +++ b/packages/jest-validate/src/condition.js @@ -9,13 +9,31 @@ const toString = Object.prototype.toString; -export default function validationCondition( - option: any, - validOption: any, -): boolean { +const MultipleValidOptionsSymbol = Symbol('JEST_MULTIPLE_VALID_OPTIONS'); + +function validationConditionSingle(option: any, validOption: any): boolean { return ( option === null || option === undefined || toString.call(option) === toString.call(validOption) ); } + +export function getValues(validOption: any) { + if ( + Array.isArray(validOption) && + validOption.length && + validOption[0] === MultipleValidOptionsSymbol + ) { + return validOption.slice(1); + } + return [validOption]; +} + +export function validationCondition(option: any, validOption: any): boolean { + return getValues(validOption).some(e => validationConditionSingle(option, e)); +} + +export function MultipleValidOptions(...args: Array) { + return [MultipleValidOptionsSymbol, ...args]; +} diff --git a/packages/jest-validate/src/default_config.js b/packages/jest-validate/src/default_config.js index 735037968c60..2d3d097e6c67 100644 --- a/packages/jest-validate/src/default_config.js +++ b/packages/jest-validate/src/default_config.js @@ -12,7 +12,7 @@ import type {ValidationOptions} from './types'; import {deprecationWarning} from './deprecated'; import {unknownOptionWarning} from './warnings'; import {errorMessage} from './errors'; -import validationCondition from './condition'; +import {validationCondition} from './condition'; import {ERROR, DEPRECATION, WARNING} from './utils'; export default ({ diff --git a/packages/jest-validate/src/errors.js b/packages/jest-validate/src/errors.js index cb1589c71616..632f7c2100c1 100644 --- a/packages/jest-validate/src/errors.js +++ b/packages/jest-validate/src/errors.js @@ -12,6 +12,7 @@ import type {ValidationOptions} from './types'; import chalk from 'chalk'; import getType from 'jest-get-type'; import {formatPrettyObject, ValidationError, ERROR} from './utils'; +import {getValues} from './condition'; export const errorMessage = ( option: string, @@ -20,22 +21,35 @@ export const errorMessage = ( options: ValidationOptions, path?: Array, ): void => { + const conditions = getValues(defaultValue); + const validTypes: Array = Array.from( + new Set(conditions.map(getType)), + ); + const message = ` Option ${chalk.bold( `"${path && path.length > 0 ? path.join('.') + '.' : ''}${option}"`, )} must be of type: - ${chalk.bold.green(getType(defaultValue))} + ${validTypes.map(e => chalk.bold.green(e)).join(' or ')} but instead received: ${chalk.bold.red(getType(received))} Example: - { - ${chalk.bold(`"${option}"`)}: ${chalk.bold( - formatPrettyObject(defaultValue), - )} - }`; +${formatExamples(option, conditions)}`; const comment = options.comment; const name = (options.title && options.title.error) || ERROR; throw new ValidationError(name, message, comment); }; + +function formatExamples(option: string, examples: Array) { + return examples.map( + e => ` { + ${chalk.bold(`"${option}"`)}: ${chalk.bold(formatPrettyObject(e))} + }`, + ).join(` + + or + +`); +} diff --git a/packages/jest-validate/src/index.js b/packages/jest-validate/src/index.js index c17c0c3797b1..eca9c33fb8b5 100644 --- a/packages/jest-validate/src/index.js +++ b/packages/jest-validate/src/index.js @@ -15,8 +15,10 @@ import { } from './utils'; import validate from './validate'; import validateCLIOptions from './validate_cli_options'; +import {MultipleValidOptions} from './condition'; module.exports = { + MultipleValidOptions, ValidationError, createDidYouMeanMessage, format, From 814c92999162ab07bf259ae67d13dc8b89cb37e0 Mon Sep 17 00:00:00 2001 From: Rick Hanlon II Date: Thu, 18 Oct 2018 14:06:30 -0400 Subject: [PATCH 19/76] Add jest-circus README (#7198) * Add jest-circus README * Fix lint, add changelog, and update jest-circus mentions * Grammar is my jam * Add this back --- CHANGELOG.md | 1 + README.md | 2 +- docs/JestObjectAPI.md | 18 +------- packages/jest-circus/README.md | 40 ++++++++++++++++++ website/static/img/circus.png | Bin 0 -> 26267 bytes .../version-23.3/JestObjectAPI.md | 18 +------- 6 files changed, 44 insertions(+), 35 deletions(-) create mode 100644 packages/jest-circus/README.md create mode 100644 website/static/img/circus.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bec3ba38444..7a03e365c23c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ - `[docs]` Removed useless expect.assertions in `TestingAsyncCode.md` ([#7131](https://github.com/facebook/jest/pull/7131)) - `[docs]` Remove references to `@providesModule` which isn't supported anymore ([#7147](https://github.com/facebook/jest/pull/7147)) - `[docs]` Update `setupFiles` documentation for clarity ([#7187](https://github.com/facebook/jest/pull/7187)) +- `[jest-circus]` Add readme.md ([#7198](https://github.com/facebook/jest/pull/7198)) ### Performance diff --git a/README.md b/README.md index 0c452b9af738..abd3c72492a9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

Jest

🃏 Delightful JavaScript Testing

diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 29a107fe86a7..80925ae00ace 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -315,7 +315,7 @@ Returns the `jest` object for chaining. ### `jest.retryTimes()` -Runs failed tests n-times until they pass or until the max number of retries are exhausted. This only works with jest-circus! +Runs failed tests n-times until they pass or until the max number of retries are exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! Example in a test: @@ -326,22 +326,6 @@ test('will fail', () => { }); ``` -To run with jest circus: - -Install jest-circus - -``` -yarn add --dev jest-circus -``` - -Then set as the testRunner in your jest config: - -```js -module.exports = { - testRunner: 'jest-circus/runner', -}; -``` - Returns the `jest` object for chaining. ### `jest.runAllTicks()` diff --git a/packages/jest-circus/README.md b/packages/jest-circus/README.md new file mode 100644 index 000000000000..ba37dcaecc30 --- /dev/null +++ b/packages/jest-circus/README.md @@ -0,0 +1,40 @@ +

+ + +

jest-circus

+

The next-gen test runner for Jest

+

+ +## Overview + +Circus is a flux-based test runner for Jest that is fast, easy to maintain, and simple to extend. + +## Installation + +Install `jest-circus` using yarn: + +```bash +yarn add --dev jest-cicus +``` + +Or via npm: + +```bash +npm install --save-dev jest-circus +``` + +## Configure + +Configure Jest to use `jest-circus` via the [`testRunner`](https://jestjs.io/docs/en/configuration#testrunner-string) option: + +```json +{ + "testRunner": "jest-circus/runner" +} +``` + +Or via CLI: + +```bash +jest --testRunner='jest-circus/runner' +``` diff --git a/website/static/img/circus.png b/website/static/img/circus.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa1c82a51acf45630afa0d14f13b4c0e23fb8d7 GIT binary patch literal 26267 zcmb4qbyQo;7j1%DAe7<`EmGXw-Jwuifxey)-7q6cN-9UouJukGR#K zCRJ>goQ2CHI&C2cOTRR9iy%Zr$q!H)GivR%6YB#Ga0m!j%c&-&Z0ziJCokthD1VV= z-Wk%?=H?)-=YG-ej{OVlB`aS&0iFcrKfLRSke(*AZxYDE5Omp zXhht&kCfY|Pu4l$0IRtlU2g!2URV6MlI-m4CqP8`C+lQ8oEin~!G1tTrQ0^ ztTb8v_&K27QO-Q7gW1`u9FzAOTA{~LOFKrv!O$fMTP`HcNPrG4AZ=axb^$+#==?FZ zsB0*iYCp(%1oI+S@XYEO?YTkjgXZMhp|#&B`-vYdTXKIqQM`y#wGTeEcoe#a%WW(F zsfLUV5AULmAle$VXzXB>eK4|Zi@a%@?2e9i@>My)(V=`We zej3<@?;4%BK3@Hh(7oooq7qXLR!K^}!OyD9-fwNmr0SlX8@OD><#MrX&Af3e&wKFH z9M|RNu5ZKdaYn?d>JkX?L|%HoqS;YewtDCEL9Al!RxIFbVi&&Q;L>$C){gQLbRgt& zTU(6o><_1Q-2yf8FBE?eUm3gH2}+-vi-XZ0E?`OwjAKV6*3|Qu*kVuV3ShS^1*-nm z1Emar0t84AUOa&7JDdOk$Lh#xewT2KmqyIhyGItE?eBOS`+BC)onp^8%g?YL*ZvQ4 zGASJtXka%C$<8wM!mn2U7cwAwQM}U$?#b2L|*IE3YCCgUn40b}bW#rSfdS;8xlIq6RDg zopG^v3s714ZPK-?u2NwdiRRD00nIwlR0N6A`#}sVy`ZXB=L8jCwv4%Us3mV|9 z3C@0>WxQnX=Xip#v`wlHUlyou`N~p;T=G zo3S*mKTsgRN)ZA@ksJUAt$@M;vbC!Gz%OQ&kYCM9P|bB1*cW}LJ%jMKxGs|*YFd#l z*p?2S2pfAzY^aJFNL-0s3snef`-12-fXy2~e&|46;sDwKv;w)ZB`T)+hgb;hiJF~& zF4smiMo00))`J&0fiO6TJ>Vtd*580~ttdAx4w(}hAZSIhiG<|*2OLnt=7=GI*Ws;R z{Y!uL=Q^JI?&c<77#~3Q$hwF5jFgnmdA>`82o<0YJ!Ekr2P=agAiER~7a8q8kMP5l zU}wjL2?A?=n~X0kp+4DMqO3`R#V1+qPUZGiNWr`}8;6#Apbjdl0~Z9lV~9~ZMP$hW z_~{>Ws?2{8a+n)PE-0_kG&KnVicw%eD7npQ;}Vfx&e>(Ir|id<-KIs_bU54MQ2CuN zrExYboPr!eQFJmYG6d`|*(yyJUEOXUd$CT#o=?B%d~raBh< zps|9$@Z6bn z*~k-zJ;E}@*~;V;W47~J=YgIkI1$`NW=5^>fYfCxdy&UScZ*~f#CyMF4Nfz1Kv__! zS8c=US)phBQD( z>h=6L2rQ%{*N_6|$1dCV?%Jnm4|Z=ZxOo5J@eFV=`0$W0%bAzZG$3I*zBdym5H&6NY zf*R9b_KTK$x)4DA1o$_h{lC8pDFF^R|A1lKT+HSv-%z-!(^1;D{^+GZ8F00Niy3kn zaR0U~9uV*fcsouo)_sikj9k@x%)YxVu%a8Z&E^dc`zI0tgxFi7n#XRBk%m49w1D)C z(Lotz=zL?HNNaOs8%vcl@P#$1NDU1UY;nG0|9XvEJ+RkZ-z7*+sW|WD9ST2N-R@XOdd4$3 zR$vd{XQz>=58>j4jpADVsTcQ33quj}H4h($BBJYtCw1%8eQ6!ix1WA~-_Js8?`*J^ z2+<8ET=YZpLIS@yJ8{Z9d=;Z_htc?jN}O2v*=(9~B3i`2%w(rukT*;FU(Ooo^T)jH zOEVc22gW*&E091y^|7t3(i-VwPZ@qvt9dq%y6W(4(+PlsK9uJ;pyI}~dS;sy{U)Sm~*TwmITi#+H^Ik{im>dqv zjX!p(jZ0ew(E~pt!hA`2@4P2q7j`oGv01u?>n(>qqE(l~YQ}kN_STEXP8hYx%=y+M zN%;#~(dj48CWwoaayPv9TEjbgEFCYnuIQ+9aS)nH*&9`s?V&Y2y|}rGr7r8&ecC+=Gy_2vkgxg!~fSN!hpMkGlu4Vbmns z=M~y9@CLW(h8b%sX#BzOvkHG90Gx?jn(PZ~tWDKE#I~?0LL@l`4zqpvVVW*E_K)z$m?c#fnD6FQk(DLFf7h+7=7w1W? z=0@@H9J_#ZS9;ny&+o=B2QtQAb3HRgc7W28x$uK*uQr7q z>HepK$(U&l?2vwX=$&eyswq5y!&YJNGx0}}+Yy_8-u|A+OyT#dbS8-El1~LKzp;x& zM#2mK7a>_^lvkW=e!*Gp_&St50H%Zd{Y3w08Fri&*h8)&(edvhqtmZJB6K*;E*4qt zA*Il4|4>AA_w#J9RG@zRQJsehiBEhPBauZfPTk`TE`opUy0;cGq-X07ZM!_zBrh%p zODscyQewX&lTZ<)Q)rk}0A#VjC{h{sQ;6yuk+^5(Z6^1=I>+z}e$e|PkCfbTcqw&( zS$y;gt>6j;_4qV2#!+FL)f9;ETB;4`(W*lw$#S+Y;`5h@TFw0h$fCaOuL>bYSvNbu zT42hZaw)VNucb>|d2=Ap7~67JiPWj^Pa(-+Dd$(q%icbbzMRN}e=iDK|C$C~Hbw3l zrNU_N#%pB1JZEpgK_WI|erg}uMR3FMrkHd;nU|v)_4kxfHT!jh@=|WGYusVbYJ6p` z!-J&xst$?R7%4Q}3!~2a*g~qVXlgWKeQYdDQo(!rRI&5vSZ)Gn0kG9c!o-VoxPc1HwU1B@4T=2K#K8VB~o>V$Xwpp8IG}5+Arw)CEzIo_F@Z zZ^qzP-ajps`YCX`LPPR=OSE*#p8^bU5HSBW{b#yD%wuSYjQ6x^HTP9mG&MFb4jGAL z@C1oJV9docUJ zD$V0+BGOxo!3!GKezA!S0gQ$NKa7fHys&aznY<$NqtjI{0V-{3P)G>XUN(ObQv)|@ zH3>#a~XSaZro z3O;fpf3w#O!0EUWM@dBmYv#9KbnO9f{NqFC)Y2-23fZ!7}~-SxyP<8Ba`x*dO-J9hUvYf*SlKphL7s zTc=z!NhtH%zYGJ+scVM8ORtJ5-c0q_xCVM|7_F6(-*ExHC>3v)F0T}qQObr}BsxAaJ;FYrpRy!4B)r++~xV8$|!MFtr$*3Iv zy~$SiFgai?2z~4HHLX$L=gZYwz)@Hq+frAf&kd(&K{2}6%p7ajFO&p5ME*Ya_iu`Q zrbd2>KkC&CMtao*umtTTw+cB}ML`veJx!MPX~S6r*ksqJxkrI5n!VH&yfDM5YdDU5 z6BSnAdw+Z}8q_S(<1;PhBM1V|lGF$CYXNB!A^L zg#v#QCkm6kYM{C_b>WItj!ao&=pJq}KE%fd^p&D8s>-ogj zoSi$s8_z#){mDOzb+CwLf_9RUakRYdQ=vv058r^tP%$X_B2?IBY#EVMkK-P5GwKXC zN`F-C#t#&i?N{)sC*kYywDsL+4sj)EmB#F!KBr^770+%BOqC5H!k}z^6 zjnqb>4#g}4k!G=~Nev9fGMNemO6l!Bg3zHEl zXitQT8c$4P4K+j2o|L0Kv$%NTTr5B|IWErO=eMw|1-bg}5uIRZMUO;u372g;c>aw5 zEyVou;Yu5!C?Xai>F@owMOj%Z?+{Ki z(f~~CIMaP)LA<7SyUFNL8+)>VJ^xcnR|hO_G4_t#hxMr#Ab9M!m)D1jjS7m^r_zXh zVMDCb??;*oMhFb)W-H;@&ysM2;)wW9uL{i6$BEjcdxUA)LT^d8YBq0q@pz2yI^fw# zMZ9+Lymh8TIo0Z$oyx%MwDoh1&2CoPlzA-G8$pKOa05RK)0V{|@)bH7v_8~4RqWNy z=e7StJ86?DDVK@O@SmE($d>g?MFzHhFy7Aj7uF?UOAga-&oD5>-AGMdkO;*I7f`+Sz4kCIUY7Jc!-Y1e2kA67xhXm~M+s$y zHKWXQVT9e2h!&0CE`DMR?LWw*$XgWdx)>l{&k_nwtrZS%nMHyJwCLWSSONCx1!3+- zNfu<-hy@U;q4hlZB6AzkHQvxT7Vo~N%#WDT5T{{ywiafNz}k1?J(by2)RW>IBu0W4 zcj5$Q1o1%Kwa5g5(5qIiaSFwXMBn+BsQ&!5!P8@Gyui5l>K&7v&iq1k-{@*0+Ez9a z1#c-F){_#h^#*Vlzi!;|Dv6nTE5L1ErDI6erRzI6G>9x}C}|a^#v*JD6GQq!c6~RKkJ$J$K#-3l61dlPO6yv3 zxrMBmhF*nEoj4@Ke4HAMDLwwzqHHT<8$0L()9sUW%S|zaN~)bq)0iS>~r^y;7vD)RK%Ll%@5{i*jMvKX1vsln7@>?O=*L}qq&UTy=hSHp}l8Q)Zf@; zV#cb?LDKMo@tcw@n2Af4@aMf7c@{xD5ws+hK3C_*(G3S!WM|A!GZ$VeF?xy`MwpI` zj+ai9PC9~CN#B$k_Z)GLyf0V1f`VjJ{NrutHHWkCP8wISfp5mS`3f{Wj{RJRbCUYg z`;*ax=507&YXOv4;l+MI!{LVs-Y{|ZDvzW2At|7~SMH+K!Q20tg@VrqXNCuKhMCKD zelT7nvMoa``Jq_f=2mb{`ie?>Y{8NmqR9MOVxhbxU1xvYTLJTg+qYcp(Z2bjTB{8D zRLEXM0da$02U7>r5fu3y$fV7Kq8O>B+3}gODcFLNO6(_n5~}wH6Q&3Xw6q+T?(yU({kTd=UhT)5|~sA#k! z(*75v&QDW<5DIfudEcLH%Dy?8q)OKJCD4K5vxlhWrb*@_kZ+K+`K_l$jb*qTO!G9} zEPU!9xo^z)x#(73n|z+yhlKUr6G|w3M$ncI+h<$DNm7cANZ;q=_zs% zu>+1B-d9_R#maJ%^~Me^;D3Ugcsz5aL5?)@+|2@E&K5Gj!1W6&TqgLtsVp}?G=4!a zv#nc{X*|yo2^FqcbrTT`2)#vOz>$0)cL|r%6C{O2-~=D~9Jb#gCwH4yQ#%SQBM}uk zb8m&dLMc6}#T_hRM@&y&X*!KZRKsEyWM^2*^8&ow%sH}3P==tpAw5=cE}uy^tPQH$ z&{)IV&H?|eEmpPDn(w=lu|b};7a(8MgcEp09$9BlXJT@z|5dAkBJ8V|hbe?0wOWlV z2tnxM8|(AG*l1S?yL!zVLbsFY;l`VPfuB3;sl0dv*%JSgOz!qzMSd5j6xEHW6nlm8 ziZrrOxIw&ORdGo7_(=SBS2`Oynh_(ML~jWcTWyEOeCeqE z`d~O$Cd-cEZnhm6{giTlp5Un#32o&;9Wk4a5ZwRhirxVl^Ng~MXo3xyF1ChJFl>d1YjX$@De`TPXG8WqEQ zZM`p~{fwxlmAosFaxIZk;zYi`e!k1?F$w-{a~h~f#X=RA2p#8b4TQ9x$d|@5fVz?c zZ6W9M*-&}-*%L~06GQc}D#VP7p$FIVT~zCpHWH?q-#2gC`B#{)xD74N?}RziM!vmM zjDo54|FBf|M^{_bTP&)tSV%T)xx2@ly($KC=jAJu&(CIp*nZ^4 zfdxvQ`9tW)QU;HC5+(HC%55|#WD$887;n6C9PC6WMa z*0MUN16mi-^-n#)VdVVb`!Jbes&2~_1KF8lXDyTUuV-SY%}sqD*it4|DAO>yg3TEZ zvOeD0nKl#aOFZ(T;JVP%%ENtbWH{5(`E(txTQh zI{o&q2mi<|mUS@zt$Yr{^M{4Y5$EZTD~*KY1G!}QKsKOA z=%VW$0m&QG6l5IHq{>-9QM;bXZm!|I!Tn4D7I>B?F!hbF68}>I!NTgR`igfW~2G*!GeWB7S(;UPQ#}`Glg)~ zyAq|+O5S}eABFWnHYZD@hjgyms2KD)o&`n>m^g1{mU;hwxF3VoT_EnhT~XiXlkZgYZYr%Yq9M%jPsz&M+r{O1u69+ zFq`O`ok6c-SaN?9h_c6olK=T)oNN;r4S1k31iOT-$-pn(;s;szh;OMiN`Eg=qq)XCi(CO2e{S-<=W(r7{#~l^mhOTy{R$y@?8XFrh#;LMbp32;QuqX(|AP+WL zUT5?TDhQx`;)rH(NqR z&L^$m4F0RIF%!hbf4%Ax8F6LJ({;JN)^%_hLMT!?GnHxFqd9$B&6ua2k-HA}w$0f$ zE(#W7{w}hASIF(vRLIqJe{OI#>~01k=6Zvj_P)TTNQ75IDSx!3K}WPlnr&=4mxNy zS|rJ)${^R%MwoM%@%%}<#^U%$R1S4?L0QMX4Mu;)JLAF!^{j^DqFyNE7A+%ETY(FI zYH5>RR%Vm4A=?TD#oZ#_pH{4{nT$v1Q_;D~o&@i(xpI7uWgqYw3IoScaHXqwQF8wv zg{9m07MokPlWgcEp`Gyn%eIwEMD|~ER=%LIVo1a-Wf;0Q zEKj~LDr)T;`VJ)@BtIrv$JS6804}Pn_=J&)Wvs{rOAa|)Wn$`lt)K-FtuJYnE>8IRkboX|A zRubpJwiInLNA(hk)3DcJE=^j7Olte@#dY+qf;)g8i^dd(QKeJ;4`lCF=Fy1fxEVB2 z5E}KhlN>fDUu1ja2US6A^1t$R&k;TXap@r&U;1IHw5GxyCsL=U?Rfbu0XDHcYo9lO zs@R3hY;7_+?M)KT!)Gb>=F%?{%=YNU0 zMs7L$yrwlL1L)E&ai0sN0^$eNWCk(1w& ze`Q(-mDM9$)IXLulbiY@f5a0cIW$(a61sk${qNolIGs2;fMnQsM1+5C-Yw2>hxp2( zJ+B0oeBLFmBe zgkqjAl%CNcdN05J!pg z67afA?}(v35+%F_o3;sfe4{V^+x!f#kbf*~>&KP0Zqe&c&Vi>^FlA zS~7FHQcwGx5m95ECv90ChIkDRw`!KxNT3~Qf2pd^f19#-&vzc)jFaRRQJf& z;#b-lm3(>ghs2S-+U4whN$ZOgC+YAj*0r#l4Ye6n;~CiBN!*GhL8@OQ0kN;HB?3G@e-!ic zk2XiX6*0v;B*5#?3|}?X$Eml?0m+}=qltxhoMc+@GfqG4f1GE~vjYDMUsdb9A*cCm z&h<8hGj!0zP!WY=}FH+K-r(@O!Nz$tYx<6xf|~P39LV(I52wEbWHAR z#^uLvgeP?=(&`t5a4Z88K=LI*7Zmdhv7|ViHRe=I9DRP4J2T-upr|DA$VIakqK1sr zqD_mxz0Vg^SB3A6w5J?r!g@%N}qpg3afZWR^U_M*s@K$dC&XigOGXhsI! zjKn=xRAO}qP=*xQbO1E{nP>Rmq=}&6@RIc8NiM$A!t~&zO@#hX`lHNz`oZ(lE1g_d zI>)(PP<`W@bo#48v?IMF&Cka4e{4QrD=%dH(xm>Y{EI)2G*h+yd##*4Z82n9G`_); zg&?c6yMbXO)9Tf2qA=P4RWKG#JqVJw4T8=uj9--WCpHAm9=WbYuyR!tK!4{wLwC7< zoBk~8p2U$ZsdlXsH)f+XWHtrLoIeremy5$p zN4$fAX+3XOM>SJmk+l(LT|L%2vN5AXm$r?Guz60~dzN%!)2fc=cL`+F7zq|YoPTflFdQhyF2+`kGyLvk(=2KB#0zF~M zGWC0|X|X3quMii`y2U!wvLGM20FGD#Jjp@JnJmk$nosUFGOiH{`Y+4anom=?T@CwF zg$-E;Znz3Ipxb+@E9--)>BiC|ZL?0g)`MtP6u zGKeNdURlrg97>TZ#^KVZ^jxE2=ie`5=Wkp!!XR}K(j}_sYwLiAozwjLzuIodLHOXG zqU8L+8OWhgW3dLGoRYmCoXA2Q-#B&95*IlQF7Es7wE6uBd zlo}lVc+*_y`wSVP>%D#7k(VXF)r|zkhkgo{`fU$5R)J)#&~V7{p9pXG70^O9lQ0@A z@|pI(R~A^cZ}(j(GV4>jzHP^LkYZmS=IHub;Th_kRTPW|%^T``a{FC$yQ`MhKwQ!DGB|WZ_$i;&{$sKr zz|)r-D@LCWAz)vx=0`_Zh+mK*MKJ;`5akJvvlaO zEZom+_W++-F1bh&&sg+nm}9Pu&6GRJ^1~4IXC}{VmQAt>e7l5QgBkk{&KnNCbrck0R6 z#2?5QiM>z(ke4zzc6#=AlW8{k4(kK$@KU%Cia~%)SZl1!uc}Q09<&|S7qeNf zsB^jX=apVa%{#rl{mf6mn z23>bc*!g%%ezS@DqXr#Stv+6)=kGeQ@nE!!JZ)~qp^W<@ePIr{{OH4aCX8(H^}gi! zjT|D#=2^5JK2Mt7muDD~Xt-*?%k4a3Cg0$!fPHh>di{U>J^2`XUD{YpU2&=D-?Duc zTb}QxH<*{!(%cvH`D#o+ahh(H;6JGig2WRZre{YtFrNhhf#_EH@-u^Li z>lj{NnW5dhZ9NK1m;t#!HBCF;RV1ndl)3wnK^ai7;LXQ7J*{FbW1Xt@gWr*|Z3WNl zFxQW$EKWI(`GEnJ6{Gg5Ao&BPR(3~f{chSmWOh>F%de*eP1hAd>@N1H5ObTiB;xmu z^PqF*U`~hbAEBW@IGWMV2l)i@M#-m>@+g3!WvFf;Zp$FCjo72`AaRIRX-#s}a))zZ+v^X%B3W=TZkDplfzYb;~J-VSxaXI_3Hc0UknJ0587vz;8BF`de( zo9&TIAH9anXpWhjX8y{YR=kBuL`1UEG2mx^*22_t*>;;1@!v0d9waogL_*{C1TPnJ zpcdp|09`wgyC9sWzoyVUKj%%;qHz-iRZ@P3P+dCO(>(TQF;qQ1!moNLjjjTy_g44ZNB7mqeJHp=>c1M|uU2E|b35ocVic z^9F^vnazn(WP_Lr{iDy8Q%N=#&pQA!1^%*VtoV^f+4H+4rr~IC6p-+xT1t zsb$#H6DH zXtLph`{E+YD@)ipl2cWbv^cP+;+#lfljlqT1#g@*_J|xIDItTFVK(Q;gv=@vVEUjC zeGU&9(ll&`lYrQu;a#!yk5==Mjj{Tv=Les03NA#?$KyfDmnscSpA_2TD?WWiY8Bt= zJ-eALg3Y2V5@%C1&~SZ`&ZDvYO73O&tpa2tFa%SL#Ra^96Z*Ih!T+GOp)e$gqao4w z8(G#t5T7a^Rpu=j)9E3#qDXaheY^G|v9mtoXH|)ySvZ_tGs%|4KlF%NyPGr6nn%r$s+yXFEwo%zC+2<`%Sud#5A}c6t z_lf{T(}&-;o?-)Ct)Oy}k%Q@NtnUtW!jsdRG?(1(kr2J2#lAXe2oqS1qC}0HG~uMD z6|_UU%z2XA{(6zTd4IfDZQPMh4GnW-?yXR%P+E(om_RFI%3yy4M;3vEND?>n2gsK9&y=&PRizYdKCwzH8mi5+)7Gs}1Z1qhN z-gUG{=+fGo1TA^W8`1@4yVCxIMw-V=6xc*X5RTw1y_Fq7sN@FD9&2_dk5yKy(dMB* z0B+WD9v6#5QRw7*39MU-TElm7+0HA?XdYJ31Uqz{S)HByI5RgXMW+hX_JEJ>TG4_( z>X-hUj=!0=b;$R7mM$Sf4*3hx%_rqzy(Uao+A2j(Q_6l#uUnTN7-hPKYBKfCwmC^C zr+(C|i(B63gY_W^fw0GvvftnibvUUnO#u0K34ESFF~Yd~_PSSOo^RKa9lGe4y5d84 zcp|M(x)ql&C4s6Blo;}c802hL6qPdZx7lR$D>AC#VlkNY-?2++~uPm$}ho3ng&#MYa4= z3U?_sH!$|~oc5zEXVY8|2?(1$W$}SBK@!OA)A-N<{6?@QH2&hAynyK{lgUYV;HNi$e zY(NyH`X0-70RkQ$oMBTh!o{J?jY>Pyx>R-L`x+jPkxaai z$nEthqEPL8bQbBcu$s8uVVORd>oQ(`=qy0}uaXOWbq&5eW%&AE5Wk9Lq{+sp)T(ra ziv6B{-FG1bXNa{=eprj{FR)F)Vf#eF##ZoCg*%Qie%BO$hUIQ|uE4$U)0||VElc)o z7&D$|i-rAOet}~ZFOHO@yN-*9$cS@KyWIZi_Z*Xw#0;g*Ld#?UjsCiP1s9lbjxbz4 z3jo?RYjP)@_Q~;>7QRvTl<}1Hl=GY=Ui}&*?V0Elv4~Yq`cY&$DvI5scKS|mKlKEq zOh9@iYs(9`u2>#hBL&vQ{PCJk{?X}nee~(is_Ibv_n0jIL!vhISE?>djw;(%G~`(F`u1`tKoE(^Dik5*syha z`}<*0*#>B!a;AEuxjiW>Ul2srlbM2=YTewrYAZf&lVxnB+k<#uR{qMlSxfd_ z2ylO$!IJ?VQeR7#Pf8^EHzQ+c&^Xec$};ri8TUq=p( zSo;Oy|ab z)Ja&diF}e@K0dLuii7Kvfl#Y(>>2{(#(98#@TSuH1*_hR97`W6k0(Mssd}2+*MI{5 z*n;RWyY?lLRy*?kCBaq=Y~?7>SK7?ytk<_+c0bc*?}v8cEuqks1NF7>ih2^Wz<_?V z0>}5}buyY=JyXPrHvOH9!t|6bfLThfpE~?PK*<)$^VNrZ`9jj|lgwK~jQCBbQ%mZ8 zzui1?we;kh;;uQy6g1f5E6%pd+-2Z;A{pm#y_qq9gq*@Vk{V=i+bi1SIO^;wWC(cS zPuenJAW975WtOx~;Q<6Z%ashUC}IK13pcPAI+s-oe~6FrdEFYtMqX-70`v`W`|1zf z3pTW=8czUQo7vrb6Pb>dTLv+={Q;3g25(Z7g`fwM&G0sv~VRc&gSHkxTe^o_p zA5}`2p*g&OAMJ6b5H2$Gl@h8v;~rM5W6`*hGId;lHN@bTku%@p$Xa-0wNCvmqvLcg%PKM00=nxJ1j}~&*@@?*Q~NW|FXWBTgf-2XdTHJXog$?1l#C z&$TNPMRg3Z3@c!oI0T4j2SD-A)TNW>ps0ynAmKAH%9*~mi@7pxOG)EUjNuMpy&F#G znmjVMh*y}@@7@8gFfCkNCtzld4?{7)E(mVU>2NOJ%pv?K-vuM+?tSJ%uyx#TAJW0}VkU9^X-nK_#4#v4?`yLx z2z^zt8A_)1A#{C75CitbhT29uG9RbH`Zw(M-l+K#u_8$bL)(E-YKzuM9F@b==Yi4t zvY$0x7>?%_g5IlxCIFw+_E>HM(4c?&Omkm3tM!#9N}e3RbDjOXud zzxFGQcPnHg>Ci{_#LhT6_kj7#(}3xF>;m|>^;WBK?k_c@^sEl6JvIH8(JIBF{#50SBsgRD^3umMKa}SkdVxIv zMfuaGM!V6P(@7U(Oq@t>%mj`OULE;`Rorj+AmMnCk9k4Wfdoh}t-SeI@S_$e7lRZi z>50FjZeEku@g@gOP996AKl=^9(CUzZ_O(*}`%=KHi_GseOnp64Qsq{9n?U+dub$!U zp6<0joVQWXAupiKxwJVD$M(erBg9~h=#L%4ZHXm<%HULAJBwST;9&z@0w|K!!0rv{Jh=Ia zCaDE#ICM#u4*h0#l&Xamk zMl3xOIEh1902QU^7aRR=UWb?#t-igatSc@WNy6$>#1Q9kGMz@;|FnV$ikv_eeY8W2 z0<;j`jf-)KJoPGNGJpfLg2>Dk9+Uj%EoWGkuiS_@d(p?AXE|SXQdKcOMHaLGSY0}P z59N9D3wTX=FTvXG^CA*}@0-08FaryFM=WTKg>4&45bJAOA$4LzfdY$ME%14MQ3Z=x z4lKxjzqkTB#k|>L=dTl90tpUgTCDs+I{X-x%5#uii@~nL%q2lFH4aH=i0QE;>kXI? zk}HlqY*sbK49MzSz(^OnR>lC>$5*A<7lg$P|9BT_nQCWI$@vMgUnobU3&l+Upsg8JLs^Y*&27NEH1tJlKDe*bBY!lO!m zj-&5{Ef!+fCc4WWTZGs(Z3;-r-<9omiL2Fe0&IA@v!O#2)nY|wi{9xpLl3rn0G#|T zTDT1bN$A=>AjqikvBWbD>+juO$`G9fv4V(>$#Y^_YUgr&VVhfWQna;1#1ldBUTswN zr;;;2GxlW7IzI!x@oBs(Ks;ny|5RqkN%d(sf;vT*kY>}x^glN}G9MC(ETDY3tY%;~ z6X4_{cg@qeBPZ0U8CkNLdf25CuVItBW&)K)-6(#7YcYD|_zSh?-4OJmfFn4jfnulP zuKed(yyx&Wd@|Fg(u{XP_vtMU>~i$sy#eAW;!?cFO®E%U9m8;hqsz#|%muzP%S z2N8JCh6`PLoGRpDgK#BV6hH@HZ++)obr}u_xB}JKpGN~-%R~-Pek>nzx!n!Puiyy! zq;7LebVKghpV0a+O3_bW#T;(o+quWjt^T0|;Etl01sK>7iH;^IQi2kF95X&>p2#G@ zLM8_(OrPn>GNYO8ap1ft+GcL+#V8pR?a`g9DMq000E9M}{GGa0-jWr;VR?2{eZV=T_1m&H&W0o}RSP%7m)CwAN# zzZKWbJE8<`ud6uH3axY?Ee<}LZ3qlmK-aaGLenOD*Pbe?)tCoqzN)7=j`e8h`+3+g z6~$w@M2VvXgA^`}xUohY>zT-S;D>8V&Sx69DE$Lxw1Zb}dNlkE9cg0b=u=y3SyMQb zWVE!sb2CaZ#gawsKV}0S<+CKeR5e}2-w^tIPkF`4kCihZAY~}OV9n=8OLd2jJxVNC z_3KVGgQ(qRU4P3`LpY0IY&F%Bix20x;N?@BBmGa;?UdmSxmK|!1BN~^ zVM|8q*&+-{@au*B&K>uS7ik|csC?_F7Oxr_v5Rxm@f&k_+i48&5J)Z{9}d@`({VzCbpr7TU@cX2-u!%NmT1^*)#&=ZyZxkMCG1 zcP5tVVD?Ht+_Q$r8HYiN8_;ih+Y8&1w2wWqx|j%&Z~AnJnqKP92d6!Nqg}oPwf10?w%99;mZNyvqjQ|I0t93$>+GtI2YY!J$Y(5AlKq zx7|W#sDGBJy4E7B8`_W>xgVW{RdfCb2$JIkIIN#-3romneZW!AKn9lb#yd#(uKMN% zU=g$^yHgY_czU{q#9Va+EkP2>S!OKVrDw_3U(GYleoS+v5DQZJc^Z$6+Eg&q9W^yX z_%A-F3~U!@kWs)tFLmr}@@-%RdYgM_7F;LgSuetOsvM4sAQ-ncTE+41uG7q#qaI}n z+5St3nY(dPywh;q4&XQw8(!!!(&!>AQGS{~<<}%UWgD_PAY=P%?IV-oZPybtH9f;~ zYu^}8_x(C~BL^b50Ka$7kn^QCIgIR1jDTr7?6cd0mB80!7~dx3W91VRQ^%DaHz75^ zQDRNIOQ)>NO#bf0Nox;$vGQ>PpdP&{=?WUmzK&^nx%#7lCVI;QIc$1#q!P^+*#+;& zW#v7`OD8&npr@JGKzh(}an6t)_)r;C$M4peA7=MEo)*F6Ft00Vx%tUuDp4cPsZ|EW zc3||JEt{61^iP@RQ0l(7A~2NBne=?9E?x?36!%Irua7;I^Wej{@DBa=6p^H($`lvtMY= z0wLeOi(G4Yw8tW6SpuQ(#NaY#Dx<|f`G$v(ei``V-4qXhbFD`dec5;~rn5r+0k!i8 z=H8p{!Y8CBUajN|_ZiiAbna$>L`LreEA@;p6~CvUrv>+jnnsyg`XSf>LG1OK_P~l` z5@i>AQj503ndGeV0p?1xFIy}9s%s^9W!QJH(_941C)mc5WUNz1mX3S5LW$>ZG-<#1 zP^ohG(a+(pS(fQZmrX*Kc~(X&o?%OE{ik<^Xah>b%01Js{$3aV8wd9_ZF*{i;R{*v zS4R)FZg)|7r<)$xx58;czC=tlCitP8IJV6J@m*Jk*_10kc|Q+C4e)IUeDPT%pehik zm9)ZQ&Y)ZK6FC>_f8+U5z&BW1t6S(1_lf9lyMAacH3)uvKG=kZ!eN4@G{dz39h-T# z5p%AR82XEcF1oe%6fbqSUBs9+>BvK9h)Xg20=oM#p2A>_AVS3=@eN?|WTJ>FseI(? z&)_zY!>vVru5n0391>iKR5HOz@B*9(Lw3(vI@!nKwr*oj4I5G=9+48DzdUZ~v-#h2 z75MH5RKZ8L@(&dT^1b*-^a?wxn>BfAGQsG+oX~|8Z8GFFgU&`wG3Z*kcpb=vEj832M!J z4E8{uI0D+|pvg1G2_y=I_Ts{q+{PU&>3jDs-K5jQ<34#HW9u+>D#X(R249GgL$mx8 zuz4K1`-K-7si+cavGQo@I+o$yzv?y9j%;V!Jx8+|nzzS`QQFMp( zox^kwG_nlca0|q7b)LpRL>AIF+V4i${&KrmvEDeGMKuon&+pI;|6!%ldEAz@tTOrs zu$Ml^s)Wg6%=3RC_`MiA@MM2~SBhiM?dSS#73q6EE_-ja5n5FY-jWa(;^{n%9Au|i zHR-NTcR^px(2iyavF*n>Q{oZ5{)U-SpAJg(HQW<6QA@s@g#W$kU zdJHps0Bl>_(V37ky{-8WrW1COsxtBM#j_r|Y7Y^ladzKqv~863*FA|@Bd-yxZs&h` zF-%V*rvQwvFuK9CC%Ke;1D{*=sb?q>b_vo%YQ*P>ds~5SJceBHh=SO<;ZiTpDQrX4 z1iln%8%D~Cu741Rmz5970#_MGP8<`;S&tmXEL@@Vw43#^7(C-k)EkFu-onv`t8#G= zw2`U;Lv0D@8D9HVP3PTGgO^wE_PI2w<~;Zd^-j`&GFa9lgjrjCq^;v)`Yof2MCuUU zAr@>*b4>(Sp)U|8*k(J9;gtX-a9mmuTKBs56E!T!PR*3Fo#je4GFM;v2OnW*#<&V! zF^>@gg;=i2j`sUT0rFty%uV6z>>MPN8;4l~Ja3NA6UQSz`*5%T9VDi`lpru^aqQQp6%# zJjrj*KdD9nv=QRrpTwBMj1YApN> znQN}-e42puc+$K$emYLZn+8x@(%?+y@8uxuF$Ii2KPP9^K9ZUI&c&q)v?uTZ#FCVa zL8lq>p*au~%e4F@R=OCwN5;tq%!2j3>Ow|zDA#nhFaq&O0w3mJ@KvO`o+;L(?$lG8 zlmwS`YCD~)W#blCVF^p1-2r~|^?N!lUc}y=QA9<3BA_=Ca;-ZRoYdRxNs8Fx%nmnK z@yJ|GApseaWlH+k=-US6|AywoTe`zTNVK9HI2~++VL9&wBthx{s{>A*ti>F+7vqP^ zFe%_rv?hT&MXGwMzLCYi;NsdK?3vF~fNK~$wZzol_6d5tJza@CO9JEB%YMM<7Fy0g zoc1>~zVHEbtVvSqZ?HzyYS}GX96fy!pi@sfcN>Hg`HJ2L=%rEh$w>Qa_)-Ei@;h-A zTkcc(0k!sX-17T&YzaD&?x#a|-Mme0lR%lgJpEO8Yoou$NiGs+fT{oz_?h&^bf&8@ z-s$OOw}{hS&tr74q=rqJ=q?mwe?Pp9)>~s|K;)-s>n)PZ9OXVL(o$BvzAw`z0w&Oc zX?SsU+hmB&`QV%$;$Y2+TH64F!Lv{PaE*_9B8l;^TN3r@| z*1;R3JaIzAY;SsAqWSm;Tu74Xa0B-!>#*gFsdh*<`wpm=8=5~lIBRob!QnI6`Y`2} z4Vm^o1O&wvJp|uiL_*{WHGi)5`D0M*{n~ZWJXi)8I{+23FIoyE(Izn_u_hJ#-c`n3 zkHE2?J7I(+?}2no$kXTmlbsMp3;)7>(p{?Y@6lUE1YGtw60z$sW%Dv zO>gx&mwOBeM$7DWh8EuaNoX7N;nJ()#=<_Qg`v5M(7y`IiG?`*x8?4fnR6{nDfnr0 zl(dM^${Rb^oM-Utv1aG-U#G`^B8n?uy4Ojy!cX{gN#Cdo+l5$w&xxwjT}Z|pss@Ci;Sp-4;>3(ixwr)3EgNaP`5?eokCb@ z5DyU3V;V!OCJwQAcQ8T|*TG%7yz#07WI_UaApPw{^OWQ>!1*&}*X8kNW0Sw zT?y*1RAh-TpBPD$WNeL>&uGIy`qub;ABBSpgIwhijVv(_;8$qHDW$u8)Z|?(C3I}p zcj$-ne6GCk+hEm5xHz`jjG~gEf1yR0%!Qx?!z%X4#JmY zL?P!%{1I|_EWsEaeNw4ZhUCWXhH9sdXl4s<6zfWI347{f##&CD7w^m};i1J^%C@K% zc$~v;QJ*lhR39JZH;8Ou-B|>tW$$)`O)5>CfThRO3N>Gt&Wkl*fLW9k%qVf3UQU6P6lIF7a&Tchf{{wDkTtX6Z)!dzdksoU+Fv0?*47MMXPy0?+ANAunEANmbGA>0J<$FPhI6KQ zINO0Ci5&b1#!~Hp`ll|ugq=$k0uw6rX7G~X#VlVhD=6>`z{_ouJ^@!tr6&-&6;0x&8)7AYox zWA33Ob;!cj@9Yr>ec?v4X#szR{TDl-ijUZECg;iDpU%*xX@v*T^PHbXr6&46O#?LP z_5_a6oyQv)1Vv&HTriPpYK6z&$7eVFTF6dV15rJ#tDt(F7v zw>DVsCTSzsaPbMPz@%Zibl+-H0lQHTF8aILMm;g%G8C^?Bh)D>ft4JbtNM-H!jiVJ zDz3VV{D<7i&Bh8^wXsE+{DJbYo=){?Blan_oMN}5h-D;AN3ji4nrdk5YKh`SkJVvh zJ~X{<40U=X4L_H(leu{%xj?*lqrcU}6zpDv8PS3}o8Y<}#$qj_kWT1VRxHvFjE6CG zM7>>Yza*|S6=evSwqvMh$76clS!t)CmhK9&lu{{tmH>M>2I91adRq8ZlV-f`>x1;s&OyMl$tu6SU%v%|8-+ zDgsR8sm1>*3O;T&MK%u_{r8#P-(WZLu0PyK%vW;f~5NL8?O($AjtRqkBc)fzu+G8oYfIqL1Tg?#0&lwg+8cM<2<2lC1@l z|IXlc@vq|v#YkGR6kcj-`5%Fblm88r@nT{05kq5HQuB7>Cx@HQr|CO6FfbPHh)SAn z?Ml2}3pdz5HM#eG?`woedN`_a>;YJf9TF!4+Bq%!)q;Pmw0)DAVgVM|QQtcN|4tx6 zx#j`o8BH>5N=x?U=+o4*Y>h=)5pm#Kft1%4ey7Lf1YFWc#H~tffk@v87+!V~(ml$1 z??C*#?&+an;}teV6*g()j71q=9wWPhadUHRH= z2xl%XU2nlw&$PBB0R8xsI+ZgmvEuVOqwU9Fs~={pIoPk8-`Acj-r?_J488S3Kr69< z=3?b}n&{mIQDj?2J5C?BJUCKGv=+)s3G9#`E$3B-({A0W%yy?n2C~Yl0ECJotS>d+ zK7GqOQ6=fs3tGUK8b5s%Yz!vZ4lX7=B9XAszz5NM)BI*Ix2zUQv~7eR+2$}!%(j@YSfut16HQ!D_>n`=MvH$R zfnaDdaq3ZlKe0z*Cs=b7*x#RS696l`p*@q)!Rao+r!27RnKs$AR5iw_XKe|zv6EPGw{8bpPdV1Gbr|BTl}C7sb4WgzxR|)cjSPqp(s#?8pkhj}&^pQh)iBmn zk<%DGLTt?TZOCqWBuc*tSdL_T@(xxjQUJW+d5V5{e4d!y@OcZEw>}R=6aI?UeD=i( z;3;TM`sX`@Rk`RTKV7vqMi&A>#mj*$Jp7bEFbNu;h*6_LDBoaH`I}b$a)abPDN5`j zYc>aFXRZ#o2xK|`Ct!D8cc>RK^G@-=CgThRQU;%Aa%cqgpP_Y0;&iB zzlCt<(gW?W*`s$3%^OP?C&i`fri&ubk^$EA7bJzq=+^lmV+-fulLUnclInoiT&Mrv z5(lsXi9wJJS)yo}QhHdYoD13ZgCnCBzWWb4tQC)`fH)F0MlJprRoKm5JUZ8O7Tp-_QHpFu7nXFny@&PE zsj@wCZ4#}E{U9@ZaOr|k5?D^(&Mow0GPJg?=qU}%dUL8P2(+6D(Z8@mySP=+t?k~1 z7(3u9q>XbFyXesizw&1^>X>OH4=ahWI=IO;-9x?S9>qfFGn0x<1qY@p&{rUt5Z{z0 z^SFL?s~-7%1;Ji$$r2)tunuIeD5gXCxt(AV(coWBQ_8Xu>;Gh5bP}f#exvDD6|k~S z!AL4*yk6EO@s{Uu0&%%~(QArKoH_yLYB|!6t9pN!ev!NnCG!1K8`xy-sL2h6S5nT$ z%izg1$+-X@)~?gk^tQ&Vo{4qEv$_+bpntU_fPDIp+}Fgu76AmA!Bp;6>>LXRQ7(<= zfzvO{L36A4)2gv_6?@M|pUcUDF1!`bVsB%msEmX-V?kU`UBYJx>#}w!DfLaiN+f-$ zj|upBoFmz3@d_09E1LOuour{#Q4<8&O^pb+Ey*U@t1$YJ?tnw17=$hHsr?OxN^4y} z-Cn*#Bj0M3*o*m^k9Amtl+kGyvs#Dh*a26oJ;sv9(#g~p^uJ0i%rn<9w$Z&*mA9@S zvCbxlyiv{+C-yk`;YFe{z~G<(wPK#N0YP%5lSnlG{T8$fV6P!)S;M~9Cb{_Rkn1u5 zLeIWPXfEZ5opUaY_!n>%TIN84lJTwb71&8o*}m%)9oXjWNwQvK{6Y*M>kaDeLGYz# z2~vPQ^Q;MWd(t(_CPhA$JD(|Mju!49k!#f5T zqwDupg@1(f@yohXC<#R^CqOD;I9!79tv5pvf@3uLkEHXN&p=p!fL*SLkPe_%TT#nNlzwb=03 zLJFN%tv)(_L7&Z8*0KgzFqZ2YQI^}(e8MdOLGz3+}$5Qv~ZC9HLiGi#e zRgy?)DwbfSwt-T8vD(kMMS54R&`EO3h5m^AR??eu`AjO{4K%&;Xs5%nMUI4CT$A^I zn9-?cG!wj}-cn#i`{s$?r+1E^pGXPoz&q>`q5?3`b}oafm?p;o?BV|i^NXIV{7(HY zff4F|GG-({_J@(B$P&E8fQPF3&ei zF}xPY)qR%fq5Dqrgx|BBY?w@k5x_3icR;;g3f=M`BT*A6AD&Xo&E+cxV#H&Z2;wkY zU3>6NS`@L(1JLxxMGN||WXtYpndd++e%~}u9D1fwifY@sK5>xo#cr4ySKbZADeB2$ zsg=E1DL5|R|N6occxt0yqiFM>>1`m-KBT0(UTN-iLHId!`-c_@46BCCD^&3hsVLMd z^iDL{-&o%+w53O8l6zR5m|o56A&5qkWh5B%P|D9v8dZ9*(8_%R$;jlp=-?XPhB{&W-ADS=Ns>ryKO_pIxFWh zDr4fcXPJUuaERzJ{do7IRl3rH5Q&Az_m8Htmpy%nu9rfs>9PT%M(`}qKN5K;{bNm9 zz=1PSb7QA>SrQ*o;tchP)*u3C$C;a;nWw$AP8|Z#jC8t>8IQkd@d8lgwLm*w&;Ftj zcDtJjZ8O6^ysH5-DI5oL4vzNintp9B$7lkVFD zKFx-xDz%@X=rW&>(h~7oI#M$gMpvOMAJ9175faNC*j^iK#fQD?Z)XTxQ8=LC%YS=? zU-IhCf=`;N#OQUp#Fre1sPd?t?zUEqisz( z3tBIHf)bQ)^WcLy=337zqD4$b8^~0K@TbHOml#2nXCLH&l5TJOcfNVZ2gE;*v~|ew zI>E^m5h+jC)oo_7Z~?0Y1A6yK+EMyI%VU~fBegd;scsW`cYW20ED~yo1|hq>fv*!S z^5W%z>)J76i^Z6&+v+Y|41lRxhS8`x1eH}7nJhYtlQNe=8|&b%zZ(4(E{FcqC_|IQ zL^UA?=?J()s%3Jh6!YP*PSY0Q|N^f@yr5vsAO*_+-ubSr;F%dlJQX zQt)@i9dds2cMnfLt^JjZ8qdm^23SvELU^L?c(7v3f0Ql#5)0k2-WvwEw+czAx_JN{ zL2a^&XsMxq}IT;Ygf9!9;J#0rS_9*T@Ig6mV4$G6K&r5LapHIoA)zVS8RY-S z;UL4Fi*b)U#~1QESUOubX8T#vCq^k2ibiX{!hf6aUz!Xw&)LyIySoPuHw(# zpG6AIpgiWx;2ABr(y>_5@m5;EXi}r`NY~WtmiuAm!i5==Mzd+yK>9%DK)cN=fCt(9 zX2^_hf`7sTH;{HxuD{aF@BUb-mJ45>xKkLl>1Z>nY_dWL^`TA_ozvANyRr$N(xwWm z>h?HV30k0xMqO{s;*toB@wGnb-NxDAv_Ks19HYejSsS1H(;Bb@km1GVJMZbm#?aZc z(Qu-UZniBJq)1V9k<`IcY4%bzK#zNZaU#z!B`1J;!o|K`Qke*}d3ix#FOZQkF67(A zVP8?oGeC}24V$MNE#k9n`}gGrWW3Ca%X~>pSxdHxsSYOvp~n}*33D)NLT*%7KQkb%Qvfyj7!R)44!0IP@^w1r?=_`lYMC; z`$X}tlARLbVu50vV%Orh;_~95;yt7kvia8+@2&ZZtg()3xgn}TrLn^NCSk(Bnc?xv zVBa0mvFP&Gk_OQMTJns`hS|=_xXEm*y}~YjeSvC;Ek5Ik*6c~vHa6|prUPbR@S09( z+q}Dtz$k^wRa2M1i#R$$=+a7m!M6h_Yb|MhtJ@Z>&TMj^nNc%Blo zc?xC@d@`Bqk*U;}sH;5)#tBL>~VCZg6pX b?O^Nof4@Nn$$;5a1^_fvbe@ze!9)HJCgJ=- literal 0 HcmV?d00001 diff --git a/website/versioned_docs/version-23.3/JestObjectAPI.md b/website/versioned_docs/version-23.3/JestObjectAPI.md index 4d72a9d02052..fdb912b600f8 100644 --- a/website/versioned_docs/version-23.3/JestObjectAPI.md +++ b/website/versioned_docs/version-23.3/JestObjectAPI.md @@ -316,7 +316,7 @@ Returns the `jest` object for chaining. ### `jest.retryTimes()` -Runs failed tests n-times until they pass or until the max number of retries are exhausted. This only works with jest-circus! +Runs failed tests n-times until they pass or until the max number of retries are exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! Example in a test: @@ -327,22 +327,6 @@ test('will fail', () => { }); ``` -To run with jest circus: - -Install jest-circus - -``` -yarn add --dev jest-circus -``` - -Then set as the testRunner in your jest config: - -```js -module.exports = { - testRunner: 'jest-circus/runner', -}; -``` - Returns the `jest` object for chaining. ### `jest.runAllTicks()` From bea5037a2de3096cd2f9a93487776d6ef2e0de1b Mon Sep 17 00:00:00 2001 From: Mikhail Bodrov Date: Fri, 19 Oct 2018 12:45:26 +0300 Subject: [PATCH 20/76] Remove needless getType call in matches (#7214) * Remove needless getType call in matches * Fix flow --- packages/expect/src/matchers.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/expect/src/matchers.js b/packages/expect/src/matchers.js index 0d8d235ab1b4..215114de52d5 100644 --- a/packages/expect/src/matchers.js +++ b/packages/expect/src/matchers.js @@ -56,9 +56,11 @@ const matchers: MatchersObject = { `Expected: ${printExpected(expected)}\n` + `Received: ${printReceived(received)}` : () => { + const receivedType = getType(received); + const expectedType = getType(expected); const suggestToEqual = - getType(received) === getType(expected) && - (getType(received) === 'object' || getType(expected) === 'array') && + receivedType === expectedType && + (receivedType === 'object' || expectedType === 'array') && equals(received, expected, [iterableEquality]); const oneline = isOneline(expected, received); const diffString = diff(expected, received, {expand: this.expand}); @@ -463,7 +465,7 @@ const matchers: MatchersObject = { `Expected ${EXPECTED_COLOR( 'path', )} to be a string or an array. Received:\n` + - ` ${getType(keyPath)}: ${printReceived(keyPath)}`, + ` ${keyPathType}: ${printReceived(keyPath)}`, ); } From 22f67d49ffcce7a5b6d6891438b837b3b26ba9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Fri, 19 Oct 2018 11:48:40 +0100 Subject: [PATCH 21/76] Add getCacheFilePath to HasteMap (#7217) --- CHANGELOG.md | 1 + packages/jest-haste-map/src/index.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a03e365c23c..5d139a9ac0e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - `[jest-runtime]` Pass the normalized configuration to script transformers ([#7148](https://github.com/facebook/jest/pull/7148)) - `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) - `[jest-haste-map]` Make `ignorePattern` optional ([#7166](https://github.com/facebook/jest/pull/7166)) +- `[jest-haste-map]` Add `getCacheFilePath` to get the path to the cache file for a `HasteMap` instance ([#7217](https://github.com/facebook/jest/pull/7217)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 5ea1cac2386a..4fdae9167279 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -290,6 +290,10 @@ class HasteMap extends EventEmitter { ); } + getCacheFilePath(): string { + return this._cachePath; + } + build(): Promise { if (!this._buildPromise) { this._buildPromise = this._buildFileMap() From 236feeb85991a0263fd09e86234ff02dbdd2f9fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Fri, 19 Oct 2018 19:42:19 +0100 Subject: [PATCH 22/76] Move breaking changes to "features" in CHANGELOG (#7219) --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d139a9ac0e6..6ea9fc623cb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ - `[jest-config]` Add `readConfigs` function, previously in `jest-cli` ([#7096](https://github.com/facebook/jest/pull/7096)) - `[jest-snapshot]` Enable configurable snapshot paths ([#6143](https://github.com/facebook/jest/pull/6143)) - `[jest-haste-map]` [**BREAKING**] Remove support for `@providesModule` ([#6104](https://github.com/facebook/jest/pull/6104)) +- `[jest-haste-map]` [**BREAKING**] Replace internal data structures to improve performance ([#6960](https://github.com/facebook/jest/pull/6960)) +- `[jest-haste-map]` [**BREAKING**] Use relative paths to allow remote caching ([#7020](https://github.com/facebook/jest/pull/7020)) - `[pretty-format]` Support HTMLCollection and NodeList in DOMCollection plugin ([#7125](https://github.com/facebook/jest/pull/7125)) - `[jest-runtime]` Pass the normalized configuration to script transformers ([#7148](https://github.com/facebook/jest/pull/7148)) - `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) @@ -17,13 +19,12 @@ - `[jest-haste-map]` Add `getCacheFilePath` to get the path to the cache file for a `HasteMap` instance ([#7217](https://github.com/facebook/jest/pull/7217)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) +- `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) ### Fixes - `[jest-cli]` Fix coverage summary reporting ([#7058](https://github.com/facebook/jest/pull/7058)) - `[jest-each]` Add each array validation check ([#7033](https://github.com/facebook/jest/pull/7033)) -- `[jest-haste-map]` [**BREAKING**] Replace internal data structures to improve performance ([#6960](https://github.com/facebook/jest/pull/6960)) -- `[jest-haste-map]` Use relative paths to allow remote caching ([#7020](https://github.com/facebook/jest/pull/7020)) - `[jest-haste-map]` Do not visit again files with the same sha-1 ([#6990](https://github.com/facebook/jest/pull/6990)) - `[jest-jasmine2]` Fix memory leak in Error objects hold by the framework ([#6965](https://github.com/facebook/jest/pull/6965)) - `[jest-haste-map]` Fixed Haste whitelist generation for scoped modules on Windows ([#6980](https://github.com/facebook/jest/pull/6980)) @@ -47,7 +48,6 @@ - `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) - `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) - `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) -- `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) ### Chore & Maintenance From a5d4bdd218ee27422c1e1e3b425930912758b013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Fri, 19 Oct 2018 19:44:09 +0100 Subject: [PATCH 23/76] Remove redundant information from the config hash part of the haste map filename (#7218) --- CHANGELOG.md | 1 + .../src/__tests__/index.test.js | 26 ++++++++++++++++--- packages/jest-haste-map/src/index.js | 3 ++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ea9fc623cb5..4b1bda867c94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - `[jest-runtime]` If `require` fails without a file extension, print all files that match with one ([#7160](https://github.com/facebook/jest/pull/7160)) - `[jest-haste-map]` Make `ignorePattern` optional ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-haste-map]` Add `getCacheFilePath` to get the path to the cache file for a `HasteMap` instance ([#7217](https://github.com/facebook/jest/pull/7217)) +- `[jest-haste-map]` [**BREAKING**] Remove name from hash in `HasteMap.getCacheFilePath` ([#7218](https://github.com/facebook/jest/pull/7218)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) - `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index efd8a10aa6ed..bb14132a63fb 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -211,12 +211,30 @@ describe('HasteMap', () => { expect( HasteMap.getCacheFilePath('/', '@scoped/package', 'random-value'), ).toMatch(/^\/-scoped-package-(.*)$/); + }); - expect( - HasteMap.getCacheFilePath('/', '@scoped/package', 'random-value'), - ).not.toEqual( - HasteMap.getCacheFilePath('/', '-scoped-package', 'random-value'), + it('creates different cache file paths for different roots', () => { + jest.resetModuleRegistry(); + const HasteMap = require('../'); + const hasteMap1 = new HasteMap( + Object.assign({}, defaultConfig, {rootDir: '/root1'}), + ); + const hasteMap2 = new HasteMap( + Object.assign({}, defaultConfig, {rootDir: '/root2'}), + ); + expect(hasteMap1.getCacheFilePath()).not.toBe(hasteMap2.getCacheFilePath()); + }); + + it('creates different cache file paths for different projects', () => { + jest.resetModuleRegistry(); + const HasteMap = require('../'); + const hasteMap1 = new HasteMap( + Object.assign({}, defaultConfig, {name: '@scoped/package'}), + ); + const hasteMap2 = new HasteMap( + Object.assign({}, defaultConfig, {name: '-scoped-package'}), ); + expect(hasteMap1.getCacheFilePath()).not.toBe(hasteMap2.getCacheFilePath()); }); it('matches files against a pattern', () => diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 4fdae9167279..31ac05fd4e49 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -263,6 +263,7 @@ class HasteMap extends EventEmitter { this._options.cacheDirectory, `haste-map-${this._options.name}-${rootDirHash}`, VERSION, + this._options.name, this._options.roots .map(root => fastPath.relative(options.rootDir, root)) .join(':'), @@ -283,7 +284,7 @@ class HasteMap extends EventEmitter { name: string, ...extra: Array ): string { - const hash = crypto.createHash('md5').update(name + extra.join('')); + const hash = crypto.createHash('md5').update(extra.join('')); return path.join( tmpdir, name.replace(/\W/g, '-') + '-' + hash.digest('hex'), From c4fba2d9efe04aed7114b27feacd3453ff9fd4f7 Mon Sep 17 00:00:00 2001 From: James Treworgy Date: Sat, 20 Oct 2018 05:11:29 -0400 Subject: [PATCH 24/76] Allow array of regexp strings for testRegex (#7209) --- CHANGELOG.md | 1 + TestUtils.js | 2 +- docs/Configuration.md | 6 +-- .../__snapshots__/show_config.test.js.snap | 2 +- packages/jest-cli/src/SearchSource.js | 7 ++- .../src/__tests__/runJestWithCoverage.test.js | 2 +- packages/jest-cli/src/__tests__/watch.test.js | 2 +- packages/jest-cli/src/cli/args.js | 5 +- .../__tests__/__snapshots__/init.test.js.snap | 4 +- packages/jest-config/src/Defaults.js | 2 +- packages/jest-config/src/Descriptions.js | 3 +- packages/jest-config/src/ValidConfig.js | 6 ++- .../__snapshots__/normalize.test.js.snap | 11 ++++ .../src/__tests__/normalize.test.js | 50 ++++++++++++++++++- packages/jest-config/src/normalize.js | 22 ++++++-- packages/jest-editor-support/src/Settings.js | 4 +- .../src/__tests__/should_instrument.test.js | 18 +++++-- .../jest-runtime/src/should_instrument.js | 5 +- types/Argv.js | 2 +- types/Config.js | 6 +-- 20 files changed, 128 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b1bda867c94..fd565a69ea07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - `[jest-haste-map]` [**BREAKING**] Remove name from hash in `HasteMap.getCacheFilePath` ([#7218](https://github.com/facebook/jest/pull/7218)) - `[jest-runtime]` Remove `cacheDirectory` from `ignorePattern` for `HasteMap` if not necessary ([#7166](https://github.com/facebook/jest/pull/7166)) - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) +- `[jest-config]` Accept an array as as well as a string for `testRegex`([#7209]https://github.com/facebook/jest/pull/7209)) - `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) ### Fixes diff --git a/TestUtils.js b/TestUtils.js index 3cd6e43ecb3e..8ec57581b94f 100644 --- a/TestUtils.js +++ b/TestUtils.js @@ -109,7 +109,7 @@ const DEFAULT_PROJECT_CONFIG: ProjectConfig = { testLocationInResults: false, testMatch: [], testPathIgnorePatterns: [], - testRegex: '.test.js$', + testRegex: [/\.test\.js$/], testRunner: 'jest-jasmine2', testURL: '', timers: 'real', diff --git a/docs/Configuration.md b/docs/Configuration.md index 4cb938e87af2..bef4ec88cbbd 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -804,7 +804,7 @@ The glob patterns Jest uses to detect test files. By default it looks for `.js` See the [micromatch](https://github.com/jonschlinkert/micromatch) package for details of the patterns you can specify. -See also [`testRegex` [string]](#testregex-string), but note that you cannot specify both options. +See also [`testRegex` [string | Array]](#testregex-string), but note that you cannot specify both options. ### `testPathIgnorePatterns` [array] @@ -814,11 +814,11 @@ An array of regexp pattern strings that are matched against all test paths befor These pattern strings match against the full path. Use the `` string token to include the path to your project's root directory to prevent it from accidentally ignoring all of your files in different environments that may have different root directories. Example: `["/build/", "/node_modules/"]`. -### `testRegex` [string] +### `testRegex` [string | Array] Default: `(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$` -The pattern Jest uses to detect test files. By default it looks for `.js` and `.jsx` files inside of `__tests__` folders, as well as any files with a suffix of `.test` or `.spec` (e.g. `Component.test.js` or `Component.spec.js`). It will also find files called `test.js` or `spec.js`. See also [`testMatch` [array]](#testmatch-array-string), but note that you cannot specify both options. +The pattern or patterns Jest uses to detect test files. By default it looks for `.js` and `.jsx` files inside of `__tests__` folders, as well as any files with a suffix of `.test` or `.spec` (e.g. `Component.test.js` or `Component.spec.js`). It will also find files called `test.js` or `spec.js`. See also [`testMatch` [array]](#testmatch-array-string), but note that you cannot specify both options. The following is a visualization of the default regex: diff --git a/e2e/__tests__/__snapshots__/show_config.test.js.snap b/e2e/__tests__/__snapshots__/show_config.test.js.snap index 64bb26ca8e28..2e4b59ee8531 100644 --- a/e2e/__tests__/__snapshots__/show_config.test.js.snap +++ b/e2e/__tests__/__snapshots__/show_config.test.js.snap @@ -58,7 +58,7 @@ exports[`--showConfig outputs config info and exits 1`] = ` \\"testPathIgnorePatterns\\": [ \\"/node_modules/\\" ], - \\"testRegex\\": \\"\\", + \\"testRegex\\": [], \\"testRunner\\": \\"<>/jest-jasmine2/build/index.js\\", \\"testURL\\": \\"http://localhost\\", \\"timers\\": \\"real\\", diff --git a/packages/jest-cli/src/SearchSource.js b/packages/jest-cli/src/SearchSource.js index 020425067b5a..af000440a0c0 100644 --- a/packages/jest-cli/src/SearchSource.js +++ b/packages/jest-cli/src/SearchSource.js @@ -51,13 +51,12 @@ const globsToMatcher = (globs: ?Array) => { return path => micromatch([path], globs, {dot: true}).length > 0; }; -const regexToMatcher = (testRegex: string) => { - if (!testRegex) { +const regexToMatcher = (testRegex: Array) => { + if (!testRegex.length) { return () => true; } - const regex = new RegExp(testRegex); - return path => regex.test(path); + return path => testRegex.some(e => e.test(path)); }; const toTests = (context, tests) => diff --git a/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js b/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js index 4081497655ba..247fcf2c7b11 100644 --- a/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js +++ b/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js @@ -51,7 +51,7 @@ jest.mock( }, ); -const config = {roots: [], testPathIgnorePatterns: [], testRegex: ''}; +const config = {roots: [], testPathIgnorePatterns: [], testRegex: []}; let globalConfig; const defaults = { changedFilesPromise: Promise.resolve({ diff --git a/packages/jest-cli/src/__tests__/watch.test.js b/packages/jest-cli/src/__tests__/watch.test.js index 3607381f684d..4acc234db99e 100644 --- a/packages/jest-cli/src/__tests__/watch.test.js +++ b/packages/jest-cli/src/__tests__/watch.test.js @@ -105,7 +105,7 @@ describe('Watch mode flows', () => { let stdin; beforeEach(() => { - const config = {roots: [], testPathIgnorePatterns: [], testRegex: ''}; + const config = {roots: [], testPathIgnorePatterns: [], testRegex: []}; pipe = {write: jest.fn()}; globalConfig = {watch: true}; hasteMapInstances = [{on: () => {}}]; diff --git a/packages/jest-cli/src/cli/args.js b/packages/jest-cli/src/cli/args.js index c758ff14e56e..b374adeba2ef 100644 --- a/packages/jest-cli/src/cli/args.js +++ b/packages/jest-cli/src/cli/args.js @@ -576,8 +576,9 @@ export const options = { type: 'array', }, testRegex: { - description: 'The regexp pattern Jest uses to detect test files.', - type: 'string', + description: + 'A string or array of string regexp patterns that Jest uses to detect test files.', + type: 'array', }, testResultsProcessor: { description: diff --git a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap index adf63d20d15c..9ec33fc8447b 100644 --- a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap +++ b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap @@ -164,8 +164,8 @@ module.exports = { // \\"/node_modules/\\" // ], - // The regexp pattern Jest uses to detect test files - // testRegex: \\"\\", + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], // This option allows the use of a custom results processor // testResultsProcessor: null, diff --git a/packages/jest-config/src/Defaults.js b/packages/jest-config/src/Defaults.js index fefe239a189a..1b549e1059e1 100644 --- a/packages/jest-config/src/Defaults.js +++ b/packages/jest-config/src/Defaults.js @@ -70,7 +70,7 @@ export default ({ testLocationInResults: false, testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], testPathIgnorePatterns: [NODE_MODULES_REGEXP], - testRegex: '', + testRegex: [], testResultsProcessor: null, testRunner: 'jasmine2', testURL: 'http://localhost', diff --git a/packages/jest-config/src/Descriptions.js b/packages/jest-config/src/Descriptions.js index fc8cafb8e785..6989be5e1dad 100644 --- a/packages/jest-config/src/Descriptions.js +++ b/packages/jest-config/src/Descriptions.js @@ -71,7 +71,8 @@ export default ({ testMatch: 'The glob patterns Jest uses to detect test files', testPathIgnorePatterns: 'An array of regexp pattern strings that are matched against all test paths, matched tests are skipped', - testRegex: 'The regexp pattern Jest uses to detect test files', + testRegex: + 'The regexp pattern or array of patterns that Jest uses to detect test files', testResultsProcessor: 'This option allows the use of a custom results processor', testRunner: 'This option allows use of a custom test runner', diff --git a/packages/jest-config/src/ValidConfig.js b/packages/jest-config/src/ValidConfig.js index edd84404cff3..8b675b90b7c8 100644 --- a/packages/jest-config/src/ValidConfig.js +++ b/packages/jest-config/src/ValidConfig.js @@ -10,6 +10,7 @@ import type {InitialOptions} from 'types/Config'; import {replacePathSepForRegex} from 'jest-regex-util'; +import {MultipleValidOptions} from 'jest-validate'; import {NODE_MODULES} from './constants'; const NODE_MODULES_REGEXP = replacePathSepForRegex(NODE_MODULES); @@ -100,7 +101,10 @@ export default ({ testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], testNamePattern: 'test signature', testPathIgnorePatterns: [NODE_MODULES_REGEXP], - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$', + testRegex: MultipleValidOptions( + '(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$', + ['/__tests__/\\.test\\.jsx?$', '/__tests__/\\.spec\\.jsx?$'], + ), testResultsProcessor: 'processor-node-module', testRunner: 'jasmine2', testURL: 'http://localhost', diff --git a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap index 19770435b020..ef754afc331b 100644 --- a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap +++ b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap @@ -67,6 +67,17 @@ exports[`testMatch throws if testRegex and testMatch are both specified 1`] = ` " `; +exports[`testMatch throws if testRegex is provided an invalid regex string 1`] = ` +"Validation Error: + +Error parsing configuration for testRegex: \\"foo(bar\\" could not be parsed. +Error: Invalid regular expression: /foo(bar/: Unterminated group + + Configuration Documentation: + https://jestjs.io/docs/configuration.html +" +`; + exports[`testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; exports[`testPathPattern --testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 801ab1f0318b..ff45c3036203 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -804,6 +804,42 @@ describe('Upgrade help', () => { }); }); +describe('testRegex', () => { + it('testRegex empty string is mapped to empty array', () => { + const {options} = normalize( + { + rootDir: '/root', + testRegex: '', + }, + {}, + ); + + expect(options.testRegex).toEqual([]); + }); + it('testRegex string is mapped to array of RegExp objects', () => { + const {options} = normalize( + { + rootDir: '/root', + testRegex: '.*', + }, + {}, + ); + + expect(options.testRegex).toEqual([/.*/]); + }); + it('testRegex array is mapped to array of RegExp objects', () => { + const {options} = normalize( + { + rootDir: '/root', + testRegex: ['.*', 'foo\\.bar'], + }, + {}, + ); + + expect(options.testRegex).toEqual([/.*/, /foo\.bar/]); + }); +}); + describe('testMatch', () => { it('testMatch default not applied if testRegex is set', () => { const {options} = normalize( @@ -826,7 +862,7 @@ describe('testMatch', () => { {}, ); - expect(options.testRegex).toBe(''); + expect(options.testRegex).toEqual([]); }); it('throws if testRegex and testMatch are both specified', () => { @@ -842,6 +878,18 @@ describe('testMatch', () => { }).toThrowErrorMatchingSnapshot(); }); + it('throws if testRegex is provided an invalid regex string', () => { + expect(() => { + normalize( + { + rootDir: '/root', + testRegex: 'foo(bar', + }, + {}, + ); + }).toThrowErrorMatchingSnapshot(); + }); + it('normalizes testMatch', () => { const {options} = normalize( { diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index a7da8a1a41d7..0bbd7af6b80b 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -547,7 +547,23 @@ export default function normalize(options: InitialOptions, argv: Argv) { ); break; case 'testRegex': - value = options[key] && replacePathSepForRegex(options[key]); + const valueOrEmptyArray = options[key] || []; + const valueArray = Array.isArray(valueOrEmptyArray) + ? valueOrEmptyArray + : [valueOrEmptyArray]; + + value = valueArray.map(replacePathSepForRegex).map(pattern => { + try { + return new RegExp(pattern); + } catch (err) { + throw createConfigError( + `Error parsing configuration for ${chalk.bold( + key, + )}: "${pattern}" could not be parsed.\n` + + `Error: ${err.message}`, + ); + } + }); break; case 'moduleFileExtensions': { value = options[key]; @@ -701,14 +717,14 @@ export default function normalize(options: InitialOptions, argv: Argv) { } } - if (options.testRegex && options.testMatch) { + if (newOptions.testRegex.length && options.testMatch) { throw createConfigError( ` Configuration options ${chalk.bold('testMatch')} and` + ` ${chalk.bold('testRegex')} cannot be used together.`, ); } - if (options.testRegex && !options.testMatch) { + if (newOptions.testRegex.length && !options.testMatch) { // Prevent the default testMatch conflicting with any explicitly // configured `testRegex` value newOptions.testMatch = []; diff --git a/packages/jest-editor-support/src/Settings.js b/packages/jest-editor-support/src/Settings.js index d9cac96c91a4..d11da69ab998 100644 --- a/packages/jest-editor-support/src/Settings.js +++ b/packages/jest-editor-support/src/Settings.js @@ -28,7 +28,7 @@ import {createProcess} from './Process'; type Glob = string; type ConfigRepresentation = { - testRegex: string, + testRegex: string | Array, testMatch: Array, }; @@ -59,7 +59,7 @@ export default class Settings extends EventEmitter { // Defaults for a Jest project this.settings = { testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], - testRegex: '(/__tests__/.*|\\.(test|spec))\\.jsx?$', + testRegex: ['(/__tests__/.*|\\.(test|spec))\\.jsx?$'], }; this.configs = [this.settings]; diff --git a/packages/jest-runtime/src/__tests__/should_instrument.test.js b/packages/jest-runtime/src/__tests__/should_instrument.test.js index a6891c48f15d..9003579b427d 100644 --- a/packages/jest-runtime/src/__tests__/should_instrument.test.js +++ b/packages/jest-runtime/src/__tests__/should_instrument.test.js @@ -29,7 +29,13 @@ describe('should_instrument', () => { it('when testRegex provided and file is not a test file', () => { testShouldInstrument('source_file.js', defaultOptions, { - testRegex: '.*\\.(test)\\.(js)$', + testRegex: [/.*\.(test)\\.(js)$'/], + }); + }); + + it('when more than one testRegex is provided and filename is not a test file', () => { + testShouldInstrument('source_file.js', defaultOptions, { + testRegex: [/.*\_(test)\.(js)$/, /.*\.(test)\.(js)$/, /never/], }); }); @@ -88,7 +94,7 @@ describe('should_instrument', () => { testShouldInstrument('do/collect/sum.coverage.test.js', defaultOptions, { forceCoverageMatch: ['**/*.(coverage).(test).js'], rootDir: '/', - testRegex: '.*\\.(test)\\.(js)$', + testRegex: ['.*\\.(test)\\.(js)$'], }); }); }); @@ -115,7 +121,13 @@ describe('should_instrument', () => { it('when testRegex provided and filename is a test file', () => { testShouldInstrument(defaultFilename, defaultOptions, { - testRegex: '.*\\.(test)\\.(js)$', + testRegex: [/.*\.(test)\.(js)$/], + }); + }); + + it('when more than one testRegex is provided and filename matches one of the patterns', () => { + testShouldInstrument(defaultFilename, defaultOptions, { + testRegex: [/.*\_(test)\.(js)$/, /.*\.(test)\.(js)$/, /never/], }); }); diff --git a/packages/jest-runtime/src/should_instrument.js b/packages/jest-runtime/src/should_instrument.js index 7d9f76e6ee90..1f0317f8d715 100644 --- a/packages/jest-runtime/src/should_instrument.js +++ b/packages/jest-runtime/src/should_instrument.js @@ -35,7 +35,10 @@ export default function shouldInstrument( return true; } - if (config.testRegex && filename.match(config.testRegex)) { + if ( + config.testRegex && + config.testRegex.some(regex => regex.test(filename)) + ) { return false; } diff --git a/types/Argv.js b/types/Argv.js index ef157f155dfd..cc552d883996 100644 --- a/types/Argv.js +++ b/types/Argv.js @@ -81,7 +81,7 @@ export type Argv = {| testNamePattern: string, testPathIgnorePatterns: Array, testPathPattern: Array, - testRegex: string, + testRegex: string | Array, testResultsProcessor: ?string, testRunner: string, testURL: string, diff --git a/types/Config.js b/types/Config.js index b08323e950bb..569c49b55d61 100644 --- a/types/Config.js +++ b/types/Config.js @@ -74,7 +74,7 @@ export type DefaultOptions = {| testLocationInResults: boolean, testMatch: Array, testPathIgnorePatterns: Array, - testRegex: string, + testRegex: Array, testResultsProcessor: ?string, testRunner: ?string, testURL: string, @@ -165,7 +165,7 @@ export type InitialOptions = { testNamePattern?: string, testPathDirs?: Array, testPathIgnorePatterns?: Array, - testRegex?: string, + testRegex?: string | Array, testResultsProcessor?: ?string, testRunner?: string, testURL?: string, @@ -282,7 +282,7 @@ export type ProjectConfig = {| testMatch: Array, testLocationInResults: boolean, testPathIgnorePatterns: Array, - testRegex: string, + testRegex: Array, testRunner: string, testURL: string, timers: 'real' | 'fake', From ad5b040fbfbf23bc303610a5254ade9a3da65015 Mon Sep 17 00:00:00 2001 From: Rogelio Guzman Date: Sat, 20 Oct 2018 08:42:16 -0700 Subject: [PATCH 25/76] Interrupt tests if interactive watch plugin key is pressed (#7222) --- CHANGELOG.md | 1 + packages/jest-cli/src/watch.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd565a69ea07..92d9a9cd3fdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ ### Fixes +- `[jest-cli]` Interrupt tests if interactive watch plugin key is pressed ([#7222](https://github.com/facebook/jest/pull/7222)) - `[jest-cli]` Fix coverage summary reporting ([#7058](https://github.com/facebook/jest/pull/7058)) - `[jest-each]` Add each array validation check ([#7033](https://github.com/facebook/jest/pull/7033)) - `[jest-haste-map]` Do not visit again files with the same sha-1 ([#6990](https://github.com/facebook/jest/pull/6990)) diff --git a/packages/jest-cli/src/watch.js b/packages/jest-cli/src/watch.js index 67e78ffa66e1..ed558414f516 100644 --- a/packages/jest-cli/src/watch.js +++ b/packages/jest-cli/src/watch.js @@ -321,6 +321,10 @@ export default function watch( ).find(plugin => getPluginKey(plugin, globalConfig) === key); if (matchingWatchPlugin != null) { + if (isRunning) { + testWatcher.setState({interrupted: true}); + return; + } // "activate" the plugin, which has jest ignore keystrokes so the plugin // can handle them activePlugin = matchingWatchPlugin; From 7b7fd013508de475e2151e50847373713fc97c7e Mon Sep 17 00:00:00 2001 From: Rogelio Guzman Date: Sat, 20 Oct 2018 13:48:16 -0700 Subject: [PATCH 26/76] Add watch mode e2e tests to "only failed tests" and "update snapshots" (#7141) --- e2e/Utils.js | 22 ++++++- .../watch_mode_only_failed.test.js.snap | 47 +++++++++++++++ ....snap => watch_mode_patterns.test.js.snap} | 43 ++++++++------ .../watch_mode_update_snapshot.test.js.snap | 47 +++++++++++++++ e2e/__tests__/watch_mode_only_failed.test.js | 57 +++++++++++++++++++ ...de.test.js => watch_mode_patterns.test.js} | 8 ++- .../watch_mode_update_snapshot.test.js | 57 +++++++++++++++++++ .../src/reporters/summary_reporter.js | 2 +- 8 files changed, 260 insertions(+), 23 deletions(-) create mode 100644 e2e/__tests__/__snapshots__/watch_mode_only_failed.test.js.snap rename e2e/__tests__/__snapshots__/{watch_mode.test.js.snap => watch_mode_patterns.test.js.snap} (56%) create mode 100644 e2e/__tests__/__snapshots__/watch_mode_update_snapshot.test.js.snap create mode 100644 e2e/__tests__/watch_mode_only_failed.test.js rename e2e/__tests__/{watch_mode.test.js => watch_mode_patterns.test.js} (88%) create mode 100644 e2e/__tests__/watch_mode_update_snapshot.test.js diff --git a/e2e/Utils.js b/e2e/Utils.js index 0c89d0682cec..8493b89f916f 100644 --- a/e2e/Utils.js +++ b/e2e/Utils.js @@ -160,11 +160,29 @@ export const extractSummary = (stdout: string) => { return {rest, summary}; }; +const sortTests = (stdout: string) => + stdout + .split('\n') + .reduce((tests, line, i) => { + if (['RUNS', 'PASS', 'FAIL'].includes(line.slice(0, 4))) { + tests.push([line.trimRight()]); + } else if (line) { + tests[tests.length - 1].push(line.trimRight()); + } + return tests; + }, []) + .sort(([a], [b]) => (a > b ? 1 : -1)) + .reduce( + (array, lines = []) => + lines.length > 1 ? array.concat(lines, '') : array.concat(lines), + [], + ) + .join('\n'); + export const extractSortedSummary = (stdout: string) => { const {rest, summary} = extractSummary(stdout); - return { - rest: sortLines(replaceTime(rest)), + rest: sortTests(replaceTime(rest)), summary, }; }; diff --git a/e2e/__tests__/__snapshots__/watch_mode_only_failed.test.js.snap b/e2e/__tests__/__snapshots__/watch_mode_only_failed.test.js.snap new file mode 100644 index 000000000000..0760e6d45fc6 --- /dev/null +++ b/e2e/__tests__/__snapshots__/watch_mode_only_failed.test.js.snap @@ -0,0 +1,47 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`can press "f" to run only failed tests: test results 1`] = ` +"FAIL __tests__/bar.spec.js + ● bar 1 + expect(received).toBe(expected) // Object.is equality + Expected: \\"foo\\" + Received: \\"bar\\" + 1 | + > 2 | test('bar 1', () => { expect('bar').toBe('foo'); }); + | ^ + 3 | + at __tests__/bar.spec.js:2:43 + +PASS __tests__/foo.spec.js" +`; + +exports[`can press "f" to run only failed tests: test results 2`] = ` +"FAIL __tests__/bar.spec.js + ✕ bar 1 + ● bar 1 + expect(received).toBe(expected) // Object.is equality + Expected: \\"foo\\" + Received: \\"bar\\" + 1 | + > 2 | test('bar 1', () => { expect('bar').toBe('foo'); }); + | ^ + 3 | + at __tests__/bar.spec.js:2:43 +" +`; + +exports[`can press "f" to run only failed tests: test summary 1`] = ` +"Test Suites: 1 failed, 1 passed, 2 total +Tests: 1 failed, 1 passed, 2 total +Snapshots: 0 total +Time: <> +Ran all test suites." +`; + +exports[`can press "f" to run only failed tests: test summary 2`] = ` +"Test Suites: 1 failed, 1 total +Tests: 1 failed, 1 total +Snapshots: 0 total +Time: <> +Ran all test suites." +`; diff --git a/e2e/__tests__/__snapshots__/watch_mode.test.js.snap b/e2e/__tests__/__snapshots__/watch_mode_patterns.test.js.snap similarity index 56% rename from e2e/__tests__/__snapshots__/watch_mode.test.js.snap rename to e2e/__tests__/__snapshots__/watch_mode_patterns.test.js.snap index 737824bf62a7..1377c1d3890b 100644 --- a/e2e/__tests__/__snapshots__/watch_mode.test.js.snap +++ b/e2e/__tests__/__snapshots__/watch_mode_patterns.test.js.snap @@ -15,23 +15,28 @@ Pattern Mode Usage `; -exports[`can press "p" to filter by file name 2`] = ` +exports[`can press "p" to filter by file name: test results 1`] = ` "PASS __tests__/bar.spec.js -PASS __tests__/foo.spec.js +PASS __tests__/foo.spec.js" +`; + +exports[`can press "p" to filter by file name: test results 2`] = ` +"PASS __tests__/bar.spec.js + ✓ bar 1 + ✓ bar 2 +" +`; -Test Suites: 2 passed, 2 total +exports[`can press "p" to filter by file name: test summary 1`] = ` +"Test Suites: 2 passed, 2 total Tests: 4 passed, 4 total Snapshots: 0 total Time: <> Ran all test suites." `; -exports[`can press "p" to filter by file name 3`] = ` -"✓ bar 1 -✓ bar 2 -PASS __tests__/bar.spec.js - -Test Suites: 1 passed, 1 total +exports[`can press "p" to filter by file name: test summary 2`] = ` +"Test Suites: 1 passed, 1 total Tests: 2 passed, 2 total Snapshots: 0 total Time: <> @@ -51,22 +56,26 @@ Pattern Mode Usage `; -exports[`can press "t" to filter by test name 2`] = ` +exports[`can press "t" to filter by test name: test results 1`] = ` "PASS __tests__/bar.spec.js -PASS __tests__/foo.spec.js +PASS __tests__/foo.spec.js" +`; -Test Suites: 2 passed, 2 total +exports[`can press "t" to filter by test name: test results 2`] = ` +"PASS __tests__/bar.spec.js +PASS __tests__/foo.spec.js" +`; + +exports[`can press "t" to filter by test name: test summary 1`] = ` +"Test Suites: 2 passed, 2 total Tests: 4 passed, 4 total Snapshots: 0 total Time: <> Ran all test suites." `; -exports[`can press "t" to filter by test name 3`] = ` -"PASS __tests__/bar.spec.js -PASS __tests__/foo.spec.js - -Test Suites: 2 passed, 2 total +exports[`can press "t" to filter by test name: test summary 2`] = ` +"Test Suites: 2 passed, 2 total Tests: 2 skipped, 2 passed, 4 total Snapshots: 0 total Time: <> diff --git a/e2e/__tests__/__snapshots__/watch_mode_update_snapshot.test.js.snap b/e2e/__tests__/__snapshots__/watch_mode_update_snapshot.test.js.snap new file mode 100644 index 000000000000..18d10ce2e117 --- /dev/null +++ b/e2e/__tests__/__snapshots__/watch_mode_update_snapshot.test.js.snap @@ -0,0 +1,47 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`can press "u" to update snapshots: test results 1`] = ` +"FAIL __tests__/bar.spec.js + ✕ bar + ● bar + expect(value).toMatchSnapshot() + Received value does not match stored snapshot \\"bar 1\\". + - Snapshot + + Received + - \\"foo\\" + + \\"bar\\" + 1 | + > 2 | test('bar', () => { expect('bar').toMatchSnapshot(); }); + | ^ + 3 | + at __tests__/bar.spec.js:2:41 + › 1 snapshot failed. +Snapshot Summary + › 1 snapshot failed from 1 test suite. Inspect your code changes or press \`u\` to update them. +" +`; + +exports[`can press "u" to update snapshots: test results 2`] = ` +"PASS __tests__/bar.spec.js + ✓ bar + › 1 snapshot updated. +Snapshot Summary + › 1 snapshot updated from 1 test suite. +" +`; + +exports[`can press "u" to update snapshots: test summary 1`] = ` +"Test Suites: 1 failed, 1 total +Tests: 1 failed, 1 total +Snapshots: 1 failed, 1 total +Time: <> +Ran all test suites." +`; + +exports[`can press "u" to update snapshots: test summary 2`] = ` +"Test Suites: 1 passed, 1 total +Tests: 1 passed, 1 total +Snapshots: 1 updated, 1 total +Time: <> +Ran all test suites." +`; diff --git a/e2e/__tests__/watch_mode_only_failed.test.js b/e2e/__tests__/watch_mode_only_failed.test.js new file mode 100644 index 000000000000..ce4bd136aa99 --- /dev/null +++ b/e2e/__tests__/watch_mode_only_failed.test.js @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ +'use strict'; + +import path from 'path'; +import {cleanup, extractSummaries, writeFiles} from '../Utils'; +import os from 'os'; +import runJest from '../runJest'; + +const DIR = path.resolve(os.tmpdir(), 'watch_mode_only_failed'); +const pluginPath = path.resolve(__dirname, '../MockStdinWatchPlugin'); + +beforeEach(() => cleanup(DIR)); +afterAll(() => cleanup(DIR)); + +expect.addSnapshotSerializer({ + print: val => val.replace(/\[s\[u/g, '\n'), + test: val => typeof val === 'string' && val.includes('[s'), +}); + +const setupFiles = input => { + writeFiles(DIR, { + '__tests__/bar.spec.js': ` + test('bar 1', () => { expect('bar').toBe('foo'); }); + `, + '__tests__/foo.spec.js': ` + test('foo 1', () => { expect('foo').toBe('foo'); }); + `, + 'package.json': JSON.stringify({ + jest: { + testEnvironment: 'node', + watchPlugins: [[pluginPath, {input}]], + }, + }), + }); +}; + +test('can press "f" to run only failed tests', () => { + const input = [{keys: ['f']}, {keys: ['q']}]; + setupFiles(input); + + const {status, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); + const results = extractSummaries(stderr); + + expect(results).toHaveLength(2); + results.forEach(({rest, summary}) => { + expect(rest).toMatchSnapshot('test results'); + expect(summary).toMatchSnapshot('test summary'); + }); + expect(status).toBe(0); +}); diff --git a/e2e/__tests__/watch_mode.test.js b/e2e/__tests__/watch_mode_patterns.test.js similarity index 88% rename from e2e/__tests__/watch_mode.test.js rename to e2e/__tests__/watch_mode_patterns.test.js index 6df04100d865..8bd4c0c7d84a 100644 --- a/e2e/__tests__/watch_mode.test.js +++ b/e2e/__tests__/watch_mode_patterns.test.js @@ -13,7 +13,7 @@ import {cleanup, extractSummaries, writeFiles} from '../Utils'; import os from 'os'; import runJest from '../runJest'; -const DIR = path.resolve(os.tmpdir(), 'watch_mode'); +const DIR = path.resolve(os.tmpdir(), 'watch_mode_patterns'); const pluginPath = path.resolve(__dirname, '../MockStdinWatchPlugin'); beforeEach(() => cleanup(DIR)); @@ -56,7 +56,8 @@ test('can press "p" to filter by file name', () => { expect(stdout).toMatchSnapshot(); expect(results).toHaveLength(2); results.forEach(({rest, summary}) => { - expect(`${rest}\n\n${summary}`).toMatchSnapshot(); + expect(rest).toMatchSnapshot('test results'); + expect(summary).toMatchSnapshot('test summary'); }); expect(status).toBe(0); }); @@ -74,7 +75,8 @@ test('can press "t" to filter by test name', () => { expect(stdout).toMatchSnapshot(); expect(results).toHaveLength(2); results.forEach(({rest, summary}) => { - expect(`${rest}\n\n${summary}`).toMatchSnapshot(); + expect(rest).toMatchSnapshot('test results'); + expect(summary).toMatchSnapshot('test summary'); }); expect(status).toBe(0); }); diff --git a/e2e/__tests__/watch_mode_update_snapshot.test.js b/e2e/__tests__/watch_mode_update_snapshot.test.js new file mode 100644 index 000000000000..e0a7997be9e8 --- /dev/null +++ b/e2e/__tests__/watch_mode_update_snapshot.test.js @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ +'use strict'; + +import path from 'path'; +import {cleanup, extractSummaries, writeFiles} from '../Utils'; +import os from 'os'; +import runJest from '../runJest'; + +const DIR = path.resolve(os.tmpdir(), 'watch_mode_update_snapshot'); +const pluginPath = path.resolve(__dirname, '../MockStdinWatchPlugin'); + +beforeEach(() => cleanup(DIR)); +// afterAll(() => cleanup(DIR)); + +expect.addSnapshotSerializer({ + print: val => val.replace(/\[s\[u/g, '\n'), + test: val => typeof val === 'string' && val.includes('[s'), +}); + +const setupFiles = input => { + writeFiles(DIR, { + '__tests__/__snapshots__/bar.spec.js.snap': `// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[\`bar 1\`] = \`"foo"\`; + `, + '__tests__/bar.spec.js': ` + test('bar', () => { expect('bar').toMatchSnapshot(); }); + `, + 'package.json': JSON.stringify({ + jest: { + testEnvironment: 'node', + watchPlugins: [[pluginPath, {input}]], + }, + }), + }); +}; + +test('can press "u" to update snapshots', () => { + const input = [{keys: ['u']}, {keys: ['q']}]; + setupFiles(input); + + const {status, stderr} = runJest(DIR, ['--no-watchman', '--watchAll']); + const results = extractSummaries(stderr); + expect(results).toHaveLength(2); + results.forEach(({rest, summary}) => { + expect(rest).toMatchSnapshot('test results'); + expect(summary).toMatchSnapshot('test summary'); + }); + expect(status).toBe(0); +}); diff --git a/packages/jest-cli/src/reporters/summary_reporter.js b/packages/jest-cli/src/reporters/summary_reporter.js index ba5dd58eaa63..0e07f21b3137 100644 --- a/packages/jest-cli/src/reporters/summary_reporter.js +++ b/packages/jest-cli/src/reporters/summary_reporter.js @@ -137,7 +137,7 @@ export default class SummaryReporter extends BaseReporter { typeof process.env.npm_lifecycle_script === 'string' && process.env.npm_lifecycle_script.indexOf('jest') !== -1; - if (globalConfig.watch) { + if (globalConfig.watch || globalConfig.watchAll) { updateCommand = 'press `u`'; } else if (event && scriptUsesJest) { updateCommand = `run \`${client + From 9df985ca51ef6eb3542a70f0b9eaa25427e3c371 Mon Sep 17 00:00:00 2001 From: Noel Yoo Date: Sun, 21 Oct 2018 05:48:53 +0900 Subject: [PATCH 27/76] Fix typo (#7227) --- docs/Configuration.md | 2 +- docs/JestObjectAPI.md | 2 +- docs/MockFunctions.md | 2 +- docs/SnapshotTesting.md | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index bef4ec88cbbd..d0b41c1dc020 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -404,7 +404,7 @@ Specifies notification mode. Requires `notify: true`. - `success`: send a notification when tests pass. - `change`: send a notification when the status changed. - `success-change`: send a notification when tests pass or once when it fails. -- `failure-change`: send a notification when tests fails or once when it passes. +- `failure-change`: send a notification when tests fail or once when it passes. ### `preset` [string] diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 80925ae00ace..197d85cff252 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -315,7 +315,7 @@ Returns the `jest` object for chaining. ### `jest.retryTimes()` -Runs failed tests n-times until they pass or until the max number of retries are exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! +Runs failed tests n-times until they pass or until the max number of retries is exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! Example in a test: diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index 84dff54de226..eb96d94ca990 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -95,7 +95,7 @@ console.log(myMock(), myMock(), myMock(), myMock()); // > 10, 'x', true, true ``` -Mock functions are also very effective in code that uses a functional continuation-passing style. Code written in this style helps avoid the need for complicated stubs that recreate behavior of the real component they're standing in for, in favor of injecting values directly into the test right before they're used. +Mock functions are also very effective in code that uses a functional continuation-passing style. Code written in this style helps avoid the need for complicated stubs that recreate the behavior of the real component they're standing in for, in favor of injecting values directly into the test right before they're used. ```javascript const filterTestFn = jest.fn(); diff --git a/docs/SnapshotTesting.md b/docs/SnapshotTesting.md index 87bc6040d2f9..279e7059eb1c 100644 --- a/docs/SnapshotTesting.md +++ b/docs/SnapshotTesting.md @@ -42,7 +42,7 @@ exports[`renders correctly 1`] = ` The snapshot artifact should be committed alongside code changes, and reviewed as part of your code review process. Jest uses [pretty-format](https://github.com/facebook/jest/tree/master/packages/pretty-format) to make snapshots human-readable during code review. On subsequent test runs Jest will simply compare the rendered output with the previous snapshot. If they match, the test will pass. If they don't match, either the test runner found a bug in your code (in this case, it's `` component) that should be fixed, or the implementation has changed and the snapshot needs to be updated. > Note: The snapshot is directly scoped to the data you render – in our example it's `` component with page prop passed to it. This implies that even if any other file has missing props (Say, `App.js`) in the `` component, it will still pass the test as the test doesn't know the usage of `` component and it's scoped only to the `Link.react.js`. -> Also, Rendering the same component with different props in other snapshot test will not affect the first one, as the tests don't know about each other. +> Also, Rendering the same component with different props in other snapshot tests will not affect the first one, as the tests don't know about each other. More information on how snapshot testing works and why we built it can be found on the [release blog post](https://jestjs.io/blog/2016/07/27/jest-14.html). We recommend reading [this blog post](http://benmccormick.org/2016/09/19/testing-with-jest-snapshots-first-impressions/) to get a good sense of when you should use snapshot testing. We also recommend watching this [egghead video](https://egghead.io/lessons/javascript-use-jest-s-snapshot-testing-feature?pl=testing-javascript-with-jest-a36c4074) on Snapshot Testing with Jest. @@ -308,11 +308,11 @@ Jest has been rewritten with performance in mind, and snapshot testing is not an ### How do I resolve conflicts within snapshot files? -Snapshot files must always represent the current state of the modules they are covering. Therefore, if you are merging two branches and encounter a conflict in the snapshot files, you can either resolve the conflict manually or to update the snapshot file by running Jest and inspecting the result. +Snapshot files must always represent the current state of the modules they are covering. Therefore, if you are merging two branches and encounter a conflict in the snapshot files, you can either resolve the conflict manually or update the snapshot file by running Jest and inspecting the result. ### Is it possible to apply test-driven development principles with snapshot testing? -Although it is possible to write snapshot files manually, that is usually not approachable. Snapshots help figuring out whether the output of the modules covered by tests is changed, rather than giving guidance to design the code in the first place. +Although it is possible to write snapshot files manually, that is usually not approachable. Snapshots help to figure out whether the output of the modules covered by tests is changed, rather than giving guidance to design the code in the first place. ### Does code coverage work with snapshot testing? From 4ec517ef07dfaf5427b1cfd9c86c90641821ec64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Sat, 20 Oct 2018 22:49:18 +0200 Subject: [PATCH 28/76] docs: prefer jest.require* instead of require.require* (#7210) --- CHANGELOG.md | 1 + docs/GlobalAPI.md | 8 -------- docs/JestObjectAPI.md | 10 ++++++++++ docs/ManualMocks.md | 2 +- docs/Troubleshooting.md | 2 +- docs/TutorialReactNative.md | 2 +- e2e/__tests__/jest_require_actual.test.js | 4 ++-- e2e/__tests__/jest_require_mock.test.js | 4 ++-- examples/module-mock/__tests__/partial_mock.js | 2 +- packages/expect/src/__tests__/fake_chalk.test.js | 2 +- .../src/__tests__/generateEmptyCoverage.test.js | 2 +- packages/jest-config/src/__tests__/normalize.test.js | 6 +++--- .../jest-editor-support/src/__tests__/runner.test.js | 2 +- packages/jest-environment-jsdom/src/__mocks__/index.js | 2 +- .../src/__tests__/jsdom_environment.test.js | 2 +- .../src/__tests__/node_environment.test.js | 2 +- .../src/lib/__tests__/normalize_path_sep.test.js | 4 ++-- .../src/__tests__/script_transformer.test.js | 6 +++--- .../__tests__/test_root/__mocks__/ManuallyMocked.js | 2 +- packages/jest-snapshot/src/__mocks__/prettier.js | 2 +- packages/jest-util/src/__tests__/get_callsite.test.js | 4 ++-- website/versioned_docs/version-22.0/GlobalAPI.md | 10 ---------- website/versioned_docs/version-22.0/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-22.0/ManualMocks.md | 2 +- website/versioned_docs/version-22.0/Troubleshooting.md | 2 +- .../versioned_docs/version-22.0/TutorialReactNative.md | 2 +- website/versioned_docs/version-22.1/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-22.1/Troubleshooting.md | 2 +- .../versioned_docs/version-22.1/TutorialReactNative.md | 2 +- website/versioned_docs/version-22.2/GlobalAPI.md | 8 -------- website/versioned_docs/version-22.2/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-22.2/ManualMocks.md | 2 +- website/versioned_docs/version-22.2/Troubleshooting.md | 2 +- .../versioned_docs/version-22.2/TutorialReactNative.md | 2 +- website/versioned_docs/version-22.3/GlobalAPI.md | 8 -------- website/versioned_docs/version-22.3/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-22.3/ManualMocks.md | 2 +- website/versioned_docs/version-22.3/Troubleshooting.md | 2 +- .../versioned_docs/version-22.3/TutorialReactNative.md | 2 +- website/versioned_docs/version-22.4/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-22.4/ManualMocks.md | 2 +- website/versioned_docs/version-22.4/Troubleshooting.md | 2 +- .../versioned_docs/version-22.4/TutorialReactNative.md | 2 +- website/versioned_docs/version-23.0/GlobalAPI.md | 8 -------- website/versioned_docs/version-23.0/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-23.0/ManualMocks.md | 2 +- website/versioned_docs/version-23.0/Troubleshooting.md | 2 +- website/versioned_docs/version-23.1/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-23.2/GlobalAPI.md | 8 -------- website/versioned_docs/version-23.2/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-23.3/JestObjectAPI.md | 10 ++++++++++ website/versioned_docs/version-23.5/GlobalAPI.md | 8 -------- website/versioned_docs/version-23.6/Troubleshooting.md | 2 +- 53 files changed, 144 insertions(+), 101 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92d9a9cd3fdc..e58676db857d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,7 @@ - `[docs]` Removed useless expect.assertions in `TestingAsyncCode.md` ([#7131](https://github.com/facebook/jest/pull/7131)) - `[docs]` Remove references to `@providesModule` which isn't supported anymore ([#7147](https://github.com/facebook/jest/pull/7147)) - `[docs]` Update `setupFiles` documentation for clarity ([#7187](https://github.com/facebook/jest/pull/7187)) +- `[docs]` Change `require.require*` to `jest.require*` ([#7210](https://github.com/facebook/jest/pull/7210)) - `[jest-circus]` Add readme.md ([#7198](https://github.com/facebook/jest/pull/7198)) ### Performance diff --git a/docs/GlobalAPI.md b/docs/GlobalAPI.md index 0eb4f2be26d2..638856595e7b 100644 --- a/docs/GlobalAPI.md +++ b/docs/GlobalAPI.md @@ -434,14 +434,6 @@ test('will be ran', () => { }); ``` -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 197d85cff252..0442c12a34e6 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -362,6 +364,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/docs/ManualMocks.md b/docs/ManualMocks.md index 554eb7bd6cb8..2d4f549f9c63 100644 --- a/docs/ManualMocks.md +++ b/docs/ManualMocks.md @@ -126,7 +126,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). diff --git a/docs/Troubleshooting.md b/docs/Troubleshooting.md index d82a50ae9162..991133d283ab 100644 --- a/docs/Troubleshooting.md +++ b/docs/Troubleshooting.md @@ -144,7 +144,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/docs/TutorialReactNative.md b/docs/TutorialReactNative.md index 1b7cb9f484e8..cab62656c318 100644 --- a/docs/TutorialReactNative.md +++ b/docs/TutorialReactNative.md @@ -185,7 +185,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/e2e/__tests__/jest_require_actual.test.js b/e2e/__tests__/jest_require_actual.test.js index 6941eb645f89..e9fa4473fb03 100644 --- a/e2e/__tests__/jest_require_actual.test.js +++ b/e2e/__tests__/jest_require_actual.test.js @@ -19,11 +19,11 @@ const DIR = path.resolve(os.tmpdir(), 'jest_require_actual_test'); beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); -test('understands dependencies using require.requireActual', () => { +test('understands dependencies using jest.requireActual', () => { writeFiles(DIR, { '.watchmanconfig': '', '__tests__/a.test.js': ` - const a = require.requireActual('../a'); + const a = jest.requireActual('../a'); test('a', () => {}); `, diff --git a/e2e/__tests__/jest_require_mock.test.js b/e2e/__tests__/jest_require_mock.test.js index e2a8984d9619..040f2f69b8b0 100644 --- a/e2e/__tests__/jest_require_mock.test.js +++ b/e2e/__tests__/jest_require_mock.test.js @@ -19,11 +19,11 @@ const DIR = path.resolve(os.tmpdir(), 'jest_require_mock_test'); beforeEach(() => cleanup(DIR)); afterAll(() => cleanup(DIR)); -test('understands dependencies using require.requireMock', () => { +test('understands dependencies using jest.requireMock', () => { writeFiles(DIR, { '.watchmanconfig': '', '__tests__/a.test.js': ` - const a = require.requireMock('../a'); + const a = jest.requireMock('../a'); test('a', () => {}); `, diff --git a/examples/module-mock/__tests__/partial_mock.js b/examples/module-mock/__tests__/partial_mock.js index 40ba84dbdfd7..21077480ad1d 100644 --- a/examples/module-mock/__tests__/partial_mock.js +++ b/examples/module-mock/__tests__/partial_mock.js @@ -8,7 +8,7 @@ import defaultExport, {apple, strawberry} from '../fruit'; jest.mock('../fruit', () => { - const originalModule = require.requireActual('../fruit'); + const originalModule = jest.requireActual('../fruit'); const mockedModule = jest.genMockFromModule('../fruit'); //Mock the default export and named export 'apple'. diff --git a/packages/expect/src/__tests__/fake_chalk.test.js b/packages/expect/src/__tests__/fake_chalk.test.js index aab5def65c5c..c461b75c1b2d 100644 --- a/packages/expect/src/__tests__/fake_chalk.test.js +++ b/packages/expect/src/__tests__/fake_chalk.test.js @@ -6,7 +6,7 @@ */ 'use strict'; -const fakeChalk = require.requireActual('../fake_chalk'); +const fakeChalk = jest.requireActual('../fake_chalk'); describe('Fake Chalk', () => { it('returns input when invoked', () => { diff --git a/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js b/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js index 42dda61ca167..fe69dc6a43f4 100644 --- a/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js +++ b/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js @@ -15,7 +15,7 @@ const {makeGlobalConfig, makeProjectConfig} = require('../../../../TestUtils'); jest.mock('jest-runtime', () => { // $FlowFixMe requireActual - const realRuntime = require.requireActual('jest-runtime'); + const realRuntime = jest.requireActual('jest-runtime'); realRuntime.shouldInstrument = () => true; return realRuntime; }); diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index ff45c3036203..d8ed943adcb7 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -11,7 +11,7 @@ import normalize from '../normalize'; jest.mock('jest-resolve'); -jest.mock('path', () => require.requireActual('path').posix); +jest.mock('path', () => jest.requireActual('path').posix); const crypto = require('crypto'); const path = require('path'); @@ -1009,7 +1009,7 @@ describe('preset', () => { test('throws when preset is invalid', () => { jest.doMock('/node_modules/react-native/jest-preset.json', () => - require.requireActual('./jest-preset.json'), + jest.requireActual('./jest-preset.json'), ); expect(() => { @@ -1263,7 +1263,7 @@ describe('testPathPattern', () => { describe('win32', () => { beforeEach(() => { - jest.mock('path', () => require.requireActual('path').win32); + jest.mock('path', () => jest.requireActual('path').win32); require('jest-resolve').findNodeModule = findNodeModule; }); diff --git a/packages/jest-editor-support/src/__tests__/runner.test.js b/packages/jest-editor-support/src/__tests__/runner.test.js index 1f110a6bd72a..ad1999727583 100644 --- a/packages/jest-editor-support/src/__tests__/runner.test.js +++ b/packages/jest-editor-support/src/__tests__/runner.test.js @@ -14,7 +14,7 @@ jest.mock('child_process', () => ({spawn: jest.fn()})); jest.mock('os', () => ({tmpdir: jest.fn()})); jest.mock('fs', () => { // $FlowFixMe requireActual - const readFileSync = require.requireActual('fs').readFileSync; + const readFileSync = jest.requireActual('fs').readFileSync; // Replace `readFile` with `readFileSync` so we don't get multiple threads return { diff --git a/packages/jest-environment-jsdom/src/__mocks__/index.js b/packages/jest-environment-jsdom/src/__mocks__/index.js index 107546a83f2a..68f8411ac835 100644 --- a/packages/jest-environment-jsdom/src/__mocks__/index.js +++ b/packages/jest-environment-jsdom/src/__mocks__/index.js @@ -6,7 +6,7 @@ */ 'use strict'; -const vm = require.requireActual('vm'); +const vm = jest.requireActual('vm'); const JSDOMEnvironment = jest.genMockFromModule('../index'); diff --git a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.js b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.js index 47c73604a3ca..1f535f58a729 100644 --- a/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.js +++ b/packages/jest-environment-jsdom/src/__tests__/jsdom_environment.test.js @@ -6,7 +6,7 @@ */ 'use strict'; -const JSDomEnvironment = require.requireActual('../'); +const JSDomEnvironment = jest.requireActual('../'); describe('JSDomEnvironment', () => { it('should configure setTimeout/setInterval to use the browser api', () => { diff --git a/packages/jest-environment-node/src/__tests__/node_environment.test.js b/packages/jest-environment-node/src/__tests__/node_environment.test.js index 2ad2955723ee..a4a434f4ef84 100644 --- a/packages/jest-environment-node/src/__tests__/node_environment.test.js +++ b/packages/jest-environment-node/src/__tests__/node_environment.test.js @@ -6,7 +6,7 @@ */ 'use strict'; -const NodeEnvironment = require.requireActual('../'); +const NodeEnvironment = jest.requireActual('../'); describe('NodeEnvironment', () => { it('uses a copy of the process object', () => { diff --git a/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js b/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js index 461177387404..c6ed861b54a7 100644 --- a/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js @@ -12,14 +12,14 @@ describe('normalizePathSep', () => { it('does nothing on posix', () => { jest.resetModules(); - jest.mock('path', () => require.requireActual('path').posix); + jest.mock('path', () => jest.requireActual('path').posix); const normalizePathSep = require('../normalize_path_sep').default; expect(normalizePathSep('foo/bar/baz.js')).toEqual('foo/bar/baz.js'); }); it('replace slashes on windows', () => { jest.resetModules(); - jest.mock('path', () => require.requireActual('path').win32); + jest.mock('path', () => jest.requireActual('path').win32); const normalizePathSep = require('../normalize_path_sep').default; expect(normalizePathSep('foo/bar/baz.js')).toEqual('foo\\bar\\baz.js'); }); diff --git a/packages/jest-runtime/src/__tests__/script_transformer.test.js b/packages/jest-runtime/src/__tests__/script_transformer.test.js index da20831c6c18..60ae65c665ff 100644 --- a/packages/jest-runtime/src/__tests__/script_transformer.test.js +++ b/packages/jest-runtime/src/__tests__/script_transformer.test.js @@ -14,8 +14,8 @@ jest .mock('fs', () => // Node 10.5.x compatibility Object.assign({}, jest.genMockFromModule('fs'), { - ReadStream: require.requireActual('fs').ReadStream, - WriteStream: require.requireActual('fs').WriteStream, + ReadStream: jest.requireActual('fs').ReadStream, + WriteStream: jest.requireActual('fs').WriteStream, }), ) .mock('graceful-fs') @@ -23,7 +23,7 @@ jest getCacheFilePath: (cacheDir, baseDir, version) => cacheDir + baseDir, })) .mock('jest-util', () => { - const util = require.requireActual('jest-util'); + const util = jest.requireActual('jest-util'); util.createDirectory = jest.fn(); return util; }) diff --git a/packages/jest-runtime/src/__tests__/test_root/__mocks__/ManuallyMocked.js b/packages/jest-runtime/src/__tests__/test_root/__mocks__/ManuallyMocked.js index 8b2a0de29117..cbc163aee4d8 100644 --- a/packages/jest-runtime/src/__tests__/test_root/__mocks__/ManuallyMocked.js +++ b/packages/jest-runtime/src/__tests__/test_root/__mocks__/ManuallyMocked.js @@ -11,7 +11,7 @@ let OnlyRequiredFromMock; let moduleStateValue = 'default'; try { - OnlyRequiredFromMock = require.requireActual('OnlyRequiredFromMock'); + OnlyRequiredFromMock = jest.requireActual('OnlyRequiredFromMock'); } catch (e) { // If the module cannot be loaded, use a dummy value. There is one test // that specifically tests for the correct value which ensures this feature diff --git a/packages/jest-snapshot/src/__mocks__/prettier.js b/packages/jest-snapshot/src/__mocks__/prettier.js index 5c553328aa7f..ff89efde1bc4 100644 --- a/packages/jest-snapshot/src/__mocks__/prettier.js +++ b/packages/jest-snapshot/src/__mocks__/prettier.js @@ -1,4 +1,4 @@ -const prettier = require.requireActual('prettier'); +const prettier = jest.requireActual('prettier'); module.exports = { format: (text, opts) => diff --git a/packages/jest-util/src/__tests__/get_callsite.test.js b/packages/jest-util/src/__tests__/get_callsite.test.js index 7166d7a3a61b..da80a1de4433 100644 --- a/packages/jest-util/src/__tests__/get_callsite.test.js +++ b/packages/jest-util/src/__tests__/get_callsite.test.js @@ -5,8 +5,8 @@ import getCallsite from '../get_callsite'; // Node 10.5.x compatibility jest.mock('fs', () => Object.assign({}, jest.genMockFromModule('fs'), { - ReadStream: require.requireActual('fs').ReadStream, - WriteStream: require.requireActual('fs').WriteStream, + ReadStream: jest.requireActual('fs').ReadStream, + WriteStream: jest.requireActual('fs').WriteStream, }), ); diff --git a/website/versioned_docs/version-22.0/GlobalAPI.md b/website/versioned_docs/version-22.0/GlobalAPI.md index 5e0cd868a7b6..f7496d673a38 100644 --- a/website/versioned_docs/version-22.0/GlobalAPI.md +++ b/website/versioned_docs/version-22.0/GlobalAPI.md @@ -267,16 +267,6 @@ describe.skip('my other beverage', () => { }); ``` -Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. - -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-22.0/JestObjectAPI.md b/website/versioned_docs/version-22.0/JestObjectAPI.md index 4feb0d61c112..c897b6d4043c 100644 --- a/website/versioned_docs/version-22.0/JestObjectAPI.md +++ b/website/versioned_docs/version-22.0/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -266,6 +268,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-22.0/ManualMocks.md b/website/versioned_docs/version-22.0/ManualMocks.md index ca744df2df3a..4987b6f636ff 100644 --- a/website/versioned_docs/version-22.0/ManualMocks.md +++ b/website/versioned_docs/version-22.0/ManualMocks.md @@ -111,7 +111,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual_mocks](https://github.com/facebook/jest/tree/master/examples/manual_mocks). diff --git a/website/versioned_docs/version-22.0/Troubleshooting.md b/website/versioned_docs/version-22.0/Troubleshooting.md index 9a4fbc0bfe0d..594e34733488 100644 --- a/website/versioned_docs/version-22.0/Troubleshooting.md +++ b/website/versioned_docs/version-22.0/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-22.0/TutorialReactNative.md b/website/versioned_docs/version-22.0/TutorialReactNative.md index 0df325074e23..275cacbc7df4 100644 --- a/website/versioned_docs/version-22.0/TutorialReactNative.md +++ b/website/versioned_docs/version-22.0/TutorialReactNative.md @@ -188,7 +188,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/website/versioned_docs/version-22.1/JestObjectAPI.md b/website/versioned_docs/version-22.1/JestObjectAPI.md index 762c064ce479..0bccfffd50f5 100644 --- a/website/versioned_docs/version-22.1/JestObjectAPI.md +++ b/website/versioned_docs/version-22.1/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -264,6 +266,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-22.1/Troubleshooting.md b/website/versioned_docs/version-22.1/Troubleshooting.md index d532c3ba00b6..7f1e409b7c21 100644 --- a/website/versioned_docs/version-22.1/Troubleshooting.md +++ b/website/versioned_docs/version-22.1/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-22.1/TutorialReactNative.md b/website/versioned_docs/version-22.1/TutorialReactNative.md index b6c93d0f60ce..31afb5ea156d 100644 --- a/website/versioned_docs/version-22.1/TutorialReactNative.md +++ b/website/versioned_docs/version-22.1/TutorialReactNative.md @@ -188,7 +188,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/website/versioned_docs/version-22.2/GlobalAPI.md b/website/versioned_docs/version-22.2/GlobalAPI.md index 985881ee2679..49aad8c1c9f5 100644 --- a/website/versioned_docs/version-22.2/GlobalAPI.md +++ b/website/versioned_docs/version-22.2/GlobalAPI.md @@ -269,14 +269,6 @@ describe.skip('my other beverage', () => { Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-22.2/JestObjectAPI.md b/website/versioned_docs/version-22.2/JestObjectAPI.md index 3da280fe409f..8991484ca9b2 100644 --- a/website/versioned_docs/version-22.2/JestObjectAPI.md +++ b/website/versioned_docs/version-22.2/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -265,6 +267,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-22.2/ManualMocks.md b/website/versioned_docs/version-22.2/ManualMocks.md index bf71735a9e2e..10b545e4d77b 100644 --- a/website/versioned_docs/version-22.2/ManualMocks.md +++ b/website/versioned_docs/version-22.2/ManualMocks.md @@ -111,7 +111,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual_mocks](https://github.com/facebook/jest/tree/master/examples/manual_mocks). diff --git a/website/versioned_docs/version-22.2/Troubleshooting.md b/website/versioned_docs/version-22.2/Troubleshooting.md index 013063088d7d..3ab403f26717 100644 --- a/website/versioned_docs/version-22.2/Troubleshooting.md +++ b/website/versioned_docs/version-22.2/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-22.2/TutorialReactNative.md b/website/versioned_docs/version-22.2/TutorialReactNative.md index fd105e41858a..97c541158583 100644 --- a/website/versioned_docs/version-22.2/TutorialReactNative.md +++ b/website/versioned_docs/version-22.2/TutorialReactNative.md @@ -188,7 +188,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/website/versioned_docs/version-22.3/GlobalAPI.md b/website/versioned_docs/version-22.3/GlobalAPI.md index dc33a5a5b4b4..d30da4a0aec4 100644 --- a/website/versioned_docs/version-22.3/GlobalAPI.md +++ b/website/versioned_docs/version-22.3/GlobalAPI.md @@ -269,14 +269,6 @@ describe.skip('my other beverage', () => { Using `describe.skip` is often just an easier alternative to temporarily commenting out a chunk of tests. -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-22.3/JestObjectAPI.md b/website/versioned_docs/version-22.3/JestObjectAPI.md index d9c61f926299..8705bac90005 100644 --- a/website/versioned_docs/version-22.3/JestObjectAPI.md +++ b/website/versioned_docs/version-22.3/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -265,6 +267,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-22.3/ManualMocks.md b/website/versioned_docs/version-22.3/ManualMocks.md index 092e9778d7c0..2f757a7ab910 100644 --- a/website/versioned_docs/version-22.3/ManualMocks.md +++ b/website/versioned_docs/version-22.3/ManualMocks.md @@ -111,7 +111,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual_mocks](https://github.com/facebook/jest/tree/master/examples/manual_mocks). diff --git a/website/versioned_docs/version-22.3/Troubleshooting.md b/website/versioned_docs/version-22.3/Troubleshooting.md index 0d6e281e1ea8..fa72233755bb 100644 --- a/website/versioned_docs/version-22.3/Troubleshooting.md +++ b/website/versioned_docs/version-22.3/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-22.3/TutorialReactNative.md b/website/versioned_docs/version-22.3/TutorialReactNative.md index a3e91e3823f3..04e8d37f84b1 100644 --- a/website/versioned_docs/version-22.3/TutorialReactNative.md +++ b/website/versioned_docs/version-22.3/TutorialReactNative.md @@ -186,7 +186,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/website/versioned_docs/version-22.4/JestObjectAPI.md b/website/versioned_docs/version-22.4/JestObjectAPI.md index cb1c90d86b1e..383c5faab39d 100644 --- a/website/versioned_docs/version-22.4/JestObjectAPI.md +++ b/website/versioned_docs/version-22.4/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -347,6 +349,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-22.4/ManualMocks.md b/website/versioned_docs/version-22.4/ManualMocks.md index 32ccde0a8205..e59535949c96 100644 --- a/website/versioned_docs/version-22.4/ManualMocks.md +++ b/website/versioned_docs/version-22.4/ManualMocks.md @@ -125,7 +125,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). diff --git a/website/versioned_docs/version-22.4/Troubleshooting.md b/website/versioned_docs/version-22.4/Troubleshooting.md index 4297243b24ce..b1aafc20e45d 100644 --- a/website/versioned_docs/version-22.4/Troubleshooting.md +++ b/website/versioned_docs/version-22.4/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-22.4/TutorialReactNative.md b/website/versioned_docs/version-22.4/TutorialReactNative.md index 2c98ad425484..43edc1c882d2 100644 --- a/website/versioned_docs/version-22.4/TutorialReactNative.md +++ b/website/versioned_docs/version-22.4/TutorialReactNative.md @@ -186,7 +186,7 @@ Or if you'd like to create your own manual mock, you can do something like this: ```js jest.mock('Text', () => { - const RealComponent = require.requireActual('Text'); + const RealComponent = jest.requireActual('Text'); const React = require('React'); class Text extends React.Component { render() { diff --git a/website/versioned_docs/version-23.0/GlobalAPI.md b/website/versioned_docs/version-23.0/GlobalAPI.md index 90b230680e4c..0b0a350c178a 100644 --- a/website/versioned_docs/version-23.0/GlobalAPI.md +++ b/website/versioned_docs/version-23.0/GlobalAPI.md @@ -429,14 +429,6 @@ test('will be ran', () => { }); ``` -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-23.0/JestObjectAPI.md b/website/versioned_docs/version-23.0/JestObjectAPI.md index 8f3b459aac4e..b962638c922c 100644 --- a/website/versioned_docs/version-23.0/JestObjectAPI.md +++ b/website/versioned_docs/version-23.0/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -347,6 +349,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-23.0/ManualMocks.md b/website/versioned_docs/version-23.0/ManualMocks.md index 15f181bd1b82..85290bb25b62 100644 --- a/website/versioned_docs/version-23.0/ManualMocks.md +++ b/website/versioned_docs/version-23.0/ManualMocks.md @@ -127,7 +127,7 @@ describe('listFilesInDirectorySync', () => { The example mock shown here uses [`jest.genMockFromModule`](JestObjectAPI.md#jestgenmockfrommodulemodulename) to generate an automatic mock, and overrides its default behavior. This is the recommended approach, but is completely optional. If you do not want to use the automatic mock at all, you can simply export your own functions from the mock file. One downside to fully manual mocks is that they're manual – meaning you have to manually update them any time the module they are mocking changes. Because of this, it's best to use or extend the automatic mock when it works for your needs. -To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `require.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. +To ensure that a manual mock and its real implementation stay in sync, it might be useful to require the real module using `jest.requireActual(moduleName)` in your manual mock and amending it with mock functions before exporting it. The code for this example is available at [examples/manual-mocks](https://github.com/facebook/jest/tree/master/examples/manual-mocks). diff --git a/website/versioned_docs/version-23.0/Troubleshooting.md b/website/versioned_docs/version-23.0/Troubleshooting.md index 729b06fdfda8..aaff878d9f56 100644 --- a/website/versioned_docs/version-23.0/Troubleshooting.md +++ b/website/versioned_docs/version-23.0/Troubleshooting.md @@ -143,7 +143,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` diff --git a/website/versioned_docs/version-23.1/JestObjectAPI.md b/website/versioned_docs/version-23.1/JestObjectAPI.md index ed72108e5a30..700bf9bc85a0 100644 --- a/website/versioned_docs/version-23.1/JestObjectAPI.md +++ b/website/versioned_docs/version-23.1/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -347,6 +349,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-23.2/GlobalAPI.md b/website/versioned_docs/version-23.2/GlobalAPI.md index 8cd941755365..d91ddc7b12a0 100644 --- a/website/versioned_docs/version-23.2/GlobalAPI.md +++ b/website/versioned_docs/version-23.2/GlobalAPI.md @@ -432,14 +432,6 @@ test('will be ran', () => { }); ``` -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-23.2/JestObjectAPI.md b/website/versioned_docs/version-23.2/JestObjectAPI.md index 039c1293432b..dce067532b37 100644 --- a/website/versioned_docs/version-23.2/JestObjectAPI.md +++ b/website/versioned_docs/version-23.2/JestObjectAPI.md @@ -26,6 +26,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -347,6 +349,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-23.3/JestObjectAPI.md b/website/versioned_docs/version-23.3/JestObjectAPI.md index fdb912b600f8..f11e24388bb7 100644 --- a/website/versioned_docs/version-23.3/JestObjectAPI.md +++ b/website/versioned_docs/version-23.3/JestObjectAPI.md @@ -27,6 +27,8 @@ The `jest` object is automatically in scope within every test file. The methods - [`jest.runAllTimers()`](#jestrunalltimers) - [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) - [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) +- [`jest.requireActual()`](#jestrequireactual) +- [`jest.requireMock()`](#jestrequiremock) - [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) - [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) - [`jest.useFakeTimers()`](#jestusefaketimers) @@ -363,6 +365,14 @@ Executes only the macro-tasks that are currently pending (i.e., only the tasks t This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. +### `jest.requireActual(moduleName)` + +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. + +### `jest.requireMock(moduleName)` + +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. + ### `jest.setMock(moduleName, moduleExports)` Explicitly supplies the mock object that the module system should return for the specified module. diff --git a/website/versioned_docs/version-23.5/GlobalAPI.md b/website/versioned_docs/version-23.5/GlobalAPI.md index 756992220d08..c40afbf63d29 100644 --- a/website/versioned_docs/version-23.5/GlobalAPI.md +++ b/website/versioned_docs/version-23.5/GlobalAPI.md @@ -435,14 +435,6 @@ test('will be ran', () => { }); ``` -### `require.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `require.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - ### `test(name, fn, timeout)` Also under the alias: `it(name, fn, timeout)` diff --git a/website/versioned_docs/version-23.6/Troubleshooting.md b/website/versioned_docs/version-23.6/Troubleshooting.md index 1698f4814aa2..82e4960fb156 100644 --- a/website/versioned_docs/version-23.6/Troubleshooting.md +++ b/website/versioned_docs/version-23.6/Troubleshooting.md @@ -145,7 +145,7 @@ If a promise doesn't resolve at all, this error might be thrown: - Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.` ``` -Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = require.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. +Most commonly this is being caused by conflicting Promise implementations. Consider replacing the global promise implementation with your own, for example `global.Promise = jest.requireActual('promise');` and/or consolidate the used Promise libraries to a single one. If your test is long running, you may want to consider to increase the timeout by calling `jest.setTimeout` From 7dfb468f2598c535bd0051f5f87c5b8842e51a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olle=20Lauri=20Bostr=C3=B6m?= Date: Sat, 20 Oct 2018 23:01:11 +0200 Subject: [PATCH 29/76] Check constructor equality in .toStrictEqual() (#7005) --- CHANGELOG.md | 1 + .../expect/src/__tests__/matchers.test.js | 36 ++++++++++++++++--- packages/expect/src/utils.js | 2 +- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e58676db857d..70a833a46b4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - `[jest-validate]` Add syntax to validate multiple permitted types ([#7207](https://github.com/facebook/jest/pull/7207)) - `[jest-config]` Accept an array as as well as a string for `testRegex`([#7209]https://github.com/facebook/jest/pull/7209)) - `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) +- `[expect]` Check constructor equality in .toStrictEqual() ([#7005](https://github.com/facebook/jest/pull/7005)) ### Fixes diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index 36132f537bb1..e695eec418ed 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -205,13 +205,32 @@ describe('.toBe()', () => { }); describe('.toStrictEqual()', () => { - class TestClass { + class TestClassA { constructor(a, b) { this.a = a; this.b = b; } } + class TestClassB { + constructor(a, b) { + this.a = a; + this.b = b; + } + } + + const TestClassC = class Child extends TestClassA { + constructor(a, b) { + super(a, b); + } + }; + + const TestClassD = class Child extends TestClassB { + constructor(a, b) { + super(a, b); + } + }; + it('does not ignore keys with undefined values', () => { expect({ a: undefined, @@ -221,14 +240,21 @@ describe('.toStrictEqual()', () => { it('passes when comparing same type', () => { expect({ - test: new TestClass(1, 2), - }).toStrictEqual({test: new TestClass(1, 2)}); + test: new TestClassA(1, 2), + }).toStrictEqual({test: new TestClassA(1, 2)}); }); it('does not pass for different types', () => { expect({ - test: new TestClass(1, 2), - }).not.toStrictEqual({test: {a: 1, b: 2}}); + test: new TestClassA(1, 2), + }).not.toStrictEqual({test: new TestClassB(1, 2)}); + }); + + it('does not simply compare constructor names', () => { + const c = new TestClassC(1, 2); + const d = new TestClassD(1, 2); + expect(c.constructor.name).toEqual(d.constructor.name); + expect({test: c}).not.toStrictEqual({test: d}); }); }); diff --git a/packages/expect/src/utils.js b/packages/expect/src/utils.js index c25e9cc46c5d..9a7a0220fac5 100644 --- a/packages/expect/src/utils.js +++ b/packages/expect/src/utils.js @@ -213,7 +213,7 @@ export const subsetEquality = (object: Object, subset: Object) => { }; export const typeEquality = (a: any, b: any) => { - if (a == null || b == null || a.constructor.name === b.constructor.name) { + if (a == null || b == null || a.constructor === b.constructor) { return undefined; } From 7be2a8ef3f4d17b3ca139ba1a3dab72134306b50 Mon Sep 17 00:00:00 2001 From: Tim Dietrich Date: Sat, 20 Oct 2018 16:06:29 -0500 Subject: [PATCH 30/76] Updated documentation: "Snapshot Testing with Mocks...": option 2) should show use of DOM (#6923) --- docs/TutorialReact.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/TutorialReact.md b/docs/TutorialReact.md index 867f5ccc18ec..bd143617a019 100644 --- a/docs/TutorialReact.md +++ b/docs/TutorialReact.md @@ -197,7 +197,7 @@ React 16 triggers these warnings due to how it checks element types, and the moc ``` 2. Render as a custom element. DOM "custom elements" aren't checked for anything and shouldn't fire warnings. They are lowercase and have a dash in the name. ```js - jest.mock('./Widget', () => 'mock-widget'); + jest.mock('./Widget', () => () => ); ``` 3. Use `react-test-renderer`. The test renderer doesn't care about element types and will happily accept e.g. `SomeComponent`. You could check snapshots using the test renderer, and check component behavior separately using Enzyme. 4. Disable warnings all together (should be done in your jest setup file): From 18dcf3ca33b6136c91bc35f6c72bd5393b4818d4 Mon Sep 17 00:00:00 2001 From: Rodolfo Silva Date: Sun, 21 Oct 2018 10:01:10 -0300 Subject: [PATCH 31/76] Update MongoDB.md (#7230) --- docs/MongoDB.md | 12 +++-- .../versioned_docs/version-22.3/MongoDB.md | 52 +++++++++++++------ .../versioned_docs/version-23.0/MongoDB.md | 12 +++-- .../versioned_docs/version-23.2/MongoDB.md | 12 +++-- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/docs/MongoDB.md b/docs/MongoDB.md index 6435d2010484..6d4fcbf88108 100644 --- a/docs/MongoDB.md +++ b/docs/MongoDB.md @@ -22,13 +22,19 @@ const path = require('path'); const fs = require('fs'); -const MongodbMemoryServer = require('mongodb-memory-server'); +const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongodbMemoryServer.MongoMemoryServer(); +const mongoServer = new MongoMemoryServer({ + autoStart: false, +}); + +module.exports = async () => { + if (!mongod.isRunning) { + await mongod.start(); + } -module.exports = async function() { const mongoConfig = { mongoDBName: 'jest', mongoUri: await mongoServer.getConnectionString(), diff --git a/website/versioned_docs/version-22.3/MongoDB.md b/website/versioned_docs/version-22.3/MongoDB.md index da6bb547b8e1..edbbf86e44c3 100644 --- a/website/versioned_docs/version-22.3/MongoDB.md +++ b/website/versioned_docs/version-22.3/MongoDB.md @@ -19,21 +19,33 @@ Here's an example of the GlobalSetup script ```js // setup.js -const MongodbMemoryServer = require('mongodb-memory-server'); - -const MONGO_DB_NAME = 'jest'; -const mongod = new MongodbMemoryServer.default({ - instance: { - dbName: MONGO_DB_NAME, - }, - binary: { - version: '3.2.19', - }, +const path = require('path'); + +const fs = require('fs'); + +const {MongoMemoryServer} = require('mongodb-memory-server'); + +const globalConfigPath = path.join(__dirname, 'globalConfig.json'); + +const mongoServer = new MongoMemoryServer({ + autoStart: false, }); -module.exports = function() { - global.__MONGOD__ = mongod; - global.__MONGO_DB_NAME__ = MONGO_DB_NAME; +module.exports = async () => { + if (!mongod.isRunning) { + await mongod.start(); + } + + const mongoConfig = { + mongoDBName: 'jest', + mongoUri: await mongoServer.getConnectionString(), + }; + + // Write global config to disk because all tests run in different contexts. + fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig)); + + // Set reference to mongod in order to close the server during teardown. + global.__MONGOD__ = mongoServer; }; ``` @@ -41,6 +53,14 @@ Then we need a custom Test Environment for Mongo ```js // mongo-environment.js +const NodeEnvironment = require('jest-environment-node'); + +const path = require('path'); + +const fs = require('fs'); + +const globalConfigPath = path.join(__dirname, 'globalConfig.json'); + class MongoEnvironment extends NodeEnvironment { constructor(config) { super(config); @@ -49,8 +69,10 @@ class MongoEnvironment extends NodeEnvironment { async setup() { console.log('Setup MongoDB Test Environment'); - this.global.__MONGO_URI__ = await global.__MONGOD__.getConnectionString(); - this.global.__MONGO_DB_NAME__ = global.__MONGO_DB_NAME__; + const globalConfig = JSON.parse(fs.readFileSync(globalConfigPath, 'utf-8')); + + this.global.__MONGO_URI__ = globalConfig.mongoUri; + this.global.__MONGO_DB_NAME__ = globalConfig.mongoDBName; await super.setup(); } diff --git a/website/versioned_docs/version-23.0/MongoDB.md b/website/versioned_docs/version-23.0/MongoDB.md index 5709e7664285..f12a6d257b31 100644 --- a/website/versioned_docs/version-23.0/MongoDB.md +++ b/website/versioned_docs/version-23.0/MongoDB.md @@ -23,13 +23,19 @@ const path = require('path'); const fs = require('fs'); -const MongodbMemoryServer = require('mongodb-memory-server'); +const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongodbMemoryServer.MongoMemoryServer(); +const mongoServer = new MongoMemoryServer({ + autoStart: false, +}); + +module.exports = async () => { + if (!mongod.isRunning) { + await mongod.start(); + } -module.exports = async function() { const mongoConfig = { mongoDBName: 'jest', mongoUri: await mongoServer.getConnectionString(), diff --git a/website/versioned_docs/version-23.2/MongoDB.md b/website/versioned_docs/version-23.2/MongoDB.md index 71d9ede3401f..e229d0fa0798 100644 --- a/website/versioned_docs/version-23.2/MongoDB.md +++ b/website/versioned_docs/version-23.2/MongoDB.md @@ -23,13 +23,19 @@ const path = require('path'); const fs = require('fs'); -const MongodbMemoryServer = require('mongodb-memory-server'); +const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongodbMemoryServer.MongoMemoryServer(); +const mongoServer = new MongoMemoryServer({ + autoStart: false, +}); + +module.exports = async () => { + if (!mongod.isRunning) { + await mongod.start(); + } -module.exports = async function() { const mongoConfig = { mongoDBName: 'jest', mongoUri: await mongoServer.getConnectionString(), From e9818dc8abb581ee45dc762ffadbb9af12dc2295 Mon Sep 17 00:00:00 2001 From: Adrian Patzi Date: Sun, 21 Oct 2018 16:14:48 +0200 Subject: [PATCH 32/76] Babel https link update in multiple doc files (#7233) --- website/versioned_docs/version-22.0/GettingStarted.md | 2 +- website/versioned_docs/version-22.0/TutorialAsync.md | 2 +- website/versioned_docs/version-22.1/GettingStarted.md | 2 +- website/versioned_docs/version-22.2/GettingStarted.md | 2 +- website/versioned_docs/version-22.2/TutorialAsync.md | 2 +- website/versioned_docs/version-22.3/GettingStarted.md | 2 +- website/versioned_docs/version-22.3/TutorialAsync.md | 2 +- website/versioned_docs/version-22.4/GettingStarted.md | 2 +- website/versioned_docs/version-23.2/GettingStarted.md | 2 +- website/versioned_docs/version-23.5/TutorialAsync.md | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/website/versioned_docs/version-22.0/GettingStarted.md b/website/versioned_docs/version-22.0/GettingStarted.md index acf69fbadd24..b25d90278d79 100644 --- a/website/versioned_docs/version-22.0/GettingStarted.md +++ b/website/versioned_docs/version-22.0/GettingStarted.md @@ -72,7 +72,7 @@ If you'd like to learn more about running `jest` through the command line, take ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ``` npm install --save-dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-22.0/TutorialAsync.md b/website/versioned_docs/version-22.0/TutorialAsync.md index 8db49a7078aa..63e56c14cc19 100644 --- a/website/versioned_docs/version-22.0/TutorialAsync.md +++ b/website/versioned_docs/version-22.0/TutorialAsync.md @@ -112,7 +112,7 @@ it('works with async/await and resolves', async () => { }); ``` -To enable async/await in your project, install [`babel-preset-env`](http://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. +To enable async/await in your project, install [`babel-preset-env`](https://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. ## Error handling diff --git a/website/versioned_docs/version-22.1/GettingStarted.md b/website/versioned_docs/version-22.1/GettingStarted.md index e1b1f2579cbd..80d773f599c6 100644 --- a/website/versioned_docs/version-22.1/GettingStarted.md +++ b/website/versioned_docs/version-22.1/GettingStarted.md @@ -72,7 +72,7 @@ If you'd like to learn more about running `jest` through the command line, take ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ``` npm install --save-dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-22.2/GettingStarted.md b/website/versioned_docs/version-22.2/GettingStarted.md index adb847788587..7beb8799602b 100644 --- a/website/versioned_docs/version-22.2/GettingStarted.md +++ b/website/versioned_docs/version-22.2/GettingStarted.md @@ -72,7 +72,7 @@ If you'd like to learn more about running `jest` through the command line, take ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ```bash npm install --save-dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-22.2/TutorialAsync.md b/website/versioned_docs/version-22.2/TutorialAsync.md index dd7c478f2994..2c19a5bc4949 100644 --- a/website/versioned_docs/version-22.2/TutorialAsync.md +++ b/website/versioned_docs/version-22.2/TutorialAsync.md @@ -110,7 +110,7 @@ it('works with async/await and resolves', async () => { }); ``` -To enable async/await in your project, install [`babel-preset-env`](http://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. +To enable async/await in your project, install [`babel-preset-env`](https://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. ## Error handling diff --git a/website/versioned_docs/version-22.3/GettingStarted.md b/website/versioned_docs/version-22.3/GettingStarted.md index 93606dcc451b..ab43fb8972f7 100644 --- a/website/versioned_docs/version-22.3/GettingStarted.md +++ b/website/versioned_docs/version-22.3/GettingStarted.md @@ -72,7 +72,7 @@ If you'd like to learn more about running `jest` through the command line, take ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ```bash npm install --save-dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-22.3/TutorialAsync.md b/website/versioned_docs/version-22.3/TutorialAsync.md index 91c6729a5ce0..b683f8cf552d 100644 --- a/website/versioned_docs/version-22.3/TutorialAsync.md +++ b/website/versioned_docs/version-22.3/TutorialAsync.md @@ -110,7 +110,7 @@ it('works with async/await and resolves', async () => { }); ``` -To enable async/await in your project, install [`babel-preset-env`](http://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. +To enable async/await in your project, install [`babel-preset-env`](https://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. ## Error handling diff --git a/website/versioned_docs/version-22.4/GettingStarted.md b/website/versioned_docs/version-22.4/GettingStarted.md index 5ba5942f0839..e34db918f411 100644 --- a/website/versioned_docs/version-22.4/GettingStarted.md +++ b/website/versioned_docs/version-22.4/GettingStarted.md @@ -72,7 +72,7 @@ If you'd like to learn more about running `jest` through the command line, take ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ```bash yarn add --dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-23.2/GettingStarted.md b/website/versioned_docs/version-23.2/GettingStarted.md index e95dbbd10002..fbd0d55b6558 100644 --- a/website/versioned_docs/version-23.2/GettingStarted.md +++ b/website/versioned_docs/version-23.2/GettingStarted.md @@ -80,7 +80,7 @@ jest --init ### Using Babel -To use [Babel](http://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: +To use [Babel](https://babeljs.io/), install the `babel-jest` and `regenerator-runtime` packages: ```bash yarn add --dev babel-jest babel-core regenerator-runtime diff --git a/website/versioned_docs/version-23.5/TutorialAsync.md b/website/versioned_docs/version-23.5/TutorialAsync.md index 9d044d1b5340..82ca5daa10c4 100644 --- a/website/versioned_docs/version-23.5/TutorialAsync.md +++ b/website/versioned_docs/version-23.5/TutorialAsync.md @@ -110,7 +110,7 @@ it('works with async/await and resolves', async () => { }); ``` -To enable async/await in your project, install [`babel-preset-env`](http://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. +To enable async/await in your project, install [`babel-preset-env`](https://babeljs.io/docs/plugins/preset-env/) and enable the feature in your `.babelrc` file. ## Error handling From db42dfb9d0b12f025d775c3a2d0a0754d0f399df Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sun, 21 Oct 2018 18:40:24 +0200 Subject: [PATCH 33/76] chore: remove jest-editor-support and jest-test-typescript-parser from the repo (#7232) * chore: remove jest-editor-support and jest-test-typescript-parser from the repo * link to PR --- CHANGELOG.md | 2 + .../to_match_inline_snapshot.test.js | 3 - e2e/__tests__/to_match_snapshot.test.js | 3 - packages/jest-editor-support/.npmignore | 3 - packages/jest-editor-support/README.md | 13 - packages/jest-editor-support/index.d.ts | 196 ------- packages/jest-editor-support/package.json | 16 - packages/jest-editor-support/src/Process.js | 58 -- packages/jest-editor-support/src/Runner.js | 208 ------- packages/jest-editor-support/src/Settings.js | 120 ---- packages/jest-editor-support/src/Snapshot.js | 176 ------ .../__snapshots__/describe.example.snap | 91 --- .../__snapshots__/nested.example.snap | 3 - .../__snapshots__/nodescribe.example.snap | 19 - .../fixtures/snapshots/describe.example | 194 ------- .../fixtures/snapshots/nested.example | 10 - .../fixtures/snapshots/nodescribe.example | 36 -- .../__tests__/parsers/babylon_parser.test.js | 15 - .../src/__tests__/process.test.js | 126 ----- .../src/__tests__/project_workspace.test.js | 25 - .../src/__tests__/runner.test.js | 530 ------------------ .../src/__tests__/settings.test.js | 271 --------- .../src/__tests__/snapshot.test.js | 131 ----- .../src/__tests__/test_reconciler.test.js | 213 ------- packages/jest-editor-support/src/index.js | 31 - .../src/parsers/babylon_parser.js | 171 ------ .../src/parsers/parser_nodes.js | 22 - .../src/project_workspace.js | 78 --- .../src/test_reconciler.js | 166 ------ packages/jest-editor-support/src/types.js | 80 --- .../jest-test-typescript-parser/.npmignore | 3 - .../jest-test-typescript-parser/package.json | 14 - .../src/__tests__/type_script_parser.test.js | 13 - .../jest-test-typescript-parser/src/index.js | 33 -- .../src/type_script_parser.js | 84 --- yarn.lock | 6 +- 36 files changed, 5 insertions(+), 3158 deletions(-) delete mode 100644 packages/jest-editor-support/.npmignore delete mode 100644 packages/jest-editor-support/README.md delete mode 100644 packages/jest-editor-support/index.d.ts delete mode 100644 packages/jest-editor-support/package.json delete mode 100644 packages/jest-editor-support/src/Process.js delete mode 100644 packages/jest-editor-support/src/Runner.js delete mode 100644 packages/jest-editor-support/src/Settings.js delete mode 100644 packages/jest-editor-support/src/Snapshot.js delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/describe.example.snap delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nested.example.snap delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nodescribe.example.snap delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/describe.example delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/nested.example delete mode 100644 packages/jest-editor-support/src/__tests__/fixtures/snapshots/nodescribe.example delete mode 100644 packages/jest-editor-support/src/__tests__/parsers/babylon_parser.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/process.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/project_workspace.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/runner.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/settings.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/snapshot.test.js delete mode 100644 packages/jest-editor-support/src/__tests__/test_reconciler.test.js delete mode 100644 packages/jest-editor-support/src/index.js delete mode 100644 packages/jest-editor-support/src/parsers/babylon_parser.js delete mode 100644 packages/jest-editor-support/src/parsers/parser_nodes.js delete mode 100644 packages/jest-editor-support/src/project_workspace.js delete mode 100644 packages/jest-editor-support/src/test_reconciler.js delete mode 100644 packages/jest-editor-support/src/types.js delete mode 100644 packages/jest-test-typescript-parser/.npmignore delete mode 100644 packages/jest-test-typescript-parser/package.json delete mode 100644 packages/jest-test-typescript-parser/src/__tests__/type_script_parser.test.js delete mode 100644 packages/jest-test-typescript-parser/src/index.js delete mode 100644 packages/jest-test-typescript-parser/src/type_script_parser.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 70a833a46b4b..5024d178279c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,8 @@ - `[docs]` Update `setupFiles` documentation for clarity ([#7187](https://github.com/facebook/jest/pull/7187)) - `[docs]` Change `require.require*` to `jest.require*` ([#7210](https://github.com/facebook/jest/pull/7210)) - `[jest-circus]` Add readme.md ([#7198](https://github.com/facebook/jest/pull/7198)) +- `[jest-editor-support]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) +- `[jest-test-typescript-parser]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) ### Performance diff --git a/e2e/__tests__/to_match_inline_snapshot.test.js b/e2e/__tests__/to_match_inline_snapshot.test.js index 576edd7bcd34..c1a194dd9d69 100644 --- a/e2e/__tests__/to_match_inline_snapshot.test.js +++ b/e2e/__tests__/to_match_inline_snapshot.test.js @@ -47,9 +47,6 @@ test('basic support', () => { expect(fileAfter).toMatchSnapshot('snapshot passed'); } - // This test below also covers how jest-editor-support creates terse messages - // for letting a Snapshot update, so if the wording is updated, please edit - // /packages/jest-editor-support/src/test_reconciler.js { writeFiles(TESTS_DIR, { [filename]: readFile(filename).replace('original value', 'updated value'), diff --git a/e2e/__tests__/to_match_snapshot.test.js b/e2e/__tests__/to_match_snapshot.test.js index 001bb9e4c6f0..1d27428464a2 100644 --- a/e2e/__tests__/to_match_snapshot.test.js +++ b/e2e/__tests__/to_match_snapshot.test.js @@ -39,9 +39,6 @@ test('basic support', () => { expect(status).toBe(0); } - // This test below also covers how jest-editor-support creates terse messages - // for letting a Snapshot update, so if the wording is updated, please edit - // /packages/jest-editor-support/src/test_reconciler.js { writeFiles(TESTS_DIR, { [filename]: template(['{apple: "updated value"}']), diff --git a/packages/jest-editor-support/.npmignore b/packages/jest-editor-support/.npmignore deleted file mode 100644 index 85e48fe7b0a4..000000000000 --- a/packages/jest-editor-support/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/packages/jest-editor-support/README.md b/packages/jest-editor-support/README.md deleted file mode 100644 index 396d4ef310e7..000000000000 --- a/packages/jest-editor-support/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# jest-editor-support - -The engine that allows editors to build on top of Jest. - -## Usage - -This is only useful if you are interested in building an editor integration for Jest. - -For now as an end user, we'd recommend looking at either [vscode-jest](https://github.com/jest-community/vscode-jest/) or [majestic](https://github.com/Raathigesh/majestic/). - -## Note - -Since version `18.2.0` TypeScript is now a peer dependency. If you don't need to handle `.tsx` files then you can safely ignore the warning during installation. diff --git a/packages/jest-editor-support/index.d.ts b/packages/jest-editor-support/index.d.ts deleted file mode 100644 index a69949aedb72..000000000000 --- a/packages/jest-editor-support/index.d.ts +++ /dev/null @@ -1,196 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import {EventEmitter} from 'events'; -import {ChildProcess} from 'child_process'; - -export interface SpawnOptions { - shell?: boolean; -} - -export interface Options { - createProcess?( - workspace: ProjectWorkspace, - args: string[], - options?: SpawnOptions, - ): ChildProcess; - noColor?: boolean; - testNamePattern?: string; - testFileNamePattern?: string; - shell?: boolean; -} - -export class Runner extends EventEmitter { - constructor(workspace: ProjectWorkspace, options?: Options); - watchMode: boolean; - watchAll: boolean; - start(watchMode?: boolean, watchAll?: boolean): void; - closeProcess(): void; - runJestWithUpdateForSnapshots(completion: any): void; -} - -export class Settings extends EventEmitter { - constructor(workspace: ProjectWorkspace, options?: Options); - getConfig(completed: Function): void; - jestVersionMajor: number | null; - settings: { - testRegex: string, - testMatch: string[], - }; -} - -export class ProjectWorkspace { - constructor( - rootPath: string, - pathToJest: string, - pathToConfig: string, - localJestMajorVersin: number, - collectCoverage?: boolean, - debug?: boolean, - ); - pathToJest: string; - pathToConfig: string; - rootPath: string; - localJestMajorVersion: number; - collectCoverage?: boolean; - debug?: boolean; -} - -export interface IParseResults { - expects: Expect[]; - itBlocks: ItBlock[]; -} - -export function parse(file: string): IParseResults; - -export interface Location { - column: number; - line: number; -} - -export class Node { - start: Location; - end: Location; - file: string; -} - -export class ItBlock extends Node { - name: string; -} - -export class Expect extends Node {} - -export class TestReconciler { - stateForTestFile(file: string): TestReconcilationState; - assertionsForTestFile(file: string): TestAssertionStatus[] | null; - stateForTestAssertion( - file: string, - name: string, - ): TestFileAssertionStatus | null; - updateFileWithJestStatus(data: any): TestFileAssertionStatus[]; -} - -/** - * Did the thing pass, fail or was it not run? - */ -export type TestReconcilationState = - | 'Unknown' // The file has not changed, so the watcher didn't hit it - | 'KnownFail' // Definitely failed - | 'KnownSuccess' // Definitely passed - | 'KnownSkip'; // Definitely skipped - -/** - * The Jest Extension's version of a status for - * whether the file passed or not - * - */ -export interface TestFileAssertionStatus { - file: string; - message: string; - status: TestReconcilationState; - assertions: Array | null; -} - -/** - * The Jest Extension's version of a status for - * individual assertion fails - * - */ -export interface TestAssertionStatus { - title: string; - status: TestReconcilationState; - message: string; - shortMessage?: string; - terseMessage?: string; - line?: number; -} - -export interface JestFileResults { - name: string; - summary: string; - message: string; - status: 'failed' | 'passed'; - startTime: number; - endTime: number; - assertionResults: Array; -} - -export interface JestAssertionResults { - name: string; - title: string; - status: 'failed' | 'passed'; - failureMessages: string[]; - fullName: string; -} - -export interface JestTotalResults { - success: boolean; - startTime: number; - numTotalTests: number; - numTotalTestSuites: number; - numRuntimeErrorTestSuites: number; - numPassedTests: number; - numFailedTests: number; - numPendingTests: number; - coverageMap: any; - testResults: Array; -} - -export interface JestTotalResultsMeta { - noTestsFound: boolean; -} - -export enum messageTypes { - noTests = 1, - testResults = 3, - unknown = 0, - watchUsage = 2, -} - -export type MessageType = number; - -export interface SnapshotMetadata { - exists: boolean; - name: string; - node: { - loc: Node; - }; - content?: string; -} - -export class Snapshot { - constructor(parser?: any, customMatchers?: string[]); - getMetadata(filepath: string): SnapshotMetadata[]; -} - -type FormattedTestResults = { - testResults: TestResult[] -} - -type TestResult = { - name: string -} \ No newline at end of file diff --git a/packages/jest-editor-support/package.json b/packages/jest-editor-support/package.json deleted file mode 100644 index 6b836825675b..000000000000 --- a/packages/jest-editor-support/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "jest-editor-support", - "version": "23.6.0", - "repository": { - "type": "git", - "url": "https://github.com/facebook/jest.git" - }, - "license": "MIT", - "main": "build/index.js", - "dependencies": { - "babel-traverse": "^6.14.1", - "babylon": "^6.14.1", - "jest-snapshot": "^23.6.0" - }, - "typings": "index.d.ts" -} diff --git a/packages/jest-editor-support/src/Process.js b/packages/jest-editor-support/src/Process.js deleted file mode 100644 index 52e3c7623a46..000000000000 --- a/packages/jest-editor-support/src/Process.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import {ChildProcess, spawn} from 'child_process'; -import ProjectWorkspace from './project_workspace'; -import type {SpawnOptions} from './types'; - -/** - * Spawns and returns a Jest process with specific args - * - * @param {string[]} args - * @returns {ChildProcess} - */ -export const createProcess = ( - workspace: ProjectWorkspace, - args: Array, - options?: SpawnOptions = {}, -): ChildProcess => { - // A command could look like `npm run test`, which we cannot use as a command - // as they can only be the first command, so take out the command, and add - // any other bits into the args - const runtimeExecutable = workspace.pathToJest; - const parameters = runtimeExecutable.split(' '); - const command = parameters[0]; - const initialArgs = parameters.slice(1); - const runtimeArgs = [].concat(initialArgs, args); - - // If a path to configuration file was defined, push it to runtimeArgs - if (workspace.pathToConfig) { - runtimeArgs.push('--config'); - runtimeArgs.push(workspace.pathToConfig); - } - - // To use our own commands in create-react, we need to tell the command that - // we're in a CI environment, or it will always append --watch - const env = process.env; - env['CI'] = 'true'; - - const spawnOptions = { - cwd: workspace.rootPath, - env, - shell: options.shell, - }; - - if (workspace.debug) { - console.log( - `spawning process with command=${command}, args=${runtimeArgs.toString()}`, - ); - } - - return spawn(command, runtimeArgs, spawnOptions); -}; diff --git a/packages/jest-editor-support/src/Runner.js b/packages/jest-editor-support/src/Runner.js deleted file mode 100644 index 8282502713b5..000000000000 --- a/packages/jest-editor-support/src/Runner.js +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import type {Options, MessageType, SpawnOptions} from './types'; -import {messageTypes} from './types'; - -import {ChildProcess, spawn} from 'child_process'; -import {readFile} from 'fs'; -import {tmpdir} from 'os'; -import EventEmitter from 'events'; -import ProjectWorkspace from './project_workspace'; -import {createProcess} from './Process'; - -// This class represents the running process, and -// passes out events when it understands what data is being -// pass sent out of the process -export default class Runner extends EventEmitter { - debugprocess: ChildProcess; - outputPath: string; - workspace: ProjectWorkspace; - _createProcess: ( - workspace: ProjectWorkspace, - args: Array, - options?: SpawnOptions, - ) => ChildProcess; - watchMode: boolean; - watchAll: boolean; - options: Options; - prevMessageTypes: MessageType[]; - - constructor(workspace: ProjectWorkspace, options?: Options) { - super(); - - this._createProcess = (options && options.createProcess) || createProcess; - this.options = options || {}; - this.workspace = workspace; - this.outputPath = tmpdir() + '/jest_runner.json'; - this.prevMessageTypes = []; - } - - start(watchMode: boolean = true, watchAll: boolean = false) { - if (this.debugprocess) { - return; - } - - this.watchMode = watchMode; - this.watchAll = watchAll; - - // Handle the arg change on v18 - const belowEighteen = this.workspace.localJestMajorVersion < 18; - const outputArg = belowEighteen ? '--jsonOutputFile' : '--outputFile'; - - const args = ['--json', '--useStderr', outputArg, this.outputPath]; - if (this.watchMode) { - args.push(this.watchAll ? '--watchAll' : '--watch'); - } - if (this.options.testNamePattern) { - args.push('--testNamePattern', this.options.testNamePattern); - } - if (this.options.testFileNamePattern) { - args.push(this.options.testFileNamePattern); - } - if (this.workspace.collectCoverage === true) { - args.push('--coverage'); - } - if (this.workspace.collectCoverage === false) { - args.push('--no-coverage'); - } - if (this.options.noColor === true) { - args.push('--no-color'); - } - - const options = { - shell: this.options.shell, - }; - - this.debugprocess = this._createProcess(this.workspace, args, options); - this.debugprocess.stdout.on('data', (data: Buffer) => { - this._parseOutput(data, false); - }); - - this.debugprocess.stderr.on('data', (data: Buffer) => { - // jest 23 could send test results message to stderr - // see https://github.com/facebook/jest/pull/4858 - this._parseOutput(data, true); - }); - this.debugprocess.on('exit', () => { - this.emit('debuggerProcessExit'); - this.prevMessageTypes.length = 0; - }); - - this.debugprocess.on('error', (error: Error) => { - this.emit('terminalError', 'Process failed: ' + error.message); - this.prevMessageTypes.length = 0; - }); - - this.debugprocess.on('close', () => { - this.emit('debuggerProcessExit'); - this.prevMessageTypes.length = 0; - }); - } - - _parseOutput(data: Buffer, isStdErr: boolean): MessageType { - const msgType = this.findMessageType(data); - switch (msgType) { - case messageTypes.testResults: - readFile(this.outputPath, 'utf8', (err, data) => { - if (err) { - const message = `JSON report not found at ${this.outputPath}`; - this.emit('terminalError', message); - } else { - const noTestsFound = this.doResultsFollowNoTestsFoundMessage(); - this.emit('executableJSON', JSON.parse(data), { - noTestsFound, - }); - } - }); - this.prevMessageTypes.length = 0; - break; - case messageTypes.watchUsage: - case messageTypes.noTests: - this.prevMessageTypes.push(msgType); - this.emit('executableStdErr', data, { - type: msgType, - }); - break; - default: - // no special action needed, just report the output by its source - if (isStdErr) { - this.emit('executableStdErr', data, { - type: msgType, - }); - } else { - this.emit('executableOutput', data.toString().replace('', '')); - } - this.prevMessageTypes.length = 0; - break; - } - - return msgType; - } - - runJestWithUpdateForSnapshots(completion: any, args: string[]) { - const defaultArgs = ['--updateSnapshot']; - - const options = { - shell: this.options.shell, - }; - const updateProcess = this._createProcess( - this.workspace, - [...defaultArgs, ...(args ? args : [])], - options, - ); - updateProcess.on('close', () => { - completion(); - }); - } - - closeProcess() { - if (!this.debugprocess) { - return; - } - if (process.platform === 'win32') { - // Windows doesn't exit the process when it should. - spawn('taskkill', ['/pid', '' + this.debugprocess.pid, '/T', '/F']); - } else { - this.debugprocess.kill(); - } - delete this.debugprocess; - } - - findMessageType(buf: Buffer): MessageType { - const str = buf.toString('utf8', 0, 58); - const lastCommitRegex = /No tests found related to files changed since ((last commit)|("[a-z0-9]+"))./; - if (lastCommitRegex.test(str)) { - return messageTypes.noTests; - } - if (/^\s*Watch Usage\b/.test(str)) { - return messageTypes.watchUsage; - } - - if (str.trim().startsWith('Test results written to')) { - return messageTypes.testResults; - } - return messageTypes.unknown; - } - - doResultsFollowNoTestsFoundMessage() { - if (this.prevMessageTypes.length === 1) { - return this.prevMessageTypes[0] === messageTypes.noTests; - } - - if (this.prevMessageTypes.length === 2) { - return ( - this.prevMessageTypes[0] === messageTypes.noTests && - this.prevMessageTypes[1] === messageTypes.watchUsage - ); - } - - return false; - } -} diff --git a/packages/jest-editor-support/src/Settings.js b/packages/jest-editor-support/src/Settings.js deleted file mode 100644 index d11da69ab998..000000000000 --- a/packages/jest-editor-support/src/Settings.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import type {Options, SpawnOptions} from './types'; - -import {ChildProcess} from 'child_process'; -import EventEmitter from 'events'; -import ProjectWorkspace from './project_workspace'; -import {createProcess} from './Process'; - -// This class represents the the configuration of Jest's process -// we want to start with the defaults then override whatever they output -// the interface below can be used to show what we use, as currently the whole -// settings object will be in memory. - -// Ideally anything you care about adding should have a default in -// the constructor see https://jestjs.io/docs/configuration.html -// for full deets - -// For now, this is all we care about inside the config - -type Glob = string; - -type ConfigRepresentation = { - testRegex: string | Array, - testMatch: Array, -}; - -type ConfigRepresentations = Array; - -export default class Settings extends EventEmitter { - getConfigProcess: ChildProcess; - jestVersionMajor: number | null; - _createProcess: ( - workspace: ProjectWorkspace, - args: Array, - options: SpawnOptions, - ) => ChildProcess; - configs: ConfigRepresentations; - settings: ConfigRepresentation; - workspace: ProjectWorkspace; - spawnOptions: SpawnOptions; - _jsonPattern: RegExp; - - constructor(workspace: ProjectWorkspace, options?: Options) { - super(); - this.workspace = workspace; - this._createProcess = (options && options.createProcess) || createProcess; - this.spawnOptions = { - shell: options && options.shell, - }; - - // Defaults for a Jest project - this.settings = { - testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], - testRegex: ['(/__tests__/.*|\\.(test|spec))\\.jsx?$'], - }; - - this.configs = [this.settings]; - this._jsonPattern = new RegExp(/^[\s]*\{/gm); - } - - _parseConfig(text: string): void { - let settings = null; - - try { - settings = JSON.parse(text); - } catch (err) { - // skip the non-json content, if any - const idx = text.search(this._jsonPattern); - if (idx > 0) { - if (this.workspace.debug) { - console.log(`skip config output noise: ${text.substring(0, idx)}`); - } - this._parseConfig(text.substring(idx)); - return; - } - console.warn(`failed to parse config: \n${text}\nerror: ${err}`); - throw err; - } - this.jestVersionMajor = parseInt(settings.version.split('.').shift(), 10); - this.configs = - this.jestVersionMajor >= 21 ? settings.configs : [settings.config]; - - if (this.workspace.debug) { - console.log(`found config jestVersionMajor=${this.jestVersionMajor}`); - } - } - - getConfigs(completed: any) { - this.getConfigProcess = this._createProcess( - this.workspace, - ['--showConfig'], - this.spawnOptions, - ); - - this.getConfigProcess.stdout.on('data', (data: Buffer) => { - this._parseConfig(data.toString()); - }); - - // They could have an older build of Jest which - // would error with `--showConfig` - this.getConfigProcess.on('close', () => { - completed(); - }); - } - - getConfig(completed: any, index: number = 0) { - this.getConfigs(() => { - this.settings = this.configs[index]; - completed(); - }); - } -} diff --git a/packages/jest-editor-support/src/Snapshot.js b/packages/jest-editor-support/src/Snapshot.js deleted file mode 100644 index 0b1334a6d2f2..000000000000 --- a/packages/jest-editor-support/src/Snapshot.js +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @flow - */ - -'use strict'; - -import type {ProjectConfig} from 'types/Config'; - -import traverse from 'babel-traverse'; -import {getASTfor} from './parsers/babylon_parser'; -import {buildSnapshotResolver, utils} from 'jest-snapshot'; - -type Node = any; - -type SnapshotMetadata = { - exists: true | false, - name: string, - node: Node, - content?: string, -}; - -const describeVariants = Object.assign( - (Object.create(null): {[string]: boolean, __proto__: null}), - { - describe: true, - fdescribe: true, - xdescribe: true, - }, -); -const base = Object.assign( - (Object.create(null): {[string]: boolean, __proto__: null}), - { - describe: true, - it: true, - test: true, - }, -); -const decorators = Object.assign( - (Object.create(null): {[string]: boolean, __proto__: null}), - { - only: true, - skip: true, - }, -); - -const validParents = Object.assign( - (Object.create(null): any), - base, - describeVariants, - Object.assign((Object.create(null): {[string]: boolean, __proto__: null}), { - fit: true, - xit: true, - xtest: true, - }), -); - -const isValidMemberExpression = node => - node.object && - base[node.object.name] && - node.property && - decorators[node.property.name]; - -const isDescribe = node => - describeVariants[node.name] || - (isValidMemberExpression(node) && node.object.name === 'describe'); - -const isValidParent = parent => - parent.callee && - (validParents[parent.callee.name] || isValidMemberExpression(parent.callee)); - -const getArrayOfParents = path => { - const result = []; - let parent = path.parentPath; - while (parent) { - result.unshift(parent.node); - parent = parent.parentPath; - } - return result; -}; - -const buildName: ( - snapshotNode: Node, - parents: Array, - position: number, -) => string = (snapshotNode, parents, position) => { - const fullName = parents.map(parent => parent.arguments[0].value).join(' '); - - return utils.testNameToKey(fullName, position); -}; - -export default class Snapshot { - _parser: Function; - _matchers: Array; - _projectConfig: ?ProjectConfig; - constructor( - parser: any, - customMatchers?: Array, - projectConfig?: ProjectConfig, - ) { - this._parser = parser || getASTfor; - this._matchers = ['toMatchSnapshot', 'toThrowErrorMatchingSnapshot'].concat( - customMatchers || [], - ); - this._projectConfig = projectConfig; - } - - getMetadata(filePath: string): Array { - const fileNode = this._parser(filePath); - const state = { - found: [], - }; - const Visitors = { - Identifier(path, state, matchers) { - if (matchers.indexOf(path.node.name) >= 0) { - state.found.push({ - node: path.node, - parents: getArrayOfParents(path), - }); - } - }, - }; - - traverse(fileNode, { - enter: path => { - const visitor = Visitors[path.node.type]; - if (visitor != null) { - visitor(path, state, this._matchers); - } - }, - }); - - // NOTE if no projectConfig is given the default resolver will be used - const snapshotResolver = buildSnapshotResolver(this._projectConfig || {}); - const snapshotPath = snapshotResolver.resolveSnapshotPath(filePath); - const snapshots = utils.getSnapshotData(snapshotPath, 'none').data; - let lastParent = null; - let count = 1; - - return state.found.map((snapshotNode, index) => { - const parents = snapshotNode.parents.filter(isValidParent); - const innerAssertion = parents[parents.length - 1]; - - if (lastParent !== innerAssertion) { - lastParent = innerAssertion; - count = 1; - } - - const result = { - content: undefined, - count: count++, - exists: false, - name: '', - node: snapshotNode.node, - }; - - if (!innerAssertion || isDescribe(innerAssertion.callee)) { - // An expectation inside describe never gets executed. - return result; - } - - result.name = buildName(snapshotNode, parents, result.count); - - if (snapshots[result.name]) { - result.exists = true; - result.content = snapshots[result.name]; - } - return result; - }); - } -} diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/describe.example.snap b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/describe.example.snap deleted file mode 100644 index d60e6dc0998d..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/describe.example.snap +++ /dev/null @@ -1,91 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`DESCRIBE fit 1`] = `1 fit describe`; -exports[`DESCRIBE fit 2`] = `2 fit describe`; -exports[`DESCRIBE it 1`] = `1 it describe`; -exports[`DESCRIBE it 2`] = `2 it describe`; -exports[`DESCRIBE it.only 1`] = `1 it.only describe`; -exports[`DESCRIBE it.only 2`] = `2 it.only describe`; -exports[`DESCRIBE it.skip 1`] = `1 it.skip describe`; -exports[`DESCRIBE it.skip 2`] = `2 it.skip describe`; -exports[`DESCRIBE test 1`] = `1 test describe`; -exports[`DESCRIBE test 2`] = `2 test describe`; -exports[`DESCRIBE test.only 1`] = `1 test.only describe`; -exports[`DESCRIBE test.only 2`] = `2 test.only describe`; -exports[`DESCRIBE test.skip 1`] = `1 test.skip describe`; -exports[`DESCRIBE test.skip 2`] = `2 test.skip describe`; -exports[`DESCRIBE xit 1`] = `1 xit describe`; -exports[`DESCRIBE xit 2`] = `2 xit describe`; -exports[`DESCRIBE xtest 1`] = `1 xtest describe`; -exports[`DESCRIBE xtest 2`] = `2 xtest describe`; -exports[`DESCRIBE.ONLY fit 1`] = `1 fit describe.only`; -exports[`DESCRIBE.ONLY fit 2`] = `2 fit describe.only`; -exports[`DESCRIBE.ONLY it 1`] = `1 it describe.only`; -exports[`DESCRIBE.ONLY it 2`] = `2 it describe.only`; -exports[`DESCRIBE.ONLY it.only 1`] = `1 it.only describe.only`; -exports[`DESCRIBE.ONLY it.only 2`] = `2 it.only describe.only`; -exports[`DESCRIBE.ONLY it.skip 1`] = `1 it.skip describe.only`; -exports[`DESCRIBE.ONLY it.skip 2`] = `2 it.skip describe.only`; -exports[`DESCRIBE.ONLY test 1`] = `1 test describe.only`; -exports[`DESCRIBE.ONLY test 2`] = `2 test describe.only`; -exports[`DESCRIBE.ONLY test.only 1`] = `1 test.only describe.only`; -exports[`DESCRIBE.ONLY test.only 2`] = `2 test.only describe.only`; -exports[`DESCRIBE.ONLY test.skip 1`] = `1 test.skip describe.only`; -exports[`DESCRIBE.ONLY test.skip 2`] = `2 test.skip describe.only`; -exports[`DESCRIBE.ONLY xit 1`] = `1 xit describe.only`; -exports[`DESCRIBE.ONLY xit 2`] = `2 xit describe.only`; -exports[`DESCRIBE.ONLY xtest 1`] = `1 xtest describe.only`; -exports[`DESCRIBE.ONLY xtest 2`] = `2 xtest describe.only`; -exports[`DESCRIBE.SKIP fit 1`] = `1 fit describe.skip`; -exports[`DESCRIBE.SKIP fit 2`] = `2 fit describe.skip`; -exports[`DESCRIBE.SKIP it 1`] = `1 it describe.skip`; -exports[`DESCRIBE.SKIP it 2`] = `2 it describe.skip`; -exports[`DESCRIBE.SKIP it.only 1`] = `1 it.only describe.skip`; -exports[`DESCRIBE.SKIP it.only 2`] = `2 it.only describe.skip`; -exports[`DESCRIBE.SKIP it.skip 1`] = `1 it.skip describe.skip`; -exports[`DESCRIBE.SKIP it.skip 2`] = `2 it.skip describe.skip`; -exports[`DESCRIBE.SKIP test 1`] = `1 test describe.skip`; -exports[`DESCRIBE.SKIP test 2`] = `2 test describe.skip`; -exports[`DESCRIBE.SKIP test.only 1`] = `1 test.only describe.skip`; -exports[`DESCRIBE.SKIP test.only 2`] = `2 test.only describe.skip`; -exports[`DESCRIBE.SKIP test.skip 1`] = `1 test.skip describe.skip`; -exports[`DESCRIBE.SKIP test.skip 2`] = `2 test.skip describe.skip`; -exports[`DESCRIBE.SKIP xit 1`] = `1 xit describe.skip`; -exports[`DESCRIBE.SKIP xit 2`] = `2 xit describe.skip`; -exports[`DESCRIBE.SKIP xtest 1`] = `1 xtest describe.skip`; -exports[`DESCRIBE.SKIP xtest 2`] = `2 xtest describe.skip`; -exports[`FDESCRIBE fit 1`] = `1 fit fdescribe`; -exports[`FDESCRIBE fit 2`] = `2 fit fdescribe`; -exports[`FDESCRIBE it 1`] = `1 it fdescribe`; -exports[`FDESCRIBE it 2`] = `2 it fdescribe`; -exports[`FDESCRIBE it.only 1`] = `1 it.only fdescribe`; -exports[`FDESCRIBE it.only 2`] = `2 it.only fdescribe`; -exports[`FDESCRIBE it.skip 1`] = `1 it.skip fdescribe`; -exports[`FDESCRIBE it.skip 2`] = `2 it.skip fdescribe`; -exports[`FDESCRIBE test 1`] = `1 test fdescribe`; -exports[`FDESCRIBE test 2`] = `2 test fdescribe`; -exports[`FDESCRIBE test.only 1`] = `1 test.only fdescribe`; -exports[`FDESCRIBE test.only 2`] = `2 test.only fdescribe`; -exports[`FDESCRIBE test.skip 1`] = `1 test.skip fdescribe`; -exports[`FDESCRIBE test.skip 2`] = `2 test.skip fdescribe`; -exports[`FDESCRIBE xit 1`] = `1 xit fdescribe`; -exports[`FDESCRIBE xit 2`] = `2 xit fdescribe`; -exports[`FDESCRIBE xtest 1`] = `1 xtest fdescribe`; -exports[`FDESCRIBE xtest 2`] = `2 xtest fdescribe`; -exports[`XDESCRIBE fit 1`] = `1 fit xdescribe`; -exports[`XDESCRIBE fit 2`] = `2 fit xdescribe`; -exports[`XDESCRIBE it 1`] = `1 it xdescribe`; -exports[`XDESCRIBE it 2`] = `2 it xdescribe`; -exports[`XDESCRIBE it.only 1`] = `1 it.only xdescribe`; -exports[`XDESCRIBE it.only 2`] = `2 it.only xdescribe`; -exports[`XDESCRIBE it.skip 1`] = `1 it.skip xdescribe`; -exports[`XDESCRIBE it.skip 2`] = `2 it.skip xdescribe`; -exports[`XDESCRIBE test 1`] = `1 test xdescribe`; -exports[`XDESCRIBE test 2`] = `2 test xdescribe`; -exports[`XDESCRIBE test.only 1`] = `1 test.only xdescribe`; -exports[`XDESCRIBE test.only 2`] = `2 test.only xdescribe`; -exports[`XDESCRIBE test.skip 1`] = `1 test.skip xdescribe`; -exports[`XDESCRIBE test.skip 2`] = `2 test.skip xdescribe`; -exports[`XDESCRIBE xit 1`] = `1 xit xdescribe`; -exports[`XDESCRIBE xit 2`] = `2 xit xdescribe`; -exports[`XDESCRIBE xtest 1`] = `1 xtest xdescribe`; -exports[`XDESCRIBE xtest 2`] = `2 xtest xdescribe`; diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nested.example.snap b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nested.example.snap deleted file mode 100644 index ee8a6ffce3a2..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nested.example.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`outer describe outer it inner describe inner it 1`] = `first nested`; -exports[`outer describe outer it inner describe inner it 2`] = `second nested`; diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nodescribe.example.snap b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nodescribe.example.snap deleted file mode 100644 index 8b6c8955d07b..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/__snapshots__/nodescribe.example.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`fit 1`]=`fit 1`; -exports[`fit 2`]=`fit 2`; -exports[`it 1`]=`it 1`; -exports[`it 2`]=`it 2`; -exports[`it.only 1`]=`it.only 1`; -exports[`it.only 2`]=`it.only 2`; -exports[`it.skip 1`]=`it.skip 1`; -exports[`it.skip 2`]=`it.skip 2`; -exports[`test 1`]=`test 1`; -exports[`test 2`]=`test 2`; -exports[`test.only 1`]=`test.only 1`; -exports[`test.only 2`]=`test.only 2`; -exports[`test.skip 1`]=`test.skip 1`; -exports[`test.skip 2`]=`test.skip 2`; -exports[`xit 1`]=`xit 1`; -exports[`xit 2`]=`xit 2`; -exports[`xtest 1`]=`xtest 1`; -exports[`xtest 2`]=`xtest 2`; diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/describe.example b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/describe.example deleted file mode 100644 index 5380757ef2e8..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/describe.example +++ /dev/null @@ -1,194 +0,0 @@ -describe('DESCRIBE', () => { - fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) -}) - -describe.only('DESCRIBE.ONLY', () => { - fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) -}) - -describe.skip('DESCRIBE.SKIP', () => { - fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) -}) - -fdescribe('FDESCRIBE', () => { - fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) -}) - -xdescribe('XDESCRIBE', () => { - fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) -}) diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nested.example b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nested.example deleted file mode 100644 index 260bd5a556a4..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nested.example +++ /dev/null @@ -1,10 +0,0 @@ -describe('outer describe', () => { - it('outer it', () => { - describe('inner describe', () => { - it('inner it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); - }) - }) - }) -}) diff --git a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nodescribe.example b/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nodescribe.example deleted file mode 100644 index 90634fdc7560..000000000000 --- a/packages/jest-editor-support/src/__tests__/fixtures/snapshots/nodescribe.example +++ /dev/null @@ -1,36 +0,0 @@ -fit('fit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -it('it', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -it.only('it.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -it.skip('it.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -test('test', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -test.only('test.only', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -test.skip('test.skip', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -xit('xit', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) -xtest('xtest', () => { - expect(fake).toMatchSnapshot(); - expect(fake).toMatchSnapshot(); -}) diff --git a/packages/jest-editor-support/src/__tests__/parsers/babylon_parser.test.js b/packages/jest-editor-support/src/__tests__/parsers/babylon_parser.test.js deleted file mode 100644 index 833d35dce23d..000000000000 --- a/packages/jest-editor-support/src/__tests__/parsers/babylon_parser.test.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -'use strict'; - -const {parse} = require('../../parsers/babylon_parser'); -const {parserTests} = require('../../../../../fixtures/parser_tests'); - -parserTests(parse); diff --git a/packages/jest-editor-support/src/__tests__/process.test.js b/packages/jest-editor-support/src/__tests__/process.test.js deleted file mode 100644 index 7b4bc0e844b5..000000000000 --- a/packages/jest-editor-support/src/__tests__/process.test.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -'use strict'; - -jest.mock('child_process'); - -import {createProcess} from '../Process'; -import {spawn} from 'child_process'; - -describe('createProcess', () => { - afterEach(() => { - jest.resetAllMocks(); - }); - - it('spawns the process', () => { - const workspace: any = {pathToJest: ''}; - const args = []; - createProcess(workspace, args); - - expect(spawn).toBeCalled(); - }); - - it('spawns the command from workspace.pathToJest', () => { - const workspace: any = {pathToJest: 'jest'}; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][0]).toBe('jest'); - expect(spawn.mock.calls[0][1]).toEqual([]); - }); - - it('spawns the first arg from workspace.pathToJest split on " "', () => { - const workspace: any = {pathToJest: 'npm test --'}; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][0]).toBe('npm'); - expect(spawn.mock.calls[0][1]).toEqual(['test', '--']); - }); - - it('fails to spawn the first quoted arg from workspace.pathToJest', () => { - const workspace: any = { - pathToJest: - '"../build scripts/test" --coverageDirectory="../code coverage"', - }; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][0]).not.toBe('"../build scripts/test"'); - expect(spawn.mock.calls[0][1]).not.toEqual([ - '--coverageDirectory="../code coverage"', - ]); - }); - - it('appends args', () => { - const workspace: any = {pathToJest: 'npm test --'}; - const args = ['--option', 'value', '--another']; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][1]).toEqual(['test', '--', ...args]); - }); - - it('sets the --config arg to workspace.pathToConfig', () => { - const workspace: any = { - pathToConfig: 'non-standard.jest.js', - pathToJest: 'npm test --', - }; - const args = ['--option', 'value']; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][1]).toEqual([ - 'test', - '--', - '--option', - 'value', - '--config', - 'non-standard.jest.js', - ]); - }); - - it('defines the "CI" environment variable', () => { - const expected = Object.assign({}, process.env, {CI: 'true'}); - - const workspace: any = {pathToJest: ''}; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][2].env).toEqual(expected); - }); - - it('sets the current working directory of the child process', () => { - const workspace: any = { - pathToJest: '', - rootPath: 'root directory', - }; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][2].cwd).toBe(workspace.rootPath); - }); - - it('should not set the "shell" property when "options" are not provided', () => { - const workspace: any = {pathToJest: ''}; - const args = []; - createProcess(workspace, args); - - expect(spawn.mock.calls[0][2].shell).not.toBeDefined(); - }); - - it('should set the "shell" property when "options" are provided', () => { - const expected = {}; - const workspace: any = {pathToJest: ''}; - const args = []; - const options: any = {shell: expected}; - createProcess(workspace, args, options); - - expect(spawn.mock.calls[0][2].shell).toBe(expected); - }); -}); diff --git a/packages/jest-editor-support/src/__tests__/project_workspace.test.js b/packages/jest-editor-support/src/__tests__/project_workspace.test.js deleted file mode 100644 index 3f5cb3b770ef..000000000000 --- a/packages/jest-editor-support/src/__tests__/project_workspace.test.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -'use strict'; - -import ProjectWorkspace from '../project_workspace'; - -describe('setup', () => { - it('sets itself up fom the constructor', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'path_to_config', - 1000, - ); - expect(workspace.rootPath).toEqual('root_path'); - expect(workspace.pathToJest).toEqual('path_to_jest'); - }); -}); diff --git a/packages/jest-editor-support/src/__tests__/runner.test.js b/packages/jest-editor-support/src/__tests__/runner.test.js deleted file mode 100644 index ad1999727583..000000000000 --- a/packages/jest-editor-support/src/__tests__/runner.test.js +++ /dev/null @@ -1,530 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -'use strict'; - -jest.mock('../Process'); -jest.mock('child_process', () => ({spawn: jest.fn()})); -jest.mock('os', () => ({tmpdir: jest.fn()})); -jest.mock('fs', () => { - // $FlowFixMe requireActual - const readFileSync = jest.requireActual('fs').readFileSync; - - // Replace `readFile` with `readFileSync` so we don't get multiple threads - return { - readFile: (path, type, closure) => { - const data = readFileSync(path); - closure(null, data); - }, - readFileSync, - }; -}); - -const path = require('path'); -const fixtures = path.resolve(__dirname, '../../../../fixtures'); -import ProjectWorkspace from '../project_workspace'; -import {messageTypes} from '../types'; - -import {default as Runner} from '../Runner'; -import {createProcess} from '../Process'; -import {tmpdir} from 'os'; -import {spawn} from 'child_process'; -import {readFileSync} from 'fs'; -import EventEmitter from 'events'; -import type {ChildProcess} from 'child_process'; - -describe('Runner', () => { - describe('constructor', () => { - it('does not set watchMode', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - - expect(sut.watchMode).not.toBeDefined(); - }); - - it('does not set watchAll', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - - expect(sut.watchAll).not.toBeDefined(); - }); - - it('sets the output filepath', () => { - tmpdir.mockReturnValueOnce('tmpdir'); - - const workspace: any = {}; - const sut = new Runner(workspace); - - expect(sut.outputPath).toBe('tmpdir/jest_runner.json'); - }); - - it('sets the default options', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - - expect(sut.options).toEqual({}); - }); - - it('sets the options', () => { - const workspace: any = {}; - const options = {}; - const sut = new Runner(workspace, options); - - expect(sut.options).toBe(options); - }); - }); - - describe('start', () => { - beforeEach(() => { - jest.resetAllMocks(); - - (createProcess: any).mockImplementationOnce( - (workspace, args, options) => { - const process: any = new EventEmitter(); - process.stdout = new EventEmitter(); - process.stderr = new EventEmitter(); - return process; - }, - ); - }); - - it('will not start when started', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - - sut.start(); - sut.start(); - - expect(createProcess).toHaveBeenCalledTimes(1); - }); - - it('sets watchMode', () => { - const expected = true; - - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(expected); - - expect(sut.watchMode).toBe(expected); - }); - - it('sets watchAll', () => { - const watchMode = true; - const watchAll = true; - - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(watchMode, watchAll); - - expect(sut.watchMode).toBe(watchMode); - expect(sut.watchAll).toBe(watchAll); - }); - - it('calls createProcess', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(false); - - expect((createProcess: any).mock.calls[0][0]).toBe(workspace); - }); - - it('calls createProcess with the --json arg', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(false); - - expect((createProcess: any).mock.calls[0][1]).toContain('--json'); - }); - - it('calls createProcess with the --useStderr arg', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(false); - - expect((createProcess: any).mock.calls[0][1]).toContain('--useStderr'); - }); - - it('calls createProcess with the --jsonOutputFile arg for Jest 17 and below', () => { - const workspace: any = {localJestMajorVersion: 17}; - const sut = new Runner(workspace); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf('--jsonOutputFile'); - expect(index).not.toBe(-1); - expect(args[index + 1]).toBe(sut.outputPath); - }); - - it('calls createProcess with the --outputFile arg for Jest 18 and above', () => { - const workspace: any = {localJestMajorVersion: 18}; - const sut = new Runner(workspace); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf('--outputFile'); - expect(index).not.toBe(-1); - expect(args[index + 1]).toBe(sut.outputPath); - }); - - it('calls createProcess with the --watch arg when provided', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.start(true); - - expect((createProcess: any).mock.calls[0][1]).toContain('--watch'); - }); - - it('calls createProcess with the --coverage arg when provided', () => { - const expected = '--coverage'; - - const workspace: any = {collectCoverage: true}; - const options = {}; - const sut = new Runner(workspace, options); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf(expected); - expect(index).not.toBe(-1); - }); - - it('calls createProcess with the ---no-coverage arg when provided and false', () => { - const expected = '--no-coverage'; - - const workspace: any = {collectCoverage: false}; - const options = {}; - const sut = new Runner(workspace, options); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf(expected); - expect(index).not.toBe(-1); - }); - - it('calls createProcess without the --coverage arg when undefined', () => { - const expected = '--coverage'; - - const workspace: any = {}; - const options = {}; - const sut = new Runner(workspace, options); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf(expected); - expect(index).toBe(-1); - }); - - it('calls createProcess with the --testNamePattern arg when provided', () => { - const expected = 'testNamePattern'; - - const workspace: any = {}; - const options = {testNamePattern: expected}; - const sut = new Runner(workspace, options); - sut.start(false); - - const args = (createProcess: any).mock.calls[0][1]; - const index = args.indexOf('--testNamePattern'); - expect(index).not.toBe(-1); - expect(args[index + 1]).toBe(expected); - }); - - it('calls createProcess with a test path pattern when provided', () => { - const expected = 'testPathPattern'; - const workspace: any = {}; - const options = {testFileNamePattern: expected}; - const sut = new Runner(workspace, options); - sut.start(false); - - expect((createProcess: any).mock.calls[0][1]).toContain(expected); - }); - - it('calls createProcess with the shell option when provided', () => { - const workspace: any = {}; - const options = {shell: true}; - const sut = new Runner(workspace, options); - sut.start(false); - - expect((createProcess: any).mock.calls[0][2]).toEqual({shell: true}); - }); - - it('calls createProcess with the no color option when provided', () => { - const expected = '--no-color'; - - const workspace: any = {}; - const options = {noColor: true}; - const sut = new Runner(workspace, options); - sut.start(false); - - expect((createProcess: any).mock.calls[0][1]).toContain(expected); - }); - }); - - describe('closeProcess', () => { - let platformPV; - - beforeEach(() => { - jest.resetAllMocks(); - platformPV = process.platform; - - // Remove the "process.platform" property descriptor so it can be writable. - delete process.platform; - }); - - afterEach(() => { - process.platform = platformPV; - }); - - it('does nothing if the runner has not started', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.closeProcess(); - - expect(spawn).not.toBeCalled(); - }); - - it('spawns taskkill to close the process on Windows', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - process.platform = 'win32'; - sut.debugprocess = ({pid: 123}: any); - sut.closeProcess(); - - expect(spawn).toBeCalledWith('taskkill', ['/pid', '123', '/T', '/F']); - }); - - it('calls kill() to close the process on POSIX', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - process.platform = 'posix'; - const kill = jest.fn(); - sut.debugprocess = ({kill}: any); - sut.closeProcess(); - - expect(kill).toBeCalledWith(); - }); - - it('clears the debugprocess property', () => { - const workspace: any = {}; - const sut = new Runner(workspace); - sut.debugprocess = ({kill: () => {}}: any); - sut.closeProcess(); - - expect(sut.debugprocess).not.toBeDefined(); - }); - }); -}); - -describe('events', () => { - let runner: Runner; - let fakeProcess: ChildProcess; - - beforeEach(() => { - jest.resetAllMocks(); - - fakeProcess = (new EventEmitter(): any); - fakeProcess.stdout = new EventEmitter(); - fakeProcess.stderr = new EventEmitter(); - fakeProcess.kill = () => {}; - - (createProcess: any).mockImplementation(() => fakeProcess); - - const workspace = new ProjectWorkspace( - '.', - 'node_modules/.bin/jest', - 'test', - 18, - ); - runner = new Runner(workspace); - - // Sets it up and registers for notifications - runner.start(); - }); - - it('expects JSON from both stdout and stderr, then it passes the JSON', () => { - const data = jest.fn(); - runner.on('executableJSON', data); - - runner.outputPath = `${fixtures}/failing-jsons/failing_jest_json.json`; - - const doTest = (out: stream$Readable) => { - data.mockClear(); - - // Emitting data through stdout should trigger sending JSON - out.emit('data', 'Test results written to file'); - expect(data).toBeCalled(); - - // And lets check what we emit - const dataAtPath = readFileSync(runner.outputPath); - const storedJSON = JSON.parse(dataAtPath.toString()); - expect(data.mock.calls[0][0]).toEqual(storedJSON); - }; - - doTest(fakeProcess.stdout); - doTest(fakeProcess.stderr); - }); - - it('emits errors when process errors', () => { - const error = jest.fn(); - runner.on('terminalError', error); - fakeProcess.emit('error', {}); - expect(error).toBeCalled(); - }); - - it('emits debuggerProcessExit when process exits', () => { - const close = jest.fn(); - runner.on('debuggerProcessExit', close); - fakeProcess.emit('exit'); - expect(close).toBeCalled(); - }); - - it('should start jest process after killing the old process', () => { - runner.closeProcess(); - runner.start(); - - expect(createProcess).toHaveBeenCalledTimes(2); - }); - - describe('stdout.on("data")', () => { - it('should emit an "executableJSON" event with the "noTestsFound" meta data property set', () => { - const listener = jest.fn(); - runner.on('executableJSON', listener); - runner.outputPath = `${fixtures}/failing-jsons/failing_jest_json.json`; - (runner: any).doResultsFollowNoTestsFoundMessage = jest - .fn() - .mockReturnValueOnce(true); - fakeProcess.stdout.emit('data', 'Test results written to file'); - - expect(listener.mock.calls[0].length).toBe(2); - expect(listener.mock.calls[0][1]).toEqual({noTestsFound: true}); - }); - - it('should clear the message type history', () => { - runner.outputPath = `${fixtures}/failing-jsons/failing_jest_json.json`; - runner.prevMessageTypes.push(messageTypes.noTests); - fakeProcess.stdout.emit('data', 'Test results written to file'); - - expect(runner.prevMessageTypes.length).toBe(0); - }); - }); - - describe('stderr.on("data")', () => { - it('should identify the message type', () => { - (runner: any).findMessageType = jest.fn(); - const expected = {}; - fakeProcess.stderr.emit('data', expected); - - expect(runner.findMessageType).toBeCalledWith(expected); - }); - - it('should add the type to the message type history when known', () => { - (runner: any).findMessageType = jest - .fn() - .mockReturnValueOnce(messageTypes.noTests); - fakeProcess.stderr.emit('data', Buffer.from('')); - - expect(runner.prevMessageTypes).toEqual([messageTypes.noTests]); - }); - - it('should clear the message type history when the type is unknown', () => { - (runner: any).findMessageType = jest - .fn() - .mockReturnValueOnce(messageTypes.unknown); - fakeProcess.stderr.emit('data', Buffer.from('')); - - expect(runner.prevMessageTypes).toEqual([]); - }); - - it('should emit an "executableStdErr" event with the type', () => { - const listener = jest.fn(); - const data = Buffer.from(''); - const type = {}; - const meta = {type}; - (runner: any).findMessageType = jest.fn().mockReturnValueOnce(type); - - runner.on('executableStdErr', listener); - fakeProcess.stderr.emit('data', data, meta); - - expect(listener).toBeCalledWith(data, meta); - }); - - it('should track when "No tests found related to files changed since the last commit" is received', () => { - const data = Buffer.from( - 'No tests found related to files changed since last commit.\n' + - 'Press `a` to run all tests, or run Jest with `--watchAll`.', - ); - fakeProcess.stderr.emit('data', data); - - expect(runner.prevMessageTypes).toEqual([messageTypes.noTests]); - }); - - it('should track when "No tests found related to files changed since master" is received', () => { - const data = Buffer.from( - 'No tests found related to files changed since "master".\n' + - 'Press `a` to run all tests, or run Jest with `--watchAll`.', - ); - fakeProcess.stderr.emit('data', data); - - expect(runner.prevMessageTypes).toEqual([messageTypes.noTests]); - }); - - it('should clear the message type history when any other other data is received', () => { - const data = Buffer.from(''); - fakeProcess.stderr.emit('data', data); - - expect(runner.prevMessageTypes).toEqual([]); - }); - }); - - describe('findMessageType()', () => { - it('should return "unknown" when the message is not matched', () => { - const buf = Buffer.from(''); - expect(runner.findMessageType(buf)).toBe(messageTypes.unknown); - }); - - it('should identify "No tests found related to files changed since last commit."', () => { - const buf = Buffer.from( - 'No tests found related to files changed since last commit.\n' + - 'Press `a` to run all tests, or run Jest with `--watchAll`.', - ); - expect(runner.findMessageType(buf)).toBe(messageTypes.noTests); - }); - - it('should identify "No tests found related to files changed since git ref."', () => { - const buf = Buffer.from( - 'No tests found related to files changed since "master".\n' + - 'Press `a` to run all tests, or run Jest with `--watchAll`.', - ); - expect(runner.findMessageType(buf)).toBe(messageTypes.noTests); - }); - - it('should identify the "Watch Usage" prompt', () => { - const buf = Buffer.from('\n\nWatch Usage\n...'); - expect(runner.findMessageType(buf)).toBe(messageTypes.watchUsage); - }); - }); - - describe('doResultsFollowNoTestsFoundMessage()', () => { - it('should return true when the last message on stderr was "No tests found..."', () => { - runner.prevMessageTypes.push(messageTypes.noTests); - expect(runner.doResultsFollowNoTestsFoundMessage()).toBe(true); - }); - - it('should return true when the last two messages on stderr were "No tests found..." and "Watch Usage"', () => { - runner.prevMessageTypes.push( - messageTypes.noTests, - messageTypes.watchUsage, - ); - expect(runner.doResultsFollowNoTestsFoundMessage()).toBe(true); - }); - - it('should return false otherwise', () => { - runner.prevMessageTypes.length = 0; - expect(runner.doResultsFollowNoTestsFoundMessage()).toBe(false); - }); - }); -}); diff --git a/packages/jest-editor-support/src/__tests__/settings.test.js b/packages/jest-editor-support/src/__tests__/settings.test.js deleted file mode 100644 index 9bcbae225f0a..000000000000 --- a/packages/jest-editor-support/src/__tests__/settings.test.js +++ /dev/null @@ -1,271 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -'use strict'; - -import EventEmitter from 'events'; -import ProjectWorkspace from '../project_workspace'; -import Settings from '../Settings'; - -describe('Settings', () => { - it('sets itself up fom the constructor', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const options = { - shell: true, - }; - const settings = new Settings(workspace, options); - expect(settings.workspace).toEqual(workspace); - expect(settings.settings).toEqual(expect.any(Object)); - expect(settings.spawnOptions).toEqual(options); - }); - - it('[jest 20] reads and parses the config', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const completed = jest.fn(); - const config = { - cacheDirectory: '/tmp/jest', - name: '[md5 hash]', - }; - const json = { - config, - version: '19.0.0', - }; - - const mockProcess: any = new EventEmitter(); - mockProcess.stdout = new EventEmitter(); - const createProcess = () => mockProcess; - const buffer = makeBuffer(JSON.stringify(json)); - const settings = new Settings(workspace, { - createProcess, - }); - - settings.getConfig(completed); - settings.getConfigProcess.stdout.emit('data', buffer); - settings.getConfigProcess.emit('close'); - - expect(completed).toHaveBeenCalled(); - expect(settings.jestVersionMajor).toBe(19); - expect(settings.settings).toEqual(config); - }); - - it('[jest 21] reads and parses the config', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const completed = jest.fn(); - const configs = [ - { - cacheDirectory: '/tmp/jest', - name: '[md5 hash]', - }, - ]; - const json = { - configs, - version: '21.0.0', - }; - - const mockProcess: any = new EventEmitter(); - mockProcess.stdout = new EventEmitter(); - const createProcess = () => mockProcess; - const buffer = makeBuffer(JSON.stringify(json)); - const settings = new Settings(workspace, { - createProcess, - }); - - settings.getConfig(completed); - settings.getConfigProcess.stdout.emit('data', buffer); - settings.getConfigProcess.emit('close'); - - expect(completed).toHaveBeenCalled(); - expect(settings.jestVersionMajor).toBe(21); - expect(settings.settings).toEqual(configs[0]); - }); - - it('[jest 21] reads and parses the configs', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const completed = jest.fn(); - const configs = [ - { - cacheDirectory: '/tmp/jest', - name: '[md5 hash]', - }, - ]; - const json = { - configs, - version: '21.0.0', - }; - - const mockProcess: any = new EventEmitter(); - mockProcess.stdout = new EventEmitter(); - const createProcess = () => mockProcess; - const buffer = makeBuffer(JSON.stringify(json)); - const settings = new Settings(workspace, { - createProcess, - }); - - settings.getConfigs(completed); - settings.getConfigProcess.stdout.emit('data', buffer); - settings.getConfigProcess.emit('close'); - - expect(completed).toHaveBeenCalled(); - expect(settings.jestVersionMajor).toBe(21); - expect(settings.configs).toEqual(configs); - }); - - it('calls callback even if no data is sent', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const completed = jest.fn(); - - const mockProcess: any = new EventEmitter(); - mockProcess.stdout = new EventEmitter(); - const createProcess = () => mockProcess; - const settings = new Settings(workspace, { - createProcess, - }); - - settings.getConfig(completed); - settings.getConfigProcess.emit('close'); - - expect(completed).toHaveBeenCalled(); - }); - - it('passes command, args, and options to createProcess', () => { - const localJestMajorVersion = 1000; - const pathToConfig = 'test'; - const pathToJest = 'path_to_jest'; - const rootPath = 'root_path'; - - const workspace = new ProjectWorkspace( - rootPath, - pathToJest, - pathToConfig, - localJestMajorVersion, - ); - const createProcess = jest.fn().mockReturnValue({ - on: () => {}, - stdout: new EventEmitter(), - }); - - const options: any = { - createProcess, - shell: true, - }; - const settings = new Settings(workspace, options); - settings.getConfig(() => {}); - - expect(createProcess).toBeCalledWith( - { - localJestMajorVersion, - pathToConfig, - pathToJest, - rootPath, - }, - ['--showConfig'], - { - shell: true, - }, - ); - }); - - describe('parse config', () => { - const workspace = new ProjectWorkspace( - 'root_path', - 'path_to_jest', - 'test', - 1000, - ); - const createProcess = jest.fn(); - - const json = `{ - "version": "23.2.0", - "configs": [{ - "testRegex": "some-regex" - }] - }`; - const run_test = ( - text: string, - expected_version: number = 23, - expected_regex: string = 'some-regex', - ): void => { - settings._parseConfig(text); - const target = settings.configs[0]; - expect(settings.jestVersionMajor).toBe(expected_version); - expect(target.testRegex).toBe(expected_regex); - }; - - let settings; - beforeEach(() => { - settings = new Settings(workspace, { - createProcess, - }); - }); - - it('test regex', () => { - const regex = settings._jsonPattern; - - let text = ` > abc {} - { abc } - `; - let index = text.search(regex); - expect(index).not.toBe(-1); - expect(text.substring(index).trim()).toBe('{ abc }'); - - text = `{def: - {sub} - }`; - index = text.search(regex); - expect(index).not.toBe(-1); - expect(text.substring(index).startsWith('{def:')).toBe(true); - }); - it('can parse correct config', () => { - run_test(json); - }); - - it('can parse config even with noise', () => { - const with_noise = ` - > something - > more noise - ${json} - `; - run_test(with_noise); - }); - }); -}); - -const makeBuffer = (content: string) => { - // Buffer.from is not supported in < Node 5.10 - if (typeof Buffer.from === 'function') { - return Buffer.from(content); - } - - return new Buffer(content); -}; diff --git a/packages/jest-editor-support/src/__tests__/snapshot.test.js b/packages/jest-editor-support/src/__tests__/snapshot.test.js deleted file mode 100644 index b93837484592..000000000000 --- a/packages/jest-editor-support/src/__tests__/snapshot.test.js +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @flow - */ - -'use strict'; - -import path from 'path'; -import Snapshot from '../Snapshot'; - -const snapshotHelper = new Snapshot(); -const snapshotFixturePath = path.resolve(__dirname, 'fixtures/snapshots'); - -test('nodescribe.example', () => { - const filePath = path.join(snapshotFixturePath, 'nodescribe.example'); - const results = snapshotHelper.getMetadata(filePath); - const allAssertion = [ - 'fit', - 'it', - 'it.only', - 'it.skip', - 'test', - 'test.only', - 'test.skip', - 'xit', - 'xtest', - ]; - - const expectations = Object.create(null); - allAssertion.forEach(assertion => { - expectations[assertion + ' 1'] = { - assertion, - checked: false, - number: 1, - }; - expectations[assertion + ' 2'] = { - assertion, - checked: false, - number: 2, - }; - }); - - results.forEach(result => { - const check = expectations[result.name]; - check.checked = result.content === `${check.assertion} ${check.number}`; - }); - - expect( - Object.keys(expectations) - .map(key => expectations[key]) - .filter(expectation => !expectation.checked).length, - ).toBe(0); -}); - -test('describe.example', () => { - const filePath = path.join(snapshotFixturePath, 'describe.example'); - const results = snapshotHelper.getMetadata(filePath); - const allDescribe = [ - 'describe', - 'describe.only', - 'describe.skip', - 'fdescribe', - 'xdescribe', - ]; - const allAssertion = [ - 'fit', - 'it', - 'it.only', - 'it.skip', - 'test', - 'test.only', - 'test.skip', - 'xit', - 'xtest', - ]; - - const expectations = Object.create(null); - - allDescribe.forEach(describe => { - allAssertion.forEach(assertion => { - expectations[describe.toUpperCase() + ' ' + assertion + ' 1'] = { - assertion, - checked: false, - describe, - number: 1, - }; - - expectations[describe.toUpperCase() + ' ' + assertion + ' 2'] = { - assertion, - checked: false, - describe, - number: 2, - }; - }); - }); - - results.forEach(result => { - const check = expectations[result.name]; - check.checked = - result.content === `${check.number} ${check.assertion} ${check.describe}`; - }); - expect( - Object.keys(expectations) - .map(key => expectations[key]) - .filter(expectation => !expectation.checked).length, - ).toBe(0); -}); - -test('nested.example', () => { - const filePath = path.join(snapshotFixturePath, 'nested.example'); - const results = snapshotHelper.getMetadata(filePath); - expect(results[0].content).toBe('first nested'); - expect(results[1].content).toBe('second nested'); - - expect(results[0].name).toBe( - 'outer describe outer it inner describe inner it 1', - ); - expect(results[1].name).toBe( - 'outer describe outer it inner describe inner it 2', - ); - - expect(results[0].node.loc.start).toEqual({column: 21, line: 5}); - expect(results[0].node.loc.end).toEqual({column: 36, line: 5}); - expect(results[1].node.loc.start).toEqual({column: 21, line: 6}); - expect(results[1].node.loc.end).toEqual({column: 36, line: 6}); -}); diff --git a/packages/jest-editor-support/src/__tests__/test_reconciler.test.js b/packages/jest-editor-support/src/__tests__/test_reconciler.test.js deleted file mode 100644 index 04da6692ae9b..000000000000 --- a/packages/jest-editor-support/src/__tests__/test_reconciler.test.js +++ /dev/null @@ -1,213 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import fs from 'fs'; -import path from 'path'; -import TestReconciler from '../test_reconciler'; -import type {TestFileAssertionStatus, TestAssertionStatus} from '../types'; - -const fixtures = path.resolve(__dirname, '../../../../fixtures'); - -function reconcilerWithFile( - parser: TestReconciler, - file: string, -): TestFileAssertionStatus[] { - const exampleJSON = fs.readFileSync(`${fixtures}/failing-jsons/${file}`); - const json = JSON.parse(exampleJSON.toString()); - if (!parser) console.error('no parser for ', file); - return parser.updateFileWithJestStatus(json); -} - -describe('Test Reconciler', () => { - let parser: TestReconciler; - let results: TestFileAssertionStatus[]; - - const dangerFilePath = - '/Users/orta/dev/projects/danger/' + - 'danger-js/source/ci_source/_tests/_travis.test.js'; - - describe('for a simple project', () => { - beforeAll(() => { - parser = new TestReconciler(); - results = reconcilerWithFile(parser, 'failing_jest_json.json'); - }); - - it('returns expected result for all test suites', () => { - expect(results.length).toEqual(5); - }); - it('passes a passing method', () => { - const testName = 'does not validate without josh'; - const status: any = parser.stateForTestAssertion( - dangerFilePath, - testName, - ); - expect(status.status).toEqual('KnownSuccess'); - expect(status.line).toBeNull(); - }); - - it('fails a failing method in the same file', () => { - const testName = - 'validates when all Travis environment' + - ' vars are set and Josh K says so'; - - const status: any = parser.stateForTestAssertion( - dangerFilePath, - testName, - ); - expect(status.status).toEqual('KnownFail'); - expect(status.line).toEqual(12); - const errorMessage = 'Expected value to be falsy, instead received true'; - expect(status.terseMessage).toEqual(errorMessage); - expect(status.shortMessage).toEqual(`Error: expect(received).toBeFalsy() - -Expected value to be falsy, instead received - true`); - }); - - it('skips a skipped method', () => { - const testName = 'does not pull it out of the env'; - const status: any = parser.stateForTestAssertion( - dangerFilePath, - testName, - ); - expect(status.status).toEqual('KnownSkip'); - expect(status.line).toBeNull(); - }); - }); - - describe('in a monorepo project', () => { - beforeEach(() => { - parser = new TestReconciler(); - results = reconcilerWithFile(parser, 'monorepo_root_1.json'); - }); - - it('did processed all test suits including the suites failed to run', () => { - expect(results.length).toEqual(8); - const failed = results.filter(r => r.status === 'KnownFail'); - expect(failed.length).toEqual(4); - //2 of them is failed suite, i.e. no assertions - expect( - failed.filter(r => !r.assertions || r.assertions.length === 0).length, - ).toEqual(2); - }); - it('did catch the passed tests', () => { - const succeededSuites = results.filter(r => r.status === 'KnownSuccess'); - expect(succeededSuites.length).toEqual(4); - - const succeededTests = results - .map(r => r.assertions || []) - // $FlowFixMe: Flow thinks the type is array from above, not the number passed as initial value - .reduce((sum: number, assertions: TestAssertionStatus[]) => { - const success = assertions.filter(a => a.status === 'KnownSuccess'); - return sum + success.length; - }, 0); - expect(succeededTests).toEqual(46); - }); - describe('when test updated', () => { - const targetTests = { - failedThenRemoved: [ - '/X/packages/Y-core/src/eth/__tests__/types.test.ts', - 'should fail', - ], - missingThenFailed: [ - '/X/packages/Y-app-vault/native/__tests__/index.ios.js', - 'testing jest with react-native', - ], - missingThenFixed: [ - '/X/packages/Y-app-vault/native/__tests__/index.ios.js', - 'renders correctly', - ], - passed: [ - '/X/packages/Y-keeper/src/redux/middlewares/__tests__/createGateMonitor.test.ts', - 'can log/profile doable async actions', - ], - }; - - function verifyTest(key: string, expectedStatus?: string) { - const test = parser.stateForTestAssertion( - targetTests[key][0], - targetTests[key][1], - ); - if (!test && !expectedStatus) { - return; - } - if (expectedStatus && test) { - expect(test.status).toEqual(expectedStatus); - return; - } - expect(key + ': ' + JSON.stringify(test)).toEqual(expectedStatus); // failed! - } - - it('verify before update occurred', () => { - verifyTest('missingThenFixed', undefined); - verifyTest('missingThenFailed', undefined); - verifyTest('failedThenRemoved', 'KnownFail'); - verifyTest('passed', 'KnownSuccess'); - }); - - it('new file can update existing result', () => { - //in file 2 we fixed 2 failed suites and removed 1 failed test - //let's check the failed tests are now passed, while the previously - //passed test should still be accessible - const results2 = reconcilerWithFile(parser, 'monorepo_root_2.json'); - expect(results2.length).toEqual(4); - - verifyTest('missingThenFixed', 'KnownSuccess'); - verifyTest('missingThenFailed', 'KnownFail'); - verifyTest('failedThenRemoved', undefined); - verifyTest('passed', 'KnownSuccess'); - }); - }); - }); -}); - -describe('Terse Messages', () => { - let parser: TestReconciler; - - beforeEach(() => { - parser = new TestReconciler(); - const _ = reconcilerWithFile(parser, 'failing_expects.json'); - }); - - it('handles shrinking a snapshot message', () => { - const file = - '/Users/orta/dev/projects/artsy/js/' + - 'libs/jest-snapshots-svg/src/_tests/example.test.ts'; - - const terseForTest = name => parser.stateForTestAssertion(file, name); - - let message = 'Expected value to equal: 2, Received: 1'; - let testName = 'numbers'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Expected value to equal: 2, Received: "1"'; - testName = 'string to numbers: numbers'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Expected value to equal: {"a": 2}, Received: {}'; - testName = 'objects'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Snapshot has changed'; - testName = 'snapshots'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Expected value to be greater than: 3, Received: 2'; - testName = 'greater than'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Expected value to be falsy, instead received 2'; - testName = 'falsy'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - - message = 'Expected value to be truthy, instead received null'; - testName = 'truthy'; - expect(terseForTest(testName)).toHaveProperty('terseMessage', message); - }); -}); diff --git a/packages/jest-editor-support/src/index.js b/packages/jest-editor-support/src/index.js deleted file mode 100644 index 146f57f90b6e..000000000000 --- a/packages/jest-editor-support/src/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import * as Process from './Process'; - -import ProjectWorkspace from './project_workspace'; -import Runner from './Runner'; -import Settings from './Settings'; -import Snapshot from './Snapshot'; -import {Expect, ItBlock, Node} from './parsers/parser_nodes'; -import {parse} from './parsers/babylon_parser'; -import TestReconciler from './test_reconciler'; - -module.exports = { - Expect, - ItBlock, - Node, - Process, - ProjectWorkspace, - Runner, - Settings, - Snapshot, - TestReconciler, - parse, -}; diff --git a/packages/jest-editor-support/src/parsers/babylon_parser.js b/packages/jest-editor-support/src/parsers/babylon_parser.js deleted file mode 100644 index 445a64621549..000000000000 --- a/packages/jest-editor-support/src/parsers/babylon_parser.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import {readFileSync} from 'fs'; - -import {parse as babylonParse} from 'babylon'; -import {Expect, ItBlock} from './parser_nodes'; -import type {File as BabylonFile} from 'babylon'; - -export type BabylonParserResult = { - expects: Array, - itBlocks: Array, -}; - -export const getASTfor = (file: string): BabylonFile => { - const data = readFileSync(file).toString(); - const config = {plugins: ['*'], sourceType: 'module'}; - return babylonParse(data, config); -}; - -export const parse = (file: string): BabylonParserResult => { - const itBlocks: ItBlock[] = []; - const expects: Expect[] = []; - - const ast = getASTfor(file); - - // An `it`/`test` was found in the AST - // So take the AST node and create an object for us - // to store for later usage - const foundItNode = (node: any, file: string) => { - const block = new ItBlock(); - block.name = node.expression.arguments[0].value; - block.start = node.loc.start; - block.end = node.loc.end; - - block.start.column += 1; - - block.file = file; - itBlocks.push(block); - }; - - // An `expect` was found in the AST - // So take the AST node and create an object for us - // to store for later usage - const foundExpectNode = (node: any, file: string) => { - const expect = new Expect(); - expect.start = node.loc.start; - expect.end = node.loc.end; - - expect.start.column += 1; - expect.end.column += 1; - - expect.file = file; - expects.push(expect); - }; - - const isFunctionCall = node => - node.type === 'ExpressionStatement' && - node.expression && - node.expression.type === 'CallExpression'; - - const isFunctionDeclaration = (nodeType: string) => - nodeType === 'ArrowFunctionExpression' || nodeType === 'FunctionExpression'; - - // Pull out the name of a CallExpression (describe/it) - // handle cases where it's a member expression (.only) - const getNameForNode = node => { - if (!isFunctionCall(node)) { - return false; - } - let name = - node && node.expression && node.expression.callee - ? node.expression.callee.name - : undefined; - if ( - !name && - node && - node.expression && - node.expression.callee && - node.expression.callee.object - ) { - name = node.expression.callee.object.name; - } - return name; - }; - - // When given a node in the AST, does this represent - // the start of an it/test block? - const isAnIt = node => { - const name = getNameForNode(node); - return name === 'it' || name === 'fit' || name === 'test'; - }; - - // When given a node in the AST, does this represent - // the start of an expect expression? - const isAnExpect = node => { - if (!isFunctionCall(node)) { - return false; - } - let name = ''; - let element = node && node.expression ? node.expression.callee : undefined; - while (!name && element) { - name = element.name; - // Because expect may have accessors tacked on (.to.be) or nothing - // (expect()) we have to check multiple levels for the name - element = element.object || element.callee; - } - return name === 'expect'; - }; - - // A recursive AST parser - const searchNodes = (root: any, file: string) => { - // Look through the node's children - for (const node in root.body) { - if (!root.body.hasOwnProperty(node)) { - return; - } - - // Pull out the node - const element = root.body[node]; - - if (isAnIt(element)) { - foundItNode(element, file); - } else if (isAnExpect(element)) { - foundExpectNode(element, file); - } else if (element && element.type === 'VariableDeclaration') { - element.declarations - .filter( - declaration => - declaration.init && isFunctionDeclaration(declaration.init.type), - ) - .forEach(declaration => searchNodes(declaration.init.body, file)); - } else if ( - element && - element.type === 'ExpressionStatement' && - element.expression && - element.expression.type === 'AssignmentExpression' && - element.expression.right && - isFunctionDeclaration(element.expression.right.type) - ) { - searchNodes(element.expression.right.body, file); - } else if ( - element.type === 'ReturnStatement' && - element.argument.arguments - ) { - element.argument.arguments - .filter(argument => isFunctionDeclaration(argument.type)) - .forEach(argument => searchNodes(argument.body, file)); - } - - if (isFunctionCall(element)) { - element.expression.arguments - .filter(argument => isFunctionDeclaration(argument.type)) - .forEach(argument => searchNodes(argument.body, file)); - } - } - }; - - searchNodes(ast['program'], file); - - return { - expects, - itBlocks, - }; -}; diff --git a/packages/jest-editor-support/src/parsers/parser_nodes.js b/packages/jest-editor-support/src/parsers/parser_nodes.js deleted file mode 100644 index 08d7dcfb95c3..000000000000 --- a/packages/jest-editor-support/src/parsers/parser_nodes.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import type {Location} from '../types'; - -export class Node { - start: Location; - end: Location; - file: string; -} - -export class Expect extends Node {} - -export class ItBlock extends Node { - name: string; -} diff --git a/packages/jest-editor-support/src/project_workspace.js b/packages/jest-editor-support/src/project_workspace.js deleted file mode 100644 index a092ea6a668e..000000000000 --- a/packages/jest-editor-support/src/project_workspace.js +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -/** - * Represents the project that the extension is running on and it's state - */ -export default class ProjectWorkspace { - /** - * The path to the root of the project's workspace - * - * @type {string} - */ - rootPath: string; - - /** - * The path to Jest, this is normally a file path like - * `node_modules/.bin/jest` but you should not make the assumption that - * it is always a direct file path, as in a create-react app it would look - * like `npm test --`. - * - * This means when launching a process, you will need to split on the first - * space, and then move any other args into the args of the process. - * - * @type {string} - */ - pathToJest: string; - - /** - * Path to a local Jest config file. - * - * @type {string} - */ - pathToConfig: string; - - /** - * local Jest major release version, as the runner could run against - * any version of Jest. - * - * @type {number} - */ - localJestMajorVersion: number; - - /** - * Whether test coverage should be (automatically) collected. - * - * @type {boolean} - */ - collectCoverage: ?boolean; - - /** - * if to output more information for debugging purpose. Default is false. - * - * @type {boolean} - */ - debug: ?boolean; - - constructor( - rootPath: string, - pathToJest: string, - pathToConfig: string, - localJestMajorVersion: number, - collectCoverage: ?boolean, - debug: ?boolean, - ) { - this.rootPath = rootPath; - this.pathToJest = pathToJest; - this.pathToConfig = pathToConfig; - this.localJestMajorVersion = localJestMajorVersion; - this.collectCoverage = collectCoverage; - this.debug = debug; - } -} diff --git a/packages/jest-editor-support/src/test_reconciler.js b/packages/jest-editor-support/src/test_reconciler.js deleted file mode 100644 index cdfad3ba37ac..000000000000 --- a/packages/jest-editor-support/src/test_reconciler.js +++ /dev/null @@ -1,166 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import type { - TestFileAssertionStatus, - TestAssertionStatus, - TestReconciliationState, -} from './types'; - -import type { - FormattedAssertionResult, - FormattedTestResults, -} from 'types/TestResult'; - -import path from 'path'; - -/** - * You have a Jest test runner watching for changes, and you have - * an extension that wants to know where to show errors after file parsing. - * - * This class represents the state between runs, keeping track of passes/fails - * at a file level, generating useful error messages and providing a nice API. - */ -export default class TestReconciler { - fileStatuses: {[key: string]: TestFileAssertionStatus}; - - constructor() { - this.fileStatuses = {}; - } - - // the processed test results will be returned immediately instead of saved in - // instance properties. This is 1) to prevent race condition 2) the data is already - // stored in the this.fileStatuses, no dup is better 3) client will most likely need to process - // all the results anyway. - updateFileWithJestStatus( - results: FormattedTestResults, - ): TestFileAssertionStatus[] { - // Loop through all files inside the report from Jest - const statusList: TestFileAssertionStatus[] = []; - results.testResults.forEach(file => { - // Did the file pass/fail? - const status = this.statusToReconcilationState(file.status); - // Create our own simpler representation - const fileStatus: TestFileAssertionStatus = { - assertions: this.mapAssertions(file.name, file.assertionResults), - file: file.name, - message: file.message, - status, - }; - this.fileStatuses[file.name] = fileStatus; - statusList.push(fileStatus); - }); - return statusList; - } - - // A failed test also contains the stack trace for an `expect` - // we don't get this as structured data, but what we get - // is useful enough to make it for ourselves - - mapAssertions( - filename: string, - assertions: Array, - ): Array { - // Is it jest < 17? e.g. Before I added this to the JSON - if (!assertions) { - return []; - } - - // Change all failing assertions into structured data - return assertions.map(assertion => { - // Failure messages seems to always be an array of one item - const message = assertion.failureMessages && assertion.failureMessages[0]; - let short = null; - let terse = null; - let line = null; - if (message) { - // Just the first line, with little whitespace - short = message.split(' at', 1)[0].trim(); - // this will show inline, so we want to show very little - terse = this.sanitizeShortErrorMessage(short); - line = this.lineOfError(message, filename); - } - return { - line, - message: message || '', - shortMessage: short, - status: this.statusToReconcilationState(assertion.status), - terseMessage: terse, - title: assertion.title, - }; - }); - } - - // Do everything we can to try make a one-liner from the error report - sanitizeShortErrorMessage(string: string): string { - if (string.includes('does not match stored snapshot')) { - return 'Snapshot has changed'; - } - - if (string.includes('New snapshot was not written')) { - return 'New snapshot is ready to write'; - } - - return string - .split('\n') - .splice(2) - .join('') - .replace(/\s\s+/g, ' ') - .replace('Received:', ', Received:') - .split('Difference:')[0]; - } - - // Pull the line out from the stack trace - lineOfError(message: string, filePath: string): ?number { - const filename = path.basename(filePath); - const restOfTrace = message.split(filename, 2)[1]; - return restOfTrace ? parseInt(restOfTrace.split(':')[1], 10) : null; - } - - statusToReconcilationState(status: string): TestReconciliationState { - switch (status) { - case 'passed': - return 'KnownSuccess'; - case 'failed': - return 'KnownFail'; - case 'pending': - return 'KnownSkip'; - default: - return 'Unknown'; - } - } - - stateForTestFile(file: string): TestReconciliationState { - const results = this.fileStatuses[file]; - if (!results) { - return 'Unknown'; - } - return results.status; - } - - assertionsForTestFile(file: string): TestAssertionStatus[] | null { - const results = this.fileStatuses[file]; - return results ? results.assertions : null; - } - - stateForTestAssertion( - file: string, - name: string, - ): TestAssertionStatus | null { - const results = this.fileStatuses[file]; - if (!results || !results.assertions) { - return null; - } - const assertion = results.assertions.find(a => a.title === name); - if (!assertion) { - return null; - } - return assertion; - } -} diff --git a/packages/jest-editor-support/src/types.js b/packages/jest-editor-support/src/types.js deleted file mode 100644 index fdabbdb65c0b..000000000000 --- a/packages/jest-editor-support/src/types.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -export type Location = { - column: number, - line: number, -}; - -export type SpawnOptions = { - shell?: boolean, -}; - -import type {ChildProcess} from 'child_process'; -import type ProjectWorkspace from './project_workspace'; - -export type Options = { - createProcess?: ( - workspace: ProjectWorkspace, - args: Array, - options?: SpawnOptions, - ) => ChildProcess, - noColor?: boolean, - testNamePattern?: string, - testFileNamePattern?: string, - shell?: boolean, -}; - -/** - * Did the thing pass, fail or was it not run? - */ -export type TestReconciliationState = - | 'Unknown' // The file has not changed, so the watcher didn't hit it - | 'KnownFail' // Definitely failed - | 'KnownSuccess' // Definitely passed - | 'KnownSkip'; // Definitely skipped - -/** - * The Jest Extension's version of a status for - * whether the file passed or not - * - */ -export type TestFileAssertionStatus = { - file: string, - message: string, - status: TestReconciliationState, - assertions: Array | null, -}; - -/** - * The Jest Extension's version of a status for - * individual assertion fails - * - */ -export type TestAssertionStatus = { - title: string, - status: TestReconciliationState, - message: string, - shortMessage: ?string, - terseMessage: ?string, - line: ?number, -}; - -export type JestTotalResultsMeta = { - noTestsFound: boolean, -}; - -export const messageTypes = { - noTests: 1, - testResults: 3, - unknown: 0, - watchUsage: 2, -}; - -export type MessageType = number; diff --git a/packages/jest-test-typescript-parser/.npmignore b/packages/jest-test-typescript-parser/.npmignore deleted file mode 100644 index 85e48fe7b0a4..000000000000 --- a/packages/jest-test-typescript-parser/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/packages/jest-test-typescript-parser/package.json b/packages/jest-test-typescript-parser/package.json deleted file mode 100644 index 7f0674177eac..000000000000 --- a/packages/jest-test-typescript-parser/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "jest-test-typescript-parser", - "version": "23.6.0", - "repository": { - "type": "git", - "url": "https://github.com/facebook/jest.git" - }, - "license": "MIT", - "main": "build/index.js", - "dependencies": { - "jest-editor-support": "^23.6.0", - "typescript": "^2.5.3" - } -} diff --git a/packages/jest-test-typescript-parser/src/__tests__/type_script_parser.test.js b/packages/jest-test-typescript-parser/src/__tests__/type_script_parser.test.js deleted file mode 100644 index 824e125a6799..000000000000 --- a/packages/jest-test-typescript-parser/src/__tests__/type_script_parser.test.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -'use strict'; - -import {parse} from '../type_script_parser'; -import {parserTests} from '../../../../fixtures/parser_tests'; - -parserTests(parse); diff --git a/packages/jest-test-typescript-parser/src/index.js b/packages/jest-test-typescript-parser/src/index.js deleted file mode 100644 index 3f0dd5dc18b1..000000000000 --- a/packages/jest-test-typescript-parser/src/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import {parse as babylonParser, ItBlock, Expect} from 'jest-editor-support'; -import * as TypeScriptParser from './type_script_parser'; - -export type ParserReturn = { - itBlocks: Array, - expects: Array, -}; - -/** - * Converts the file into an AST, then passes out a - * collection of it and expects. - */ -function parse(file: string): ParserReturn { - if (file.match(/\.tsx?$/)) { - return TypeScriptParser.parse(file); - } else { - return babylonParser(file); - } -} - -module.exports = { - TypeScriptParser, - parse, -}; diff --git a/packages/jest-test-typescript-parser/src/type_script_parser.js b/packages/jest-test-typescript-parser/src/type_script_parser.js deleted file mode 100644 index b045cfb19b74..000000000000 --- a/packages/jest-test-typescript-parser/src/type_script_parser.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ - -import {readFileSync} from 'fs'; - -import ts from 'typescript'; -import {Expect, ItBlock, Node} from 'jest-editor-support'; - -export function parse(file: string) { - const sourceFile = ts.createSourceFile( - file, - readFileSync(file).toString(), - ts.ScriptTarget.ES3, - ); - - const itBlocks: Array = []; - const expects: Array = []; - function searchNodes(node: ts.Node) { - if (node.kind === ts.SyntaxKind.CallExpression) { - let {text} = node.expression; - if (!text) { - // Property access (it.only) - text = node.expression.expression.text; - } - if (text === 'it' || text === 'test' || text === 'fit') { - const position = getNode(sourceFile, node, new ItBlock()); - position.name = node.arguments[0].text; - itBlocks.push(position); - } else { - let element = node.expression; - let expectText = ''; - while (element && !expectText) { - expectText = element.text; - element = element.expression; - } - if (expectText === 'expect') { - const position = getNode(sourceFile, node, new Expect()); - if ( - !expects.some( - e => - e.start.line === position.start.line && - e.start.column === position.start.column, - ) - ) { - expects.push(position); - } - } - } - } - ts.forEachChild(node, searchNodes); - } - - ts.forEachChild(sourceFile, searchNodes); - return { - expects, - itBlocks, - }; -} - -function getNode( - file: ts.SourceFile, - expression: ts.CallExpression, - node: T, -): T { - const start = file.getLineAndCharacterOfPosition(expression.getStart(file)); - // TypeScript parser is 0 based, so we have to increment by 1 to normalize - node.start = { - column: start.character + 1, - line: start.line + 1, - }; - const end = file.getLineAndCharacterOfPosition(expression.getEnd()); - node.end = { - column: end.character + 1, - line: end.line + 1, - }; - node.file = file.fileName; - return node; -} diff --git a/yarn.lock b/yarn.lock index eec0d052fed6..98c800b27e84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2794,7 +2794,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.0, babel-traverse@^6.14.1, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.26.0: +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -2819,7 +2819,7 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24. lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.14.1, babylon@^6.15.0, babylon@^6.17.4, babylon@^6.18.0: +babylon@^6.15.0, babylon@^6.17.4, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== @@ -13407,7 +13407,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@*, typescript@^2.2.2, typescript@^2.5.3: +typescript@*, typescript@^2.2.2: version "2.9.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== From 8c6dcc743d7f691734190a8aad8ca6f9dff79659 Mon Sep 17 00:00:00 2001 From: Aleksei Gusev Date: Sun, 21 Oct 2018 19:56:04 +0300 Subject: [PATCH 34/76] Use FORCE_COLOR=0 for all tests (#6585) --- CHANGELOG.md | 1 + e2e/__tests__/coverage_report.test.js | 126 +++++++++++++--------- e2e/__tests__/coverage_threshold.test.js | 20 +++- e2e/__tests__/find_related_files.test.js | 10 +- e2e/__tests__/module_name_mapper.test.js | 4 +- e2e/__tests__/transform.test.js | 18 ++-- e2e/__tests__/typescript_coverage.test.js | 4 +- e2e/runJest.js | 23 ++-- 8 files changed, 127 insertions(+), 79 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5024d178279c..ee703f2ae35a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -203,6 +203,7 @@ ### Chore & Maintenance - `[website]` Switch domain to https://jestjs.io ([#6549](https://github.com/facebook/jest/pull/6549)) +- `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) - `[tests]` Improve stability of `yarn test` on Windows ([#6534](https://github.com/facebook/jest/pull/6534)) - `[*]` Transpile object shorthand into Node 4 compatible syntax ([#6582](https://github.com/facebook/jest/pull/6582)) - `[*]` Update all legacy links to jestjs.io ([#6622](https://github.com/facebook/jest/pull/6622)) diff --git a/e2e/__tests__/coverage_report.test.js b/e2e/__tests__/coverage_report.test.js index 98cf792dac3e..66bbbd19d064 100644 --- a/e2e/__tests__/coverage_report.test.js +++ b/e2e/__tests__/coverage_report.test.js @@ -16,7 +16,9 @@ import runJest from '../runJest'; const DIR = path.resolve(__dirname, '../coverage-report'); test('outputs coverage report', () => { - const {stdout, status} = runJest(DIR, ['--no-cache', '--coverage']); + const {stdout, status} = runJest(DIR, ['--no-cache', '--coverage'], { + stripAnsi: true, + }); const coverageDir = path.resolve(__dirname, '../coverage-report/coverage'); // - the `setup.js` file is ignored and should not be in the coverage report. @@ -31,53 +33,71 @@ test('outputs coverage report', () => { }); test('collects coverage only from specified file', () => { - const {stdout} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--collectCoverageFrom', // overwrites the one in package.json - 'setup.js', - ]); + const {stdout} = runJest( + DIR, + [ + '--no-cache', + '--coverage', + '--collectCoverageFrom', // overwrites the one in package.json + 'setup.js', + ], + {stripAnsi: true}, + ); // Coverage report should only have `setup.js` coverage info expect(stdout).toMatchSnapshot(); }); test('collects coverage only from multiple specified files', () => { - const {stdout} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--collectCoverageFrom', - 'setup.js', - '--collectCoverageFrom', - 'OtherFile.js', - ]); + const {stdout} = runJest( + DIR, + [ + '--no-cache', + '--coverage', + '--collectCoverageFrom', + 'setup.js', + '--collectCoverageFrom', + 'OtherFile.js', + ], + {stripAnsi: true}, + ); expect(stdout).toMatchSnapshot(); }); test('collects coverage only from specified files avoiding dependencies', () => { - const {stdout} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--collectCoverageOnlyFrom', - 'Sum.js', - '--', - 'Sum.test.js', - ]); + const {stdout} = runJest( + DIR, + [ + '--no-cache', + '--coverage', + '--collectCoverageOnlyFrom', + 'Sum.js', + '--', + 'Sum.test.js', + ], + {stripAnsi: true}, + ); // Coverage report should only have `sum.js` coverage info expect(stdout).toMatchSnapshot(); }); test('json reporter printing with --coverage', () => { - const {stderr, status} = runJest('json-reporter', ['--coverage']); + const {stderr, status} = runJest('json-reporter', ['--coverage'], { + stripAnsi: true, + }); const {summary} = extractSummary(stderr); expect(status).toBe(1); expect(summary).toMatchSnapshot(); }); test('outputs coverage report as json', () => { - const {stdout, status} = runJest(DIR, ['--no-cache', '--coverage', '--json']); + const {stdout, status} = runJest( + DIR, + ['--no-cache', '--coverage', '--json'], + {stripAnsi: true}, + ); expect(status).toBe(0); try { @@ -90,35 +110,43 @@ test('outputs coverage report as json', () => { }); test('outputs coverage report when text is requested', () => { - const {stdout, status} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--coverageReporters=text', - '--coverageReporters=html', - ]); + const {stdout, status} = runJest( + DIR, + [ + '--no-cache', + '--coverage', + '--coverageReporters=text', + '--coverageReporters=html', + ], + {stripAnsi: true}, + ); expect(status).toBe(0); expect(stdout).toMatch(/Stmts | . Branch/); expect(stdout).toMatchSnapshot(); }); test('outputs coverage report when text-summary is requested', () => { - const {stdout, status} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--coverageReporters=text-summary', - ]); + const {stdout, status} = runJest( + DIR, + ['--no-cache', '--coverage', '--coverageReporters=text-summary'], + {stripAnsi: true}, + ); expect(status).toBe(0); expect(stdout).toMatch(/Coverage summary/); expect(stdout).toMatchSnapshot(); }); test('outputs coverage report when text and text-summary is requested', () => { - const {stdout, status} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--coverageReporters=text-summary', - '--coverageReporters=text', - ]); + const {stdout, status} = runJest( + DIR, + [ + '--no-cache', + '--coverage', + '--coverageReporters=text-summary', + '--coverageReporters=text', + ], + {stripAnsi: true}, + ); expect(status).toBe(0); expect(stdout).toMatch(/Stmts | . Branch/); expect(stdout).toMatch(/Coverage summary/); @@ -126,11 +154,11 @@ test('outputs coverage report when text and text-summary is requested', () => { }); test('does not output coverage report when html is requested', () => { - const {stdout, status} = runJest(DIR, [ - '--no-cache', - '--coverage', - '--coverageReporters=html', - ]); + const {stdout, status} = runJest( + DIR, + ['--no-cache', '--coverage', '--coverageReporters=html'], + {stripAnsi: true}, + ); expect(status).toBe(0); expect(stdout).toMatch(/^$/); expect(stdout).toMatchSnapshot(); @@ -150,10 +178,10 @@ test('collects coverage from duplicate files avoiding shared cache', () => { 'Identical.test.js', ]; // Run once to prime the cache - runJest(DIR, args); + runJest(DIR, args, {stripAnsi: true}); // Run for the second time - const {stdout, status} = runJest(DIR, args); + const {stdout, status} = runJest(DIR, args, {stripAnsi: true}); expect(stdout).toMatchSnapshot(); expect(status).toBe(0); }); diff --git a/e2e/__tests__/coverage_threshold.test.js b/e2e/__tests__/coverage_threshold.test.js index bc1256308b7b..be071087ca5b 100644 --- a/e2e/__tests__/coverage_threshold.test.js +++ b/e2e/__tests__/coverage_threshold.test.js @@ -44,7 +44,9 @@ test('exits with 1 if coverage threshold is not met', () => { 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false']); + const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { + stripAnsi: true, + }); const {rest, summary} = extractSummary(stderr); expect(status).toBe(1); @@ -79,7 +81,9 @@ test('exits with 1 if path threshold group is not found in coverage data', () => 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false']); + const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { + stripAnsi: true, + }); const {rest, summary} = extractSummary(stderr); expect(status).toBe(1); @@ -117,7 +121,9 @@ test('exits with 0 if global threshold group is not found in coverage data', () 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, status} = runJest(DIR, ['--coverage', '--ci=false']); + const {stdout, status} = runJest(DIR, ['--coverage', '--ci=false'], { + stripAnsi: true, + }); expect(status).toBe(0); expect(stdout).toMatchSnapshot('stdout'); @@ -157,7 +163,9 @@ test('excludes tests matched by path threshold groups from global group', () => 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false']); + const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { + stripAnsi: true, + }); const {rest, summary} = extractSummary(stderr); expect(status).toBe(1); @@ -198,7 +206,9 @@ test('file is matched by all path and glob threshold groups', () => { 'package.json': JSON.stringify(pkgJson, null, 2), }); - const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false']); + const {stdout, stderr, status} = runJest(DIR, ['--coverage', '--ci=false'], { + stripAnsi: true, + }); const {rest, summary} = extractSummary( /* This test also runs on windows and when the glob fails it outputs the system specific absolute path to the test file. */ diff --git a/e2e/__tests__/find_related_files.test.js b/e2e/__tests__/find_related_files.test.js index 10b82c3cc832..2024e1dd97e5 100644 --- a/e2e/__tests__/find_related_files.test.js +++ b/e2e/__tests__/find_related_files.test.js @@ -63,7 +63,7 @@ describe('--findRelatedTests flag', () => { let stdout; let stderr; - ({stdout, stderr} = runJest(DIR)); + ({stdout, stderr} = runJest(DIR, [], {stripAnsi: true})); let summary; let rest; ({summary, rest} = extractSummary(stderr)); @@ -79,7 +79,9 @@ describe('--findRelatedTests flag', () => { // both a.js and b.js should be in the coverage expect(stdout).toMatchSnapshot(); - ({stdout, stderr} = runJest(DIR, ['--findRelatedTests', 'a.js'])); + ({stdout, stderr} = runJest(DIR, ['--findRelatedTests', 'a.js'], { + stripAnsi: true, + })); ({summary, rest} = extractSummary(stderr)); @@ -110,7 +112,9 @@ describe('--findRelatedTests flag', () => { let stdout; let stderr; - ({stdout, stderr} = runJest(DIR, ['--findRelatedTests', 'a.js', 'b.js'])); + ({stdout, stderr} = runJest(DIR, ['--findRelatedTests', 'a.js', 'b.js'], { + stripAnsi: true, + })); const {summary, rest} = extractSummary(stderr); expect(summary).toMatchSnapshot(); diff --git a/e2e/__tests__/module_name_mapper.test.js b/e2e/__tests__/module_name_mapper.test.js index 283b19d1bce4..84119593751a 100644 --- a/e2e/__tests__/module_name_mapper.test.js +++ b/e2e/__tests__/module_name_mapper.test.js @@ -20,7 +20,9 @@ test('moduleNameMapper wrong configuration', () => { }); test('moduleNameMapper correct configuration', () => { - const {stderr, status} = runJest('module-name-mapper-correct-config'); + const {stderr, status} = runJest('module-name-mapper-correct-config', [], { + stripAnsi: true, + }); const {rest} = extractSummary(stderr); expect(status).toBe(0); diff --git a/e2e/__tests__/transform.test.js b/e2e/__tests__/transform.test.js index 78c4b52e0839..619af7c52cf6 100644 --- a/e2e/__tests__/transform.test.js +++ b/e2e/__tests__/transform.test.js @@ -33,7 +33,9 @@ describe('babel-jest', () => { }); it('instruments only specific files and collects coverage', () => { - const {stdout} = runJest(dir, ['--coverage', '--no-cache']); + const {stdout} = runJest(dir, ['--coverage', '--no-cache'], { + stripAnsi: true, + }); expect(stdout).toMatch('Covered.js'); expect(stdout).not.toMatch('NotCovered.js'); expect(stdout).not.toMatch('ExcludedFromCoverage.js'); @@ -63,11 +65,11 @@ describe('no babel-jest', () => { }); test('instrumentation with no babel-jest', () => { - const {stdout} = runJest(tempDir, [ - '--no-cache', - '--coverage', - '--no-watchman', - ]); + const {stdout} = runJest( + tempDir, + ['--no-cache', '--coverage', '--no-watchman'], + {stripAnsi: true}, + ); expect(stdout).toMatch('Covered.js'); expect(stdout).not.toMatch('ExcludedFromCoverage.js'); // coverage result should not change @@ -92,7 +94,9 @@ describe('custom transformer', () => { }); it('instruments files', () => { - const {stdout, status} = runJest(dir, ['--no-cache', '--coverage']); + const {stdout, status} = runJest(dir, ['--no-cache', '--coverage'], { + stripAnsi: true, + }); // coverage should be empty because there's no real instrumentation expect(stdout).toMatchSnapshot(); expect(status).toBe(0); diff --git a/e2e/__tests__/typescript_coverage.test.js b/e2e/__tests__/typescript_coverage.test.js index dcc0ed13f300..cae19b1fc555 100644 --- a/e2e/__tests__/typescript_coverage.test.js +++ b/e2e/__tests__/typescript_coverage.test.js @@ -14,6 +14,8 @@ import runJest from '../runJest'; it('instruments and collects coverage for typescript files', () => { const dir = path.resolve(__dirname, '../typescript-coverage'); run('yarn', dir); - const {stdout} = runJest(dir, ['--coverage', '--no-cache']); + const {stdout} = runJest(dir, ['--coverage', '--no-cache'], { + stripAnsi: true, + }); expect(stdout).toMatchSnapshot(); }); diff --git a/e2e/runJest.js b/e2e/runJest.js index 8c3c2277d02c..dca157aebbd1 100644 --- a/e2e/runJest.js +++ b/e2e/runJest.js @@ -12,6 +12,7 @@ import path from 'path'; import fs from 'fs'; import execa, {sync as spawnSync} from 'execa'; import {Writable} from 'readable-stream'; +const stripAnsi = require('strip-ansi'); import {normalizeIcons} from './Utils'; const JEST_PATH = path.resolve(__dirname, '../packages/jest-cli/bin/jest.js'); @@ -19,6 +20,7 @@ const JEST_PATH = path.resolve(__dirname, '../packages/jest-cli/bin/jest.js'); type RunJestOptions = { nodePath?: string, skipPkgJsonCheck?: boolean, // don't complain if can't find package.json + stripAnsi?: boolean, // remove colors from stdout and stderr }; // return the result of the spawned process: @@ -47,13 +49,8 @@ export default function runJest( ); } - const env = options.nodePath - ? Object.assign({}, process.env, { - FORCE_COLOR: 0, - NODE_PATH: options.nodePath, - }) - : process.env; - + const env = Object.assign({}, process.env, {FORCE_COLOR: 0}); + if (options.nodePath) env['NODE_PATH'] = options.nodePath; const result = spawnSync(JEST_PATH, args || [], { cwd: dir, env, @@ -64,7 +61,9 @@ export default function runJest( result.status = result.code; result.stdout = normalizeIcons(result.stdout); + if (options.stripAnsi) result.stdout = stripAnsi(result.stdout); result.stderr = normalizeIcons(result.stderr); + if (options.stripAnsi) result.stderr = stripAnsi(result.stderr); return result; } @@ -120,12 +119,8 @@ export const until = async function( ); } - const env = options.nodePath - ? Object.assign({}, process.env, { - FORCE_COLOR: 0, - NODE_PATH: options.nodePath, - }) - : process.env; + const env = Object.assign({}, process.env, {FORCE_COLOR: 0}); + if (options.nodePath) env['NODE_PATH'] = options.nodePath; const jestPromise = execa(JEST_PATH, args || [], { cwd: dir, @@ -153,7 +148,9 @@ export const until = async function( result.status = result.code; result.stdout = normalizeIcons(result.stdout); + if (options.stripAnsi) result.stdout = stripAnsi(result.stdout); result.stderr = normalizeIcons(result.stderr); + if (options.stripAnsi) result.stderr = stripAnsi(result.stderr); return result; }; From 3f30a46311b44bd860d3e00dd73bac702ad423d9 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 21 Oct 2018 14:35:25 -0400 Subject: [PATCH 35/76] Setup before tests but after framework loads (#7119) --- CHANGELOG.md | 1 + TestUtils.js | 2 +- docs/Configuration.md | 16 +++-- .../__snapshots__/show_config.test.js.snap | 2 +- .../setup_files_after_env_config.test.js | 70 +++++++++++++++++++ ...t_framework_script_file_cli_config.test.js | 40 ----------- .../__tests__/runner_patch.test.js | 0 .../__tests__/test1.test.js | 0 .../__tests__/test2.test.js | 0 .../setup1.js | 0 e2e/setup-files-after-env-config/setup2.js | 8 +++ .../setup_hooks_into_runner.js | 0 .../package.json | 5 -- jest.config.js | 2 +- .../legacy_code_todo_rewrite/jest_adapter.js | 4 +- packages/jest-cli/src/cli/args.js | 10 +-- .../__tests__/__snapshots__/init.test.js.snap | 4 +- packages/jest-config/src/Defaults.js | 2 +- packages/jest-config/src/Deprecated.js | 10 +++ packages/jest-config/src/Descriptions.js | 4 +- packages/jest-config/src/ValidConfig.js | 2 +- .../__snapshots__/normalize.test.js.snap | 23 ++++++ .../src/__tests__/normalize.test.js | 58 +++++++++++++-- packages/jest-config/src/index.js | 2 +- packages/jest-config/src/normalize.js | 24 ++++++- packages/jest-jasmine2/src/index.js | 4 +- .../src/__tests__/fixtures/jest_config.js | 2 +- types/Argv.js | 2 +- types/Config.js | 5 +- 29 files changed, 217 insertions(+), 85 deletions(-) create mode 100644 e2e/__tests__/setup_files_after_env_config.test.js delete mode 100644 e2e/__tests__/setup_test_framework_script_file_cli_config.test.js rename e2e/{setup-test-framework-script-file-cli-config => setup-files-after-env-config}/__tests__/runner_patch.test.js (100%) rename e2e/{setup-test-framework-script-file-cli-config => setup-files-after-env-config}/__tests__/test1.test.js (100%) rename e2e/{setup-test-framework-script-file-cli-config => setup-files-after-env-config}/__tests__/test2.test.js (100%) rename e2e/{setup-test-framework-script-file-cli-config => setup-files-after-env-config}/setup1.js (100%) create mode 100644 e2e/setup-files-after-env-config/setup2.js rename e2e/{setup-test-framework-script-file-cli-config => setup-files-after-env-config}/setup_hooks_into_runner.js (100%) delete mode 100644 e2e/setup-test-framework-script-file-cli-config/package.json diff --git a/CHANGELOG.md b/CHANGELOG.md index ee703f2ae35a..17b42ee64f6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[jest-config]` [**BREAKING**] Deprecate `setupTestFrameworkScriptFile` in favor of new `setupFilesAfterEnv` ([#7119](https://github.com/facebook/jest/pull/7119)) - `[jest-jasmine2/jest-circus/jest-cli]` Add test.todo ([#6996](https://github.com/facebook/jest/pull/6996)) - `[pretty-format]` Option to not escape strings in diff messages ([#5661](https://github.com/facebook/jest/pull/5661)) - `[jest-haste-map]` Add `getFileIterator` to `HasteFS` for faster file iteration ([#7010](https://github.com/facebook/jest/pull/7010)). diff --git a/TestUtils.js b/TestUtils.js index 8ec57581b94f..a65743e66145 100644 --- a/TestUtils.js +++ b/TestUtils.js @@ -99,7 +99,7 @@ const DEFAULT_PROJECT_CONFIG: ProjectConfig = { roots: [], runner: 'jest-runner', setupFiles: [], - setupTestFrameworkScriptFile: null, + setupFilesAfterEnv: [], skipFilter: false, skipNodeResolution: false, snapshotResolver: null, diff --git a/docs/Configuration.md b/docs/Configuration.md index d0b41c1dc020..55281c790207 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -628,19 +628,21 @@ If you need to restrict your test-runner to only run in serial rather then being Default: `[]` -The paths to modules that run some code to configure or set up the testing environment. Each setupFile will be run once per test file. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. +A list of paths to modules that run some code to configure or set up the testing environment. Each setupFile will be run once per test file. Since every test runs in its own environment, these scripts will be executed in the testing environment immediately before executing the test code itself. -It's also worth noting that `setupFiles` will execute _before_ [`setupTestFrameworkScriptFile`](#setuptestframeworkscriptfile-string). +It's also worth noting that `setupFiles` will execute _before_ [`setupFilesAfterEnv`](#setupFilesAfterEnv-array). -### `setupTestFrameworkScriptFile` [string] +### `setupFilesAfterEnv` [array] -Default: `undefined` +Default: `[]` + +A list of paths to modules that run some code to configure or set up the testing framework before each test. Since [`setupFiles`](#setupfiles-array) executes before the test framework is installed in the environment, this script file presents you the opportunity of running some code immediately after the test framework has been installed in the environment. -The path to a module that runs some code to configure or set up the testing framework before each test. Since [`setupFiles`](#setupfiles-array) executes before the test framework is installed in the environment, this script file presents you the opportunity of running some code immediately after the test framework has been installed in the environment. +If you want a path to be [relative to the root directory of your project](#rootdir-string), please include `` inside a path's string, like `"/a-configs-folder"`. -If you want this path to be [relative to the root directory of your project](#rootdir-string), please include `` inside the path string, like `"/a-configs-folder"`. +For example, Jest ships with several plug-ins to `jasmine` that work by monkey-patching the jasmine API. If you wanted to add even more jasmine plugins to the mix (or if you wanted some custom, project-wide matchers for example), you could do so in these modules. -For example, Jest ships with several plug-ins to `jasmine` that work by monkey-patching the jasmine API. If you wanted to add even more jasmine plugins to the mix (or if you wanted some custom, project-wide matchers for example), you could do so in this module. +_Note: `setupTestFrameworkScriptFile` is deprecated in favor of `setupFilesAfterEnv`._ ### `snapshotResolver` [string] diff --git a/e2e/__tests__/__snapshots__/show_config.test.js.snap b/e2e/__tests__/__snapshots__/show_config.test.js.snap index 2e4b59ee8531..f3982dde87f3 100644 --- a/e2e/__tests__/__snapshots__/show_config.test.js.snap +++ b/e2e/__tests__/__snapshots__/show_config.test.js.snap @@ -45,7 +45,7 @@ exports[`--showConfig outputs config info and exits 1`] = ` ], \\"runner\\": \\"jest-runner\\", \\"setupFiles\\": [], - \\"setupTestFrameworkScriptFile\\": null, + \\"setupFilesAfterEnv\\": [], \\"skipFilter\\": false, \\"snapshotSerializers\\": [], \\"testEnvironment\\": \\"jest-environment-jsdom\\", diff --git a/e2e/__tests__/setup_files_after_env_config.test.js b/e2e/__tests__/setup_files_after_env_config.test.js new file mode 100644 index 000000000000..92066827459c --- /dev/null +++ b/e2e/__tests__/setup_files_after_env_config.test.js @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ +'use strict'; + +import fs from 'fs'; +import path from 'path'; +import {json as runWithJson} from '../runJest'; +import {writeFiles} from '../Utils'; + +const DIR = path.resolve(__dirname, '../setup-files-after-env-config'); + +const pkgJsonOutputFilePath = path.join( + process.cwd(), + 'e2e/setup-files-after-env-config/package.json', +); + +afterAll(() => { + fs.unlinkSync(pkgJsonOutputFilePath); +}); + +describe('setupFilesAfterEnv', () => { + it('requires multiple setup files before each file in the suite', () => { + const pkgJson = { + jest: { + setupFilesAfterEnv: ['./setup1.js', './setup2.js'], + }, + }; + + writeFiles(DIR, { + 'package.json': JSON.stringify(pkgJson, null, 2), + }); + + const result = runWithJson('setup-files-after-env-config', [ + 'test1.test.js', + 'test2.test.js', + ]); + + expect(result.json.numTotalTests).toBe(2); + expect(result.json.numPassedTests).toBe(2); + expect(result.json.testResults.length).toBe(2); + expect(result.status).toBe(0); + }); + + it('requires setup files *after* the test runners are required', () => { + const pkgJson = { + jest: { + setupFilesAfterEnv: ['./setup_hooks_into_runner.js'], + }, + }; + + writeFiles(DIR, { + 'package.json': JSON.stringify(pkgJson, null, 2), + }); + + const result = runWithJson('setup-files-after-env-config', [ + 'runner_patch.test.js', + ]); + + expect(result.json.numTotalTests).toBe(1); + expect(result.json.numPassedTests).toBe(1); + expect(result.json.testResults.length).toBe(1); + expect(result.status).toBe(0); + }); +}); diff --git a/e2e/__tests__/setup_test_framework_script_file_cli_config.test.js b/e2e/__tests__/setup_test_framework_script_file_cli_config.test.js deleted file mode 100644 index 4dcd170a08e2..000000000000 --- a/e2e/__tests__/setup_test_framework_script_file_cli_config.test.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - */ -'use strict'; - -import {json as runWithJson} from '../runJest'; - -describe('--setupTestFrameworkScriptFile setup.js', () => { - it('requires a setup file before each file in the suite', () => { - const result = runWithJson('setup-test-framework-script-file-cli-config', [ - '--setupTestFrameworkScriptFile', - './setup1.js', - 'test1.test.js', - 'test2.test.js', - ]); - - expect(result.status).toBe(0); - expect(result.json.numTotalTests).toBe(2); - expect(result.json.numPassedTests).toBe(2); - expect(result.json.testResults.length).toBe(2); - }); - - it('requires setup files *after* the test runners are required', () => { - const result = runWithJson('setup-test-framework-script-file-cli-config', [ - '--setupTestFrameworkScriptFile', - './setup_hooks_into_runner.js', - 'runner_patch.test.js', - ]); - - expect(result.json.numTotalTests).toBe(1); - expect(result.json.numPassedTests).toBe(1); - expect(result.json.testResults.length).toBe(1); - expect(result.status).toBe(0); - }); -}); diff --git a/e2e/setup-test-framework-script-file-cli-config/__tests__/runner_patch.test.js b/e2e/setup-files-after-env-config/__tests__/runner_patch.test.js similarity index 100% rename from e2e/setup-test-framework-script-file-cli-config/__tests__/runner_patch.test.js rename to e2e/setup-files-after-env-config/__tests__/runner_patch.test.js diff --git a/e2e/setup-test-framework-script-file-cli-config/__tests__/test1.test.js b/e2e/setup-files-after-env-config/__tests__/test1.test.js similarity index 100% rename from e2e/setup-test-framework-script-file-cli-config/__tests__/test1.test.js rename to e2e/setup-files-after-env-config/__tests__/test1.test.js diff --git a/e2e/setup-test-framework-script-file-cli-config/__tests__/test2.test.js b/e2e/setup-files-after-env-config/__tests__/test2.test.js similarity index 100% rename from e2e/setup-test-framework-script-file-cli-config/__tests__/test2.test.js rename to e2e/setup-files-after-env-config/__tests__/test2.test.js diff --git a/e2e/setup-test-framework-script-file-cli-config/setup1.js b/e2e/setup-files-after-env-config/setup1.js similarity index 100% rename from e2e/setup-test-framework-script-file-cli-config/setup1.js rename to e2e/setup-files-after-env-config/setup1.js diff --git a/e2e/setup-files-after-env-config/setup2.js b/e2e/setup-files-after-env-config/setup2.js new file mode 100644 index 000000000000..c03a0bc8ad12 --- /dev/null +++ b/e2e/setup-files-after-env-config/setup2.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +global.definedInSetupFile = true; diff --git a/e2e/setup-test-framework-script-file-cli-config/setup_hooks_into_runner.js b/e2e/setup-files-after-env-config/setup_hooks_into_runner.js similarity index 100% rename from e2e/setup-test-framework-script-file-cli-config/setup_hooks_into_runner.js rename to e2e/setup-files-after-env-config/setup_hooks_into_runner.js diff --git a/e2e/setup-test-framework-script-file-cli-config/package.json b/e2e/setup-test-framework-script-file-cli-config/package.json deleted file mode 100644 index 148788b25446..000000000000 --- a/e2e/setup-test-framework-script-file-cli-config/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "jest": { - "testEnvironment": "node" - } -} diff --git a/jest.config.js b/jest.config.js index 4385ccffd943..8873ad993dd2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -21,7 +21,7 @@ module.exports = { 'e2e/runtime-internal-module-registry/__mocks__', ], projects: ['', '/examples/*/'], - setupTestFrameworkScriptFile: '/testSetupFile.js', + setupFilesAfterEnv: ['/testSetupFile.js'], snapshotSerializers: [ '/packages/pretty-format/build/plugins/convert_ansi.js', ], diff --git a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js b/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js index f40fa28c7ef2..bf2d87b9f4bd 100644 --- a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js +++ b/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js @@ -73,9 +73,7 @@ const jestAdapter = async ( } }); - if (config.setupTestFrameworkScriptFile) { - runtime.requireModule(config.setupTestFrameworkScriptFile); - } + config.setupFilesAfterEnv.forEach(path => runtime.requireModule(path)); runtime.requireModule(testPath); const results = await runAndTransformResultsToJestFormat({ diff --git a/packages/jest-cli/src/cli/args.js b/packages/jest-cli/src/cli/args.js index b374adeba2ef..99e92b21f959 100644 --- a/packages/jest-cli/src/cli/args.js +++ b/packages/jest-cli/src/cli/args.js @@ -501,15 +501,15 @@ export const options = { }, setupFiles: { description: - 'The paths to modules that run some code to configure or ' + + 'A list of paths to modules that run some code to configure or ' + 'set up the testing environment before each test. ', type: 'array', }, - setupTestFrameworkScriptFile: { + setupFilesAfterEnv: { description: - 'The path to a module that runs some code to configure or ' + - 'set up the testing framework before each test.', - type: 'string', + 'A list of paths to modules that run some code to configure or ' + + 'set up the testing framework before each test ', + type: 'array', }, showConfig: { default: undefined, diff --git a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap index 9ec33fc8447b..8f49360f6ebc 100644 --- a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap +++ b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap @@ -138,8 +138,8 @@ module.exports = { // The paths to modules that run some code to configure or set up the testing environment before each test // setupFiles: [], - // The path to a module that runs some code to configure or set up the testing framework before each test - // setupTestFrameworkScriptFile: null, + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], // A list of paths to snapshot serializer modules Jest should use for snapshot testing // snapshotSerializers: [], diff --git a/packages/jest-config/src/Defaults.js b/packages/jest-config/src/Defaults.js index 1b549e1059e1..b6aafa6e13ad 100644 --- a/packages/jest-config/src/Defaults.js +++ b/packages/jest-config/src/Defaults.js @@ -61,7 +61,7 @@ export default ({ runTestsByPath: false, runner: 'jest-runner', setupFiles: [], - setupTestFrameworkScriptFile: null, + setupFilesAfterEnv: [], skipFilter: false, snapshotSerializers: [], testEnvironment: 'jest-environment-jsdom', diff --git a/packages/jest-config/src/Deprecated.js b/packages/jest-config/src/Deprecated.js index 907cb2705924..1b21359bba8e 100644 --- a/packages/jest-config/src/Deprecated.js +++ b/packages/jest-config/src/Deprecated.js @@ -53,6 +53,16 @@ export default { Please update your configuration.`, + setupTestFrameworkScriptFile: (options: { + setupTestFrameworkScriptFile: Array, + }) => ` Option ${chalk.bold( + '"setupTestFrameworkScriptFile"', + )} was replaced by configuration ${chalk.bold( + '"setupFilesAfterEnv"', + )}, which supports multiple paths. + + Please update your configuration.`, + testPathDirs: (options: { testPathDirs: Array, }) => ` Option ${chalk.bold('"testPathDirs"')} was replaced by ${chalk.bold( diff --git a/packages/jest-config/src/Descriptions.js b/packages/jest-config/src/Descriptions.js index 6989be5e1dad..48c3b2d321ad 100644 --- a/packages/jest-config/src/Descriptions.js +++ b/packages/jest-config/src/Descriptions.js @@ -61,8 +61,8 @@ export default ({ "Allows you to use a custom runner instead of Jest's default test runner", setupFiles: 'The paths to modules that run some code to configure or set up the testing environment before each test', - setupTestFrameworkScriptFile: - 'The path to a module that runs some code to configure or set up the testing framework before each test', + setupFilesAfterEnv: + 'A list of paths to modules that run some code to configure or set up the testing framework before each test', snapshotSerializers: 'A list of paths to snapshot serializer modules Jest should use for snapshot testing', testEnvironment: 'The test environment that will be used for testing', diff --git a/packages/jest-config/src/ValidConfig.js b/packages/jest-config/src/ValidConfig.js index 8b675b90b7c8..608dc770ab76 100644 --- a/packages/jest-config/src/ValidConfig.js +++ b/packages/jest-config/src/ValidConfig.js @@ -88,7 +88,7 @@ export default ({ runTestsByPath: false, runner: 'jest-runner', setupFiles: ['/setup.js'], - setupTestFrameworkScriptFile: '/testSetupFile.js', + setupFilesAfterEnv: ['/testSetupFile.js'], silent: true, skipFilter: false, skipNodeResolution: false, diff --git a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap index ef754afc331b..9eb36c229fa6 100644 --- a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap +++ b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap @@ -47,6 +47,29 @@ exports[`rootDir throws if the options is missing a rootDir property 1`] = ` " `; +exports[`setupTestFrameworkScriptFile logs a deprecation warning when \`setupTestFrameworkScriptFile\` is used 1`] = ` +" Deprecation Warning: + + Option \\"setupTestFrameworkScriptFile\\" was replaced by configuration \\"setupFilesAfterEnv\\", which supports multiple paths. + + Please update your configuration. + + Configuration Documentation: + https://jestjs.io/docs/configuration.html +" +`; + +exports[`setupTestFrameworkScriptFile logs an error when \`setupTestFrameworkScriptFile\` and \`setupFilesAfterEnv\` are used 1`] = ` +"Validation Error: + + Options: setupTestFrameworkScriptFile and setupFilesAfterEnv cannot be used together. + Please change your configuration to only use setupFilesAfterEnv. + + Configuration Documentation: + https://jestjs.io/docs/configuration.html +" +`; + exports[`testEnvironment throws on invalid environment names 1`] = ` "Validation Error: diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index d8ed943adcb7..030ef345e050 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -330,7 +330,7 @@ describe('haste', () => { }); }); -describe('setupTestFrameworkScriptFile', () => { +describe('setupFilesAfterEnv', () => { let Resolver; beforeEach(() => { Resolver = require('jest-resolve'); @@ -344,36 +344,80 @@ describe('setupTestFrameworkScriptFile', () => { const {options} = normalize( { rootDir: '/root/path/foo', - setupTestFrameworkScriptFile: 'bar/baz', + setupFilesAfterEnv: ['bar/baz'], }, {}, ); - expect(options.setupTestFrameworkScriptFile).toEqual(expectedPathFooBar); + expect(options.setupFilesAfterEnv).toEqual([expectedPathFooBar]); }); it('does not change absolute paths', () => { const {options} = normalize( { rootDir: '/root/path/foo', - setupTestFrameworkScriptFile: '/an/abs/path', + setupFilesAfterEnv: ['/an/abs/path'], }, {}, ); - expect(options.setupTestFrameworkScriptFile).toEqual(expectedPathAbs); + expect(options.setupFilesAfterEnv).toEqual([expectedPathAbs]); }); it('substitutes tokens', () => { const {options} = normalize( { rootDir: '/root/path/foo', - setupTestFrameworkScriptFile: '/bar/baz', + setupFilesAfterEnv: ['/bar/baz'], }, {}, ); - expect(options.setupTestFrameworkScriptFile).toEqual(expectedPathFooBar); + expect(options.setupFilesAfterEnv).toEqual([expectedPathFooBar]); + }); +}); + +describe('setupTestFrameworkScriptFile', () => { + let Resolver; + let consoleWarn; + + beforeEach(() => { + console.warn = jest.fn(); + consoleWarn = console.warn; + Resolver = require('jest-resolve'); + Resolver.findNodeModule = jest.fn( + name => + name.startsWith('/') ? name : '/root/path/foo' + path.sep + name, + ); + }); + + afterEach(() => { + console.warn = consoleWarn; + }); + + it('logs a deprecation warning when `setupTestFrameworkScriptFile` is used', () => { + normalize( + { + rootDir: '/root/path/foo', + setupTestFrameworkScriptFile: 'bar/baz', + }, + {}, + ); + + expect(consoleWarn.mock.calls[0][0]).toMatchSnapshot(); + }); + + it('logs an error when `setupTestFrameworkScriptFile` and `setupFilesAfterEnv` are used', () => { + expect(() => + normalize( + { + rootDir: '/root/path/foo', + setupFilesAfterEnv: ['bar/baz'], + setupTestFrameworkScriptFile: 'bar/baz', + }, + {}, + ), + ).toThrowErrorMatchingSnapshot(); }); }); diff --git a/packages/jest-config/src/index.js b/packages/jest-config/src/index.js index 5ac59c067a8d..ec6a856c75f0 100644 --- a/packages/jest-config/src/index.js +++ b/packages/jest-config/src/index.js @@ -184,7 +184,7 @@ const groupOptions = ( roots: options.roots, runner: options.runner, setupFiles: options.setupFiles, - setupTestFrameworkScriptFile: options.setupTestFrameworkScriptFile, + setupFilesAfterEnv: options.setupFilesAfterEnv, skipFilter: options.skipFilter, skipNodeResolution: options.skipNodeResolution, snapshotResolver: options.snapshotResolver, diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 0bbd7af6b80b..97e568153cc3 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -367,6 +367,28 @@ export default function normalize(options: InitialOptions, argv: Argv) { ), ); + if (!options.setupFilesAfterEnv) { + options.setupFilesAfterEnv = []; + } + + if ( + options.setupTestFrameworkScriptFile && + options.setupFilesAfterEnv.length > 0 + ) { + throw createConfigError( + ` Options: ${chalk.bold( + 'setupTestFrameworkScriptFile', + )} and ${chalk.bold('setupFilesAfterEnv')} cannot be used together. + Please change your configuration to only use ${chalk.bold( + 'setupFilesAfterEnv', + )}.`, + ); + } + + if (options.setupTestFrameworkScriptFile) { + options.setupFilesAfterEnv.push(options.setupTestFrameworkScriptFile); + } + if (options.preset) { options = setupPreset(options, options.preset); } @@ -415,6 +437,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { value = normalizeCollectCoverageOnlyFrom(options, key); break; case 'setupFiles': + case 'setupFilesAfterEnv': case 'snapshotSerializers': value = options[key] && @@ -453,7 +476,6 @@ export default function normalize(options: InitialOptions, argv: Argv) { case 'globalTeardown': case 'moduleLoader': case 'runner': - case 'setupTestFrameworkScriptFile': case 'snapshotResolver': case 'testResultsProcessor': case 'testRunner': diff --git a/packages/jest-jasmine2/src/index.js b/packages/jest-jasmine2/src/index.js index a21f98a376cb..b6fef61428b1 100644 --- a/packages/jest-jasmine2/src/index.js +++ b/packages/jest-jasmine2/src/index.js @@ -147,9 +147,7 @@ async function jasmine2( testPath, }); - if (config.setupTestFrameworkScriptFile) { - runtime.requireModule(config.setupTestFrameworkScriptFile); - } + config.setupFilesAfterEnv.forEach(path => runtime.requireModule(path)); if (globalConfig.enabledTestsMap) { env.specFilter = spec => { diff --git a/packages/jest-validate/src/__tests__/fixtures/jest_config.js b/packages/jest-validate/src/__tests__/fixtures/jest_config.js index f7ac1e2a1bc8..31a04cedb0d2 100644 --- a/packages/jest-validate/src/__tests__/fixtures/jest_config.js +++ b/packages/jest-validate/src/__tests__/fixtures/jest_config.js @@ -107,7 +107,7 @@ const validConfig = { rootDir: '/', roots: [''], setupFiles: ['/setup.js'], - setupTestFrameworkScriptFile: '/testSetupFile.js', + setupFilesAfterEnv: ['/testSetupFile.js'], silent: true, snapshotSerializers: ['my-serializer-module'], testEnvironment: 'jest-environment-jsdom', diff --git a/types/Argv.js b/types/Argv.js index cc552d883996..966c82327dbd 100644 --- a/types/Argv.js +++ b/types/Argv.js @@ -71,7 +71,7 @@ export type Argv = {| roots: Array, runInBand: boolean, setupFiles: Array, - setupTestFrameworkScriptFile: string, + setupFilesAfterEnv: Array, showConfig: boolean, silent: boolean, snapshotSerializers: Array, diff --git a/types/Config.js b/types/Config.js index 569c49b55d61..7de867ffcbf9 100644 --- a/types/Config.js +++ b/types/Config.js @@ -65,7 +65,7 @@ export type DefaultOptions = {| runner: string, runTestsByPath: boolean, setupFiles: Array, - setupTestFrameworkScriptFile: ?Path, + setupFilesAfterEnv: Array, skipFilter: boolean, snapshotSerializers: Array, testEnvironment: string, @@ -151,6 +151,7 @@ export type InitialOptions = { scriptPreprocessor?: string, setupFiles?: Array, setupTestFrameworkScriptFile?: Path, + setupFilesAfterEnv?: Array, silent?: boolean, skipFilter?: boolean, skipNodeResolution?: boolean, @@ -272,7 +273,7 @@ export type ProjectConfig = {| roots: Array, runner: string, setupFiles: Array, - setupTestFrameworkScriptFile: ?Path, + setupFilesAfterEnv: Array, skipFilter: boolean, skipNodeResolution: boolean, snapshotResolver: ?Path, From cb52ef4d3684d37e063c89327671d60abf6066a8 Mon Sep 17 00:00:00 2001 From: Aleksei Gusev Date: Sun, 21 Oct 2018 21:39:17 +0300 Subject: [PATCH 36/76] Move FORCE_COLOR fix for tests entry to master (#7234) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 17b42ee64f6b..525d9df9dc36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ - `[jest-circus]` Add readme.md ([#7198](https://github.com/facebook/jest/pull/7198)) - `[jest-editor-support]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) - `[jest-test-typescript-parser]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) +- `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) ### Performance @@ -204,7 +205,6 @@ ### Chore & Maintenance - `[website]` Switch domain to https://jestjs.io ([#6549](https://github.com/facebook/jest/pull/6549)) -- `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) - `[tests]` Improve stability of `yarn test` on Windows ([#6534](https://github.com/facebook/jest/pull/6534)) - `[*]` Transpile object shorthand into Node 4 compatible syntax ([#6582](https://github.com/facebook/jest/pull/6582)) - `[*]` Update all legacy links to jestjs.io ([#6622](https://github.com/facebook/jest/pull/6622)) From 1615a2d09c061c5d6cbda394671a3f642ce1e1dd Mon Sep 17 00:00:00 2001 From: Rafael de Oleza Date: Mon, 22 Oct 2018 10:42:46 +0200 Subject: [PATCH 37/76] Do not return all files when checking changed files from last commit (#7228) --- CHANGELOG.md | 1 + packages/jest-changed-files/src/hg.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 525d9df9dc36..2a083fb8de8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ - `[jest-runtime]` Fix missing coverage when using negative glob pattern in `testMatch` ([#7170](https://github.com/facebook/jest/pull/7170)) - `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) - `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) +- `[jest-changed-files]` Return correctly the changed files when using `lastCommit=true` on Mercurial repositories ([#7228](https://github.com/facebook/jest/pull/7228)) ### Chore & Maintenance diff --git a/packages/jest-changed-files/src/hg.js b/packages/jest-changed-files/src/hg.js index f8429a605d90..7dacb454da10 100644 --- a/packages/jest-changed-files/src/hg.js +++ b/packages/jest-changed-files/src/hg.js @@ -41,7 +41,7 @@ const adapter: SCMAdapter = { } else if (options && options.changedSince) { args.push('--rev', `ancestor(., ${options.changedSince})`); } else if (options && options.lastCommit === true) { - args.push('-A'); + args.push('--change', '.'); } args.push(...includePaths); From 4954f46708415174c48a58f296a605fbe1244a31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Nison?= Date: Mon, 22 Oct 2018 15:49:42 +0100 Subject: [PATCH 38/76] Implements a mapper option (#6940) * Implements a mapper option * Updates changelog * Fixes linting * Makes the mapper optional typewise * Fixes tests * Adds the plumbing to set the value from the options * Updates the error message * Linting * Fixes things --- CHANGELOG.md | 1 + .../src/crawlers/__tests__/watchman.test.js | 49 +++++++++++++++++++ packages/jest-haste-map/src/crawlers/node.js | 4 ++ .../jest-haste-map/src/crawlers/watchman.js | 32 ++++++++---- packages/jest-haste-map/src/index.js | 4 ++ packages/jest-haste-map/src/types.js | 2 + 6 files changed, 83 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a083fb8de8a..a3b503822cdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,6 +90,7 @@ - `[jest-cli]` Add `changedSince` to allowed watch mode configs ([#6955](https://github.com/facebook/jest/pull/6955)) - `[babel-jest]` Add support for `babel.config.js` added in Babel 7.0.0 ([#6911](https://github.com/facebook/jest/pull/6911)) +- `[jest-resolve]` Add support for an experimental `mapper` option (Watchman crawler only) that adds virtual files to the Haste map ([#6940](https://github.com/facebook/jest/pull/6940)) ### Fixes diff --git a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js index 0276a8faa577..7f80e7dadf7e 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js @@ -44,6 +44,8 @@ const STRAWBERRY_RELATIVE = path.join(FRUITS_RELATIVE, 'strawberry.js'); const KIWI_RELATIVE = path.join(FRUITS_RELATIVE, 'kiwi.js'); const TOMATO_RELATIVE = path.join(FRUITS_RELATIVE, 'tomato.js'); const MELON_RELATIVE = path.join(VEGETABLES_RELATIVE, 'melon.json'); +const DURIAN_RELATIVE = path.join(VEGETABLES_RELATIVE, 'durian.zip'); + const WATCH_PROJECT_MOCK = { [FRUITS]: { relative_path: 'fruits', @@ -164,6 +166,53 @@ describe('watchman watch', () => { expect(client.end).toBeCalled(); })); + test('applies the mapper when needed', () => { + mockResponse = { + 'list-capabilities': { + [undefined]: { + capabilities: ['field-content.sha1hex'], + }, + }, + query: { + [ROOT_MOCK]: { + clock: 'c:fake-clock:1', + files: [ + { + exists: true, + mtime_ms: {toNumber: () => 33}, + name: 'vegetables/durian.zip', + }, + ], + is_fresh_instance: true, + version: '4.5.0', + }, + }, + 'watch-project': WATCH_PROJECT_MOCK, + }; + + return watchmanCrawl({ + data: { + clocks: new Map(), + files: new Map(), + }, + extensions: ['js', 'json', 'zip'], + ignore: pearMatcher, + mapper: n => + n.endsWith('.zip') + ? [path.join(n, 'foo.1.js'), path.join(n, 'foo.2.js')] + : null, + rootDir: ROOT_MOCK, + roots: ROOTS, + }).then(data => { + expect(data.files).toEqual( + createMap({ + [path.join(DURIAN_RELATIVE, 'foo.1.js')]: ['', 33, 0, [], null], + [path.join(DURIAN_RELATIVE, 'foo.2.js')]: ['', 33, 0, [], null], + }), + ); + }); + }); + test('updates the file object when the clock is given', () => { mockResponse = { 'list-capabilities': { diff --git a/packages/jest-haste-map/src/crawlers/node.js b/packages/jest-haste-map/src/crawlers/node.js index 8d8557457ec7..53f4194df54a 100644 --- a/packages/jest-haste-map/src/crawlers/node.js +++ b/packages/jest-haste-map/src/crawlers/node.js @@ -128,6 +128,10 @@ function findNative( module.exports = function nodeCrawl( options: CrawlerOptions, ): Promise { + if (options.mapper) { + throw new Error(`Option 'mapper' isn't supported by the Node crawler`); + } + const { data, extensions, diff --git a/packages/jest-haste-map/src/crawlers/watchman.js b/packages/jest-haste-map/src/crawlers/watchman.js index 027017afed3e..d8fb38c5cf2f 100644 --- a/packages/jest-haste-map/src/crawlers/watchman.js +++ b/packages/jest-haste-map/src/crawlers/watchman.js @@ -175,29 +175,43 @@ module.exports = async function watchmanCrawl( typeof fileData.mtime_ms === 'number' ? fileData.mtime_ms : fileData.mtime_ms.toNumber(); + let sha1hex = fileData['content.sha1hex']; if (typeof sha1hex !== 'string' || sha1hex.length !== 40) { sha1hex = null; } const existingFileData = data.files.get(relativeFilePath); + let nextData; + if (existingFileData && existingFileData[H.MTIME] === mtime) { - files.set(relativeFilePath, existingFileData); + nextData = existingFileData; } else if ( existingFileData && sha1hex && existingFileData[H.SHA1] === sha1hex ) { - files.set(relativeFilePath, [ - existingFileData[0], - mtime, - existingFileData[2], - existingFileData[3], - existingFileData[4], - ]); + nextData = [...existingFileData]; + nextData[1] = mtime; } else { // See ../constants.js - files.set(relativeFilePath, ['', mtime, 0, [], sha1hex]); + nextData = ['', mtime, 0, [], sha1hex]; + } + + const mappings = options.mapper ? options.mapper(filePath) : null; + + if (mappings) { + for (const absoluteVirtualFilePath of mappings) { + if (!ignore(absoluteVirtualFilePath)) { + const relativeVirtualFilePath = fastPath.relative( + rootDir, + absoluteVirtualFilePath, + ); + files.set(relativeVirtualFilePath, nextData); + } + } + } else { + files.set(relativeFilePath, nextData); } } } diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 31ac05fd4e49..12b56a3c4505 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -33,6 +33,7 @@ import * as fastPath from './lib/fast_path'; import Worker from 'jest-worker'; import type {Console} from 'console'; +import type {Mapper} from './types'; import type {Path} from 'types/Config'; import type { HasteMap as HasteMapObject, @@ -55,6 +56,7 @@ type Options = { forceNodeFilesystemAPI?: boolean, hasteImplModulePath?: string, ignorePattern?: ?HasteRegExp, + mapper?: ?Mapper, maxWorkers: number, mocksPattern?: string, name: string, @@ -77,6 +79,7 @@ type InternalOptions = { forceNodeFilesystemAPI: boolean, hasteImplModulePath?: string, ignorePattern: ?HasteRegExp, + mapper?: ?Mapper, maxWorkers: number, mocksPattern: ?RegExp, name: string, @@ -671,6 +674,7 @@ class HasteMap extends EventEmitter { extensions: options.extensions, forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, ignore, + mapper: options.mapper, rootDir: options.rootDir, roots: options.roots, }).catch(e => { diff --git a/packages/jest-haste-map/src/types.js b/packages/jest-haste-map/src/types.js index 94422a08d920..caba081b9a9a 100644 --- a/packages/jest-haste-map/src/types.js +++ b/packages/jest-haste-map/src/types.js @@ -10,6 +10,7 @@ import type {InternalHasteMap, ModuleMetaData} from 'types/HasteMap'; export type IgnoreMatcher = (item: string) => boolean; +export type Mapper = (item: string) => ?Array; export type WorkerMessage = { computeDependencies: boolean, @@ -32,6 +33,7 @@ export type CrawlerOptions = {| extensions: Array, forceNodeFilesystemAPI: boolean, ignore: IgnoreMatcher, + mapper?: ?Mapper, rootDir: string, roots: Array, |}; From 4df14d53dc7ebad3d7e7a842871cde242ca04fe5 Mon Sep 17 00:00:00 2001 From: Rogelio Guzman Date: Mon, 22 Oct 2018 09:04:10 -0700 Subject: [PATCH 39/76] Uncomment afterAll in watch mode e2e test (#7235) --- e2e/__tests__/watch_mode_update_snapshot.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/__tests__/watch_mode_update_snapshot.test.js b/e2e/__tests__/watch_mode_update_snapshot.test.js index e0a7997be9e8..106855e341ef 100644 --- a/e2e/__tests__/watch_mode_update_snapshot.test.js +++ b/e2e/__tests__/watch_mode_update_snapshot.test.js @@ -17,7 +17,7 @@ const DIR = path.resolve(os.tmpdir(), 'watch_mode_update_snapshot'); const pluginPath = path.resolve(__dirname, '../MockStdinWatchPlugin'); beforeEach(() => cleanup(DIR)); -// afterAll(() => cleanup(DIR)); +afterAll(() => cleanup(DIR)); expect.addSnapshotSerializer({ print: val => val.replace(/\[s\[u/g, '\n'), From 47cde7f2477c9c2fe7dd70b743ae12993596bbcf Mon Sep 17 00:00:00 2001 From: Paul Happ Date: Mon, 22 Oct 2018 16:46:45 -0500 Subject: [PATCH 40/76] Cache babel environment variables (#7239) --- CHANGELOG.md | 1 + packages/babel-jest/src/index.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3b503822cdc..550b0f0c6155 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ - `[*]` Ensure `maxWorkers` is at least 1 (was 0 in some cases where there was only 1 CPU) ([#7182](https://github.com/facebook/jest/pull/7182)) - `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) - `[jest-changed-files]` Return correctly the changed files when using `lastCommit=true` on Mercurial repositories ([#7228](https://github.com/facebook/jest/pull/7228)) +- `[babel-jest]` Cache includes babel environment variables ([#7239](https://github.com/facebook/jest/pull/7239)) ### Chore & Maintenance diff --git a/packages/babel-jest/src/index.js b/packages/babel-jest/src/index.js index 0fc77b7c2733..1428f1295291 100644 --- a/packages/babel-jest/src/index.js +++ b/packages/babel-jest/src/index.js @@ -110,6 +110,10 @@ const createTransformer = (options: any): Transformer => { .update(getBabelRC(filename)) .update('\0', 'utf8') .update(instrument ? 'instrument' : '') + .update('\0', 'utf8') + .update(process.env.NODE_ENV || '') + .update('\0', 'utf8') + .update(process.env.BABEL_ENV || '') .digest('hex'); }, process( From cdf7a222420ae2ad21c76f15dd155e2ebacad79d Mon Sep 17 00:00:00 2001 From: Andrea Rosales Date: Mon, 22 Oct 2018 17:49:03 -0400 Subject: [PATCH 41/76] Standardize file names in packages/jest-diff (#7238) --- CHANGELOG.md | 1 + packages/jest-circus/src/format_node_assert_errors.js | 2 +- packages/jest-diff/src/{diff_strings.js => diffStrings.js} | 0 packages/jest-diff/src/index.js | 4 ++-- packages/jest-jasmine2/src/assert_support.js | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) rename packages/jest-diff/src/{diff_strings.js => diffStrings.js} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 550b0f0c6155..0d66593d8068 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,7 @@ - `[jest-editor-support]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) - `[jest-test-typescript-parser]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) - `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) +- `[jest-diff]` Standardize filenames ([#7238](https://github.com/facebook/jest/pull/7238)) ### Performance diff --git a/packages/jest-circus/src/format_node_assert_errors.js b/packages/jest-circus/src/format_node_assert_errors.js index 9bf6462823a0..9151fa9fe3fa 100644 --- a/packages/jest-circus/src/format_node_assert_errors.js +++ b/packages/jest-circus/src/format_node_assert_errors.js @@ -7,7 +7,7 @@ * @flow strict-local */ -import type {DiffOptions} from 'jest-diff/src/diff_strings'; +import type {DiffOptions} from 'jest-diff/src/diffStrings'; import type {Event, State} from 'types/Circus'; import {printExpected, printReceived} from 'jest-matcher-utils'; diff --git a/packages/jest-diff/src/diff_strings.js b/packages/jest-diff/src/diffStrings.js similarity index 100% rename from packages/jest-diff/src/diff_strings.js rename to packages/jest-diff/src/diffStrings.js diff --git a/packages/jest-diff/src/index.js b/packages/jest-diff/src/index.js index ecee23658b66..340650b779c9 100644 --- a/packages/jest-diff/src/index.js +++ b/packages/jest-diff/src/index.js @@ -7,12 +7,12 @@ * @flow */ -import type {DiffOptions} from './diff_strings'; +import type {DiffOptions} from './diffStrings'; import prettyFormat from 'pretty-format'; import chalk from 'chalk'; import getType from 'jest-get-type'; -import diffStrings from './diff_strings'; +import diffStrings from './diffStrings'; import {NO_DIFF_MESSAGE, SIMILAR_MESSAGE} from './constants'; const { diff --git a/packages/jest-jasmine2/src/assert_support.js b/packages/jest-jasmine2/src/assert_support.js index 74414a0051f8..dd991bb7603c 100644 --- a/packages/jest-jasmine2/src/assert_support.js +++ b/packages/jest-jasmine2/src/assert_support.js @@ -7,7 +7,7 @@ * @flow */ -import type {DiffOptions} from 'jest-diff/src/diff_strings'; +import type {DiffOptions} from 'jest-diff/src/diffStrings'; import {printReceived, printExpected} from 'jest-matcher-utils'; import chalk from 'chalk'; From 5eb9d36687d01059570182c4f33fef6e431dbaf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gianfranc=C3=B8=20Palumbo?= Date: Tue, 23 Oct 2018 17:16:52 +0300 Subject: [PATCH 42/76] Fix jest-circus npm package name typo (#7250) --- packages/jest-circus/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jest-circus/README.md b/packages/jest-circus/README.md index ba37dcaecc30..af963748aa87 100644 --- a/packages/jest-circus/README.md +++ b/packages/jest-circus/README.md @@ -14,7 +14,7 @@ Circus is a flux-based test runner for Jest that is fast, easy to maintain, and Install `jest-circus` using yarn: ```bash -yarn add --dev jest-cicus +yarn add --dev jest-circus ``` Or via npm: From a91ea0ea2b62ecd272382de1496ade636160d7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 23 Oct 2018 17:57:23 +0100 Subject: [PATCH 43/76] Add missing copyright headers and code of conduct (#7221) * Add CODE_OF_CONDUCT.md * Add Facebook copyright headers * Replace inlined text with snapshot in detect open handles test --- CODE_OF_CONDUCT.md | 3 + .../__snapshots__/before-all-filtered.js.snap | 10 +- .../__snapshots__/before-each-queue.js.snap | 10 +- .../__snapshots__/detect_open_handles.js.snap | 28 ++++- .../__snapshots__/failures.test.js.snap | 108 +++++++++--------- .../__snapshots__/process_exit.test.js.snap | 12 +- .../resolve_no_file_extensions.test.js.snap | 8 +- e2e/__tests__/detect_open_handles.js | 16 +-- .../jasmine_async_with_pending_during_test.js | 9 +- e2e/__tests__/snapshot_resolver.test.js | 6 + .../transform-linked-modules.test.js | 9 +- .../__tests__/before-all-filtered.test.js | 2 + .../__tests__/before-each-queue.test.js | 2 + .../__tests__/failed-assertion.js | 2 + e2e/custom-resolver/__mocks__/manual-mock.js | 2 + e2e/custom-resolver/bar.js | 2 + e2e/custom-resolver/fake-regenerator.js | 2 + e2e/custom-resolver/foo.js | 2 + e2e/custom-resolver/manual-mock.js | 2 + e2e/custom-resolver/resolver.js | 2 + e2e/deprecated-cli-options/__tests__/dummy.js | 2 + e2e/detect-open-handles/__tests__/inside.js | 2 + e2e/detect-open-handles/__tests__/outside.js | 2 + e2e/detect-open-handles/__tests__/promise.js | 2 + e2e/detect-open-handles/server.js | 2 + e2e/failures/__tests__/during_tests.test.js | 2 + e2e/filter/my-clowny-filter.js | 2 + e2e/filter/my-filter.js | 2 + e2e/filter/my-secondary-filter.js | 2 + .../custom_tests_dir/pass.test.js | 2 + e2e/global-setup/invalid_setup.js | 2 + .../custom_tests_dir/pass.test.js | 2 + e2e/global-teardown/invalid_teardown.js | 2 + .../__tests__/pending_in_promise.test.js | 2 + .../bar/__tests__/boggus-bar.test.js | 2 + .../foo/__tests__/boggus-foo.test.js | 2 + .../jest-preset-js/jest-preset.js | 2 + .../js/node_modules/jest-preset-js/mapper.js | 2 + .../node_modules/jest-preset-json/mapper.js | 2 + e2e/process-exit/__tests__/test.js | 2 + e2e/resolve_no_extensions/__tests__/test.js | 2 + e2e/resolve_no_extensions/index.js | 2 + .../__tests__/snapshot.test.js | 2 + .../customSnapshotResolver.js | 2 + e2e/test-environment-async/TestEnvironment.js | 2 + .../timer_and_mock.test.js | 2 + .../with-reset-mocks/timer_with_mock.test.js | 2 + .../__tests__/use_real_timers.test.js | 2 + e2e/transform-linked-modules/Preprocessor.js | 2 + .../__tests__/linked-modules.test.js | 2 + .../ignored/normal.js | 2 + e2e/transform-linked-modules/package/index.js | 2 + .../ecmascript-modules-support/src/index.mjs | 2 + .../ecmascript-modules-support/src/module.mjs | 2 + examples/async/__mocks__/request.js | 2 + examples/babel-7/babel.config.js | 2 + examples/manual-mocks/__mocks__/fs.js | 2 + examples/react-native/Intro.js | 2 + examples/react-native/__tests__/intro.test.js | 3 + examples/react-native/index.android.js | 2 + examples/react-native/index.ios.js | 2 + examples/typescript/CheckboxWithLabel.tsx | 2 + .../__tests__/checkbox_with_label.test.tsx | 2 + examples/typescript/__tests__/sub-test.ts | 2 + examples/typescript/__tests__/sum-test.ts | 2 + examples/typescript/sub.ts | 2 + examples/typescript/sum.ts | 2 + packages/babel-jest/src/index.js | 3 - .../expect/src/__tests__/is_error.test.js | 6 + .../src/__tests__/FailedTestsCache.test.js | 2 + .../src/__tests__/runJestWithCoverage.test.js | 2 + .../jest-cli/src/__tests__/run_jest.test.js | 2 + .../test_root/__testtests__/test.foobar | 2 + .../test_root/__testtests__/test.jsx | 2 + .../src/__tests__/test_root/module.foobar | 2 + .../src/__tests__/test_root/module.jsx | 2 + .../src/__tests__/test_root/no_tests.js | 2 + .../test_root_with_(parentheses)/module.jsx | 2 + packages/jest-cli/src/getNoTestFound.js | 2 + packages/jest-cli/src/getNoTestFoundFailed.js | 2 + .../getNoTestFoundRelatedToChangedFiles.js | 2 + .../jest-cli/src/getNoTestFoundVerbose.js | 2 + .../jest-cli/src/getNoTestsFoundMessage.js | 2 + .../has_jest_config_file/jest.config.js | 2 + packages/jest-cli/src/pluralize.js | 2 + .../src/__tests__/Defaults.test.js | 2 + .../src/__tests__/readConfig.test.js | 2 + .../src/__tests__/readConfigs.test.js | 2 + packages/jest-jasmine2/src/p_cancelable.js | 2 + .../src/__tests__/index.test.js | 2 + .../src/__tests__/index.test.js | 2 + .../src/__tests__/is_builtin_module.test.js | 1 + .../__mocks__/nested1/nested2/nested3.js | 2 + .../test_root/dep_on_mapped_module.js | 2 + .../test_root/mapped_dir/moduleInMapped.js | 2 + .../test_root/nested1/nested2/nested3.js | 2 + .../node_modules/jest-resolve-test/browser.js | 2 + .../node_modules/jest-resolve-test/node.js | 2 + .../sourcemaps/out/throwing-mapped-fn.js | 2 + packages/jest-runtime/src/helpers.js | 2 + .../jest-snapshot/src/__mocks__/prettier.js | 2 + ...customSnapshotResolver-inconsistent-fns.js | 2 + ...hotResolver-missing-resolveSnapshotPath.js | 2 + ...napshotResolver-missing-resolveTestPath.js | 2 + .../fixtures/customSnapshotResolver.js | 2 + .../src/__tests__/snapshot_resolver.test.js | 2 + .../jest-snapshot/src/snapshot_resolver.js | 2 + .../src/__tests__/get_callsite.test.js | 2 + .../src/__tests__/is_interactive.test.js | 2 + .../src/get_failed_snapshot_tests.js | 5 + packages/jest-util/src/is_interative.js | 2 + .../src/lib/__tests__/scroll_list.test.js | 2 + .../src/__performance_tests__/test.js | 2 + .../workers/jest_worker.js | 2 + .../src/__performance_tests__/workers/pi.js | 2 + .../workers/worker_farm.js | 2 + types/Errors.js | 10 +- types/SnapshotResolver.js | 2 + website/fetchSuporters.js | 3 + website/pages/en/videos.js | 2 + 120 files changed, 355 insertions(+), 99 deletions(-) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000000..b9f6ce0e46ae --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,3 @@ +# Code of Conduct + +Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please read the [full text](https://code.fb.com/codeofconduct/) so that you can understand what actions will and will not be tolerated. diff --git a/e2e/__tests__/__snapshots__/before-all-filtered.js.snap b/e2e/__tests__/__snapshots__/before-all-filtered.js.snap index ec312474433f..5d614a1b0132 100644 --- a/e2e/__tests__/__snapshots__/before-all-filtered.js.snap +++ b/e2e/__tests__/__snapshots__/before-all-filtered.js.snap @@ -1,19 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Correct BeforeAll run ensures the BeforeAll of ignored suite is not run 1`] = ` -" console.log __tests__/before-all-filtered.test.js:3 +" console.log __tests__/before-all-filtered.test.js:5 beforeAll 1 - console.log __tests__/before-all-filtered.test.js:6 + console.log __tests__/before-all-filtered.test.js:8 beforeEach 1 - console.log __tests__/before-all-filtered.test.js:15 + console.log __tests__/before-all-filtered.test.js:17 It Foo - console.log __tests__/before-all-filtered.test.js:9 + console.log __tests__/before-all-filtered.test.js:11 afterEach 1 - console.log __tests__/before-all-filtered.test.js:12 + console.log __tests__/before-all-filtered.test.js:14 afterAll 1 " `; diff --git a/e2e/__tests__/__snapshots__/before-each-queue.js.snap b/e2e/__tests__/__snapshots__/before-each-queue.js.snap index 4d429a55b5ac..edc7dc4cf516 100644 --- a/e2e/__tests__/__snapshots__/before-each-queue.js.snap +++ b/e2e/__tests__/__snapshots__/before-each-queue.js.snap @@ -1,19 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Correct beforeEach order ensures the correct order for beforeEach 1`] = ` -" console.log __tests__/before-each-queue.test.js:3 +" console.log __tests__/before-each-queue.test.js:5 BeforeEach - console.log __tests__/before-each-queue.test.js:7 + console.log __tests__/before-each-queue.test.js:9 It Foo - console.log __tests__/before-each-queue.test.js:10 + console.log __tests__/before-each-queue.test.js:12 BeforeEach Inline Foo - console.log __tests__/before-each-queue.test.js:3 + console.log __tests__/before-each-queue.test.js:5 BeforeEach - console.log __tests__/before-each-queue.test.js:15 + console.log __tests__/before-each-queue.test.js:17 It Bar " `; diff --git a/e2e/__tests__/__snapshots__/detect_open_handles.js.snap b/e2e/__tests__/__snapshots__/detect_open_handles.js.snap index a5a7dab361bb..3d78afc98b08 100644 --- a/e2e/__tests__/__snapshots__/detect_open_handles.js.snap +++ b/e2e/__tests__/__snapshots__/detect_open_handles.js.snap @@ -12,17 +12,33 @@ exports[`prints message about flag on slow tests 1`] = ` This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with \`--detectOpenHandles\` to troubleshoot this issue." `; +exports[`prints out info about open handlers 1`] = ` +"Jest has detected the following 1 open handle potentially keeping Jest from exiting: + + ● GETADDRINFOREQWRAP + + 7 | const app = new Server(); + 8 | + > 9 | app.listen({host: 'localhost', port: 0}); + | ^ + 10 | + + at Object.listen (server.js:9:5) + at Object.require (__tests__/outside.js:3:1)" +`; + exports[`prints out info about open handlers from inside tests 1`] = ` "Jest has detected the following 1 open handle potentially keeping Jest from exiting: ● Timeout - 1 | test('something', () => { - > 2 | setTimeout(() => {}, 30000); + 2 | + 3 | test('something', () => { + > 4 | setTimeout(() => {}, 30000); | ^ - 3 | expect(true).toBe(true); - 4 | }); - 5 | + 5 | expect(true).toBe(true); + 6 | }); + 7 | - at Object.setTimeout (__tests__/inside.js:2:3)" + at Object.setTimeout (__tests__/inside.js:4:3)" `; diff --git a/e2e/__tests__/__snapshots__/failures.test.js.snap b/e2e/__tests__/__snapshots__/failures.test.js.snap index c6ff1b351ae7..274061f1e37b 100644 --- a/e2e/__tests__/__snapshots__/failures.test.js.snap +++ b/e2e/__tests__/__snapshots__/failures.test.js.snap @@ -136,43 +136,43 @@ exports[`not throwing Error objects 5`] = ` thrown: Promise {} - 5 | }; - 6 | - > 7 | test('Promise thrown during test', () => { + 7 | }; + 8 | + > 9 | test('Promise thrown during test', () => { | ^ - 8 | throw Promise.resolve(5); - 9 | }); - 10 | + 10 | throw Promise.resolve(5); + 11 | }); + 12 | - at __tests__/during_tests.test.js:7:1 + at __tests__/during_tests.test.js:9:1 ● Boolean thrown during test thrown: false - 9 | }); - 10 | - > 11 | test('Boolean thrown during test', () => { + 11 | }); + 12 | + > 13 | test('Boolean thrown during test', () => { | ^ - 12 | // eslint-disable-next-line no-throw-literal - 13 | throw false; - 14 | }); + 14 | // eslint-disable-next-line no-throw-literal + 15 | throw false; + 16 | }); - at __tests__/during_tests.test.js:11:1 + at __tests__/during_tests.test.js:13:1 ● undefined thrown during test thrown: undefined - 14 | }); - 15 | - > 16 | test('undefined thrown during test', () => { + 16 | }); + 17 | + > 18 | test('undefined thrown during test', () => { | ^ - 17 | // eslint-disable-next-line no-throw-literal - 18 | throw undefined; - 19 | }); + 19 | // eslint-disable-next-line no-throw-literal + 20 | throw undefined; + 21 | }); - at __tests__/during_tests.test.js:16:1 + at __tests__/during_tests.test.js:18:1 ● Object thrown during test @@ -185,43 +185,43 @@ exports[`not throwing Error objects 5`] = ` ], } - 19 | }); - 20 | - > 21 | test('Object thrown during test', () => { + 21 | }); + 22 | + > 23 | test('Object thrown during test', () => { | ^ - 22 | // eslint-disable-next-line no-throw-literal - 23 | throw deepObject; - 24 | }); + 24 | // eslint-disable-next-line no-throw-literal + 25 | throw deepObject; + 26 | }); - at __tests__/during_tests.test.js:21:1 + at __tests__/during_tests.test.js:23:1 ● Error during test ReferenceError: doesNotExist is not defined - 26 | test('Error during test', () => { - 27 | // eslint-disable-next-line no-undef - > 28 | doesNotExist.alsoThisNot; + 28 | test('Error during test', () => { + 29 | // eslint-disable-next-line no-undef + > 30 | doesNotExist.alsoThisNot; | ^ - 29 | }); - 30 | - 31 | test('done(Error)', done => { + 31 | }); + 32 | + 33 | test('done(Error)', done => { - at __tests__/during_tests.test.js:28:3 + at __tests__/during_tests.test.js:30:3 ● done(Error) this is an error - 30 | - 31 | test('done(Error)', done => { - > 32 | done(new Error('this is an error')); + 32 | + 33 | test('done(Error)', done => { + > 34 | done(new Error('this is an error')); | ^ - 33 | }); - 34 | - 35 | test('done(non-error)', done => { + 35 | }); + 36 | + 37 | test('done(non-error)', done => { - at __tests__/during_tests.test.js:32:8 + at __tests__/during_tests.test.js:34:8 ● done(non-error) @@ -234,15 +234,15 @@ exports[`not throwing Error objects 5`] = ` ], } - 34 | - 35 | test('done(non-error)', done => { - > 36 | done(deepObject); + 36 | + 37 | test('done(non-error)', done => { + > 38 | done(deepObject); | ^ - 37 | }); - 38 | - 39 | test('returned promise rejection', () => Promise.reject(deepObject)); + 39 | }); + 40 | + 41 | test('returned promise rejection', () => Promise.reject(deepObject)); - at __tests__/during_tests.test.js:36:3 + at __tests__/during_tests.test.js:38:3 ● returned promise rejection @@ -255,13 +255,13 @@ exports[`not throwing Error objects 5`] = ` ], } - 37 | }); - 38 | - > 39 | test('returned promise rejection', () => Promise.reject(deepObject)); - | ^ + 39 | }); 40 | + > 41 | test('returned promise rejection', () => Promise.reject(deepObject)); + | ^ + 42 | - at __tests__/during_tests.test.js:39:1 + at __tests__/during_tests.test.js:41:1 " `; diff --git a/e2e/__tests__/__snapshots__/process_exit.test.js.snap b/e2e/__tests__/__snapshots__/process_exit.test.js.snap index b2b3d3165333..1b0d01bf05d7 100644 --- a/e2e/__tests__/__snapshots__/process_exit.test.js.snap +++ b/e2e/__tests__/__snapshots__/process_exit.test.js.snap @@ -3,12 +3,14 @@ exports[`prints stack trace pointing to process.exit call 1`] = ` " ● process.exit called with \\"1\\" - > 1 | process.exit(1); - | ^ + 1 | // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. 2 | - 3 | test('something', () => { - 4 | expect(true).toBe(true); + > 3 | process.exit(1); + | ^ + 4 | + 5 | test('something', () => { + 6 | expect(true).toBe(true); - at Object.exit (__tests__/test.js:1:9) + at Object.exit (__tests__/test.js:3:9) " `; diff --git a/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap index c662c494bf71..2da5f494e08a 100644 --- a/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap +++ b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap @@ -27,12 +27,14 @@ exports[`show error message with matching files 1`] = ` See https://jestjs.io/docs/en/configuration#modulefileextensions-array-string - > 1 | module.exports = require('./some-json-file'); - | ^ + 1 | // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. 2 | + > 3 | module.exports = require('./some-json-file'); + | ^ + 4 | at packages/jest-resolve/build/index.js:221:17 - at index.js:1:18 + at index.js:3:18 " `; diff --git a/e2e/__tests__/detect_open_handles.js b/e2e/__tests__/detect_open_handles.js index c4452234340d..f473fa77d6c0 100644 --- a/e2e/__tests__/detect_open_handles.js +++ b/e2e/__tests__/detect_open_handles.js @@ -58,21 +58,7 @@ it('prints out info about open handlers', async () => { ); const textAfterTest = getTextAfterTest(stderr); - expect(textAfterTest).toContain('Jest has detected the following'); - expect(textAfterTest).toContain( - ` - ● GETADDRINFOREQWRAP - - 5 | const app = new Server(); - 6 | - > 7 | app.listen({host: 'localhost', port: 0}); - | ^ - 8 | - - at Object.listen (server.js:7:5) - at Object.require (__tests__/outside.js:1:1) -`.trim(), - ); + expect(textAfterTest).toMatchSnapshot(); }); it('does not report promises', () => { diff --git a/e2e/__tests__/jasmine_async_with_pending_during_test.js b/e2e/__tests__/jasmine_async_with_pending_during_test.js index b93f79598bfb..fcfc974176f1 100644 --- a/e2e/__tests__/jasmine_async_with_pending_during_test.js +++ b/e2e/__tests__/jasmine_async_with_pending_during_test.js @@ -1,4 +1,11 @@ -/* @flow */ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ 'use strict'; diff --git a/e2e/__tests__/snapshot_resolver.test.js b/e2e/__tests__/snapshot_resolver.test.js index d3b4996bdf90..95ecad8a0e02 100644 --- a/e2e/__tests__/snapshot_resolver.test.js +++ b/e2e/__tests__/snapshot_resolver.test.js @@ -1,6 +1,12 @@ /** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * * @flow */ + 'use strict'; import fs from 'fs'; diff --git a/e2e/__tests__/transform-linked-modules.test.js b/e2e/__tests__/transform-linked-modules.test.js index 0d9b635f8b78..36154c424e11 100644 --- a/e2e/__tests__/transform-linked-modules.test.js +++ b/e2e/__tests__/transform-linked-modules.test.js @@ -1,4 +1,11 @@ -// @flow +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ 'use strict'; diff --git a/e2e/before-all-filtered/__tests__/before-all-filtered.test.js b/e2e/before-all-filtered/__tests__/before-all-filtered.test.js index 421560e4d12a..86e8b6384754 100644 --- a/e2e/before-all-filtered/__tests__/before-all-filtered.test.js +++ b/e2e/before-all-filtered/__tests__/before-all-filtered.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('test_1', () => { beforeAll(() => { console.log('beforeAll 1'); diff --git a/e2e/before-each-queue/__tests__/before-each-queue.test.js b/e2e/before-each-queue/__tests__/before-each-queue.test.js index 8f49fe124c27..24d7c9a96a3d 100644 --- a/e2e/before-each-queue/__tests__/before-each-queue.test.js +++ b/e2e/before-each-queue/__tests__/before-each-queue.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('test', () => { beforeEach(() => { console.log('BeforeEach'); diff --git a/e2e/compare-dom-nodes/__tests__/failed-assertion.js b/e2e/compare-dom-nodes/__tests__/failed-assertion.js index feea57429cea..329ada4fefe5 100644 --- a/e2e/compare-dom-nodes/__tests__/failed-assertion.js +++ b/e2e/compare-dom-nodes/__tests__/failed-assertion.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /* global document */ test('a failed assertion comparing a DOM node does not crash Jest', () => { diff --git a/e2e/custom-resolver/__mocks__/manual-mock.js b/e2e/custom-resolver/__mocks__/manual-mock.js index f0488585d2e7..bb5d663e809d 100644 --- a/e2e/custom-resolver/__mocks__/manual-mock.js +++ b/e2e/custom-resolver/__mocks__/manual-mock.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = require('bar'); diff --git a/e2e/custom-resolver/bar.js b/e2e/custom-resolver/bar.js index cb1c2c01e753..73207604dacf 100644 --- a/e2e/custom-resolver/bar.js +++ b/e2e/custom-resolver/bar.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = 'bar'; diff --git a/e2e/custom-resolver/fake-regenerator.js b/e2e/custom-resolver/fake-regenerator.js index f55e897d9e17..54ad21e0d33a 100644 --- a/e2e/custom-resolver/fake-regenerator.js +++ b/e2e/custom-resolver/fake-regenerator.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + global.fakeRegeneratorInjected = true; diff --git a/e2e/custom-resolver/foo.js b/e2e/custom-resolver/foo.js index cc40a4649c9f..d7ea6e98d99c 100644 --- a/e2e/custom-resolver/foo.js +++ b/e2e/custom-resolver/foo.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = () => {}; diff --git a/e2e/custom-resolver/manual-mock.js b/e2e/custom-resolver/manual-mock.js index 7c84c09f6033..3d4da4dea765 100644 --- a/e2e/custom-resolver/manual-mock.js +++ b/e2e/custom-resolver/manual-mock.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + throw new Error('Must be mocked'); diff --git a/e2e/custom-resolver/resolver.js b/e2e/custom-resolver/resolver.js index 76c871ffdb61..7385bfdd28c4 100644 --- a/e2e/custom-resolver/resolver.js +++ b/e2e/custom-resolver/resolver.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const { default: defaultResolver, } = require('jest-resolve/build/default_resolver'); diff --git a/e2e/deprecated-cli-options/__tests__/dummy.js b/e2e/deprecated-cli-options/__tests__/dummy.js index 5e7b71ee1a58..cc87615e0057 100644 --- a/e2e/deprecated-cli-options/__tests__/dummy.js +++ b/e2e/deprecated-cli-options/__tests__/dummy.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('Dummy', () => { expect(2).toBe(2); }); diff --git a/e2e/detect-open-handles/__tests__/inside.js b/e2e/detect-open-handles/__tests__/inside.js index 5b1c0d5b3c1d..2f712b7899e2 100644 --- a/e2e/detect-open-handles/__tests__/inside.js +++ b/e2e/detect-open-handles/__tests__/inside.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('something', () => { setTimeout(() => {}, 30000); expect(true).toBe(true); diff --git a/e2e/detect-open-handles/__tests__/outside.js b/e2e/detect-open-handles/__tests__/outside.js index ded7c2155c98..5211b3229146 100644 --- a/e2e/detect-open-handles/__tests__/outside.js +++ b/e2e/detect-open-handles/__tests__/outside.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + require('../server'); test('something', () => { diff --git a/e2e/detect-open-handles/__tests__/promise.js b/e2e/detect-open-handles/__tests__/promise.js index e58a9957fbac..37237f958466 100644 --- a/e2e/detect-open-handles/__tests__/promise.js +++ b/e2e/detect-open-handles/__tests__/promise.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('something', () => { // eslint-disable-next-line no-new new Promise(() => {}); diff --git a/e2e/detect-open-handles/server.js b/e2e/detect-open-handles/server.js index 36737a3f1a43..d2eeb60c92e6 100644 --- a/e2e/detect-open-handles/server.js +++ b/e2e/detect-open-handles/server.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; import {Server} from 'http'; diff --git a/e2e/failures/__tests__/during_tests.test.js b/e2e/failures/__tests__/during_tests.test.js index 613861d35a19..e7b765096f90 100644 --- a/e2e/failures/__tests__/during_tests.test.js +++ b/e2e/failures/__tests__/during_tests.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const deepObject = { diff --git a/e2e/filter/my-clowny-filter.js b/e2e/filter/my-clowny-filter.js index 3474fbaed399..90ede8e44780 100644 --- a/e2e/filter/my-clowny-filter.js +++ b/e2e/filter/my-clowny-filter.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = function(tests) { diff --git a/e2e/filter/my-filter.js b/e2e/filter/my-filter.js index 5d664514e7f0..3501fcd4c7ee 100644 --- a/e2e/filter/my-filter.js +++ b/e2e/filter/my-filter.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = function(tests) { diff --git a/e2e/filter/my-secondary-filter.js b/e2e/filter/my-secondary-filter.js index ca8f49e22b41..9a9edd1fb08b 100644 --- a/e2e/filter/my-secondary-filter.js +++ b/e2e/filter/my-secondary-filter.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = function(tests) { diff --git a/e2e/global-setup/custom_tests_dir/pass.test.js b/e2e/global-setup/custom_tests_dir/pass.test.js index d223d197adec..ce51d3a18407 100644 --- a/e2e/global-setup/custom_tests_dir/pass.test.js +++ b/e2e/global-setup/custom_tests_dir/pass.test.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('should pass', () => {}); diff --git a/e2e/global-setup/invalid_setup.js b/e2e/global-setup/invalid_setup.js index de4e062fb3c2..67f17ebddfc4 100644 --- a/e2e/global-setup/invalid_setup.js +++ b/e2e/global-setup/invalid_setup.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + console.log('there is no exported function'); diff --git a/e2e/global-teardown/custom_tests_dir/pass.test.js b/e2e/global-teardown/custom_tests_dir/pass.test.js index d223d197adec..ce51d3a18407 100644 --- a/e2e/global-teardown/custom_tests_dir/pass.test.js +++ b/e2e/global-teardown/custom_tests_dir/pass.test.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('should pass', () => {}); diff --git a/e2e/global-teardown/invalid_teardown.js b/e2e/global-teardown/invalid_teardown.js index de4e062fb3c2..67f17ebddfc4 100644 --- a/e2e/global-teardown/invalid_teardown.js +++ b/e2e/global-teardown/invalid_teardown.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + console.log('there is no exported function'); diff --git a/e2e/jasmine-async/__tests__/pending_in_promise.test.js b/e2e/jasmine-async/__tests__/pending_in_promise.test.js index 90532ebba079..d89e516f9250 100644 --- a/e2e/jasmine-async/__tests__/pending_in_promise.test.js +++ b/e2e/jasmine-async/__tests__/pending_in_promise.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; it('skips a test inside a promise', () => diff --git a/e2e/multi-project-config-root/bar/__tests__/boggus-bar.test.js b/e2e/multi-project-config-root/bar/__tests__/boggus-bar.test.js index 05e8212dfe47..0c1b1ee8a6d0 100644 --- a/e2e/multi-project-config-root/bar/__tests__/boggus-bar.test.js +++ b/e2e/multi-project-config-root/bar/__tests__/boggus-bar.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('Bar', () => { it('fail', () => { throw new Error('Expected failure'); diff --git a/e2e/multi-project-config-root/foo/__tests__/boggus-foo.test.js b/e2e/multi-project-config-root/foo/__tests__/boggus-foo.test.js index 074e5fa12d59..cf18fb6fc314 100644 --- a/e2e/multi-project-config-root/foo/__tests__/boggus-foo.test.js +++ b/e2e/multi-project-config-root/foo/__tests__/boggus-foo.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('Foo', () => { it('fail', () => { throw new Error('Expected failure'); diff --git a/e2e/presets/js/node_modules/jest-preset-js/jest-preset.js b/e2e/presets/js/node_modules/jest-preset-js/jest-preset.js index f5585495bcfb..493217ebf0f6 100644 --- a/e2e/presets/js/node_modules/jest-preset-js/jest-preset.js +++ b/e2e/presets/js/node_modules/jest-preset-js/jest-preset.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { moduleNameMapper: { '^.+\\.foo$': 'jest-preset-js/mapper.js', diff --git a/e2e/presets/js/node_modules/jest-preset-js/mapper.js b/e2e/presets/js/node_modules/jest-preset-js/mapper.js index 888cae37af95..85d6be221026 100644 --- a/e2e/presets/js/node_modules/jest-preset-js/mapper.js +++ b/e2e/presets/js/node_modules/jest-preset-js/mapper.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = 42; diff --git a/e2e/presets/json/node_modules/jest-preset-json/mapper.js b/e2e/presets/json/node_modules/jest-preset-json/mapper.js index 888cae37af95..85d6be221026 100644 --- a/e2e/presets/json/node_modules/jest-preset-json/mapper.js +++ b/e2e/presets/json/node_modules/jest-preset-json/mapper.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = 42; diff --git a/e2e/process-exit/__tests__/test.js b/e2e/process-exit/__tests__/test.js index 59b91b79e98d..d52249f8b77c 100644 --- a/e2e/process-exit/__tests__/test.js +++ b/e2e/process-exit/__tests__/test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + process.exit(1); test('something', () => { diff --git a/e2e/resolve_no_extensions/__tests__/test.js b/e2e/resolve_no_extensions/__tests__/test.js index 8d8a7458f04f..7486b24dd844 100644 --- a/e2e/resolve_no_extensions/__tests__/test.js +++ b/e2e/resolve_no_extensions/__tests__/test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const m = require('../'); test('some test', () => { diff --git a/e2e/resolve_no_extensions/index.js b/e2e/resolve_no_extensions/index.js index 2b58763ab165..66b1e24b775e 100644 --- a/e2e/resolve_no_extensions/index.js +++ b/e2e/resolve_no_extensions/index.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = require('./some-json-file'); diff --git a/e2e/snapshot-resolver/__tests__/snapshot.test.js b/e2e/snapshot-resolver/__tests__/snapshot.test.js index a7e8d335028e..939d8b01f6c9 100644 --- a/e2e/snapshot-resolver/__tests__/snapshot.test.js +++ b/e2e/snapshot-resolver/__tests__/snapshot.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('snapshots are written to custom location', () => { expect('foobar').toMatchSnapshot(); }); diff --git a/e2e/snapshot-resolver/customSnapshotResolver.js b/e2e/snapshot-resolver/customSnapshotResolver.js index 4b397f194551..47adee9d1a93 100644 --- a/e2e/snapshot-resolver/customSnapshotResolver.js +++ b/e2e/snapshot-resolver/customSnapshotResolver.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { resolveSnapshotPath: (testPath, snapshotExtension) => testPath.replace('__tests__', '__snapshots__') + snapshotExtension, diff --git a/e2e/test-environment-async/TestEnvironment.js b/e2e/test-environment-async/TestEnvironment.js index a5b5b8648b22..e99ea01bdd4e 100644 --- a/e2e/test-environment-async/TestEnvironment.js +++ b/e2e/test-environment-async/TestEnvironment.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const fs = require('fs'); diff --git a/e2e/timer-reset-mocks/after-reset-all-mocks/timer_and_mock.test.js b/e2e/timer-reset-mocks/after-reset-all-mocks/timer_and_mock.test.js index 969cd00ede8d..c1f279000bc2 100644 --- a/e2e/timer-reset-mocks/after-reset-all-mocks/timer_and_mock.test.js +++ b/e2e/timer-reset-mocks/after-reset-all-mocks/timer_and_mock.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('timers', () => { it('should work before calling resetAllMocks', () => { jest.useFakeTimers(); diff --git a/e2e/timer-reset-mocks/with-reset-mocks/timer_with_mock.test.js b/e2e/timer-reset-mocks/with-reset-mocks/timer_with_mock.test.js index 30c0132f97b8..c3f06dddbc34 100644 --- a/e2e/timer-reset-mocks/with-reset-mocks/timer_with_mock.test.js +++ b/e2e/timer-reset-mocks/with-reset-mocks/timer_with_mock.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + describe('timers', () => { it('should work before calling resetAllMocks', () => { const f = jest.fn(); diff --git a/e2e/timer-use-real-timers/__tests__/use_real_timers.test.js b/e2e/timer-use-real-timers/__tests__/use_real_timers.test.js index e59f6f45c958..658b3575d59a 100644 --- a/e2e/timer-use-real-timers/__tests__/use_real_timers.test.js +++ b/e2e/timer-use-real-timers/__tests__/use_real_timers.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + jest.useRealTimers(); test('bar', () => { diff --git a/e2e/transform-linked-modules/Preprocessor.js b/e2e/transform-linked-modules/Preprocessor.js index 26d81a441699..ab81346864a9 100644 --- a/e2e/transform-linked-modules/Preprocessor.js +++ b/e2e/transform-linked-modules/Preprocessor.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { process() { return 'module.exports = "transformed"'; diff --git a/e2e/transform-linked-modules/__tests__/linked-modules.test.js b/e2e/transform-linked-modules/__tests__/linked-modules.test.js index 0b8930cffccc..8f1bc438fe7b 100644 --- a/e2e/transform-linked-modules/__tests__/linked-modules.test.js +++ b/e2e/transform-linked-modules/__tests__/linked-modules.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + test('normal file', () => { const normal = require('../ignored/normal'); expect(normal).toEqual('ignored/normal'); diff --git a/e2e/transform-linked-modules/ignored/normal.js b/e2e/transform-linked-modules/ignored/normal.js index d2135611e150..4388d6efa989 100644 --- a/e2e/transform-linked-modules/ignored/normal.js +++ b/e2e/transform-linked-modules/ignored/normal.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = 'ignored/normal'; diff --git a/e2e/transform-linked-modules/package/index.js b/e2e/transform-linked-modules/package/index.js index e2717257ce1d..8e41a7ad0341 100644 --- a/e2e/transform-linked-modules/package/index.js +++ b/e2e/transform-linked-modules/package/index.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = 'package/index'; diff --git a/e2e/transform/ecmascript-modules-support/src/index.mjs b/e2e/transform/ecmascript-modules-support/src/index.mjs index 311817aa3eec..53a88aa5c985 100644 --- a/e2e/transform/ecmascript-modules-support/src/index.mjs +++ b/e2e/transform/ecmascript-modules-support/src/index.mjs @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import {foo} from './module'; foo(); diff --git a/e2e/transform/ecmascript-modules-support/src/module.mjs b/e2e/transform/ecmascript-modules-support/src/module.mjs index 73104d324790..a0584882e52b 100644 --- a/e2e/transform/ecmascript-modules-support/src/module.mjs +++ b/e2e/transform/ecmascript-modules-support/src/module.mjs @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + export const foo = () => 'a'; diff --git a/examples/async/__mocks__/request.js b/examples/async/__mocks__/request.js index 5dc91904e5c9..3dc3d9451003 100644 --- a/examples/async/__mocks__/request.js +++ b/examples/async/__mocks__/request.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const users = { diff --git a/examples/babel-7/babel.config.js b/examples/babel-7/babel.config.js index 2f25c2d6bd17..bc482acf0b2c 100644 --- a/examples/babel-7/babel.config.js +++ b/examples/babel-7/babel.config.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = { diff --git a/examples/manual-mocks/__mocks__/fs.js b/examples/manual-mocks/__mocks__/fs.js index 2398c8881450..64b2bb76c7e4 100644 --- a/examples/manual-mocks/__mocks__/fs.js +++ b/examples/manual-mocks/__mocks__/fs.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const path = require('path'); diff --git a/examples/react-native/Intro.js b/examples/react-native/Intro.js index d532570341c6..1e079ce31af2 100644 --- a/examples/react-native/Intro.js +++ b/examples/react-native/Intro.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /** * Sample React Native App * https://github.com/facebook/react-native diff --git a/examples/react-native/__tests__/intro.test.js b/examples/react-native/__tests__/intro.test.js index 002b7143dea7..02adcec19993 100644 --- a/examples/react-native/__tests__/intro.test.js +++ b/examples/react-native/__tests__/intro.test.js @@ -1,6 +1,9 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /** * Sample React Native Snapshot Test */ + 'use strict'; import 'react-native'; diff --git a/examples/react-native/index.android.js b/examples/react-native/index.android.js index 33cf77567e33..a1ab48f23774 100644 --- a/examples/react-native/index.android.js +++ b/examples/react-native/index.android.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /** * Sample React Native App * https://github.com/facebook/react-native diff --git a/examples/react-native/index.ios.js b/examples/react-native/index.ios.js index 3463bbb41ba9..33885e6ea214 100644 --- a/examples/react-native/index.ios.js +++ b/examples/react-native/index.ios.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /** * Sample React Native App * https://github.com/facebook/react-native diff --git a/examples/typescript/CheckboxWithLabel.tsx b/examples/typescript/CheckboxWithLabel.tsx index 1e8c59a611dc..744ea4f75fc5 100644 --- a/examples/typescript/CheckboxWithLabel.tsx +++ b/examples/typescript/CheckboxWithLabel.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + /// import * as React from 'react' diff --git a/examples/typescript/__tests__/checkbox_with_label.test.tsx b/examples/typescript/__tests__/checkbox_with_label.test.tsx index 9abc04338ada..ddfd65d7c397 100644 --- a/examples/typescript/__tests__/checkbox_with_label.test.tsx +++ b/examples/typescript/__tests__/checkbox_with_label.test.tsx @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import * as React from 'react'; import * as ReactDOM from 'react-dom'; import * as TestUtils from 'react-dom/test-utils'; diff --git a/examples/typescript/__tests__/sub-test.ts b/examples/typescript/__tests__/sub-test.ts index 772400ee3e13..12889756d4c0 100644 --- a/examples/typescript/__tests__/sub-test.ts +++ b/examples/typescript/__tests__/sub-test.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + it('subtracts 5 - 1 to equal 4 in TypeScript', () => { const sub = require('../sub'); expect(sub(5, 1)).toBe(4); diff --git a/examples/typescript/__tests__/sum-test.ts b/examples/typescript/__tests__/sum-test.ts index 5d49f57cf1d4..4555790104d3 100644 --- a/examples/typescript/__tests__/sum-test.ts +++ b/examples/typescript/__tests__/sum-test.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + it('adds 1 + 2 to equal 3 in TScript', ()=> { const sum = require('../sum.ts'); expect(sum(1, 2)).toBe(3); diff --git a/examples/typescript/sub.ts b/examples/typescript/sub.ts index ecd89ba13ef9..c01d22e5aa1b 100644 --- a/examples/typescript/sub.ts +++ b/examples/typescript/sub.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const sum = require('./sum'); function sub(a: number, b: number): number { diff --git a/examples/typescript/sum.ts b/examples/typescript/sum.ts index 964aeb9bf55c..204846905bba 100644 --- a/examples/typescript/sum.ts +++ b/examples/typescript/sum.ts @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + function sum(a: number, b: number): number { return a + b; } diff --git a/packages/babel-jest/src/index.js b/packages/babel-jest/src/index.js index 1428f1295291..35e4b74e7c23 100644 --- a/packages/babel-jest/src/index.js +++ b/packages/babel-jest/src/index.js @@ -48,13 +48,11 @@ const createTransformer = (options: any): Transformer => { } let configJsFilePath = path.join(directory, BABELRC_JS_FILENAME); if (fs.existsSync(configJsFilePath)) { - // $FlowFixMe cache[directory] = JSON.stringify(require(configJsFilePath)); break; } configJsFilePath = path.join(directory, BABEL_CONFIG_JS_FILENAME); if (fs.existsSync(configJsFilePath)) { - // $FlowFixMe cache[directory] = JSON.stringify(require(configJsFilePath)); break; } @@ -64,7 +62,6 @@ const createTransformer = (options: any): Transformer => { ? path.resolve(directory, PACKAGE_JSON) : resolvedJsonFilePath; if (fs.existsSync(packageJsonFilePath)) { - // $FlowFixMe const packageJsonFileContents = require(packageJsonFilePath); if (packageJsonFileContents[BABEL_CONFIG_KEY]) { cache[directory] = JSON.stringify( diff --git a/packages/expect/src/__tests__/is_error.test.js b/packages/expect/src/__tests__/is_error.test.js index b61d2c726dae..654c1a3700d7 100644 --- a/packages/expect/src/__tests__/is_error.test.js +++ b/packages/expect/src/__tests__/is_error.test.js @@ -1,6 +1,12 @@ /** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * * @jest-environment jsdom */ + /* eslint-env browser */ import {isError} from '../utils'; diff --git a/packages/jest-cli/src/__tests__/FailedTestsCache.test.js b/packages/jest-cli/src/__tests__/FailedTestsCache.test.js index 72a98f2119c5..7ad95708c7e3 100644 --- a/packages/jest-cli/src/__tests__/FailedTestsCache.test.js +++ b/packages/jest-cli/src/__tests__/FailedTestsCache.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import FailedTestsCache from '../FailedTestsCache'; describe('FailedTestsCache', () => { diff --git a/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js b/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js index 247fcf2c7b11..65f825e190b9 100644 --- a/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js +++ b/packages/jest-cli/src/__tests__/runJestWithCoverage.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import runJest from '../runJest'; jest.mock('jest-util'); diff --git a/packages/jest-cli/src/__tests__/run_jest.test.js b/packages/jest-cli/src/__tests__/run_jest.test.js index 988da15882f7..282f6a68ed78 100644 --- a/packages/jest-cli/src/__tests__/run_jest.test.js +++ b/packages/jest-cli/src/__tests__/run_jest.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import runJest from '../runJest'; jest.mock('jest-util'); diff --git a/packages/jest-cli/src/__tests__/test_root/__testtests__/test.foobar b/packages/jest-cli/src/__tests__/test_root/__testtests__/test.foobar index ff84a14b37c3..6c4cf909963b 100644 --- a/packages/jest-cli/src/__tests__/test_root/__testtests__/test.foobar +++ b/packages/jest-cli/src/__tests__/test_root/__testtests__/test.foobar @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // test.foobar require('../module.foobar'); diff --git a/packages/jest-cli/src/__tests__/test_root/__testtests__/test.jsx b/packages/jest-cli/src/__tests__/test_root/__testtests__/test.jsx index cbe8edb39e8e..f78ff34790f5 100644 --- a/packages/jest-cli/src/__tests__/test_root/__testtests__/test.jsx +++ b/packages/jest-cli/src/__tests__/test_root/__testtests__/test.jsx @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // test.jsx require('../module.jsx'); diff --git a/packages/jest-cli/src/__tests__/test_root/module.foobar b/packages/jest-cli/src/__tests__/test_root/module.foobar index e6171a24baa5..41ca9a86190a 100644 --- a/packages/jest-cli/src/__tests__/test_root/module.foobar +++ b/packages/jest-cli/src/__tests__/test_root/module.foobar @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // module.foobar diff --git a/packages/jest-cli/src/__tests__/test_root/module.jsx b/packages/jest-cli/src/__tests__/test_root/module.jsx index 3929f1562dd4..53776683f9b3 100644 --- a/packages/jest-cli/src/__tests__/test_root/module.jsx +++ b/packages/jest-cli/src/__tests__/test_root/module.jsx @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // module.jsx diff --git a/packages/jest-cli/src/__tests__/test_root/no_tests.js b/packages/jest-cli/src/__tests__/test_root/no_tests.js index 89a772263aec..e248b9bf629b 100644 --- a/packages/jest-cli/src/__tests__/test_root/no_tests.js +++ b/packages/jest-cli/src/__tests__/test_root/no_tests.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // no tests for this one diff --git a/packages/jest-cli/src/__tests__/test_root_with_(parentheses)/module.jsx b/packages/jest-cli/src/__tests__/test_root_with_(parentheses)/module.jsx index 3929f1562dd4..53776683f9b3 100644 --- a/packages/jest-cli/src/__tests__/test_root_with_(parentheses)/module.jsx +++ b/packages/jest-cli/src/__tests__/test_root_with_(parentheses)/module.jsx @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // module.jsx diff --git a/packages/jest-cli/src/getNoTestFound.js b/packages/jest-cli/src/getNoTestFound.js index 65f42197047f..8c4830d4817a 100644 --- a/packages/jest-cli/src/getNoTestFound.js +++ b/packages/jest-cli/src/getNoTestFound.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import chalk from 'chalk'; import pluralize from './pluralize'; diff --git a/packages/jest-cli/src/getNoTestFoundFailed.js b/packages/jest-cli/src/getNoTestFoundFailed.js index 0633d525a799..3c743f613927 100644 --- a/packages/jest-cli/src/getNoTestFoundFailed.js +++ b/packages/jest-cli/src/getNoTestFoundFailed.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import chalk from 'chalk'; export default function getNoTestFoundFailed() { diff --git a/packages/jest-cli/src/getNoTestFoundRelatedToChangedFiles.js b/packages/jest-cli/src/getNoTestFoundRelatedToChangedFiles.js index 73d13b814128..b2a9ea7bd6aa 100644 --- a/packages/jest-cli/src/getNoTestFoundRelatedToChangedFiles.js +++ b/packages/jest-cli/src/getNoTestFoundRelatedToChangedFiles.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import chalk from 'chalk'; import {isInteractive} from 'jest-util'; diff --git a/packages/jest-cli/src/getNoTestFoundVerbose.js b/packages/jest-cli/src/getNoTestFoundVerbose.js index af0a5b16a1ad..7fc61fff4270 100644 --- a/packages/jest-cli/src/getNoTestFoundVerbose.js +++ b/packages/jest-cli/src/getNoTestFoundVerbose.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import chalk from 'chalk'; import pluralize from './pluralize'; diff --git a/packages/jest-cli/src/getNoTestsFoundMessage.js b/packages/jest-cli/src/getNoTestsFoundMessage.js index 31c090768601..cdd2d466bf5a 100644 --- a/packages/jest-cli/src/getNoTestsFoundMessage.js +++ b/packages/jest-cli/src/getNoTestsFoundMessage.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import getNoTestFound from './getNoTestFound'; import getNoTestFoundRelatedToChangedFiles from './getNoTestFoundRelatedToChangedFiles'; import getNoTestFoundVerbose from './getNoTestFoundVerbose'; diff --git a/packages/jest-cli/src/lib/__tests__/fixtures/has_jest_config_file/jest.config.js b/packages/jest-cli/src/lib/__tests__/fixtures/has_jest_config_file/jest.config.js index f053ebf7976e..a95dc36a81f3 100644 --- a/packages/jest-cli/src/lib/__tests__/fixtures/has_jest_config_file/jest.config.js +++ b/packages/jest-cli/src/lib/__tests__/fixtures/has_jest_config_file/jest.config.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = {}; diff --git a/packages/jest-cli/src/pluralize.js b/packages/jest-cli/src/pluralize.js index fef25d2beaee..649d497ffaa9 100644 --- a/packages/jest-cli/src/pluralize.js +++ b/packages/jest-cli/src/pluralize.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + export default function pluralize(word: string, count: number, ending: string) { return `${count} ${word}${count === 1 ? '' : ending}`; } diff --git a/packages/jest-config/src/__tests__/Defaults.test.js b/packages/jest-config/src/__tests__/Defaults.test.js index bfd3a833e445..3f106a16f81a 100644 --- a/packages/jest-config/src/__tests__/Defaults.test.js +++ b/packages/jest-config/src/__tests__/Defaults.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import {defaults} from '../index'; test('get configuration defaults', () => { diff --git a/packages/jest-config/src/__tests__/readConfig.test.js b/packages/jest-config/src/__tests__/readConfig.test.js index e4d053ebad5e..8de8adb0ca78 100644 --- a/packages/jest-config/src/__tests__/readConfig.test.js +++ b/packages/jest-config/src/__tests__/readConfig.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import {readConfig} from '../index'; test('readConfig() throws when an object is passed without a file path', () => { diff --git a/packages/jest-config/src/__tests__/readConfigs.test.js b/packages/jest-config/src/__tests__/readConfigs.test.js index 188326c76d48..eac68b412050 100644 --- a/packages/jest-config/src/__tests__/readConfigs.test.js +++ b/packages/jest-config/src/__tests__/readConfigs.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import {readConfigs} from '../index'; test('readConfigs() throws when called without project paths', () => { diff --git a/packages/jest-jasmine2/src/p_cancelable.js b/packages/jest-jasmine2/src/p_cancelable.js index 44a1d450b1e6..1b54f624c6d7 100644 --- a/packages/jest-jasmine2/src/p_cancelable.js +++ b/packages/jest-jasmine2/src/p_cancelable.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; // Try getting the real promise object from the context, if available. Someone diff --git a/packages/jest-leak-detector/src/__tests__/index.test.js b/packages/jest-leak-detector/src/__tests__/index.test.js index d7c93f90e0bd..d95d44665988 100644 --- a/packages/jest-leak-detector/src/__tests__/index.test.js +++ b/packages/jest-leak-detector/src/__tests__/index.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; import LeakDetector from '../index'; diff --git a/packages/jest-regex-util/src/__tests__/index.test.js b/packages/jest-regex-util/src/__tests__/index.test.js index 077e6a247445..b5d1c2754aed 100644 --- a/packages/jest-regex-util/src/__tests__/index.test.js +++ b/packages/jest-regex-util/src/__tests__/index.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + jest.mock('path'); import {replacePathSepForRegex} from '../index'; diff --git a/packages/jest-resolve/src/__tests__/is_builtin_module.test.js b/packages/jest-resolve/src/__tests__/is_builtin_module.test.js index 2dc35db31bbc..7be6a38dcae6 100644 --- a/packages/jest-resolve/src/__tests__/is_builtin_module.test.js +++ b/packages/jest-resolve/src/__tests__/is_builtin_module.test.js @@ -1,3 +1,4 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. // @flow import isBuiltinModule from '../is_builtin_module'; diff --git a/packages/jest-runtime/src/__tests__/test_root/__mocks__/nested1/nested2/nested3.js b/packages/jest-runtime/src/__tests__/test_root/__mocks__/nested1/nested2/nested3.js index 2e6922e64cd6..ba6e5e7e5c4b 100644 --- a/packages/jest-runtime/src/__tests__/test_root/__mocks__/nested1/nested2/nested3.js +++ b/packages/jest-runtime/src/__tests__/test_root/__mocks__/nested1/nested2/nested3.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; exports.isMock = true; diff --git a/packages/jest-runtime/src/__tests__/test_root/dep_on_mapped_module.js b/packages/jest-runtime/src/__tests__/test_root/dep_on_mapped_module.js index eb39f76924a1..7381b56e1c5a 100644 --- a/packages/jest-runtime/src/__tests__/test_root/dep_on_mapped_module.js +++ b/packages/jest-runtime/src/__tests__/test_root/dep_on_mapped_module.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const mappedTest = require('testMapped/moduleInMapped'); diff --git a/packages/jest-runtime/src/__tests__/test_root/mapped_dir/moduleInMapped.js b/packages/jest-runtime/src/__tests__/test_root/mapped_dir/moduleInMapped.js index 011a075bc7a4..255386a0645c 100644 --- a/packages/jest-runtime/src/__tests__/test_root/mapped_dir/moduleInMapped.js +++ b/packages/jest-runtime/src/__tests__/test_root/mapped_dir/moduleInMapped.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = `in_mapped`; diff --git a/packages/jest-runtime/src/__tests__/test_root/nested1/nested2/nested3.js b/packages/jest-runtime/src/__tests__/test_root/nested1/nested2/nested3.js index 3dec268a2c34..316974809085 100644 --- a/packages/jest-runtime/src/__tests__/test_root/nested1/nested2/nested3.js +++ b/packages/jest-runtime/src/__tests__/test_root/nested1/nested2/nested3.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; exports.isMock = false; diff --git a/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/browser.js b/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/browser.js index 8a4378521036..48aaf2d4ddfa 100644 --- a/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/browser.js +++ b/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/browser.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports.isBrowser = true; diff --git a/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/node.js b/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/node.js index 849731dadac9..3481b0288d03 100644 --- a/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/node.js +++ b/packages/jest-runtime/src/__tests__/test_root/node_modules/jest-resolve-test/node.js @@ -1 +1,3 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports.isBrowser = false; diff --git a/packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js b/packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js index 398191b191e3..a473d34ac766 100644 --- a/packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js +++ b/packages/jest-runtime/src/__tests__/test_root/sourcemaps/out/throwing-mapped-fn.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; Object.defineProperty(exports, '__esModule', { diff --git a/packages/jest-runtime/src/helpers.js b/packages/jest-runtime/src/helpers.js index 1cca4c6326c7..25c97c8d9486 100644 --- a/packages/jest-runtime/src/helpers.js +++ b/packages/jest-runtime/src/helpers.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + // @flow import type {Path} from 'types/Config'; diff --git a/packages/jest-snapshot/src/__mocks__/prettier.js b/packages/jest-snapshot/src/__mocks__/prettier.js index ff89efde1bc4..31e9c46dcd62 100644 --- a/packages/jest-snapshot/src/__mocks__/prettier.js +++ b/packages/jest-snapshot/src/__mocks__/prettier.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const prettier = jest.requireActual('prettier'); module.exports = { diff --git a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-inconsistent-fns.js b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-inconsistent-fns.js index 9e50e0591860..6b848aebc7aa 100644 --- a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-inconsistent-fns.js +++ b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-inconsistent-fns.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { resolveSnapshotPath: (testPath, snapshotExtension) => testPath.replace('__tests__', '__snapshots__') + snapshotExtension, diff --git a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveSnapshotPath.js b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveSnapshotPath.js index e1a5503acd0b..b1ea78767a73 100644 --- a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveSnapshotPath.js +++ b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveSnapshotPath.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { resolveTestPath: () => {}, }; diff --git a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveTestPath.js b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveTestPath.js index 5f9037356ffa..68d644f3fa0d 100644 --- a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveTestPath.js +++ b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver-missing-resolveTestPath.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { resolveSnapshotPath: () => {}, }; diff --git a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver.js b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver.js index 4b397f194551..47adee9d1a93 100644 --- a/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver.js +++ b/packages/jest-snapshot/src/__tests__/fixtures/customSnapshotResolver.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + module.exports = { resolveSnapshotPath: (testPath, snapshotExtension) => testPath.replace('__tests__', '__snapshots__') + snapshotExtension, diff --git a/packages/jest-snapshot/src/__tests__/snapshot_resolver.test.js b/packages/jest-snapshot/src/__tests__/snapshot_resolver.test.js index 819671fc3a8a..1d562c397748 100644 --- a/packages/jest-snapshot/src/__tests__/snapshot_resolver.test.js +++ b/packages/jest-snapshot/src/__tests__/snapshot_resolver.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const path = require('path'); const {buildSnapshotResolver} = require('../snapshot_resolver'); diff --git a/packages/jest-snapshot/src/snapshot_resolver.js b/packages/jest-snapshot/src/snapshot_resolver.js index db2af2f7a4a5..0906d5c11217 100644 --- a/packages/jest-snapshot/src/snapshot_resolver.js +++ b/packages/jest-snapshot/src/snapshot_resolver.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import type {ProjectConfig, Path} from 'types/Config'; import type {SnapshotResolver} from 'types/SnapshotResolver'; import chalk from 'chalk'; diff --git a/packages/jest-util/src/__tests__/get_callsite.test.js b/packages/jest-util/src/__tests__/get_callsite.test.js index da80a1de4433..98598f049f87 100644 --- a/packages/jest-util/src/__tests__/get_callsite.test.js +++ b/packages/jest-util/src/__tests__/get_callsite.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import fs from 'fs'; import SourceMap from 'source-map'; import getCallsite from '../get_callsite'; diff --git a/packages/jest-util/src/__tests__/is_interactive.test.js b/packages/jest-util/src/__tests__/is_interactive.test.js index 4ebad99490ba..d4b7efae05b2 100644 --- a/packages/jest-util/src/__tests__/is_interactive.test.js +++ b/packages/jest-util/src/__tests__/is_interactive.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + let oldIsTTY; let oldTERM; diff --git a/packages/jest-util/src/get_failed_snapshot_tests.js b/packages/jest-util/src/get_failed_snapshot_tests.js index eadf09212c47..a269174f8540 100644 --- a/packages/jest-util/src/get_failed_snapshot_tests.js +++ b/packages/jest-util/src/get_failed_snapshot_tests.js @@ -1,4 +1,9 @@ /** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * * @flow */ diff --git a/packages/jest-util/src/is_interative.js b/packages/jest-util/src/is_interative.js index 0a81e738ba2e..f98e94ddaed1 100644 --- a/packages/jest-util/src/is_interative.js +++ b/packages/jest-util/src/is_interative.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import isCI from 'is-ci'; export default process.stdout.isTTY && process.env.TERM !== 'dumb' && !isCI; diff --git a/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js b/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js index a29c327c52e1..c63a357cb3f6 100644 --- a/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js +++ b/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import scroll from '../scroll_list'; it('When offset is -1', () => { diff --git a/packages/jest-worker/src/__performance_tests__/test.js b/packages/jest-worker/src/__performance_tests__/test.js index 16b824e9f97b..6bccfe6ade86 100644 --- a/packages/jest-worker/src/__performance_tests__/test.js +++ b/packages/jest-worker/src/__performance_tests__/test.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; // eslint-disable-next-line import/no-extraneous-dependencies diff --git a/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js b/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js index 5468ec07aa65..532c3ce59ac3 100644 --- a/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js +++ b/packages/jest-worker/src/__performance_tests__/workers/jest_worker.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const pi = require('./pi'); diff --git a/packages/jest-worker/src/__performance_tests__/workers/pi.js b/packages/jest-worker/src/__performance_tests__/workers/pi.js index 12c7ceee835d..740e1da31633 100644 --- a/packages/jest-worker/src/__performance_tests__/workers/pi.js +++ b/packages/jest-worker/src/__performance_tests__/workers/pi.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = function() { diff --git a/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js b/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js index 360042c808b0..cfbd346b55ea 100644 --- a/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js +++ b/packages/jest-worker/src/__performance_tests__/workers/worker_farm.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; const pi = require('./pi'); diff --git a/types/Errors.js b/types/Errors.js index 0a067b013f02..4dc44b168bf9 100644 --- a/types/Errors.js +++ b/types/Errors.js @@ -1,2 +1,10 @@ -// @flow +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + export type ErrorWithCode = Error & {code?: string}; diff --git a/types/SnapshotResolver.js b/types/SnapshotResolver.js index 492ac322b0d9..8b776f2bf9a2 100644 --- a/types/SnapshotResolver.js +++ b/types/SnapshotResolver.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + import type {Path} from './Config'; export type SnapshotResolver = {| diff --git a/website/fetchSuporters.js b/website/fetchSuporters.js index bbdca3800524..485d92118d97 100644 --- a/website/fetchSuporters.js +++ b/website/fetchSuporters.js @@ -1,4 +1,7 @@ #!/usr/bin/env node + +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const fs = require('fs'); const request = require('request'); const path = require('path'); diff --git a/website/pages/en/videos.js b/website/pages/en/videos.js index b68d4c3f753c..6343c8b0afbd 100644 --- a/website/pages/en/videos.js +++ b/website/pages/en/videos.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + const React = require('react'); const {Container, MarkdownBlock} = require('../../core/CompLibrary.js'); From 319329f7942ed33f0be706a19a2b23d08eac0ea0 Mon Sep 17 00:00:00 2001 From: Mikhail Bodrov Date: Tue, 23 Oct 2018 23:01:59 +0300 Subject: [PATCH 44/76] Cache checking supports native platform (#7248) --- .../__snapshots__/module_name_mapper.test.js.snap | 2 +- .../resolve_no_file_extensions.test.js.snap | 2 +- packages/jest-resolve/src/index.js | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap b/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap index 1a30fe2acda9..9f692951261f 100644 --- a/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap +++ b/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap @@ -32,7 +32,7 @@ exports[`moduleNameMapper wrong configuration 1`] = ` 12 | module.exports = () => 'test'; 13 | - at packages/jest-resolve/build/index.js:411:17 + at packages/jest-resolve/build/index.js:410:17 at index.js:10:1 " diff --git a/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap index 2da5f494e08a..553e5cff5cf3 100644 --- a/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap +++ b/e2e/__tests__/__snapshots__/resolve_no_file_extensions.test.js.snap @@ -33,7 +33,7 @@ exports[`show error message with matching files 1`] = ` | ^ 4 | - at packages/jest-resolve/build/index.js:221:17 + at packages/jest-resolve/build/index.js:224:17 at index.js:3:18 " diff --git a/packages/jest-resolve/src/index.js b/packages/jest-resolve/src/index.js index e0c78a73a099..4d3c042d7117 100644 --- a/packages/jest-resolve/src/index.js +++ b/packages/jest-resolve/src/index.js @@ -67,6 +67,7 @@ class Resolver { _moduleIDCache: {[key: string]: string, __proto__: null}; _moduleNameCache: {[name: string]: Path, __proto__: null}; _modulePathCache: {[path: Path]: Array, __proto__: null}; + _supportsNativePlatform: boolean; constructor(moduleMap: ModuleMap, options: ResolverConfig) { this._options = { @@ -82,6 +83,9 @@ class Resolver { resolver: options.resolver, rootDir: options.rootDir, }; + this._supportsNativePlatform = options.platforms + ? options.platforms.includes(NATIVE_PLATFORM) + : false; this._moduleMap = moduleMap; this._moduleIDCache = Object.create(null); this._moduleNameCache = Object.create(null); @@ -118,7 +122,7 @@ class Resolver { const key = dirname + path.delimiter + moduleName; const defaultPlatform = this._options.defaultPlatform; const extensions = this._options.extensions.slice(); - if (this._supportsNativePlatform()) { + if (this._supportsNativePlatform) { extensions.unshift( ...this._options.extensions.map(ext => '.' + NATIVE_PLATFORM + ext), ); @@ -221,7 +225,7 @@ class Resolver { return this._moduleMap.getModule( name, this._options.defaultPlatform, - this._supportsNativePlatform(), + this._supportsNativePlatform, ); } @@ -236,7 +240,7 @@ class Resolver { return this._moduleMap.getPackage( name, this._options.defaultPlatform, - this._supportsNativePlatform(), + this._supportsNativePlatform, ); } @@ -381,10 +385,6 @@ class Resolver { } return null; } - - _supportsNativePlatform() { - return (this._options.platforms || []).indexOf(NATIVE_PLATFORM) !== -1; - } } const createNoMappedModuleFoundError = ( From d5c74a2a6b62f50f3c54e322f8f4fa703d5c3393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Wed, 24 Oct 2018 13:31:14 +0100 Subject: [PATCH 45/76] Fix serialization issues with RegExp instances in the normalized config (#7251) --- CHANGELOG.md | 1 + TestUtils.js | 2 +- .../coverage_report.test.js.snap | 17 ++++++++++++++++ e2e/__tests__/coverage_report.test.js | 10 ++++++++++ packages/jest-cli/src/SearchSource.js | 4 ++-- .../__tests__/generateEmptyCoverage.test.js | 1 - packages/jest-config/src/ValidConfig.js | 4 ++-- .../__snapshots__/normalize.test.js.snap | 11 ---------- .../src/__tests__/normalize.test.js | 20 ++++--------------- packages/jest-config/src/normalize.js | 20 +++---------------- .../src/__tests__/should_instrument.test.js | 8 ++++---- .../jest-runtime/src/should_instrument.js | 2 +- packages/jest-validate/README.md | 4 ++-- .../src/__tests__/validate.test.js | 8 ++++---- packages/jest-validate/src/condition.js | 14 +++++++------ packages/jest-validate/src/index.js | 4 ++-- types/Config.js | 6 +++--- 17 files changed, 64 insertions(+), 72 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d66593d8068..6511d5f559a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ - `[jest-runtime]` Fix transform cache invalidation when requiring a test file from multiple projects ([#7186](https://github.com/facebook/jest/pull/7186)) - `[jest-changed-files]` Return correctly the changed files when using `lastCommit=true` on Mercurial repositories ([#7228](https://github.com/facebook/jest/pull/7228)) - `[babel-jest]` Cache includes babel environment variables ([#7239](https://github.com/facebook/jest/pull/7239)) +- `[jest-config]` Use strings instead of `RegExp` instances in normalized configuration ([#7251](https://github.com/facebook/jest/pull/7251)) ### Chore & Maintenance diff --git a/TestUtils.js b/TestUtils.js index a65743e66145..3734d8ec5a55 100644 --- a/TestUtils.js +++ b/TestUtils.js @@ -109,7 +109,7 @@ const DEFAULT_PROJECT_CONFIG: ProjectConfig = { testLocationInResults: false, testMatch: [], testPathIgnorePatterns: [], - testRegex: [/\.test\.js$/], + testRegex: ['\\.test\\.js$'], testRunner: 'jest-jasmine2', testURL: '', timers: 'real', diff --git a/e2e/__tests__/__snapshots__/coverage_report.test.js.snap b/e2e/__tests__/__snapshots__/coverage_report.test.js.snap index 0e2fae8499c8..e741fd69db6a 100644 --- a/e2e/__tests__/__snapshots__/coverage_report.test.js.snap +++ b/e2e/__tests__/__snapshots__/coverage_report.test.js.snap @@ -42,6 +42,23 @@ All files | 85.71 | 100 | 50 | 100 | | exports[`does not output coverage report when html is requested 1`] = `""`; +exports[`generates coverage when using the testRegex config param 1`] = ` +"-------------------------------------|----------|----------|----------|----------|-------------------| +File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s | +-------------------------------------|----------|----------|----------|----------|-------------------| +All files | 56.52 | 0 | 50 | 55.56 | | + coverage-report | 41.18 | 0 | 25 | 42.86 | | + OtherFile.js | 100 | 100 | 100 | 100 | | + Sum.js | 85.71 | 100 | 50 | 100 | | + SumDependency.js | 0 | 0 | 0 | 0 | 8,10,12 | + notRequiredInTestSuite.js | 0 | 0 | 0 | 0 | 8,15,16,17,19 | + coverage-report/cached-duplicates/a | 100 | 100 | 100 | 100 | | + Identical.js | 100 | 100 | 100 | 100 | | + coverage-report/cached-duplicates/b | 100 | 100 | 100 | 100 | | + Identical.js | 100 | 100 | 100 | 100 | | +-------------------------------------|----------|----------|----------|----------|-------------------|" +`; + exports[`json reporter printing with --coverage 1`] = ` "Test Suites: 1 failed, 1 total Tests: 1 failed, 2 passed, 3 total diff --git a/e2e/__tests__/coverage_report.test.js b/e2e/__tests__/coverage_report.test.js index 66bbbd19d064..d12b0f2f7b3a 100644 --- a/e2e/__tests__/coverage_report.test.js +++ b/e2e/__tests__/coverage_report.test.js @@ -185,3 +185,13 @@ test('collects coverage from duplicate files avoiding shared cache', () => { expect(stdout).toMatchSnapshot(); expect(status).toBe(0); }); + +test('generates coverage when using the testRegex config param ', () => { + const {stdout, status} = runJest(DIR, [ + '--no-cache', + '--testRegex=__tests__', + '--coverage', + ]); + expect(stdout).toMatchSnapshot(); + expect(status).toBe(0); +}); diff --git a/packages/jest-cli/src/SearchSource.js b/packages/jest-cli/src/SearchSource.js index af000440a0c0..dae434cf7b41 100644 --- a/packages/jest-cli/src/SearchSource.js +++ b/packages/jest-cli/src/SearchSource.js @@ -51,12 +51,12 @@ const globsToMatcher = (globs: ?Array) => { return path => micromatch([path], globs, {dot: true}).length > 0; }; -const regexToMatcher = (testRegex: Array) => { +const regexToMatcher = (testRegex: Array) => { if (!testRegex.length) { return () => true; } - return path => testRegex.some(e => e.test(path)); + return path => testRegex.some(testRegex => new RegExp(testRegex).test(path)); }; const toTests = (context, tests) => diff --git a/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js b/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js index fe69dc6a43f4..8245f914e312 100644 --- a/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js +++ b/packages/jest-cli/src/__tests__/generateEmptyCoverage.test.js @@ -14,7 +14,6 @@ const os = require('os'); const {makeGlobalConfig, makeProjectConfig} = require('../../../../TestUtils'); jest.mock('jest-runtime', () => { - // $FlowFixMe requireActual const realRuntime = jest.requireActual('jest-runtime'); realRuntime.shouldInstrument = () => true; return realRuntime; diff --git a/packages/jest-config/src/ValidConfig.js b/packages/jest-config/src/ValidConfig.js index 608dc770ab76..cb732dc76555 100644 --- a/packages/jest-config/src/ValidConfig.js +++ b/packages/jest-config/src/ValidConfig.js @@ -10,7 +10,7 @@ import type {InitialOptions} from 'types/Config'; import {replacePathSepForRegex} from 'jest-regex-util'; -import {MultipleValidOptions} from 'jest-validate'; +import {multipleValidOptions} from 'jest-validate'; import {NODE_MODULES} from './constants'; const NODE_MODULES_REGEXP = replacePathSepForRegex(NODE_MODULES); @@ -101,7 +101,7 @@ export default ({ testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], testNamePattern: 'test signature', testPathIgnorePatterns: [NODE_MODULES_REGEXP], - testRegex: MultipleValidOptions( + testRegex: multipleValidOptions( '(/__tests__/.*|(\\.|/)(test|spec))\\.jsx?$', ['/__tests__/\\.test\\.jsx?$', '/__tests__/\\.spec\\.jsx?$'], ), diff --git a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap index 9eb36c229fa6..c8edc2f5911b 100644 --- a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap +++ b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap @@ -90,17 +90,6 @@ exports[`testMatch throws if testRegex and testMatch are both specified 1`] = ` " `; -exports[`testMatch throws if testRegex is provided an invalid regex string 1`] = ` -"Validation Error: - -Error parsing configuration for testRegex: \\"foo(bar\\" could not be parsed. -Error: Invalid regular expression: /foo(bar/: Unterminated group - - Configuration Documentation: - https://jestjs.io/docs/configuration.html -" -`; - exports[`testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; exports[`testPathPattern --testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 030ef345e050..48c2fc306b01 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -860,7 +860,7 @@ describe('testRegex', () => { expect(options.testRegex).toEqual([]); }); - it('testRegex string is mapped to array of RegExp objects', () => { + it('testRegex string is mapped to an array', () => { const {options} = normalize( { rootDir: '/root', @@ -869,9 +869,9 @@ describe('testRegex', () => { {}, ); - expect(options.testRegex).toEqual([/.*/]); + expect(options.testRegex).toEqual(['.*']); }); - it('testRegex array is mapped to array of RegExp objects', () => { + it('testRegex array is preserved', () => { const {options} = normalize( { rootDir: '/root', @@ -880,7 +880,7 @@ describe('testRegex', () => { {}, ); - expect(options.testRegex).toEqual([/.*/, /foo\.bar/]); + expect(options.testRegex).toEqual(['.*', 'foo\\.bar']); }); }); @@ -922,18 +922,6 @@ describe('testMatch', () => { }).toThrowErrorMatchingSnapshot(); }); - it('throws if testRegex is provided an invalid regex string', () => { - expect(() => { - normalize( - { - rootDir: '/root', - testRegex: 'foo(bar', - }, - {}, - ); - }).toThrowErrorMatchingSnapshot(); - }); - it('normalizes testMatch', () => { const {options} = normalize( { diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 97e568153cc3..018f223d87f9 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -569,23 +569,9 @@ export default function normalize(options: InitialOptions, argv: Argv) { ); break; case 'testRegex': - const valueOrEmptyArray = options[key] || []; - const valueArray = Array.isArray(valueOrEmptyArray) - ? valueOrEmptyArray - : [valueOrEmptyArray]; - - value = valueArray.map(replacePathSepForRegex).map(pattern => { - try { - return new RegExp(pattern); - } catch (err) { - throw createConfigError( - `Error parsing configuration for ${chalk.bold( - key, - )}: "${pattern}" could not be parsed.\n` + - `Error: ${err.message}`, - ); - } - }); + value = options[key] + ? [].concat(options[key]).map(replacePathSepForRegex) + : []; break; case 'moduleFileExtensions': { value = options[key]; diff --git a/packages/jest-runtime/src/__tests__/should_instrument.test.js b/packages/jest-runtime/src/__tests__/should_instrument.test.js index 9003579b427d..47d84a96994e 100644 --- a/packages/jest-runtime/src/__tests__/should_instrument.test.js +++ b/packages/jest-runtime/src/__tests__/should_instrument.test.js @@ -29,13 +29,13 @@ describe('should_instrument', () => { it('when testRegex provided and file is not a test file', () => { testShouldInstrument('source_file.js', defaultOptions, { - testRegex: [/.*\.(test)\\.(js)$'/], + testRegex: ['.*\\.(test)\\.(js)$'], }); }); it('when more than one testRegex is provided and filename is not a test file', () => { testShouldInstrument('source_file.js', defaultOptions, { - testRegex: [/.*\_(test)\.(js)$/, /.*\.(test)\.(js)$/, /never/], + testRegex: ['.*\\_(test)\\.(js)$', '.*\\.(test)\\.(js)$', 'never'], }); }); @@ -121,13 +121,13 @@ describe('should_instrument', () => { it('when testRegex provided and filename is a test file', () => { testShouldInstrument(defaultFilename, defaultOptions, { - testRegex: [/.*\.(test)\.(js)$/], + testRegex: ['.*\\.(test)\\.(js)$'], }); }); it('when more than one testRegex is provided and filename matches one of the patterns', () => { testShouldInstrument(defaultFilename, defaultOptions, { - testRegex: [/.*\_(test)\.(js)$/, /.*\.(test)\.(js)$/, /never/], + testRegex: ['.*\\_(test)\\.(js)$', '.*\\.(test)\\.(js)$', 'never'], }); }); diff --git a/packages/jest-runtime/src/should_instrument.js b/packages/jest-runtime/src/should_instrument.js index 1f0317f8d715..26189a5a4f0b 100644 --- a/packages/jest-runtime/src/should_instrument.js +++ b/packages/jest-runtime/src/should_instrument.js @@ -37,7 +37,7 @@ export default function shouldInstrument( if ( config.testRegex && - config.testRegex.some(regex => regex.test(filename)) + config.testRegex.some(regex => new RegExp(regex).test(filename)) ) { return false; } diff --git a/packages/jest-validate/README.md b/packages/jest-validate/README.md index f846b615fbc3..efe749a25838 100644 --- a/packages/jest-validate/README.md +++ b/packages/jest-validate/README.md @@ -141,11 +141,11 @@ This will output: ## Example validating multiple types ```js -import {MultipleValidOptions} from 'jest-validate'; +import {multipleValidOptions} from 'jest-validate'; validate(config, { // `bar` will accept either a string or a number - bar: MultipleValidOptions('string is ok', 2), + bar: multipleValidOptions('string is ok', 2), }); ``` diff --git a/packages/jest-validate/src/__tests__/validate.test.js b/packages/jest-validate/src/__tests__/validate.test.js index 59aed5ace5d1..a03895a813c6 100644 --- a/packages/jest-validate/src/__tests__/validate.test.js +++ b/packages/jest-validate/src/__tests__/validate.test.js @@ -9,7 +9,7 @@ 'use strict'; import validate from '../validate'; -import {MultipleValidOptions} from '../condition'; +import {multipleValidOptions} from '../condition'; import jestValidateExampleConfig from '../example_config'; import jestValidateDefaultConfig from '../default_config'; @@ -210,7 +210,7 @@ test('works with custom deprecations', () => { test('works with multiple valid types', () => { const exampleConfig = { - foo: MultipleValidOptions('text', ['text']), + foo: multipleValidOptions('text', ['text']), }; expect( @@ -239,7 +239,7 @@ test('works with multiple valid types', () => { test('reports errors nicely when failing with multiple valid options', () => { const exampleConfig = { - foo: MultipleValidOptions('text', ['text']), + foo: multipleValidOptions('text', ['text']), }; expect(() => @@ -254,7 +254,7 @@ test('reports errors nicely when failing with multiple valid options', () => { test('Repeated types within multiple valid examples are coalesced in error report', () => { const exampleConfig = { - foo: MultipleValidOptions('foo', 'bar', 2), + foo: multipleValidOptions('foo', 'bar', 2), }; expect(() => diff --git a/packages/jest-validate/src/condition.js b/packages/jest-validate/src/condition.js index d3dc05c36d55..5f84b5d2fee2 100644 --- a/packages/jest-validate/src/condition.js +++ b/packages/jest-validate/src/condition.js @@ -9,7 +9,7 @@ const toString = Object.prototype.toString; -const MultipleValidOptionsSymbol = Symbol('JEST_MULTIPLE_VALID_OPTIONS'); +const MULTIPLE_VALID_OPTIONS_SYMBOL = Symbol('JEST_MULTIPLE_VALID_OPTIONS'); function validationConditionSingle(option: any, validOption: any): boolean { return ( @@ -22,10 +22,9 @@ function validationConditionSingle(option: any, validOption: any): boolean { export function getValues(validOption: any) { if ( Array.isArray(validOption) && - validOption.length && - validOption[0] === MultipleValidOptionsSymbol + validOption[MULTIPLE_VALID_OPTIONS_SYMBOL] ) { - return validOption.slice(1); + return validOption; } return [validOption]; } @@ -34,6 +33,9 @@ export function validationCondition(option: any, validOption: any): boolean { return getValues(validOption).some(e => validationConditionSingle(option, e)); } -export function MultipleValidOptions(...args: Array) { - return [MultipleValidOptionsSymbol, ...args]; +export function multipleValidOptions(...args: Array) { + const options = [...args]; + // $FlowFixMe + options[MULTIPLE_VALID_OPTIONS_SYMBOL] = true; + return options; } diff --git a/packages/jest-validate/src/index.js b/packages/jest-validate/src/index.js index eca9c33fb8b5..3a62ea7e5315 100644 --- a/packages/jest-validate/src/index.js +++ b/packages/jest-validate/src/index.js @@ -15,14 +15,14 @@ import { } from './utils'; import validate from './validate'; import validateCLIOptions from './validate_cli_options'; -import {MultipleValidOptions} from './condition'; +import {multipleValidOptions} from './condition'; module.exports = { - MultipleValidOptions, ValidationError, createDidYouMeanMessage, format, logValidationWarning, + multipleValidOptions, validate, validateCLIOptions, }; diff --git a/types/Config.js b/types/Config.js index 7de867ffcbf9..c152976c0957 100644 --- a/types/Config.js +++ b/types/Config.js @@ -74,7 +74,7 @@ export type DefaultOptions = {| testLocationInResults: boolean, testMatch: Array, testPathIgnorePatterns: Array, - testRegex: Array, + testRegex: Array, testResultsProcessor: ?string, testRunner: ?string, testURL: string, @@ -166,7 +166,7 @@ export type InitialOptions = { testNamePattern?: string, testPathDirs?: Array, testPathIgnorePatterns?: Array, - testRegex?: string | Array, + testRegex?: string | Array, testResultsProcessor?: ?string, testRunner?: string, testURL?: string, @@ -283,7 +283,7 @@ export type ProjectConfig = {| testMatch: Array, testLocationInResults: boolean, testPathIgnorePatterns: Array, - testRegex: Array, + testRegex: Array, testRunner: string, testURL: string, timers: 'real' | 'fake', From 561b767b2db1e4306fefb310e3a7cc5e2e42d874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Wed, 24 Oct 2018 13:40:37 +0100 Subject: [PATCH 46/76] Revert #7074 (#7259) --- CHANGELOG.md | 2 - .../__snapshots__/timeouts.test.js.snap | 42 -------- e2e/__tests__/timeouts.test.js | 95 ------------------- packages/jest-circus/src/event_handler.js | 3 +- packages/jest-circus/src/utils.js | 12 +-- .../src/__tests__/p_timeout.test.js | 19 +--- packages/jest-jasmine2/src/p_timeout.js | 10 +- packages/jest-jasmine2/src/queue_runner.js | 5 - 8 files changed, 7 insertions(+), 181 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6511d5f559a0..2ebdec78cb0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,8 +40,6 @@ - `[jest-jasmine2`] Fix crash when test return Promise rejected with null ([#7049](https://github.com/facebook/jest/pull/7049)) - `[jest-runtime]` Check `_isMockFunction` is true rather than truthy on potential global mocks ([#7017](https://github.com/facebook/jest/pull/7017)) - `[jest-jasmine]` Show proper error message from async `assert` errors ([#6821](https://github.com/facebook/jest/pull/6821)) -- `[jest-circus]` Fail synchronous hook timeouts ([#7074](https://github.com/facebook/jest/pull/7074)) -- `[jest-jasmine2]` Fail synchronous test timeouts ([#7074](https://github.com/facebook/jest/pull/7074)) - `[jest-jasmine2]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) - `[jest-jasmine2]` Pending calls inside async tests are reported as pending not failed ([#6782](https://github.com/facebook/jest/pull/6782)) - `[jest-circus]` Better error message when a describe block is empty ([#6372](https://github.com/facebook/jest/pull/6372)) diff --git a/e2e/__tests__/__snapshots__/timeouts.test.js.snap b/e2e/__tests__/__snapshots__/timeouts.test.js.snap index 1e759de52d00..a74c620e52db 100644 --- a/e2e/__tests__/__snapshots__/timeouts.test.js.snap +++ b/e2e/__tests__/__snapshots__/timeouts.test.js.snap @@ -1,38 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`before hook does not exceed the timeout 1`] = ` -"PASS __tests__/a-banana.js - ✓ banana - -" -`; - -exports[`before hook does not exceed the timeout 2`] = ` -"Test Suites: 1 passed, 1 total -Tests: 1 passed, 1 total -Snapshots: 0 total -Time: <> -Ran all test suites." -`; - -exports[`before hook exceeds the timeout 1`] = ` -"Test Suites: 1 failed, 1 total -Tests: 1 failed, 1 total -Snapshots: 0 total -Time: <> -Ran all test suites. -" -`; - -exports[`before hook exceeds the timeout synchronously 1`] = ` -"Test Suites: 1 failed, 1 total -Tests: 1 failed, 1 total -Snapshots: 0 total -Time: <> -Ran all test suites. -" -`; - exports[`does not exceed the timeout 1`] = ` "PASS __tests__/a-banana.js ✓ banana @@ -56,12 +23,3 @@ Time: <> Ran all test suites. " `; - -exports[`exceeds the timeout synchronously 1`] = ` -"Test Suites: 1 failed, 1 total -Tests: 1 failed, 1 total -Snapshots: 0 total -Time: <> -Ran all test suites. -" -`; diff --git a/e2e/__tests__/timeouts.test.js b/e2e/__tests__/timeouts.test.js index edf3a965f1ae..f7284650f7f2 100644 --- a/e2e/__tests__/timeouts.test.js +++ b/e2e/__tests__/timeouts.test.js @@ -40,29 +40,6 @@ test('exceeds the timeout', () => { expect(status).toBe(1); }); -test('exceeds the timeout synchronously', () => { - writeFiles(DIR, { - '__tests__/a-banana.js': ` - jest.setTimeout(20); - - test('banana', () => { - const startTime = Date.now(); - while (Date.now() - startTime < 100) { - } - }); - `, - 'package.json': '{}', - }); - - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); - const {rest, summary} = extractSummary(stderr); - expect(rest).toMatch( - /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, - ); - expect(summary).toMatchSnapshot(); - expect(status).toBe(1); -}); - test('does not exceed the timeout', () => { writeFiles(DIR, { '__tests__/a-banana.js': ` @@ -83,75 +60,3 @@ test('does not exceed the timeout', () => { expect(summary).toMatchSnapshot(); expect(status).toBe(0); }); - -test('before hook exceeds the timeout', () => { - writeFiles(DIR, { - '__tests__/a-banana.js': ` - jest.setTimeout(20); - - beforeEach(() => { - return new Promise(resolve => { - setTimeout(resolve, 100); - }); - }) - - test('banana', () => {}); - `, - 'package.json': '{}', - }); - - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); - const {rest, summary} = extractSummary(stderr); - expect(rest).toMatch( - /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, - ); - expect(summary).toMatchSnapshot(); - expect(status).toBe(1); -}); - -test('before hook exceeds the timeout synchronously', () => { - writeFiles(DIR, { - '__tests__/a-banana.js': ` - jest.setTimeout(20); - - beforeEach(() => { - const startTime = Date.now(); - while (Date.now() - startTime < 100) {} - }) - - test('banana', () => {}); - `, - 'package.json': '{}', - }); - - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); - const {rest, summary} = extractSummary(stderr); - expect(rest).toMatch( - /(jest\.setTimeout|jasmine\.DEFAULT_TIMEOUT_INTERVAL|Exceeded timeout)/, - ); - expect(summary).toMatchSnapshot(); - expect(status).toBe(1); -}); - -test('before hook does not exceed the timeout', () => { - writeFiles(DIR, { - '__tests__/a-banana.js': ` - jest.setTimeout(100); - - beforeEach(() => { - return new Promise(resolve => { - setTimeout(resolve, 20); - }); - }) - - test('banana', () => {}); - `, - 'package.json': '{}', - }); - - const {stderr, status} = runJest(DIR, ['-w=1', '--ci=false']); - const {rest, summary} = extractSummary(stderr); - expect(rest).toMatchSnapshot(); - expect(summary).toMatchSnapshot(); - expect(status).toBe(0); -}); diff --git a/packages/jest-circus/src/event_handler.js b/packages/jest-circus/src/event_handler.js index ae32b153b92a..fb5af141b802 100644 --- a/packages/jest-circus/src/event_handler.js +++ b/packages/jest-circus/src/event_handler.js @@ -16,7 +16,6 @@ import { invariant, makeTest, describeBlockHasTests, - getTimestamp, } from './utils'; import { injectGlobalErrorHandlers, @@ -118,7 +117,7 @@ const handler: EventHandler = (event, state): void => { } case 'test_start': { state.currentlyRunningTest = event.test; - event.test.startedAt = getTimestamp(); + event.test.startedAt = Date.now(); event.test.invocations += 1; break; } diff --git a/packages/jest-circus/src/utils.js b/packages/jest-circus/src/utils.js index e82de5269582..2f0a44af3c37 100644 --- a/packages/jest-circus/src/utils.js +++ b/packages/jest-circus/src/utils.js @@ -155,7 +155,7 @@ export const getEachHooksForTest = ( export const describeBlockHasTests = (describe: DescribeBlock) => describe.tests.length || describe.children.some(describeBlockHasTests); -const _makeTimeoutMessage = (timeout: number, isHook: ?boolean) => +const _makeTimeoutMessage = (timeout, isHook) => `Exceeded timeout of ${timeout}ms for a ${ isHook ? 'hook' : 'test' }.\nUse jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test.`; @@ -167,10 +167,9 @@ const {setTimeout, clearTimeout} = global; export const callAsyncCircusFn = ( fn: AsyncFn, testContext: ?TestContext, - {isHook, timeout}: {isHook: ?boolean, timeout: number}, + {isHook, timeout}: {isHook?: ?boolean, timeout: number}, ): Promise => { let timeoutID; - const startedAt = getTimestamp(); return new Promise((resolve, reject) => { timeoutID = setTimeout( @@ -237,9 +236,6 @@ export const callAsyncCircusFn = ( // it's resolved. timeoutID.unref && timeoutID.unref(); clearTimeout(timeoutID); - if (getTimestamp() - startedAt > timeout) { - throw new Error(_makeTimeoutMessage(timeout, isHook)); - } }) .catch(error => { timeoutID.unref && timeoutID.unref(); @@ -248,11 +244,9 @@ export const callAsyncCircusFn = ( }); }; -export const getTimestamp = Date.now.bind(Date); - export const getTestDuration = (test: TestEntry): ?number => { const {startedAt} = test; - return startedAt ? getTimestamp() - startedAt : null; + return startedAt ? Date.now() - startedAt : null; }; export const makeRunResult = ( diff --git a/packages/jest-jasmine2/src/__tests__/p_timeout.test.js b/packages/jest-jasmine2/src/__tests__/p_timeout.test.js index 6f32025029ef..d0bccd1d237a 100644 --- a/packages/jest-jasmine2/src/__tests__/p_timeout.test.js +++ b/packages/jest-jasmine2/src/__tests__/p_timeout.test.js @@ -16,14 +16,7 @@ describe('pTimeout', () => { it('calls `clearTimeout` and resolves when `promise` resolves.', async () => { const onTimeout = jest.fn(); const promise = Promise.resolve(); - await pTimeout( - promise, - Date.now(), - 1000, - clearTimeout, - setTimeout, - onTimeout, - ); + await pTimeout(promise, 1000, clearTimeout, setTimeout, onTimeout); expect(setTimeout).toHaveBeenCalled(); expect(clearTimeout).toHaveBeenCalled(); expect(onTimeout).not.toHaveBeenCalled(); @@ -33,14 +26,7 @@ describe('pTimeout', () => { const onTimeout = jest.fn(); const promise = Promise.reject(); try { - await pTimeout( - promise, - Date.now(), - 1000, - clearTimeout, - setTimeout, - onTimeout, - ); + await pTimeout(promise, 1000, clearTimeout, setTimeout, onTimeout); } catch (e) {} expect(setTimeout).toHaveBeenCalled(); expect(clearTimeout).toHaveBeenCalled(); @@ -53,7 +39,6 @@ describe('pTimeout', () => { const promise = new Promise(() => {}); const timeoutPromise = pTimeout( promise, - Date.now(), 1000, clearTimeout, setTimeout, diff --git a/packages/jest-jasmine2/src/p_timeout.js b/packages/jest-jasmine2/src/p_timeout.js index 00fa6587a584..99c217ea5ce7 100644 --- a/packages/jest-jasmine2/src/p_timeout.js +++ b/packages/jest-jasmine2/src/p_timeout.js @@ -10,13 +10,11 @@ // Try getting the real promise object from the context, if available. Someone // could have overridden it in a test. const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; -const timestamp = Date.now.bind(Date); // A specialized version of `p-timeout` that does not touch globals. // It does not throw on timeout. export default function pTimeout( promise: Promise, - startTime: number, ms: number, clearTimeout: (timeoutID: number) => void, setTimeout: (func: () => void, delay: number) => number, @@ -27,13 +25,7 @@ export default function pTimeout( promise.then( val => { clearTimeout(timer); - - // when running single threaded, we need to double check the timeout - if (timestamp() - startTime > ms) { - resolve(onTimeout()); - } else { - resolve(val); - } + resolve(val); }, err => { clearTimeout(timer); diff --git a/packages/jest-jasmine2/src/queue_runner.js b/packages/jest-jasmine2/src/queue_runner.js index 14b00d6a091f..d72ec1bfabbd 100644 --- a/packages/jest-jasmine2/src/queue_runner.js +++ b/packages/jest-jasmine2/src/queue_runner.js @@ -11,7 +11,6 @@ // could have overridden it in a test. const Promise: Class = global[Symbol.for('jest-native-promise')] || global.Promise; -const timestamp = Date.now.bind(Date); import PCancelable from './p_cancelable'; import pTimeout from './p_timeout'; @@ -36,8 +35,6 @@ export default function queueRunner(options: Options) { }); const mapper = ({fn, timeout, initError = new Error()}) => { - // Flow wants us to initialize this even though it's safe - let startTime: number = timestamp(); let promise = new Promise(resolve => { const next = function(err) { if (err) { @@ -51,7 +48,6 @@ export default function queueRunner(options: Options) { resolve(); }; try { - startTime = timestamp(); fn.call(options.userContext, next); } catch (e) { options.onException(e); @@ -69,7 +65,6 @@ export default function queueRunner(options: Options) { return pTimeout( promise, - startTime, timeoutMs, options.clearTimeout, options.setTimeout, From 187ca9ea2cea52e7aec444677101d638ef7c095f Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 24 Oct 2018 16:02:08 +0200 Subject: [PATCH 47/76] chore: add babel plugin to make sure Jest is unaffected by fake Promise implementations (#7225) --- CHANGELOG.md | 1 + .../jest_adapter_init.js | 77 ++++++++++--------- packages/jest-circus/src/run.js | 3 - packages/jest-circus/src/utils.js | 6 -- packages/jest-jasmine2/src/jasmine/Env.js | 5 -- packages/jest-jasmine2/src/p_cancelable.js | 4 - packages/jest-jasmine2/src/p_timeout.js | 4 - packages/jest-jasmine2/src/queue_runner.js | 8 +- packages/jest-jasmine2/src/reporter.js | 4 - packages/jest-jasmine2/src/tree_processor.js | 5 -- scripts/babel-plugin-jest-native-promise.js | 31 ++++++++ scripts/build.js | 8 +- types/Circus.js | 3 +- types/TestResult.js | 1 + 14 files changed, 83 insertions(+), 77 deletions(-) create mode 100644 scripts/babel-plugin-jest-native-promise.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ebdec78cb0c..5dcbe823063a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -80,6 +80,7 @@ - `[jest-test-typescript-parser]` Remove from the repository ([#7232](https://github.com/facebook/jest/pull/7232)) - `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) - `[jest-diff]` Standardize filenames ([#7238](https://github.com/facebook/jest/pull/7238)) +- `[*]` Add babel plugin to make sure Jest is unaffected by fake Promise implementations ([#7225](https://github.com/facebook/jest/pull/7225)) ### Performance diff --git a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js b/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js index 34108cb12307..9ceed2811e66 100644 --- a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js +++ b/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js @@ -7,9 +7,9 @@ * @flow */ -import type {TestResult, Status} from 'types/TestResult'; +import type {AssertionResult, TestResult, Status} from 'types/TestResult'; import type {GlobalConfig, Path, ProjectConfig} from 'types/Config'; -import type {Event, TestEntry} from 'types/Circus'; +import type {Event, RunResult, TestEntry} from 'types/Circus'; import {extractExpectedAssertionsErrors, getState, setState} from 'expect'; import {formatExecError, formatResultsErrors} from 'jest-message-util'; @@ -19,12 +19,11 @@ import { buildSnapshotResolver, } from 'jest-snapshot'; import {addEventHandler, dispatch, ROOT_DESCRIBE_BLOCK_NAME} from '../state'; -import {getTestID, getOriginalPromise} from '../utils'; +import {getTestID} from '../utils'; import run from '../run'; // eslint-disable-next-line import/default import globals from '../index'; -const Promise = getOriginalPromise(); export const initialize = ({ config, getPrettier, @@ -123,46 +122,48 @@ export const runAndTransformResultsToJestFormat = async ({ globalConfig: GlobalConfig, testPath: string, }): Promise => { - const runResult = await run(); + const runResult: RunResult = await run(); let numFailingTests = 0; let numPassingTests = 0; let numPendingTests = 0; let numTodoTests = 0; - const assertionResults = runResult.testResults.map(testResult => { - let status: Status; - if (testResult.status === 'skip') { - status = 'pending'; - numPendingTests += 1; - } else if (testResult.status === 'todo') { - status = 'todo'; - numTodoTests += 1; - } else if (testResult.errors.length) { - status = 'failed'; - numFailingTests += 1; - } else { - status = 'passed'; - numPassingTests += 1; - } - - const ancestorTitles = testResult.testPath.filter( - name => name !== ROOT_DESCRIBE_BLOCK_NAME, - ); - const title = ancestorTitles.pop(); - - return { - ancestorTitles, - duration: testResult.duration, - failureMessages: testResult.errors, - fullName: ancestorTitles.concat(title).join(' '), - invocations: testResult.invocations, - location: testResult.location, - numPassingAsserts: 0, - status, - title: testResult.testPath[testResult.testPath.length - 1], - }; - }); + const assertionResults: Array = runResult.testResults.map( + testResult => { + let status: Status; + if (testResult.status === 'skip') { + status = 'pending'; + numPendingTests += 1; + } else if (testResult.status === 'todo') { + status = 'todo'; + numTodoTests += 1; + } else if (testResult.errors.length) { + status = 'failed'; + numFailingTests += 1; + } else { + status = 'passed'; + numPassingTests += 1; + } + + const ancestorTitles = testResult.testPath.filter( + name => name !== ROOT_DESCRIBE_BLOCK_NAME, + ); + const title = ancestorTitles.pop(); + + return { + ancestorTitles, + duration: testResult.duration, + failureMessages: testResult.errors, + fullName: ancestorTitles.concat(title).join(' '), + invocations: testResult.invocations, + location: testResult.location, + numPassingAsserts: 0, + status, + title: testResult.testPath[testResult.testPath.length - 1], + }; + }, + ); let failureMessage = formatResultsErrors( assertionResults, diff --git a/packages/jest-circus/src/run.js b/packages/jest-circus/src/run.js index 37fcfc8d1616..507dfc441193 100644 --- a/packages/jest-circus/src/run.js +++ b/packages/jest-circus/src/run.js @@ -23,11 +23,8 @@ import { getTestID, invariant, makeRunResult, - getOriginalPromise, } from './utils'; -const Promise = getOriginalPromise(); - const run = async (): Promise => { const {rootDescribeBlock} = getState(); dispatch({name: 'run_start'}); diff --git a/packages/jest-circus/src/utils.js b/packages/jest-circus/src/utils.js index 2f0a44af3c37..96da54744ecf 100644 --- a/packages/jest-circus/src/utils.js +++ b/packages/jest-circus/src/utils.js @@ -32,12 +32,6 @@ import prettyFormat from 'pretty-format'; import {getState} from './state'; -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. Async functions return it implicitly. -// eslint-disable-next-line no-unused-vars -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; -export const getOriginalPromise = () => Promise; - const stackUtils = new StackUtils({cwd: 'A path that does not exist'}); export const makeDescribe = ( diff --git a/packages/jest-jasmine2/src/jasmine/Env.js b/packages/jest-jasmine2/src/jasmine/Env.js index 0e57d1f1968b..21d27d753c23 100644 --- a/packages/jest-jasmine2/src/jasmine/Env.js +++ b/packages/jest-jasmine2/src/jasmine/Env.js @@ -37,11 +37,6 @@ import checkIsError from '../is_error'; import assertionErrorMessage from '../assert_support'; import {ErrorWithStack} from 'jest-util'; -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. Async functions return it implicitly. -// eslint-disable-next-line no-unused-vars -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; - export default function(j$) { function Env(options) { options = options || {}; diff --git a/packages/jest-jasmine2/src/p_cancelable.js b/packages/jest-jasmine2/src/p_cancelable.js index 1b54f624c6d7..4af085802444 100644 --- a/packages/jest-jasmine2/src/p_cancelable.js +++ b/packages/jest-jasmine2/src/p_cancelable.js @@ -2,10 +2,6 @@ 'use strict'; -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; - class CancelError extends Error { constructor() { super('Promise was canceled'); diff --git a/packages/jest-jasmine2/src/p_timeout.js b/packages/jest-jasmine2/src/p_timeout.js index 99c217ea5ce7..f255f3440a5a 100644 --- a/packages/jest-jasmine2/src/p_timeout.js +++ b/packages/jest-jasmine2/src/p_timeout.js @@ -7,10 +7,6 @@ * @flow */ -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; - // A specialized version of `p-timeout` that does not touch globals. // It does not throw on timeout. export default function pTimeout( diff --git a/packages/jest-jasmine2/src/queue_runner.js b/packages/jest-jasmine2/src/queue_runner.js index d72ec1bfabbd..280a1ff73edd 100644 --- a/packages/jest-jasmine2/src/queue_runner.js +++ b/packages/jest-jasmine2/src/queue_runner.js @@ -7,11 +7,6 @@ * @flow */ -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. -const Promise: Class = - global[Symbol.for('jest-native-promise')] || global.Promise; - import PCancelable from './p_cancelable'; import pTimeout from './p_timeout'; @@ -27,6 +22,7 @@ type Options = { type QueueableFn = { fn: (next: () => void) => void, timeout?: () => number, + initError?: Error, }; export default function queueRunner(options: Options) { @@ -34,7 +30,7 @@ export default function queueRunner(options: Options) { onCancel(resolve); }); - const mapper = ({fn, timeout, initError = new Error()}) => { + const mapper = ({fn, timeout, initError = new Error()}: QueueableFn) => { let promise = new Promise(resolve => { const next = function(err) { if (err) { diff --git a/packages/jest-jasmine2/src/reporter.js b/packages/jest-jasmine2/src/reporter.js index 2a867736f29a..0b482c44fca5 100644 --- a/packages/jest-jasmine2/src/reporter.js +++ b/packages/jest-jasmine2/src/reporter.js @@ -16,10 +16,6 @@ import type { TestResult, } from 'types/TestResult'; -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; - import {formatResultsErrors} from 'jest-message-util'; type Suite = { diff --git a/packages/jest-jasmine2/src/tree_processor.js b/packages/jest-jasmine2/src/tree_processor.js index 1245ee7a4494..6cf093c1787b 100644 --- a/packages/jest-jasmine2/src/tree_processor.js +++ b/packages/jest-jasmine2/src/tree_processor.js @@ -26,11 +26,6 @@ type TreeNode = { children?: Array, }; -// Try getting the real promise object from the context, if available. Someone -// could have overridden it in a test. Async functions return it implicitly. -// eslint-disable-next-line no-unused-vars -const Promise = global[Symbol.for('jest-native-promise')] || global.Promise; - export default function treeProcessor(options: Options) { const { nodeComplete, diff --git a/scripts/babel-plugin-jest-native-promise.js b/scripts/babel-plugin-jest-native-promise.js new file mode 100644 index 000000000000..b0fa9e57db85 --- /dev/null +++ b/scripts/babel-plugin-jest-native-promise.js @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +// This plugin exists to make sure that we use a `Promise` that has not been messed with by user code. +// Might consider extending this to other globals as well in the future + +module.exports = ({template}) => { + const promiseDeclaration = template(` + var Promise = global[Symbol.for('jest-native-promise')] || global.Promise; + `); + + return { + name: 'jest-native-promise', + visitor: { + ReferencedIdentifier(path, state) { + if (path.node.name === 'Promise' && !state.injectedPromise) { + state.injectedPromise = true; + path + .findParent(p => p.isProgram()) + .unshiftContainer('body', promiseDeclaration()); + } + }, + }, + }; +}; diff --git a/scripts/build.js b/scripts/build.js index ebaf99bca2ba..07af2abdf4b6 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -150,7 +150,13 @@ function buildFile(file, silent) { const options = Object.assign({}, transformOptions); options.plugins = options.plugins.slice(); - if (!INLINE_REQUIRE_BLACKLIST.test(file)) { + if (INLINE_REQUIRE_BLACKLIST.test(file)) { + // The modules in the blacklist are injected into the user's sandbox + // We need to guard `Promise` there. + options.plugins.push( + require.resolve('./babel-plugin-jest-native-promise') + ); + } else { // Remove normal plugin. options.plugins = options.plugins.filter( plugin => diff --git a/types/Circus.js b/types/Circus.js index 7a95671f9460..ae13529ed043 100644 --- a/types/Circus.js +++ b/types/Circus.js @@ -9,7 +9,7 @@ export type DoneFn = (reason?: string | Error) => void; export type BlockFn = () => void; -export type BlockName = string | Function; +export type BlockName = string; export type BlockMode = void | 'skip' | 'only' | 'todo'; export type TestMode = BlockMode; export type TestName = string; @@ -153,6 +153,7 @@ export type TestStatus = 'skip' | 'done' | 'todo'; export type TestResult = {| duration: ?number, errors: Array, + invocations: number, status: TestStatus, location: ?{|column: number, line: number|}, testPath: Array, diff --git a/types/TestResult.js b/types/TestResult.js index 928dc0d280e8..7ef862e2308e 100644 --- a/types/TestResult.js +++ b/types/TestResult.js @@ -98,6 +98,7 @@ export type AssertionResult = {| duration?: ?Milliseconds, failureMessages: Array, fullName: string, + invocations?: number, location: ?Callsite, numPassingAsserts: number, status: Status, From f524e3a2ab0a7e68ac85c6787bda894f648bbf33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Wed, 24 Oct 2018 15:49:03 +0100 Subject: [PATCH 48/76] Add remaining copyright headers (#7263) --- jest.config.ci.js | 2 ++ jest.config.js | 2 ++ website/static/css/custom.css | 2 ++ website/static/css/jest.css | 2 ++ 4 files changed, 8 insertions(+) diff --git a/jest.config.ci.js b/jest.config.ci.js index c28f6d8db341..1bc633115552 100644 --- a/jest.config.ci.js +++ b/jest.config.ci.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; // Object spread is just node 8 diff --git a/jest.config.js b/jest.config.js index 8873ad993dd2..06cb6ca2e84c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,5 @@ +// Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + 'use strict'; module.exports = { diff --git a/website/static/css/custom.css b/website/static/css/custom.css index 7d8070b05654..8b3d9bcbdbee 100644 --- a/website/static/css/custom.css +++ b/website/static/css/custom.css @@ -1,3 +1,5 @@ +/* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. */ + .fixedHeaderContainer header img.logo { height: 60px; margin-top: -20px; diff --git a/website/static/css/jest.css b/website/static/css/jest.css index d95475b69f69..fa0182120640 100644 --- a/website/static/css/jest.css +++ b/website/static/css/jest.css @@ -1,3 +1,5 @@ +/* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. */ + .sponsor-item { margin: 10px; } From dc9e68e36332e6c8ddbda07da03c25c32de2029b Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 24 Oct 2018 20:51:46 +0200 Subject: [PATCH 49/76] chore: upgrade docusaurus --- yarn.lock | 182 +++++++++++++++++++++--------------------------------- 1 file changed, 72 insertions(+), 110 deletions(-) diff --git a/yarn.lock b/yarn.lock index 98c800b27e84..9fab80793a82 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,27 +9,7 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@*": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.0.tgz#08958f1371179f62df6966d8a614003d11faeb04" - integrity sha512-9EWmD0cQAbcXSc+31RIoYgEHx3KQ2CCSMDBhnXrShWvo45TMw+3/55KVxlhkG53kw9tl87DqINgHDgFVhZJV/Q== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.0.0" - "@babel/helpers" "^7.1.0" - "@babel/parser" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.0.0": +"@babel/core@*", "@babel/core@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== @@ -49,18 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" - integrity sha512-/BM2vupkpbZXq22l1ALO7MqXJZH2k8bKVv8Y+pABFnzWdztDB/ZLveP5At21vLz5c2YtSE6p7j2FZEsqafMz5Q== - dependencies: - "@babel/types" "^7.0.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.1.2": +"@babel/generator@^7.0.0", "@babel/generator@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.2.tgz#fde75c072575ce7abbd97322e8fef5bae67e4630" integrity sha512-70A9HWLS/1RHk3Ck8tNHKxOoKQuSKocYgwDN85Pyl/RBduss6AKxUR7RIZ/lzduQMSYfWEM4DDBu6A+XGbkFig== @@ -234,15 +203,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helpers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.0.tgz#429bf0f0020be56a4242883432084e3d70a8a141" - integrity sha512-V1jXUTNdTpBn37wqqN73U+eBpzlLHmxA4aDaghJBggmzly/FpIJMHXse9lgdzQQT4gs5jZ5NmYxOL8G3ROc29g== - dependencies: - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - "@babel/helpers@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" @@ -261,12 +221,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.0.tgz#a7cd42cb3c12aec52e24375189a47b39759b783e" - integrity sha512-SmjnXCuPAlai75AFtzv+KCBcJ3sDDWbIn+WytKw1k+wAtEy6phqI2RqKh/zAnw53i1NR8su3Ep/UoqaKcimuLg== - -"@babel/parser@^7.1.2": +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.2.tgz#85c5c47af6d244fab77bce6b9bd830e38c978409" integrity sha512-x5HFsW+E/nQalGMw7hu+fvPqnBeBaIr0lWJ2SG0PPL2j+Pm9lYvCrsZJGIgauPIENx0v10INIyFjmSNUD/gSqQ== @@ -643,6 +598,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz#a84bb70fea302d915ea81d9809e628266bb0bc11" + integrity sha512-pymy+AK12WO4safW1HmBpwagUQRl9cevNX+82AIAtU1pIdugqcH+nuYP03Ja6B+N4gliAaKWAegIBL/ymALPHA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-source@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c" @@ -731,7 +694,15 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/preset-env@*": +"@babel/polyfill@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff" + integrity sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q== + dependencies: + core-js "^2.5.7" + regenerator-runtime "^0.11.1" + +"@babel/preset-env@*", "@babel/preset-env@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.0.tgz#e67ea5b0441cfeab1d6f41e9b5c79798800e8d11" integrity sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg== @@ -778,6 +749,17 @@ js-levenshtein "^1.1.3" semver "^5.3.0" +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/register@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" @@ -798,7 +780,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/template@^7.0.0", "@babel/template@^7.1.2": +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== @@ -807,15 +789,6 @@ "@babel/parser" "^7.1.2" "@babel/types" "^7.1.2" -"@babel/template@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.0.tgz#58cc9572e1bfe24fe1537fdf99d839d53e517e22" - integrity sha512-yZ948B/pJrwWGY6VxG6XRFsVTee3IQ7bihq9zFpM00Vydu6z5Xwg0C3J644kxI9WOTzd+62xcIsQ+AT1MGhqhA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.0.tgz#503ec6669387efd182c3888c4eec07bcc45d91b2" @@ -831,16 +804,7 @@ globals "^11.1.0" lodash "^4.17.10" -"@babel/types@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" - integrity sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q== - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.1.2": +"@babel/types@^7.0.0", "@babel/types@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.2.tgz#183e7952cf6691628afdc2e2b90d03240bac80c0" integrity sha512-pb1I05sZEKiSlMUV9UReaqsCPUpgbHHHu2n1piRm7JkuBkm6QxcaIzKu6FMnMtCbih/cEYTR+RGYYC96Yk9HAg== @@ -1933,6 +1897,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.1.4, async@^2.4.0, async@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" @@ -2275,7 +2244,7 @@ babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async- babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: +babel-plugin-transform-class-properties@^6.5.0, babel-plugin-transform-class-properties@^6.8.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= @@ -2521,7 +2490,7 @@ babel-plugin-transform-object-assign@^6.5.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@^6.26.0, babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: +babel-plugin-transform-object-rest-spread@^6.5.0, babel-plugin-transform-object-rest-spread@^6.8.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= @@ -2592,16 +2561,7 @@ babel-polyfill@6.23.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-env@*, babel-preset-env@^1.4.0, babel-preset-env@^1.7.0: +babel-preset-env@*, babel-preset-env@^1.4.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== @@ -2762,7 +2722,7 @@ babel-preset-react@*, babel-preset-react@^6.24.1: babel-plugin-transform-react-jsx-source "^6.22.0" babel-preset-flow "^6.23.0" -babel-register@^6.24.1, babel-register@^6.26.0: +babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= @@ -2794,7 +2754,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.26.0: +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -4868,18 +4828,20 @@ doctrine@^2.1.0: esutils "^2.0.2" docusaurus@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-1.4.0.tgz#b4e547841178a3229f155d78edfbe96dbd9adaab" - integrity sha512-o/ZhgnKApGUHKjK4b3XAcdSoqRjECKc41R74rLq+bYn0sD0hQw997mJ9PPxhs4JhzooOXpFFaE6BcD8FxYOp9g== + version "1.5.0" + resolved "https://registry.yarnpkg.com/docusaurus/-/docusaurus-1.5.0.tgz#40e22e65a90d00d73e3d27a5db65a7a7374720ef" + integrity sha512-QHLoUahb0EJVV4Klwctfd9aRR6oehda7qbQP4avar9usrbG1O4BLek8NohshwywnWaa9d+d7dBq+6dZ28CmJqA== dependencies: + "@babel/core" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/polyfill" "^7.0.0" + "@babel/preset-env" "^7.0.0" + "@babel/preset-react" "^7.0.0" + "@babel/register" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.1.2" autoprefixer "^9.1.5" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.26.0" - babel-polyfill "^6.26.0" - babel-preset-env "^1.7.0" - babel-preset-react "^6.24.1" - babel-register "^6.24.1" - babel-traverse "^6.25.0" babylon "^6.17.4" chalk "^2.1.0" classnames "^2.2.6" @@ -4901,9 +4863,10 @@ docusaurus@^1.3.2: imagemin-jpegtran "^5.0.2" imagemin-optipng "^5.2.1" imagemin-svgo "^6.0.0" + lodash "^4.17.11" markdown-toc "^1.2.0" mkdirp "^0.5.1" - opencollective "^1.0.3" + portfinder "^1.0.17" postcss "^7.0.1" prismjs "^1.15.0" react "^16.5.0" @@ -6985,7 +6948,7 @@ http-cache-semantics@^3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-errors@1.6.2: +http-errors@1.6.2, http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= @@ -6995,16 +6958,6 @@ http-errors@1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-parser-js@>=0.4.0: version "0.4.13" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" @@ -8796,7 +8749,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.10: +lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.1, lodash@~4.17.10: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== @@ -9438,7 +9391,7 @@ mixin-deep@^1.1.3, mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -10595,6 +10548,15 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== +portfinder@^1.0.17: + version "1.0.19" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.19.tgz#07e87914a55242dcda5b833d42f018d6875b595f" + integrity sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -11619,12 +11581,12 @@ regenerator-runtime@*, regenerator-runtime@^0.12.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== -regenerator-runtime@^0.10.0, regenerator-runtime@^0.10.5: +regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= -regenerator-runtime@^0.11.0: +regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== @@ -12687,7 +12649,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": +"statuses@>= 1.3.1 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= From e21ae1188dea8bf78504054dde6074f507beb01c Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 24 Oct 2018 22:28:59 +0200 Subject: [PATCH 50/76] fix: display test duration even if time is mocked out (#7264) --- CHANGELOG.md | 1 + e2e/__tests__/override-globals.test.js | 11 +++++++++ e2e/override-globals/package.json | 5 +++- e2e/override-globals/setup.js | 2 ++ packages/jest-circus/src/utils.js | 2 +- .../jest-util/src/install_common_globals.js | 8 +++++-- ...js => babel-plugin-jest-native-globals.js} | 23 ++++++++++++++++--- scripts/build.js | 4 ++-- 8 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 e2e/override-globals/setup.js rename scripts/{babel-plugin-jest-native-promise.js => babel-plugin-jest-native-globals.js} (52%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dcbe823063a..d53348f215f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ - `[jest-changed-files]` Return correctly the changed files when using `lastCommit=true` on Mercurial repositories ([#7228](https://github.com/facebook/jest/pull/7228)) - `[babel-jest]` Cache includes babel environment variables ([#7239](https://github.com/facebook/jest/pull/7239)) - `[jest-config]` Use strings instead of `RegExp` instances in normalized configuration ([#7251](https://github.com/facebook/jest/pull/7251)) +- `[jest-circus]` Make sure to display real duration even if time is mocked ([#7264](https://github.com/facebook/jest/pull/7264)) ### Chore & Maintenance diff --git a/e2e/__tests__/override-globals.test.js b/e2e/__tests__/override-globals.test.js index a8ad8ac7c252..489f43e76987 100644 --- a/e2e/__tests__/override-globals.test.js +++ b/e2e/__tests__/override-globals.test.js @@ -15,3 +15,14 @@ test('overriding native promise does not freeze Jest', () => { const run = runJest('override-globals'); expect(run.stderr).toMatch(/PASS __tests__(\/|\\)index.js/); }); + +test('has a duration even if time is faked', () => { + const regex = /works well \((\d+)ms\)/; + const {stderr} = runJest('override-globals', ['--verbose']); + + expect(stderr).toMatch(regex); + + const [, duration] = stderr.match(regex); + + expect(Number(duration)).toBeGreaterThan(0); +}); diff --git a/e2e/override-globals/package.json b/e2e/override-globals/package.json index 148788b25446..b4a435775e2b 100644 --- a/e2e/override-globals/package.json +++ b/e2e/override-globals/package.json @@ -1,5 +1,8 @@ { "jest": { - "testEnvironment": "node" + "testEnvironment": "node", + "setupFiles": [ + "/setup.js" + ] } } diff --git a/e2e/override-globals/setup.js b/e2e/override-globals/setup.js new file mode 100644 index 000000000000..0fb3e1ade0c8 --- /dev/null +++ b/e2e/override-globals/setup.js @@ -0,0 +1,2 @@ +Date.now = () => 0; +process.hrtime = () => [0, 5000]; diff --git a/packages/jest-circus/src/utils.js b/packages/jest-circus/src/utils.js index 96da54744ecf..328566bbcfb5 100644 --- a/packages/jest-circus/src/utils.js +++ b/packages/jest-circus/src/utils.js @@ -240,7 +240,7 @@ export const callAsyncCircusFn = ( export const getTestDuration = (test: TestEntry): ?number => { const {startedAt} = test; - return startedAt ? Date.now() - startedAt : null; + return typeof startedAt === 'number' ? Date.now() - startedAt : null; }; export const makeRunResult = ( diff --git a/packages/jest-util/src/install_common_globals.js b/packages/jest-util/src/install_common_globals.js index 5eada9d75747..d87e16a28861 100644 --- a/packages/jest-util/src/install_common_globals.js +++ b/packages/jest-util/src/install_common_globals.js @@ -18,8 +18,12 @@ const DTRACE = Object.keys(global).filter(key => key.startsWith('DTRACE')); export default function(globalObject: Global, globals: ConfigGlobals) { globalObject.process = createProcessObject(); - // Keep a reference to "Promise", since "jasmine_light.js" needs it. - globalObject[globalObject.Symbol.for('jest-native-promise')] = Promise; + const symbol = globalObject.Symbol; + // Keep a reference to some globals that Jest needs + globalObject[symbol.for('jest-native-promise')] = Promise; + globalObject[symbol.for('jest-native-now')] = globalObject.Date.now.bind( + globalObject.Date, + ); // Forward some APIs. DTRACE.forEach(dtrace => { diff --git a/scripts/babel-plugin-jest-native-promise.js b/scripts/babel-plugin-jest-native-globals.js similarity index 52% rename from scripts/babel-plugin-jest-native-promise.js rename to scripts/babel-plugin-jest-native-globals.js index b0fa9e57db85..a0e01e20b942 100644 --- a/scripts/babel-plugin-jest-native-promise.js +++ b/scripts/babel-plugin-jest-native-globals.js @@ -14,17 +14,34 @@ module.exports = ({template}) => { const promiseDeclaration = template(` var Promise = global[Symbol.for('jest-native-promise')] || global.Promise; `); + const nowDeclaration = template(` + var jestNow = global[Symbol.for('jest-native-now')] || global.Date.now; + `); return { - name: 'jest-native-promise', + name: 'jest-native-globals', visitor: { ReferencedIdentifier(path, state) { - if (path.node.name === 'Promise' && !state.injectedPromise) { - state.injectedPromise = true; + if (path.node.name === 'Promise' && !state.jestInjectedPromise) { + state.jestInjectedPromise = true; path .findParent(p => p.isProgram()) .unshiftContainer('body', promiseDeclaration()); } + if ( + path.node.name === 'Date' && + path.parent.property && + path.parent.property.name === 'now' + ) { + if (!state.jestInjectedNow) { + state.jestInjectedNow = true; + path + .findParent(p => p.isProgram()) + .unshiftContainer('body', nowDeclaration()); + } + + path.parentPath.replaceWithSourceString('jestNow'); + } }, }, }; diff --git a/scripts/build.js b/scripts/build.js index 07af2abdf4b6..5ec139a7b9cd 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -152,9 +152,9 @@ function buildFile(file, silent) { if (INLINE_REQUIRE_BLACKLIST.test(file)) { // The modules in the blacklist are injected into the user's sandbox - // We need to guard `Promise` there. + // We need to guard some globals there. options.plugins.push( - require.resolve('./babel-plugin-jest-native-promise') + require.resolve('./babel-plugin-jest-native-globals') ); } else { // Remove normal plugin. From b8619f865fda3b89b05e2e629fb9cce2ed919e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Ma=C5=82kowski?= Date: Thu, 25 Oct 2018 13:01:16 +0700 Subject: [PATCH 51/76] Standardize file names in packages/jest-haste-map (#7266) --- CHANGELOG.md | 1 + .../jest-haste-map/src/{haste_fs.js => HasteFS.js} | 0 .../src/{module_map.js => ModuleMap.js} | 0 .../src/__tests__/get_mock_name.test.js | 2 +- .../jest-haste-map/src/__tests__/index.test.js | 4 ++-- .../src/crawlers/__tests__/watchman.test.js | 2 +- packages/jest-haste-map/src/crawlers/watchman.js | 2 +- .../src/{get_mock_name.js => getMockName.js} | 0 packages/jest-haste-map/src/index.js | 14 +++++++------- .../{watchman_watcher.js => WatchmanWatcher.js} | 0 ...ct_requires.test.js => extractRequires.test.js} | 2 +- ...ension.test.js => getPlatformExtension.test.js} | 2 +- ...e_path_sep.test.js => normalizePathSep.test.js} | 4 ++-- .../{extract_requires.js => extractRequires.js} | 0 ...atform_extension.js => getPlatformExtension.js} | 0 .../{normalize_path_sep.js => normalizePathSep.js} | 0 packages/jest-haste-map/src/worker.js | 2 +- 17 files changed, 18 insertions(+), 17 deletions(-) rename packages/jest-haste-map/src/{haste_fs.js => HasteFS.js} (100%) rename packages/jest-haste-map/src/{module_map.js => ModuleMap.js} (100%) rename packages/jest-haste-map/src/{get_mock_name.js => getMockName.js} (100%) rename packages/jest-haste-map/src/lib/{watchman_watcher.js => WatchmanWatcher.js} (100%) rename packages/jest-haste-map/src/lib/__tests__/{extract_requires.test.js => extractRequires.test.js} (98%) rename packages/jest-haste-map/src/lib/__tests__/{get_platform_extension.test.js => getPlatformExtension.test.js} (92%) rename packages/jest-haste-map/src/lib/__tests__/{normalize_path_sep.test.js => normalizePathSep.test.js} (82%) rename packages/jest-haste-map/src/lib/{extract_requires.js => extractRequires.js} (100%) rename packages/jest-haste-map/src/lib/{get_platform_extension.js => getPlatformExtension.js} (100%) rename packages/jest-haste-map/src/lib/{normalize_path_sep.js => normalizePathSep.js} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index d53348f215f7..e306cecfbc08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ - `[tests]` Free tests from the dependency on value of FORCE_COLOR ([#6585](https://github.com/facebook/jest/pull/6585/files)) - `[jest-diff]` Standardize filenames ([#7238](https://github.com/facebook/jest/pull/7238)) - `[*]` Add babel plugin to make sure Jest is unaffected by fake Promise implementations ([#7225](https://github.com/facebook/jest/pull/7225)) +- `[jest-haste-map]` Standardize filenames ([#7266](https://github.com/facebook/jest/pull/7266)) ### Performance diff --git a/packages/jest-haste-map/src/haste_fs.js b/packages/jest-haste-map/src/HasteFS.js similarity index 100% rename from packages/jest-haste-map/src/haste_fs.js rename to packages/jest-haste-map/src/HasteFS.js diff --git a/packages/jest-haste-map/src/module_map.js b/packages/jest-haste-map/src/ModuleMap.js similarity index 100% rename from packages/jest-haste-map/src/module_map.js rename to packages/jest-haste-map/src/ModuleMap.js diff --git a/packages/jest-haste-map/src/__tests__/get_mock_name.test.js b/packages/jest-haste-map/src/__tests__/get_mock_name.test.js index 4009cbab2e2f..939a2364c6bc 100644 --- a/packages/jest-haste-map/src/__tests__/get_mock_name.test.js +++ b/packages/jest-haste-map/src/__tests__/get_mock_name.test.js @@ -8,7 +8,7 @@ 'use strict'; import path from 'path'; -import getMockName from '../get_mock_name'; +import getMockName from '../getMockName'; describe('getMockName', () => { it('extracts mock name from file path', () => { diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index bb14132a63fb..df716c9f0c09 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -75,7 +75,7 @@ jest.mock('sane', () => ({ WatchmanWatcher: mockWatcherConstructor, })); -jest.mock('../lib/watchman_watcher.js', () => mockWatcherConstructor); +jest.mock('../lib/WatchmanWatcher.js', () => mockWatcherConstructor); let mockChangedFiles; let mockFs; @@ -1230,7 +1230,7 @@ describe('HasteMap', () => { } catch (error) { const { DuplicateHasteCandidatesError, - } = require('../module_map').default; + } = require('../ModuleMap').default; expect(error).toBeInstanceOf(DuplicateHasteCandidatesError); expect(error.hasteName).toBe('Pear'); expect(error.platform).toBe('g'); diff --git a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js index 7f80e7dadf7e..b67b849fe840 100644 --- a/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js +++ b/packages/jest-haste-map/src/crawlers/__tests__/watchman.test.js @@ -11,7 +11,7 @@ const path = require('path'); jest.mock('fb-watchman', () => { - const normalizePathSep = require('../../lib/normalize_path_sep').default; + const normalizePathSep = require('../../lib/normalizePathSep').default; const Client = jest.fn(); Client.prototype.command = jest.fn((args, callback) => setImmediate(() => { diff --git a/packages/jest-haste-map/src/crawlers/watchman.js b/packages/jest-haste-map/src/crawlers/watchman.js index d8fb38c5cf2f..e0d0dce9ee73 100644 --- a/packages/jest-haste-map/src/crawlers/watchman.js +++ b/packages/jest-haste-map/src/crawlers/watchman.js @@ -11,7 +11,7 @@ import type {InternalHasteMap} from 'types/HasteMap'; import type {CrawlerOptions} from '../types'; import * as fastPath from '../lib/fast_path'; -import normalizePathSep from '../lib/normalize_path_sep'; +import normalizePathSep from '../lib/normalizePathSep'; import path from 'path'; import watchman from 'fb-watchman'; import H from '../constants'; diff --git a/packages/jest-haste-map/src/get_mock_name.js b/packages/jest-haste-map/src/getMockName.js similarity index 100% rename from packages/jest-haste-map/src/get_mock_name.js rename to packages/jest-haste-map/src/getMockName.js diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index 12b56a3c4505..f7acf0cbfee4 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -13,22 +13,22 @@ import {getSha1, worker} from './worker'; import crypto from 'crypto'; import EventEmitter from 'events'; import fs from 'fs'; -import getMockName from './get_mock_name'; -import getPlatformExtension from './lib/get_platform_extension'; +import getMockName from './getMockName'; +import getPlatformExtension from './lib/getPlatformExtension'; import H from './constants'; -import HasteFS from './haste_fs'; -import HasteModuleMap from './module_map'; +import HasteFS from './HasteFS'; +import HasteModuleMap from './ModuleMap'; import invariant from 'invariant'; // eslint-disable-next-line import/default import nodeCrawl from './crawlers/node'; -import normalizePathSep from './lib/normalize_path_sep'; +import normalizePathSep from './lib/normalizePathSep'; import os from 'os'; import path from 'path'; import sane from 'sane'; import serializer from 'jest-serializer'; // eslint-disable-next-line import/default import watchmanCrawl from './crawlers/watchman'; -import WatchmanWatcher from './lib/watchman_watcher'; +import WatchmanWatcher from './lib/WatchmanWatcher'; import * as fastPath from './lib/fast_path'; import Worker from 'jest-worker'; @@ -43,7 +43,7 @@ import type { HasteRegExp, MockData, } from 'types/HasteMap'; -import type {SerializableModuleMap as HasteSerializableModuleMap} from './module_map'; +import type {SerializableModuleMap as HasteSerializableModuleMap} from './ModuleMap'; type HType = typeof H; diff --git a/packages/jest-haste-map/src/lib/watchman_watcher.js b/packages/jest-haste-map/src/lib/WatchmanWatcher.js similarity index 100% rename from packages/jest-haste-map/src/lib/watchman_watcher.js rename to packages/jest-haste-map/src/lib/WatchmanWatcher.js diff --git a/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js b/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js similarity index 98% rename from packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js rename to packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js index b612edcf8cdf..a6172e0dcb8e 100644 --- a/packages/jest-haste-map/src/lib/__tests__/extract_requires.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js @@ -9,7 +9,7 @@ */ 'use strict'; -import extractRequires from '../extract_requires'; +import extractRequires from '../extractRequires'; it('extracts both requires and imports from code', () => { const code = ` diff --git a/packages/jest-haste-map/src/lib/__tests__/get_platform_extension.test.js b/packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js similarity index 92% rename from packages/jest-haste-map/src/lib/__tests__/get_platform_extension.test.js rename to packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js index df2c4fdc2db2..3c5da8702c24 100644 --- a/packages/jest-haste-map/src/lib/__tests__/get_platform_extension.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/getPlatformExtension.test.js @@ -9,7 +9,7 @@ 'use strict'; -import getPlatformExtension from '../get_platform_extension'; +import getPlatformExtension from '../getPlatformExtension'; describe('getPlatformExtension', () => { it('should get platform ext', () => { diff --git a/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js b/packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js similarity index 82% rename from packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js rename to packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js index c6ed861b54a7..ab466fe6a62a 100644 --- a/packages/jest-haste-map/src/lib/__tests__/normalize_path_sep.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/normalizePathSep.test.js @@ -13,14 +13,14 @@ describe('normalizePathSep', () => { it('does nothing on posix', () => { jest.resetModules(); jest.mock('path', () => jest.requireActual('path').posix); - const normalizePathSep = require('../normalize_path_sep').default; + const normalizePathSep = require('../normalizePathSep').default; expect(normalizePathSep('foo/bar/baz.js')).toEqual('foo/bar/baz.js'); }); it('replace slashes on windows', () => { jest.resetModules(); jest.mock('path', () => jest.requireActual('path').win32); - const normalizePathSep = require('../normalize_path_sep').default; + const normalizePathSep = require('../normalizePathSep').default; expect(normalizePathSep('foo/bar/baz.js')).toEqual('foo\\bar\\baz.js'); }); }); diff --git a/packages/jest-haste-map/src/lib/extract_requires.js b/packages/jest-haste-map/src/lib/extractRequires.js similarity index 100% rename from packages/jest-haste-map/src/lib/extract_requires.js rename to packages/jest-haste-map/src/lib/extractRequires.js diff --git a/packages/jest-haste-map/src/lib/get_platform_extension.js b/packages/jest-haste-map/src/lib/getPlatformExtension.js similarity index 100% rename from packages/jest-haste-map/src/lib/get_platform_extension.js rename to packages/jest-haste-map/src/lib/getPlatformExtension.js diff --git a/packages/jest-haste-map/src/lib/normalize_path_sep.js b/packages/jest-haste-map/src/lib/normalizePathSep.js similarity index 100% rename from packages/jest-haste-map/src/lib/normalize_path_sep.js rename to packages/jest-haste-map/src/lib/normalizePathSep.js diff --git a/packages/jest-haste-map/src/worker.js b/packages/jest-haste-map/src/worker.js index 53bc98be296d..acf575098e8f 100644 --- a/packages/jest-haste-map/src/worker.js +++ b/packages/jest-haste-map/src/worker.js @@ -14,7 +14,7 @@ import path from 'path'; import fs from 'graceful-fs'; import blacklist from './blacklist'; import H from './constants'; -import extractRequires from './lib/extract_requires'; +import extractRequires from './lib/extractRequires'; const PACKAGE_JSON = path.sep + 'package.json'; From c5e36835cff4b241327db9cf58c8f6f7227ed1f7 Mon Sep 17 00:00:00 2001 From: Daniel Ruf Date: Thu, 25 Oct 2018 09:00:54 +0200 Subject: [PATCH 52/76] fix: require Node.js 6+ for all packages (#7258) --- CHANGELOG.md | 1 + package.json | 3 +++ packages/babel-jest/package.json | 3 +++ packages/babel-plugin-jest-hoist/package.json | 3 +++ packages/babel-preset-jest/package.json | 3 +++ packages/diff-sequences/package.json | 3 +++ packages/eslint-config-fb-strict/package.json | 3 +++ packages/expect/package.json | 3 +++ packages/jest-changed-files/package.json | 3 +++ packages/jest-circus/package.json | 3 +++ packages/jest-config/package.json | 3 +++ packages/jest-diff/package.json | 3 +++ packages/jest-docblock/package.json | 3 +++ packages/jest-each/package.json | 3 +++ packages/jest-environment-jsdom/package.json | 3 +++ packages/jest-environment-node/package.json | 3 +++ packages/jest-get-type/package.json | 3 +++ packages/jest-haste-map/package.json | 3 +++ packages/jest-jasmine2/package.json | 3 +++ packages/jest-leak-detector/package.json | 3 +++ packages/jest-matcher-utils/package.json | 3 +++ packages/jest-message-util/package.json | 3 +++ packages/jest-mock/package.json | 3 +++ packages/jest-phabricator/package.json | 3 +++ packages/jest-regex-util/package.json | 3 +++ packages/jest-repl/package.json | 3 +++ packages/jest-resolve-dependencies/package.json | 3 +++ packages/jest-resolve/package.json | 3 +++ packages/jest-runner/package.json | 3 +++ packages/jest-runtime/package.json | 3 +++ packages/jest-serializer/package.json | 3 +++ packages/jest-snapshot/package.json | 3 +++ packages/jest-util/package.json | 3 +++ packages/jest-validate/package.json | 3 +++ packages/jest-watcher/package.json | 3 +++ packages/jest-worker/package.json | 3 +++ packages/pretty-format/package.json | 3 +++ 37 files changed, 109 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e306cecfbc08..264c361ed430 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,7 @@ - `[jest-diff]` Standardize filenames ([#7238](https://github.com/facebook/jest/pull/7238)) - `[*]` Add babel plugin to make sure Jest is unaffected by fake Promise implementations ([#7225](https://github.com/facebook/jest/pull/7225)) - `[jest-haste-map]` Standardize filenames ([#7266](https://github.com/facebook/jest/pull/7266)) +- `[*]` [**BREAKING**] Require Node.js 6+ for all packages ([#7258](https://github.com/facebook/jest/pull/7258)) ### Performance diff --git a/package.json b/package.json index d6ea708d7db8..412ff5e20274 100644 --- a/package.json +++ b/package.json @@ -118,5 +118,8 @@ "type": "opencollective", "url": "https://opencollective.com/jest", "logo": "https://opencollective.com/jest/logo.txt" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/babel-jest/package.json b/packages/babel-jest/package.json index dd0052e041e9..b9b8625aa97f 100644 --- a/packages/babel-jest/package.json +++ b/packages/babel-jest/package.json @@ -17,5 +17,8 @@ }, "peerDependencies": { "babel-core": "^6.0.0 || ^7.0.0-0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/babel-plugin-jest-hoist/package.json b/packages/babel-plugin-jest-hoist/package.json index c7923258b175..22ddd76455b4 100644 --- a/packages/babel-plugin-jest-hoist/package.json +++ b/packages/babel-plugin-jest-hoist/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js" } diff --git a/packages/babel-preset-jest/package.json b/packages/babel-preset-jest/package.json index 217247d29ddf..adfb0bfa9027 100644 --- a/packages/babel-preset-jest/package.json +++ b/packages/babel-preset-jest/package.json @@ -10,5 +10,8 @@ "dependencies": { "babel-plugin-jest-hoist": "^23.2.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/diff-sequences/package.json b/packages/diff-sequences/package.json index d8d6a7afd7d7..1428313d9399 100644 --- a/packages/diff-sequences/package.json +++ b/packages/diff-sequences/package.json @@ -14,5 +14,8 @@ "callback", "diff" ], + "engines": { + "node": ">= 6" + }, "main": "build/index.js" } diff --git a/packages/eslint-config-fb-strict/package.json b/packages/eslint-config-fb-strict/package.json index c963a54b9d4c..ab66821e3269 100644 --- a/packages/eslint-config-fb-strict/package.json +++ b/packages/eslint-config-fb-strict/package.json @@ -18,5 +18,8 @@ "eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-react": "^7.1.0", "eslint-plugin-relay": "~0.0.8" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/expect/package.json b/packages/expect/package.json index 8f488346b5b3..313df003904d 100644 --- a/packages/expect/package.json +++ b/packages/expect/package.json @@ -15,5 +15,8 @@ "jest-matcher-utils": "^23.6.0", "jest-message-util": "^23.4.0", "jest-regex-util": "^23.3.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-changed-files/package.json b/packages/jest-changed-files/package.json index cabb73c57560..b94dae7dcfa4 100644 --- a/packages/jest-changed-files/package.json +++ b/packages/jest-changed-files/package.json @@ -10,5 +10,8 @@ "dependencies": { "execa": "^1.0.0", "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-circus/package.json b/packages/jest-circus/package.json index e5dd7913f587..f1889e2d718b 100644 --- a/packages/jest-circus/package.json +++ b/packages/jest-circus/package.json @@ -25,5 +25,8 @@ "devDependencies": { "execa": "^1.0.0", "jest-runtime": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index 4bcf49b16f03..4bd4a8f5c40c 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -22,5 +22,8 @@ "jest-validate": "^23.6.0", "micromatch": "^2.3.11", "pretty-format": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-diff/package.json b/packages/jest-diff/package.json index 4410a02757a9..f8d179035aad 100644 --- a/packages/jest-diff/package.json +++ b/packages/jest-diff/package.json @@ -12,5 +12,8 @@ "diff": "^3.2.0", "jest-get-type": "^22.1.0", "pretty-format": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-docblock/package.json b/packages/jest-docblock/package.json index f93615b234db..fe5b997592e5 100644 --- a/packages/jest-docblock/package.json +++ b/packages/jest-docblock/package.json @@ -9,5 +9,8 @@ "main": "build/index.js", "dependencies": { "detect-newline": "^2.1.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-each/package.json b/packages/jest-each/package.json index b985159c7057..342bc636b433 100644 --- a/packages/jest-each/package.json +++ b/packages/jest-each/package.json @@ -19,5 +19,8 @@ "chalk": "^2.0.1", "jest-util": "^23.4.0", "pretty-format": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-environment-jsdom/package.json b/packages/jest-environment-jsdom/package.json index f985f45ab81f..7d0b1df0de4d 100644 --- a/packages/jest-environment-jsdom/package.json +++ b/packages/jest-environment-jsdom/package.json @@ -11,5 +11,8 @@ "jest-mock": "^23.2.0", "jest-util": "^23.4.0", "jsdom": "^11.5.1" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-environment-node/package.json b/packages/jest-environment-node/package.json index 956538995feb..c56b96ff082f 100644 --- a/packages/jest-environment-node/package.json +++ b/packages/jest-environment-node/package.json @@ -10,5 +10,8 @@ "dependencies": { "jest-mock": "^23.2.0", "jest-util": "^23.4.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-get-type/package.json b/packages/jest-get-type/package.json index 1ee397bab10d..31bc2a8e0593 100644 --- a/packages/jest-get-type/package.json +++ b/packages/jest-get-type/package.json @@ -6,6 +6,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js" } diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index b0e5089cf015..4421d4156ce9 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -16,5 +16,8 @@ "jest-worker": "^23.2.0", "micromatch": "^2.3.11", "sane": "^3.0.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-jasmine2/package.json b/packages/jest-jasmine2/package.json index 3294815a948e..bef29f9052bd 100644 --- a/packages/jest-jasmine2/package.json +++ b/packages/jest-jasmine2/package.json @@ -23,5 +23,8 @@ }, "devDependencies": { "jest-runtime": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-leak-detector/package.json b/packages/jest-leak-detector/package.json index d3c68e6ea4c5..d4d03fa78829 100644 --- a/packages/jest-leak-detector/package.json +++ b/packages/jest-leak-detector/package.json @@ -12,5 +12,8 @@ }, "devDependencies": { "weak": "^1.0.1" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-matcher-utils/package.json b/packages/jest-matcher-utils/package.json index ffd725d22d1c..baf7017cbd44 100644 --- a/packages/jest-matcher-utils/package.json +++ b/packages/jest-matcher-utils/package.json @@ -6,6 +6,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js", "dependencies": { diff --git a/packages/jest-message-util/package.json b/packages/jest-message-util/package.json index d8e34d972d0f..9812ad2ed322 100644 --- a/packages/jest-message-util/package.json +++ b/packages/jest-message-util/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js", "dependencies": { diff --git a/packages/jest-mock/package.json b/packages/jest-mock/package.json index e6826a9e65ea..7d7f2958a197 100644 --- a/packages/jest-mock/package.json +++ b/packages/jest-mock/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js", "browser": "build-es5/index.js" diff --git a/packages/jest-phabricator/package.json b/packages/jest-phabricator/package.json index 7706682a88e2..913598cd7a36 100644 --- a/packages/jest-phabricator/package.json +++ b/packages/jest-phabricator/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js" } diff --git a/packages/jest-regex-util/package.json b/packages/jest-regex-util/package.json index bd2a9ad7d06f..ab665d8b6805 100644 --- a/packages/jest-regex-util/package.json +++ b/packages/jest-regex-util/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js" } diff --git a/packages/jest-repl/package.json b/packages/jest-repl/package.json index 4f23fc46bfe6..95286104461f 100644 --- a/packages/jest-repl/package.json +++ b/packages/jest-repl/package.json @@ -16,5 +16,8 @@ }, "bin": { "jest-repl": "./bin/jest-repl.js" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-resolve-dependencies/package.json b/packages/jest-resolve-dependencies/package.json index f7783fd0a313..20ed227945ae 100644 --- a/packages/jest-resolve-dependencies/package.json +++ b/packages/jest-resolve-dependencies/package.json @@ -10,5 +10,8 @@ "dependencies": { "jest-regex-util": "^23.3.0", "jest-snapshot": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-resolve/package.json b/packages/jest-resolve/package.json index 27690d89d9f7..4b380f43aa79 100644 --- a/packages/jest-resolve/package.json +++ b/packages/jest-resolve/package.json @@ -14,5 +14,8 @@ }, "devDependencies": { "jest-haste-map": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index ae9d25724778..e3cfd5d9609e 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -21,5 +21,8 @@ "jest-worker": "^23.2.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-runtime/package.json b/packages/jest-runtime/package.json index 5422e2da6ae5..1f0822befe46 100644 --- a/packages/jest-runtime/package.json +++ b/packages/jest-runtime/package.json @@ -37,5 +37,8 @@ }, "bin": { "jest-runtime": "./bin/jest-runtime.js" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-serializer/package.json b/packages/jest-serializer/package.json index 4b99781fe5f6..0bbb47d5cc72 100644 --- a/packages/jest-serializer/package.json +++ b/packages/jest-serializer/package.json @@ -5,6 +5,9 @@ "type": "git", "url": "https://github.com/facebook/jest.git" }, + "engines": { + "node": ">= 6" + }, "license": "MIT", "main": "build/index.js" } diff --git a/packages/jest-snapshot/package.json b/packages/jest-snapshot/package.json index 9e7eb2fa38da..56deb8bc3d85 100644 --- a/packages/jest-snapshot/package.json +++ b/packages/jest-snapshot/package.json @@ -21,5 +21,8 @@ }, "devDependencies": { "prettier": "^1.13.4" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-util/package.json b/packages/jest-util/package.json index c629f0caadbb..c2b0962f73a1 100644 --- a/packages/jest-util/package.json +++ b/packages/jest-util/package.json @@ -19,5 +19,8 @@ }, "devDependencies": { "jest-mock": "^23.2.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-validate/package.json b/packages/jest-validate/package.json index e9a5683cebec..33a9d90b4bb4 100644 --- a/packages/jest-validate/package.json +++ b/packages/jest-validate/package.json @@ -12,5 +12,8 @@ "jest-get-type": "^22.1.0", "leven": "^2.1.0", "pretty-format": "^23.6.0" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/jest-watcher/package.json b/packages/jest-watcher/package.json index 3a3aa657ae26..a2da8dd11379 100644 --- a/packages/jest-watcher/package.json +++ b/packages/jest-watcher/package.json @@ -15,6 +15,9 @@ "bugs": { "url": "https://github.com/facebook/jest/issues" }, + "engines": { + "node": ">= 6" + }, "homepage": "https://jestjs.io/", "license": "MIT" } diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index ee62bac69d07..5506a0d7160e 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -9,5 +9,8 @@ "main": "build/index.js", "dependencies": { "merge-stream": "^1.0.1" + }, + "engines": { + "node": ">= 6" } } diff --git a/packages/pretty-format/package.json b/packages/pretty-format/package.json index 852f826648a2..ec8a020bc6c1 100644 --- a/packages/pretty-format/package.json +++ b/packages/pretty-format/package.json @@ -19,5 +19,8 @@ "react": "*", "react-dom": "*", "react-test-renderer": "*" + }, + "engines": { + "node": ">= 6" } } From 4941a974e303db63e6ee5832f3737e69a138de18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Thu, 25 Oct 2018 14:23:54 +0100 Subject: [PATCH 53/76] Remove unused jest-docblock package from jest-haste-map (#7269) --- packages/jest-haste-map/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/jest-haste-map/package.json b/packages/jest-haste-map/package.json index 4421d4156ce9..0d00cc5b2fb1 100644 --- a/packages/jest-haste-map/package.json +++ b/packages/jest-haste-map/package.json @@ -11,7 +11,6 @@ "fb-watchman": "^2.0.0", "graceful-fs": "^4.1.11", "invariant": "^2.2.4", - "jest-docblock": "^23.2.0", "jest-serializer": "^23.0.1", "jest-worker": "^23.2.0", "micromatch": "^2.3.11", From 9db529ed804ed76411374b252389bd0b58d5d1d0 Mon Sep 17 00:00:00 2001 From: Christian Delahousse Date: Thu, 25 Oct 2018 14:58:53 -0700 Subject: [PATCH 54/76] Adding copyright headers to e2e/override-globals/setup.js (#7273) 'nuff said. --- e2e/override-globals/setup.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/e2e/override-globals/setup.js b/e2e/override-globals/setup.js index 0fb3e1ade0c8..de6dff3368d2 100644 --- a/e2e/override-globals/setup.js +++ b/e2e/override-globals/setup.js @@ -1,2 +1,11 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow + */ + Date.now = () => 0; process.hrtime = () => [0, 5000]; From a0d2404a52cf1d06ac6993530286b01c7a9a44b6 Mon Sep 17 00:00:00 2001 From: Edd Yerburgh Date: Fri, 26 Oct 2018 08:42:55 +0100 Subject: [PATCH 55/76] Add correct testURL default in docs (#7277) --- CHANGELOG.md | 1 + docs/Configuration.md | 2 +- website/versioned_docs/version-23.5/Configuration.md | 2 +- website/versioned_docs/version-23.6/Configuration.md | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 264c361ed430..6610643f005a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,7 @@ - `[*]` Add babel plugin to make sure Jest is unaffected by fake Promise implementations ([#7225](https://github.com/facebook/jest/pull/7225)) - `[jest-haste-map]` Standardize filenames ([#7266](https://github.com/facebook/jest/pull/7266)) - `[*]` [**BREAKING**] Require Node.js 6+ for all packages ([#7258](https://github.com/facebook/jest/pull/7258)) +- `[docs]` Add correct default value for `testUrl` config option ([#7277](https://github.com/facebook/jest/pull/7277)) ### Performance diff --git a/docs/Configuration.md b/docs/Configuration.md index 55281c790207..73a841747cc1 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -905,7 +905,7 @@ An example of such function can be found in our default [jasmine2 test runner pa ### `testURL` [string] -Default: `about:blank` +Default: `http://localhost` This option sets the URL for the jsdom environment. It is reflected in properties such as `location.href`. diff --git a/website/versioned_docs/version-23.5/Configuration.md b/website/versioned_docs/version-23.5/Configuration.md index d7876e3f1569..ce8bb1ae41ae 100644 --- a/website/versioned_docs/version-23.5/Configuration.md +++ b/website/versioned_docs/version-23.5/Configuration.md @@ -871,7 +871,7 @@ An example of such function can be found in our default [jasmine2 test runner pa ### `testURL` [string] -Default: `about:blank` +Default: `http://localhost` This option sets the URL for the jsdom environment. It is reflected in properties such as `location.href`. diff --git a/website/versioned_docs/version-23.6/Configuration.md b/website/versioned_docs/version-23.6/Configuration.md index 430741801ac9..617f06826036 100644 --- a/website/versioned_docs/version-23.6/Configuration.md +++ b/website/versioned_docs/version-23.6/Configuration.md @@ -881,7 +881,7 @@ An example of such function can be found in our default [jasmine2 test runner pa ### `testURL` [string] -Default: `about:blank` +Default: `http://localhost` This option sets the URL for the jsdom environment. It is reflected in properties such as `location.href`. From d481defb350947eba0ebb0e597f7c67e13fd6159 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 26 Oct 2018 10:49:51 +0200 Subject: [PATCH 56/76] chore: remove flow annotation from setupfile --- e2e/override-globals/setup.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/e2e/override-globals/setup.js b/e2e/override-globals/setup.js index de6dff3368d2..ade70a19010f 100644 --- a/e2e/override-globals/setup.js +++ b/e2e/override-globals/setup.js @@ -3,8 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ Date.now = () => 0; From 251c2953d788031e36ad64c088d6947dec19ee84 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 26 Oct 2018 13:41:02 +0200 Subject: [PATCH 57/76] chore(docs): re-arrange Jets object docs into sections (#7278) --- docs/JestObjectAPI.md | 278 +++++++++++++++++++----------------------- 1 file changed, 127 insertions(+), 151 deletions(-) diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 0442c12a34e6..89ded4fd7417 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -5,45 +5,7 @@ title: The Jest Object The `jest` object is automatically in scope within every test file. The methods in the `jest` object help create mocks and let you control Jest's overall behavior. -## Methods - -- [`jest.clearAllTimers()`](#jestclearalltimers) -- [`jest.disableAutomock()`](#jestdisableautomock) -- [`jest.enableAutomock()`](#jestenableautomock) -- [`jest.fn(implementation)`](#jestfnimplementation) -- [`jest.isMockFunction(fn)`](#jestismockfunctionfn) -- [`jest.genMockFromModule(moduleName)`](#jestgenmockfrommodulemodulename) -- [`jest.mock(moduleName, factory, options)`](#jestmockmodulename-factory-options) -- [`jest.unmock(moduleName)`](#jestunmockmodulename) -- [`jest.doMock(moduleName, factory, options)`](#jestdomockmodulename-factory-options) -- [`jest.dontMock(moduleName)`](#jestdontmockmodulename) -- [`jest.clearAllMocks()`](#jestclearallmocks) -- [`jest.resetAllMocks()`](#jestresetallmocks) -- [`jest.restoreAllMocks()`](#jestrestoreallmocks) -- [`jest.resetModules()`](#jestresetmodules) -- [`jest.retryTimes()`](#jestretrytimes) -- [`jest.runAllTicks()`](#jestrunallticks) -- [`jest.runAllTimers()`](#jestrunalltimers) -- [`jest.advanceTimersByTime(msToRun)`](#jestadvancetimersbytimemstorun) -- [`jest.runOnlyPendingTimers()`](#jestrunonlypendingtimers) -- [`jest.requireActual()`](#jestrequireactual) -- [`jest.requireMock()`](#jestrequiremock) -- [`jest.setMock(moduleName, moduleExports)`](#jestsetmockmodulename-moduleexports) -- [`jest.setTimeout(timeout)`](#jestsettimeouttimeout) -- [`jest.useFakeTimers()`](#jestusefaketimers) -- [`jest.useRealTimers()`](#jestuserealtimers) -- [`jest.spyOn(object, methodName)`](#jestspyonobject-methodname) -- [`jest.spyOn(object, methodName, accessType?)`](#jestspyonobject-methodname-accesstype) - ---- - -## Reference - -### `jest.clearAllTimers()` - -Removes any pending timers from the timer system. - -This means, if any timers have been scheduled (but have not yet executed), they will be cleared and will never have the opportunity to execute in the future. +## Mock Modules ### `jest.disableAutomock()` @@ -56,7 +18,9 @@ After this method is called, all `require()`s will return the real versions of e Jest configuration: ```json -"automock": true +{ + "automock": true +} ``` Example: @@ -126,24 +90,6 @@ test('original implementation', () => { _Note: this method was previously called `autoMockOn`. When using `babel-jest`, calls to `enableAutomock` will automatically be hoisted to the top of the code block. Use `autoMockOn` if you want to explicitly avoid this behavior._ -### `jest.fn(implementation)` - -Returns a new, unused [mock function](MockFunctionAPI.md). Optionally takes a mock implementation. - -```js -const mockFn = jest.fn(); -mockFn(); -expect(mockFn).toHaveBeenCalled(); - -// With a mock implementation: -const returnsTrue = jest.fn(() => true); -console.log(returnsTrue()); // true; -``` - -### `jest.isMockFunction(fn)` - -Determines if the given function is a mocked function. - ### `jest.genMockFromModule(moduleName)` Given the name of a module, use the automatic mocking system to generate a mocked version of the module for you. @@ -266,21 +212,25 @@ When using `babel-jest`, calls to `unmock` will automatically be hoisted to the Returns the `jest` object for chaining. -### `jest.clearAllMocks()` +### `jest.setMock(moduleName, moduleExports)` -Clears the `mock.calls` and `mock.instances` properties of all mocks. Equivalent to calling [`.mockClear()`](MockFunctionAPI.md#mockfnmockclear) on every mocked function. +Explicitly supplies the mock object that the module system should return for the specified module. + +On occasion there are times where the automatically generated mock the module system would normally provide you isn't adequate enough for your testing needs. Normally under those circumstances you should write a [manual mock](ManualMocks.md) that is more adequate for the module in question. However, on extremely rare occasions, even a manual mock isn't suitable for your purposes and you need to build the mock yourself inside your test. + +In these rare scenarios you can use this API to manually fill the slot in the module system's mock-module registry. Returns the `jest` object for chaining. -### `jest.resetAllMocks()` +_Note It is recommended to use [`jest.mock()`](#jestmockmodulename-factory-options) instead. The `jest.mock` API's second argument is a module factory instead of the expected exported module object._ -Resets the state of all mocks. Equivalent to calling [`.mockReset()`](MockFunctionAPI.md#mockfnmockreset) on every mocked function. +### `jest.requireActual(moduleName)` -Returns the `jest` object for chaining. +Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. -### `jest.restoreAllMocks()` +### `jest.requireMock(moduleName)` -Restores all mocks back to their original value. Equivalent to calling [`.mockRestore()`](MockFunctionAPI.md#mockfnmockrestore) on every mocked function. Beware that `jest.restoreAllMocks()` only works when mock was created with `jest.spyOn`; other mocks will require you to manually restore them. +Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. ### `jest.resetModules()` @@ -315,100 +265,25 @@ test('works too', () => { Returns the `jest` object for chaining. -### `jest.retryTimes()` +## Mock functions -Runs failed tests n-times until they pass or until the max number of retries is exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! +### `jest.fn(implementation)` -Example in a test: +Returns a new, unused [mock function](MockFunctionAPI.md). Optionally takes a mock implementation. ```js -jest.retryTimes(3); -test('will fail', () => { - expect(true).toBe(false); -}); -``` - -Returns the `jest` object for chaining. - -### `jest.runAllTicks()` - -Exhausts the **micro**-task queue (usually interfaced in node via `process.nextTick`). - -When this API is called, all pending micro-tasks that have been queued via `process.nextTick` will be executed. Additionally, if those micro-tasks themselves schedule new micro-tasks, those will be continually exhausted until there are no more micro-tasks remaining in the queue. - -### `jest.runAllTimers()` - -Exhausts the **macro**-task queue (i.e., all tasks queued by `setTimeout()`, `setInterval()`, and `setImmediate()`). - -When this API is called, all pending "macro-tasks" that have been queued via `setTimeout()` or `setInterval()` will be executed. Additionally if those macro-tasks themselves schedule new macro-tasks, those will be continually exhausted until there are no more macro-tasks remaining in the queue. - -This is often useful for synchronously executing setTimeouts during a test in order to synchronously assert about some behavior that would only happen after the `setTimeout()` or `setInterval()` callbacks executed. See the [Timer mocks](TimerMocks.md) doc for more information. - -### `jest.runAllImmediates()` - -Exhausts all tasks queued by `setImmediate()`. - -### `jest.advanceTimersByTime(msToRun)` - -##### renamed in Jest **22.0.0+** - -Also under the alias: `.runTimersToTime()` - -Executes only the macro task queue (i.e. all tasks queued by `setTimeout()` or `setInterval()` and `setImmediate()`). - -When this API is called, all timers are advanced by `msToRun` milliseconds. All pending "macro-tasks" that have been queued via `setTimeout()` or `setInterval()`, and would be executed within this time frame will be executed. Additionally if those macro-tasks schedule new macro-tasks that would be executed within the same time frame, those will be executed until there are no more macro-tasks remaining in the queue, that should be run within `msToRun` milliseconds. - -### `jest.runOnlyPendingTimers()` - -Executes only the macro-tasks that are currently pending (i.e., only the tasks that have been queued by `setTimeout()` or `setInterval()` up to this point). If any of the currently pending macro-tasks schedule new macro-tasks, those new tasks will not be executed by this call. - -This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. - -### `jest.requireActual(moduleName)` - -Returns the actual module instead of a mock, bypassing all checks on whether the module should receive a mock implementation or not. - -### `jest.requireMock(moduleName)` - -Returns a mock module instead of the actual module, bypassing all checks on whether the module should be required normally or not. - -### `jest.setMock(moduleName, moduleExports)` - -Explicitly supplies the mock object that the module system should return for the specified module. - -On occasion there are times where the automatically generated mock the module system would normally provide you isn't adequate enough for your testing needs. Normally under those circumstances you should write a [manual mock](ManualMocks.md) that is more adequate for the module in question. However, on extremely rare occasions, even a manual mock isn't suitable for your purposes and you need to build the mock yourself inside your test. - -In these rare scenarios you can use this API to manually fill the slot in the module system's mock-module registry. - -Returns the `jest` object for chaining. - -_Note It is recommended to use [`jest.mock()`](#jestmockmodulename-factory-options) instead. The `jest.mock` API's second argument is a module factory instead of the expected exported module object._ - -### `jest.setTimeout(timeout)` - -Set the default timeout interval for tests and before/after hooks in milliseconds. - -_Note: The default timeout interval is 5 seconds if this method is not called._ - -_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ - -Example: +const mockFn = jest.fn(); +mockFn(); +expect(mockFn).toHaveBeenCalled(); -```js -jest.setTimeout(1000); // 1 second +// With a mock implementation: +const returnsTrue = jest.fn(() => true); +console.log(returnsTrue()); // true; ``` -### `jest.useFakeTimers()` - -Instructs Jest to use fake versions of the standard timer functions (`setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `nextTick`, `setImmediate` and `clearImmediate`). - -Returns the `jest` object for chaining. - -### `jest.useRealTimers()` - -Instructs Jest to use the real versions of the standard timer functions. +### `jest.isMockFunction(fn)` -Returns the `jest` object for chaining. +Determines if the given function is a mocked function. ### `jest.spyOn(object, methodName)` @@ -501,3 +376,104 @@ test('plays audio', () => { spy.mockRestore(); }); ``` + +### `jest.clearAllMocks()` + +Clears the `mock.calls` and `mock.instances` properties of all mocks. Equivalent to calling [`.mockClear()`](MockFunctionAPI.md#mockfnmockclear) on every mocked function. + +Returns the `jest` object for chaining. + +### `jest.resetAllMocks()` + +Resets the state of all mocks. Equivalent to calling [`.mockReset()`](MockFunctionAPI.md#mockfnmockreset) on every mocked function. + +Returns the `jest` object for chaining. + +### `jest.restoreAllMocks()` + +Restores all mocks back to their original value. Equivalent to calling [`.mockRestore()`](MockFunctionAPI.md#mockfnmockrestore) on every mocked function. Beware that `jest.restoreAllMocks()` only works when mock was created with `jest.spyOn`; other mocks will require you to manually restore them. + +## Mock timers + +### `jest.useFakeTimers()` + +Instructs Jest to use fake versions of the standard timer functions (`setTimeout`, `setInterval`, `clearTimeout`, `clearInterval`, `nextTick`, `setImmediate` and `clearImmediate`). + +Returns the `jest` object for chaining. + +### `jest.useRealTimers()` + +Instructs Jest to use the real versions of the standard timer functions. + +Returns the `jest` object for chaining. + +### `jest.runAllTicks()` + +Exhausts the **micro**-task queue (usually interfaced in node via `process.nextTick`). + +When this API is called, all pending micro-tasks that have been queued via `process.nextTick` will be executed. Additionally, if those micro-tasks themselves schedule new micro-tasks, those will be continually exhausted until there are no more micro-tasks remaining in the queue. + +### `jest.runAllTimers()` + +Exhausts the **macro**-task queue (i.e., all tasks queued by `setTimeout()`, `setInterval()`, and `setImmediate()`). + +When this API is called, all pending "macro-tasks" that have been queued via `setTimeout()` or `setInterval()` will be executed. Additionally if those macro-tasks themselves schedule new macro-tasks, those will be continually exhausted until there are no more macro-tasks remaining in the queue. + +This is often useful for synchronously executing setTimeouts during a test in order to synchronously assert about some behavior that would only happen after the `setTimeout()` or `setInterval()` callbacks executed. See the [Timer mocks](TimerMocks.md) doc for more information. + +### `jest.runAllImmediates()` + +Exhausts all tasks queued by `setImmediate()`. + +### `jest.advanceTimersByTime(msToRun)` + +##### renamed in Jest **22.0.0+** + +Also under the alias: `.runTimersToTime()` + +Executes only the macro task queue (i.e. all tasks queued by `setTimeout()` or `setInterval()` and `setImmediate()`). + +When this API is called, all timers are advanced by `msToRun` milliseconds. All pending "macro-tasks" that have been queued via `setTimeout()` or `setInterval()`, and would be executed within this time frame will be executed. Additionally if those macro-tasks schedule new macro-tasks that would be executed within the same time frame, those will be executed until there are no more macro-tasks remaining in the queue, that should be run within `msToRun` milliseconds. + +### `jest.runOnlyPendingTimers()` + +Executes only the macro-tasks that are currently pending (i.e., only the tasks that have been queued by `setTimeout()` or `setInterval()` up to this point). If any of the currently pending macro-tasks schedule new macro-tasks, those new tasks will not be executed by this call. + +This is useful for scenarios such as one where the module being tested schedules a `setTimeout()` whose callback schedules another `setTimeout()` recursively (meaning the scheduling never stops). In these scenarios, it's useful to be able to run forward in time by a single step at a time. + +### `jest.clearAllTimers()` + +Removes any pending timers from the timer system. + +This means, if any timers have been scheduled (but have not yet executed), they will be cleared and will never have the opportunity to execute in the future. + +## Misc + +### `jest.setTimeout(timeout)` + +Set the default timeout interval for tests and before/after hooks in milliseconds. + +_Note: The default timeout interval is 5 seconds if this method is not called._ + +_Note: The method must be called after the test framework is installed in the environment and before the test runs. A good place to do this is in the `setupTestFrameworkScriptFile`._ + +Example: + +```js +jest.setTimeout(1000); // 1 second +``` + +### `jest.retryTimes()` + +Runs failed tests n-times until they pass or until the max number of retries is exhausted. This only works with [jest-circus](https://github.com/facebook/jest/tree/master/packages/jest-circus)! + +Example in a test: + +```js +jest.retryTimes(3); +test('will fail', () => { + expect(true).toBe(false); +}); +``` + +Returns the `jest` object for chaining. From e41f0bb257c6652c3100b97a1087f9f812fbea0d Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Fri, 26 Oct 2018 16:55:07 +0200 Subject: [PATCH 58/76] chore: remove long-deprecated timer globals (#7285) --- CHANGELOG.md | 2 ++ docs/JestObjectAPI.md | 4 +++ .../src/__mocks__/index.js | 1 - packages/jest-runtime/src/index.js | 29 ++++++++++--------- .../src/__tests__/fake_timers.test.js | 22 ++++++++++++++ packages/jest-util/src/fake_timers.js | 16 ++++------ types/Environment.js | 1 + types/Jest.js | 1 + 8 files changed, 52 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6610643f005a..c316ca84cad7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ - `[jest-config]` Accept an array as as well as a string for `testRegex`([#7209]https://github.com/facebook/jest/pull/7209)) - `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) - `[expect]` Check constructor equality in .toStrictEqual() ([#7005](https://github.com/facebook/jest/pull/7005)) +- `[jest-util]` Add `jest.getTimerCount()` to get the count of scheduled fake timers ([#7285](https://github.com/facebook/jest/pull/7285)) ### Fixes @@ -85,6 +86,7 @@ - `[jest-haste-map]` Standardize filenames ([#7266](https://github.com/facebook/jest/pull/7266)) - `[*]` [**BREAKING**] Require Node.js 6+ for all packages ([#7258](https://github.com/facebook/jest/pull/7258)) - `[docs]` Add correct default value for `testUrl` config option ([#7277](https://github.com/facebook/jest/pull/7277)) +- `[jest-util]` [**BREAKING**] Remove long-deprecated globals for fake timers ([#7285](https://github.com/facebook/jest/pull/7285)) ### Performance diff --git a/docs/JestObjectAPI.md b/docs/JestObjectAPI.md index 89ded4fd7417..58c86823eb64 100644 --- a/docs/JestObjectAPI.md +++ b/docs/JestObjectAPI.md @@ -447,6 +447,10 @@ Removes any pending timers from the timer system. This means, if any timers have been scheduled (but have not yet executed), they will be cleared and will never have the opportunity to execute in the future. +### `jest.getTimerCount()` + +Returns the number of fake timers still left to run. + ## Misc ### `jest.setTimeout(timeout)` diff --git a/packages/jest-environment-jsdom/src/__mocks__/index.js b/packages/jest-environment-jsdom/src/__mocks__/index.js index 68f8411ac835..8ae042ba08ed 100644 --- a/packages/jest-environment-jsdom/src/__mocks__/index.js +++ b/packages/jest-environment-jsdom/src/__mocks__/index.js @@ -14,7 +14,6 @@ JSDOMEnvironment.mockImplementation(function(config) { this.global = { JSON, console: {}, - mockClearTimers: jest.fn(), }; const globalValues = Object.assign({}, config.globals); diff --git a/packages/jest-runtime/src/index.js b/packages/jest-runtime/src/index.js index 8adede5ec442..a24ed1712fd3 100644 --- a/packages/jest-runtime/src/index.js +++ b/packages/jest-runtime/src/index.js @@ -445,20 +445,22 @@ class Runtime { this._mockRegistry = Object.create(null); this._moduleRegistry = Object.create(null); - if (this._environment && this._environment.global) { - const envGlobal = this._environment.global; - Object.keys(envGlobal).forEach(key => { - const globalMock = envGlobal[key]; - if ( - (typeof globalMock === 'object' && globalMock !== null) || - typeof globalMock === 'function' - ) { - globalMock._isMockFunction === true && globalMock.mockClear(); - } - }); + if (this._environment) { + if (this._environment.global) { + const envGlobal = this._environment.global; + Object.keys(envGlobal).forEach(key => { + const globalMock = envGlobal[key]; + if ( + (typeof globalMock === 'object' && globalMock !== null) || + typeof globalMock === 'function' + ) { + globalMock._isMockFunction === true && globalMock.mockClear(); + } + }); + } - if (envGlobal.mockClearTimers) { - envGlobal.mockClearTimers(); + if (this._environment.fakeTimers) { + this._environment.fakeTimers.clearAllTimers(); } } } @@ -932,6 +934,7 @@ class Runtime { fn, genMockFromModule: (moduleName: string) => this._generateMock(from, moduleName), + getTimerCount: () => this._environment.fakeTimers.getTimerCount(), isMockFunction: this._moduleMocker.isMockFunction, mock, requireActual: localRequire.requireActual, diff --git a/packages/jest-util/src/__tests__/fake_timers.test.js b/packages/jest-util/src/__tests__/fake_timers.test.js index a9d8434532bf..c214f0312591 100644 --- a/packages/jest-util/src/__tests__/fake_timers.test.js +++ b/packages/jest-util/src/__tests__/fake_timers.test.js @@ -943,4 +943,26 @@ describe('FakeTimers', () => { expect(global.clearImmediate).not.toBe(nativeClearImmediate); }); }); + + describe('getTimerCount', () => { + it('returns the correct count', () => { + const timers = new FakeTimers({global, moduleMocker, timerConfig}); + + timers.useFakeTimers(); + + global.setTimeout(() => {}, 0); + global.setTimeout(() => {}, 0); + global.setTimeout(() => {}, 10); + + expect(timers.getTimerCount()).toEqual(3); + + timers.advanceTimersByTime(5); + + expect(timers.getTimerCount()).toEqual(1); + + timers.advanceTimersByTime(5); + + expect(timers.getTimerCount()).toEqual(0); + }); + }); }); diff --git a/packages/jest-util/src/fake_timers.js b/packages/jest-util/src/fake_timers.js index a31cb67b2c72..e1c64f6ce2c4 100644 --- a/packages/jest-util/src/fake_timers.js +++ b/packages/jest-util/src/fake_timers.js @@ -114,16 +114,6 @@ export default class FakeTimers { this.reset(); this._createMocks(); - - // These globally-accessible function are now deprecated! - // They will go away very soon, so do not use them! - // Instead, use the versions available on the `jest` object - global.mockRunTicksRepeatedly = this.runAllTicks.bind(this); - global.mockRunTimersOnce = this.runOnlyPendingTimers.bind(this); - global.mockAdvanceTimersByTime = this.advanceTimersByTime.bind(this); - global.mockRunTimersRepeatedly = this.runAllTimers.bind(this); - global.mockClearTimers = this.clearAllTimers.bind(this); - global.mockGetTimersCount = () => Object.keys(this._timers).length; } clearAllTimers() { @@ -352,6 +342,12 @@ export default class FakeTimers { global.process.nextTick = this._fakeTimerAPIs.nextTick; } + getTimerCount() { + this._checkFakeTimers(); + + return Object.keys(this._timers).length; + } + _checkFakeTimers() { if (this._global.setTimeout !== this._fakeTimerAPIs.setTimeout) { this._global.console.warn( diff --git a/types/Environment.js b/types/Environment.js index ed6ee314c490..07128ef7da27 100644 --- a/types/Environment.js +++ b/types/Environment.js @@ -28,6 +28,7 @@ declare class $JestEnvironment { advanceTimersByTime(msToRun: number): void, runOnlyPendingTimers(): void, runWithRealTimers(callback: any): void, + getTimerCount(): number, useFakeTimers(): void, useRealTimers(): void, }; diff --git a/types/Jest.js b/types/Jest.js index 88966e299f2c..889c45382a95 100644 --- a/types/Jest.js +++ b/types/Jest.js @@ -39,6 +39,7 @@ export type Jest = {| runOnlyPendingTimers(): void, advanceTimersByTime(msToRun: number): void, runTimersToTime(msToRun: number): void, + getTimerCount(): number, setMock(moduleName: string, moduleExports: any): Jest, setTimeout(timeout: number): Jest, spyOn( From c22d9f584627a1ae6c476d44f10c3c186b480722 Mon Sep 17 00:00:00 2001 From: Rogelio Guzman Date: Fri, 26 Oct 2018 15:01:11 -0700 Subject: [PATCH 59/76] Add shorthand for watch plugins and runners (#7213) --- CHANGELOG.md | 1 + docs/Configuration.md | 18 +++ .../__snapshots__/normalize.test.js.snap | 20 +++ .../src/__tests__/normalize.test.js | 121 ++++++++++++++++-- packages/jest-config/src/normalize.js | 22 +++- packages/jest-config/src/utils.js | 110 +++++++++++++--- packages/jest-runner/src/run_test.js | 1 + .../version-23.6/Configuration.md | 14 ++ 8 files changed, 273 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c316ca84cad7..986b2950b6dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[jest-config]` Add shorthand for watch plugins and runners ([#7213](https://github.com/facebook/jest/pull/7213)) - `[jest-config]` [**BREAKING**] Deprecate `setupTestFrameworkScriptFile` in favor of new `setupFilesAfterEnv` ([#7119](https://github.com/facebook/jest/pull/7119)) - `[jest-jasmine2/jest-circus/jest-cli]` Add test.todo ([#6996](https://github.com/facebook/jest/pull/6996)) - `[pretty-format]` Option to not escape strings in diff messages ([#5661](https://github.com/facebook/jest/pull/5661)) diff --git a/docs/Configuration.md b/docs/Configuration.md index 73a841747cc1..edd6a0f1cf54 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -609,6 +609,8 @@ This option allows you to use a custom runner instead of Jest's default test run - [`jest-runner-tsc`](https://github.com/azz/jest-runner-tsc) - [`jest-runner-prettier`](https://github.com/keplersj/jest-runner-prettier) +_Note: The `runner` property value can omit the `jest-runner-` prefix of the package name._ + To write a test-runner, export a class with which accepts `globalConfig` in the constructor, and has a `runTests` method with the signature: ```ts @@ -962,3 +964,19 @@ Default: `[]` An array of RegExp patterns that are matched against all source file paths before re-running tests in watch mode. If the file path matches any of the patterns, when it is updated, it will not trigger a re-run of tests. These patterns match against the full path. Use the `` string token to include the path to your project's root directory to prevent it from accidentally ignoring all of your files in different environments that may have different root directories. Example: `["/node_modules/"]`. + +### `watchPlugins` [array] + +Default: `[]` + +This option allows you to use a custom watch plugins. Read more about watch plugins [here](watch-plugins). + +Examples of watch plugins include: + +- [`jest-watch-master`](https://github.com/rickhanlonii/jest-watch-master) +- [`jest-watch-select-projects`](https://github.com/rogeliog/jest-watch-select-projects) +- [`jest-watch-suspend`](https://github.com/unional/jest-watch-suspend) +- [`jest-watch-typeahead`](https://github.com/jest-community/jest-watch-typeahead) +- [`jest-watch-yarn-workspaces`](https://github.com/cameronhunter/jest-watch-directories/tree/master/packages/jest-watch-yarn-workspaces) + +_Note: The values in the `watchPlugins` property value can omit the `jest-watch-` prefix of the package name._ diff --git a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap index c8edc2f5911b..ea5a367f3d53 100644 --- a/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap +++ b/packages/jest-config/src/__tests__/__snapshots__/normalize.test.js.snap @@ -47,6 +47,16 @@ exports[`rootDir throws if the options is missing a rootDir property 1`] = ` " `; +exports[`runner throw error when a runner is not found 1`] = ` +"Validation Error: + + Jest Runner missing-runner cannot be found. Make sure the runner configuration option points to an existing node module. + + Configuration Documentation: + https://jestjs.io/docs/configuration.html +" +`; + exports[`setupTestFrameworkScriptFile logs a deprecation warning when \`setupTestFrameworkScriptFile\` is used 1`] = ` " Deprecation Warning: @@ -93,3 +103,13 @@ exports[`testMatch throws if testRegex and testMatch are both specified 1`] = ` exports[`testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; exports[`testPathPattern --testPathPattern ignores invalid regular expressions and logs a warning 1`] = `" Invalid testPattern a( supplied. Running all tests instead."`; + +exports[`watchPlugins throw error when a watch plugin is not found 1`] = ` +"Validation Error: + + Watch plugin missing-plugin cannot be found. Make sure the watchPlugins configuration option points to an existing node module. + + Configuration Documentation: + https://jestjs.io/docs/configuration.html +" +`; diff --git a/packages/jest-config/src/__tests__/normalize.test.js b/packages/jest-config/src/__tests__/normalize.test.js index 48c2fc306b01..e801b998b797 100644 --- a/packages/jest-config/src/__tests__/normalize.test.js +++ b/packages/jest-config/src/__tests__/normalize.test.js @@ -671,11 +671,8 @@ describe('testEnvironment', () => { beforeEach(() => { Resolver = require('jest-resolve'); Resolver.findNodeModule = jest.fn(name => { - if (name === 'jsdom') { - return 'node_modules/jsdom'; - } - if (name === 'jest-environment-jsdom') { - return 'node_modules/jest-environment-jsdom'; + if (['jsdom', 'jest-environment-jsdom'].includes(name)) { + return `node_modules/${name}`; } if (name.startsWith('/root')) { return name; @@ -1205,15 +1202,79 @@ describe('preset without setupFiles', () => { }); }); +describe('runner', () => { + let Resolver; + beforeEach(() => { + Resolver = require('jest-resolve'); + Resolver.findNodeModule = jest.fn(name => { + if (['eslint', 'jest-runner-eslint', 'my-runner-foo'].includes(name)) { + return `node_modules/${name}`; + } + if (name.startsWith('/root')) { + return name; + } + return findNodeModule(name); + }); + }); + + it('defaults to `jest-runner`', () => { + const {options} = normalize({rootDir: '/root'}, {}); + + expect(options.runner).toBe('jest-runner'); + }); + + it('resolves to runners that do not have the prefix', () => { + const {options} = normalize( + { + rootDir: '/root/', + runner: 'my-runner-foo', + }, + {}, + ); + + expect(options.runner).toBe('node_modules/my-runner-foo'); + }); + + it('resolves to runners and prefers jest-runner-`name`', () => { + const {options} = normalize( + { + rootDir: '/root/', + runner: 'eslint', + }, + {}, + ); + + expect(options.runner).toBe('node_modules/jest-runner-eslint'); + }); + + it('throw error when a runner is not found', () => { + expect(() => + normalize( + { + rootDir: '/root/', + runner: 'missing-runner', + }, + {}, + ), + ).toThrowErrorMatchingSnapshot(); + }); +}); + describe('watchPlugins', () => { let Resolver; beforeEach(() => { Resolver = require('jest-resolve'); Resolver.findNodeModule = jest.fn(name => { - if (name.startsWith(path.sep)) { + if ( + ['typeahead', 'jest-watch-typeahead', 'my-watch-plugin'].includes(name) + ) { + return `node_modules/${name}`; + } + + if (name.startsWith('/root')) { return name; } - return path.sep + 'node_modules' + path.sep + name; + return findNodeModule(name); }); }); @@ -1223,20 +1284,60 @@ describe('watchPlugins', () => { expect(options.watchPlugins).toEqual(undefined); }); - it('normalizes watchPlugins', () => { + it('resolves to watch plugins and prefers jest-watch-`name`', () => { const {options} = normalize( { rootDir: '/root/', - watchPlugins: ['my-watch-plugin', '/path/to/plugin'], + watchPlugins: ['typeahead'], }, {}, ); expect(options.watchPlugins).toEqual([ - {config: {}, path: '/node_modules/my-watch-plugin'}, + {config: {}, path: 'node_modules/jest-watch-typeahead'}, + ]); + }); + + it('resolves watch plugins that do not have the prefix', () => { + const {options} = normalize( + { + rootDir: '/root/', + watchPlugins: ['my-watch-plugin'], + }, + {}, + ); + + expect(options.watchPlugins).toEqual([ + {config: {}, path: 'node_modules/my-watch-plugin'}, + ]); + }); + + it('normalizes multiple watchPlugins', () => { + const {options} = normalize( + { + rootDir: '/root/', + watchPlugins: ['jest-watch-typeahead', '/path/to/plugin'], + }, + {}, + ); + + expect(options.watchPlugins).toEqual([ + {config: {}, path: 'node_modules/jest-watch-typeahead'}, {config: {}, path: '/root/path/to/plugin'}, ]); }); + + it('throw error when a watch plugin is not found', () => { + expect(() => + normalize( + { + rootDir: '/root/', + watchPlugins: ['missing-plugin'], + }, + {}, + ), + ).toThrowErrorMatchingSnapshot(); + }); }); describe('testPathPattern', () => { diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 018f223d87f9..0defd7699714 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -28,6 +28,8 @@ import { _replaceRootDirTags, escapeGlobCharacters, getTestEnvironment, + getRunner, + getWatchPlugin, resolve, } from './utils'; import {DEFAULT_JS_PATTERN, DEFAULT_REPORTER_LABEL} from './constants'; @@ -394,7 +396,10 @@ export default function normalize(options: InitialOptions, argv: Argv) { } if (options.testEnvironment) { - options.testEnvironment = getTestEnvironment(options); + options.testEnvironment = getTestEnvironment({ + rootDir: options.rootDir, + testEnvironment: options.testEnvironment, + }); } if (!options.roots && options.testPathDirs) { @@ -475,7 +480,6 @@ export default function normalize(options: InitialOptions, argv: Argv) { case 'globalSetup': case 'globalTeardown': case 'moduleLoader': - case 'runner': case 'snapshotResolver': case 'testResultsProcessor': case 'testRunner': @@ -488,6 +492,14 @@ export default function normalize(options: InitialOptions, argv: Argv) { rootDir: options.rootDir, }); break; + case 'runner': + value = + options[key] && + getRunner(newOptions.resolver, { + filePath: options[key], + rootDir: options.rootDir, + }); + break; case 'prettierPath': // We only want this to throw if "prettierPath" is explicitly passed // from config or CLI, and the requested path isn't found. Otherwise we @@ -658,18 +670,16 @@ export default function normalize(options: InitialOptions, argv: Argv) { if (typeof watchPlugin === 'string') { return { config: {}, - path: resolve(newOptions.resolver, { + path: getWatchPlugin(newOptions.resolver, { filePath: watchPlugin, - key, rootDir: options.rootDir, }), }; } else { return { config: watchPlugin[1] || {}, - path: resolve(newOptions.resolver, { + path: getWatchPlugin(newOptions.resolver, { filePath: watchPlugin[0], - key, rootDir: options.rootDir, }), }; diff --git a/packages/jest-config/src/utils.js b/packages/jest-config/src/utils.js index fb4aae572ae1..95f3b0a976ab 100644 --- a/packages/jest-config/src/utils.js +++ b/packages/jest-config/src/utils.js @@ -102,45 +102,119 @@ export const _replaceRootDirTags = (rootDir: string, config: any) => { return config; }; -/** - * Finds the test environment to use: - * - * 1. looks for jest-environment- relative to project. - * 1. looks for jest-environment- relative to Jest. - * 1. looks for relative to project. - * 1. looks for relative to Jest. - */ -export const getTestEnvironment = (config: Object) => { - const env = replaceRootDirInPath(config.rootDir, config.testEnvironment); - let module = Resolver.findNodeModule(`jest-environment-${env}`, { - basedir: config.rootDir, +export const resolveWithPrefix = ( + resolver: ?string, + { + filePath, + humanOptionName, + optionName, + prefix, + rootDir, + }: { + filePath: string, + humanOptionName: string, + optionName: string, + prefix: string, + rootDir: string, + }, +) => { + const fileName = replaceRootDirInPath(rootDir, filePath); + let module = Resolver.findNodeModule(`${prefix}${fileName}`, { + basedir: rootDir, + resolver, }); if (module) { return module; } try { - return require.resolve(`jest-environment-${env}`); + return require.resolve(`${prefix}${fileName}`); } catch (e) {} - module = Resolver.findNodeModule(env, {basedir: config.rootDir}); + module = Resolver.findNodeModule(fileName, { + basedir: rootDir, + resolver, + }); if (module) { return module; } try { - return require.resolve(env); + return require.resolve(fileName); } catch (e) {} throw createValidationError( - ` Test environment ${chalk.bold( - env, + ` ${humanOptionName} ${chalk.bold( + fileName, )} cannot be found. Make sure the ${chalk.bold( - 'testEnvironment', + optionName, )} configuration option points to an existing node module.`, ); }; +/** + * Finds the test environment to use: + * + * 1. looks for jest-environment- relative to project. + * 1. looks for jest-environment- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export const getTestEnvironment = ({ + rootDir, + testEnvironment: filePath, +}: { + rootDir: string, + testEnvironment: string, +}) => + resolveWithPrefix(null, { + filePath, + humanOptionName: 'Test environment', + optionName: 'testEnvironment', + prefix: 'jest-environment-', + rootDir, + }); + +/** + * Finds the watch plugins to use: + * + * 1. looks for jest-watch- relative to project. + * 1. looks for jest-watch- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export const getWatchPlugin = ( + resolver: ?string, + {filePath, rootDir}: {filePath: string, rootDir: string}, +) => + resolveWithPrefix(resolver, { + filePath, + humanOptionName: 'Watch plugin', + optionName: 'watchPlugins', + prefix: 'jest-watch-', + rootDir, + }); + +/** + * Finds the runner to use: + * + * 1. looks for jest-runner- relative to project. + * 1. looks for jest-runner- relative to Jest. + * 1. looks for relative to project. + * 1. looks for relative to Jest. + */ +export const getRunner = ( + resolver: ?string, + {filePath, rootDir}: {filePath: string, rootDir: string}, +) => + resolveWithPrefix(resolver, { + filePath, + humanOptionName: 'Jest Runner', + optionName: 'runner', + prefix: 'jest-runner-', + rootDir, + }); + export const isJSONString = (text: ?string) => text && typeof text === 'string' && diff --git a/packages/jest-runner/src/run_test.js b/packages/jest-runner/src/run_test.js index bba71b2c2dfe..4292349ec8e3 100644 --- a/packages/jest-runner/src/run_test.js +++ b/packages/jest-runner/src/run_test.js @@ -58,6 +58,7 @@ async function runTestInternal( if (customEnvironment) { testEnvironment = getTestEnvironment( Object.assign({}, config, { + // $FlowFixMe testEnvironment: customEnvironment, }), ); diff --git a/website/versioned_docs/version-23.6/Configuration.md b/website/versioned_docs/version-23.6/Configuration.md index 617f06826036..a687b04524e4 100644 --- a/website/versioned_docs/version-23.6/Configuration.md +++ b/website/versioned_docs/version-23.6/Configuration.md @@ -938,3 +938,17 @@ Default: `[]` An array of RegExp patterns that are matched against all source file paths before re-running tests in watch mode. If the file path matches any of the patterns, when it is updated, it will not trigger a re-run of tests. These patterns match against the full path. Use the `` string token to include the path to your project's root directory to prevent it from accidentally ignoring all of your files in different environments that may have different root directories. Example: `["/node_modules/"]`. + +### `watchPlugins` [array] + +Default: `[]` + +This option allows you to use a custom watch plugins. Read more about watch plugins [here](watch-plugins). + +Examples of watch plugins include: + +- [`jest-watch-master`](https://github.com/rickhanlonii/jest-watch-master) +- [`jest-watch-select-projects`](https://github.com/rogeliog/jest-watch-select-projects) +- [`jest-watch-suspend`](https://github.com/unional/jest-watch-suspend) +- [`jest-watch-typeahead`](https://github.com/jest-community/jest-watch-typeahead) +- [`jest-watch-yarn-workspaces`](https://github.com/cameronhunter/jest-watch-directories/tree/master/packages/jest-watch-yarn-workspaces) From 5a624d414ba0c4063b25199b16c2953de01fa55a Mon Sep 17 00:00:00 2001 From: Anenth Date: Sun, 28 Oct 2018 18:26:29 +0530 Subject: [PATCH 60/76] Standardize file names in packages/jest-jasmine2 (#7290) ## Summary This is part of #4969 - standardizes file names in packages/jest-jasmine2 under Facebook naming conventions ## Test plan Did a manual verification, Tried running `yarn test` but got failure event on main --- ...ectation_failed.js => ExpectationFailed.js} | 0 .../src/{p_cancelable.js => PCancelable.js} | 0 ...p => expectationResultFactory.test.js.snap} | 0 ...est.js => expectationResultFactory.test.js} | 2 +- ...{hooks_error.test.js => hooksError.test.js} | 0 ..._test_error.test.js => itTestError.test.js} | 0 ...est_alias.test.js => itToTestAlias.test.js} | 0 .../{p_timeout.test.js => pTimeout.test.js} | 2 +- ...ueue_runner.test.js => queueRunner.test.js} | 2 +- .../{todo_error.test.js => todoError.test.js} | 0 ...ert_support.js => assertionErrorMessage.js} | 0 .../{error_on_private.js => errorOnPrivate.js} | 0 ..._factory.js => expectationResultFactory.js} | 0 packages/jest-jasmine2/src/index.js | 8 ++++---- .../src/{is_error.js => isError.js} | 0 .../{call_tracker.js => CallTracker.js} | 0 packages/jest-jasmine2/src/jasmine/Env.js | 18 +++++++++--------- .../{js_api_reporter.js => JsApiReporter.js} | 0 ...eport_dispatcher.js => ReportDispatcher.js} | 0 packages/jest-jasmine2/src/jasmine/Spec.js | 6 +++--- .../{spy_strategy.js => SpyStrategy.js} | 0 packages/jest-jasmine2/src/jasmine/Suite.js | 4 ++-- .../jasmine/{create_spy.js => createSpy.js} | 4 ++-- .../{jasmine_light.js => jasmineLight.js} | 8 ++++---- .../{spy_registry.js => spyRegistry.js} | 6 +++--- ...jasmine_async.js => jasmineAsyncInstall.js} | 12 ++++++------ .../src/{jest_expect.js => jestExpect.js} | 0 .../src/{p_timeout.js => pTimeout.js} | 0 .../src/{queue_runner.js => queueRunner.js} | 4 ++-- .../{tree_processor.js => treeProcessor.js} | 0 30 files changed, 38 insertions(+), 38 deletions(-) rename packages/jest-jasmine2/src/{expectation_failed.js => ExpectationFailed.js} (100%) rename packages/jest-jasmine2/src/{p_cancelable.js => PCancelable.js} (100%) rename packages/jest-jasmine2/src/__tests__/__snapshots__/{expectation_result_factory.test.js.snap => expectationResultFactory.test.js.snap} (100%) rename packages/jest-jasmine2/src/__tests__/{expectation_result_factory.test.js => expectationResultFactory.test.js} (96%) rename packages/jest-jasmine2/src/__tests__/{hooks_error.test.js => hooksError.test.js} (100%) rename packages/jest-jasmine2/src/__tests__/{it_test_error.test.js => itTestError.test.js} (100%) rename packages/jest-jasmine2/src/__tests__/{it_to_test_alias.test.js => itToTestAlias.test.js} (100%) rename packages/jest-jasmine2/src/__tests__/{p_timeout.test.js => pTimeout.test.js} (97%) rename packages/jest-jasmine2/src/__tests__/{queue_runner.test.js => queueRunner.test.js} (98%) rename packages/jest-jasmine2/src/__tests__/{todo_error.test.js => todoError.test.js} (100%) rename packages/jest-jasmine2/src/{assert_support.js => assertionErrorMessage.js} (100%) rename packages/jest-jasmine2/src/{error_on_private.js => errorOnPrivate.js} (100%) rename packages/jest-jasmine2/src/{expectation_result_factory.js => expectationResultFactory.js} (100%) rename packages/jest-jasmine2/src/{is_error.js => isError.js} (100%) rename packages/jest-jasmine2/src/jasmine/{call_tracker.js => CallTracker.js} (100%) rename packages/jest-jasmine2/src/jasmine/{js_api_reporter.js => JsApiReporter.js} (100%) rename packages/jest-jasmine2/src/jasmine/{report_dispatcher.js => ReportDispatcher.js} (100%) rename packages/jest-jasmine2/src/jasmine/{spy_strategy.js => SpyStrategy.js} (100%) rename packages/jest-jasmine2/src/jasmine/{create_spy.js => createSpy.js} (96%) rename packages/jest-jasmine2/src/jasmine/{jasmine_light.js => jasmineLight.js} (95%) rename packages/jest-jasmine2/src/jasmine/{spy_registry.js => spyRegistry.js} (97%) rename packages/jest-jasmine2/src/{jasmine_async.js => jasmineAsyncInstall.js} (93%) rename packages/jest-jasmine2/src/{jest_expect.js => jestExpect.js} (100%) rename packages/jest-jasmine2/src/{p_timeout.js => pTimeout.js} (100%) rename packages/jest-jasmine2/src/{queue_runner.js => queueRunner.js} (96%) rename packages/jest-jasmine2/src/{tree_processor.js => treeProcessor.js} (100%) diff --git a/packages/jest-jasmine2/src/expectation_failed.js b/packages/jest-jasmine2/src/ExpectationFailed.js similarity index 100% rename from packages/jest-jasmine2/src/expectation_failed.js rename to packages/jest-jasmine2/src/ExpectationFailed.js diff --git a/packages/jest-jasmine2/src/p_cancelable.js b/packages/jest-jasmine2/src/PCancelable.js similarity index 100% rename from packages/jest-jasmine2/src/p_cancelable.js rename to packages/jest-jasmine2/src/PCancelable.js diff --git a/packages/jest-jasmine2/src/__tests__/__snapshots__/expectation_result_factory.test.js.snap b/packages/jest-jasmine2/src/__tests__/__snapshots__/expectationResultFactory.test.js.snap similarity index 100% rename from packages/jest-jasmine2/src/__tests__/__snapshots__/expectation_result_factory.test.js.snap rename to packages/jest-jasmine2/src/__tests__/__snapshots__/expectationResultFactory.test.js.snap diff --git a/packages/jest-jasmine2/src/__tests__/expectation_result_factory.test.js b/packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.js similarity index 96% rename from packages/jest-jasmine2/src/__tests__/expectation_result_factory.test.js rename to packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.js index d036f36c0f06..06bb8c151935 100644 --- a/packages/jest-jasmine2/src/__tests__/expectation_result_factory.test.js +++ b/packages/jest-jasmine2/src/__tests__/expectationResultFactory.test.js @@ -8,7 +8,7 @@ 'use strict'; -import expectationResultFactory from '../expectation_result_factory'; +import expectationResultFactory from '../expectationResultFactory'; describe('expectationResultFactory', () => { it('returns the result if passed.', () => { diff --git a/packages/jest-jasmine2/src/__tests__/hooks_error.test.js b/packages/jest-jasmine2/src/__tests__/hooksError.test.js similarity index 100% rename from packages/jest-jasmine2/src/__tests__/hooks_error.test.js rename to packages/jest-jasmine2/src/__tests__/hooksError.test.js diff --git a/packages/jest-jasmine2/src/__tests__/it_test_error.test.js b/packages/jest-jasmine2/src/__tests__/itTestError.test.js similarity index 100% rename from packages/jest-jasmine2/src/__tests__/it_test_error.test.js rename to packages/jest-jasmine2/src/__tests__/itTestError.test.js diff --git a/packages/jest-jasmine2/src/__tests__/it_to_test_alias.test.js b/packages/jest-jasmine2/src/__tests__/itToTestAlias.test.js similarity index 100% rename from packages/jest-jasmine2/src/__tests__/it_to_test_alias.test.js rename to packages/jest-jasmine2/src/__tests__/itToTestAlias.test.js diff --git a/packages/jest-jasmine2/src/__tests__/p_timeout.test.js b/packages/jest-jasmine2/src/__tests__/pTimeout.test.js similarity index 97% rename from packages/jest-jasmine2/src/__tests__/p_timeout.test.js rename to packages/jest-jasmine2/src/__tests__/pTimeout.test.js index d0bccd1d237a..4daa94b78865 100644 --- a/packages/jest-jasmine2/src/__tests__/p_timeout.test.js +++ b/packages/jest-jasmine2/src/__tests__/pTimeout.test.js @@ -10,7 +10,7 @@ jest.useFakeTimers(); -import pTimeout from '../p_timeout'; +import pTimeout from '../pTimeout'; describe('pTimeout', () => { it('calls `clearTimeout` and resolves when `promise` resolves.', async () => { diff --git a/packages/jest-jasmine2/src/__tests__/queue_runner.test.js b/packages/jest-jasmine2/src/__tests__/queueRunner.test.js similarity index 98% rename from packages/jest-jasmine2/src/__tests__/queue_runner.test.js rename to packages/jest-jasmine2/src/__tests__/queueRunner.test.js index 516604a0156a..80c2b15ab202 100644 --- a/packages/jest-jasmine2/src/__tests__/queue_runner.test.js +++ b/packages/jest-jasmine2/src/__tests__/queueRunner.test.js @@ -8,7 +8,7 @@ 'use strict'; -import queueRunner from '../queue_runner'; +import queueRunner from '../queueRunner'; describe('queueRunner', () => { it('runs every function in the queue.', async () => { diff --git a/packages/jest-jasmine2/src/__tests__/todo_error.test.js b/packages/jest-jasmine2/src/__tests__/todoError.test.js similarity index 100% rename from packages/jest-jasmine2/src/__tests__/todo_error.test.js rename to packages/jest-jasmine2/src/__tests__/todoError.test.js diff --git a/packages/jest-jasmine2/src/assert_support.js b/packages/jest-jasmine2/src/assertionErrorMessage.js similarity index 100% rename from packages/jest-jasmine2/src/assert_support.js rename to packages/jest-jasmine2/src/assertionErrorMessage.js diff --git a/packages/jest-jasmine2/src/error_on_private.js b/packages/jest-jasmine2/src/errorOnPrivate.js similarity index 100% rename from packages/jest-jasmine2/src/error_on_private.js rename to packages/jest-jasmine2/src/errorOnPrivate.js diff --git a/packages/jest-jasmine2/src/expectation_result_factory.js b/packages/jest-jasmine2/src/expectationResultFactory.js similarity index 100% rename from packages/jest-jasmine2/src/expectation_result_factory.js rename to packages/jest-jasmine2/src/expectationResultFactory.js diff --git a/packages/jest-jasmine2/src/index.js b/packages/jest-jasmine2/src/index.js index b6fef61428b1..4ec456f130a5 100644 --- a/packages/jest-jasmine2/src/index.js +++ b/packages/jest-jasmine2/src/index.js @@ -16,12 +16,12 @@ import type Runtime from 'jest-runtime'; import path from 'path'; import installEach from './each'; -import {installErrorOnPrivate} from './error_on_private'; +import {installErrorOnPrivate} from './errorOnPrivate'; import {getCallsite} from 'jest-util'; import JasmineReporter from './reporter'; -import {install as jasmineAsyncInstall} from './jasmine_async'; +import jasmineAsyncInstall from './jasmineAsyncInstall'; -const JASMINE = require.resolve('./jasmine/jasmine_light.js'); +const JASMINE = require.resolve('./jasmine/jasmineLight.js'); async function jasmine2( globalConfig: GlobalConfig, @@ -117,7 +117,7 @@ async function jasmine2( env.addReporter(reporter); runtime - .requireInternalModule(path.resolve(__dirname, './jest_expect.js')) + .requireInternalModule(path.resolve(__dirname, './jestExpect.js')) .default({ expand: globalConfig.expand, }); diff --git a/packages/jest-jasmine2/src/is_error.js b/packages/jest-jasmine2/src/isError.js similarity index 100% rename from packages/jest-jasmine2/src/is_error.js rename to packages/jest-jasmine2/src/isError.js diff --git a/packages/jest-jasmine2/src/jasmine/call_tracker.js b/packages/jest-jasmine2/src/jasmine/CallTracker.js similarity index 100% rename from packages/jest-jasmine2/src/jasmine/call_tracker.js rename to packages/jest-jasmine2/src/jasmine/CallTracker.js diff --git a/packages/jest-jasmine2/src/jasmine/Env.js b/packages/jest-jasmine2/src/jasmine/Env.js index 21d27d753c23..c6556fec8a61 100644 --- a/packages/jest-jasmine2/src/jasmine/Env.js +++ b/packages/jest-jasmine2/src/jasmine/Env.js @@ -31,10 +31,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* eslint-disable sort-keys */ import {AssertionError} from 'assert'; -import queueRunner from '../queue_runner'; -import treeProcessor from '../tree_processor'; -import checkIsError from '../is_error'; -import assertionErrorMessage from '../assert_support'; +import queueRunner from '../queueRunner'; +import treeProcessor from '../treeProcessor'; +import isError from '../isError'; +import assertionErrorMessage from '../assertionErrorMessage'; import {ErrorWithStack} from 'jest-util'; export default function(j$) { @@ -573,16 +573,16 @@ export default function(j$) { }; this.fail = function(error) { - let isError; + let checkIsError; let message; if (error instanceof AssertionError) { - isError = false; + checkIsError = false; message = assertionErrorMessage(error, {expand: j$.Spec.expand}); } else { - const check = checkIsError(error); + const check = isError(error); - isError = check.isError; + checkIsError = check.isError; message = check.message; } @@ -592,7 +592,7 @@ export default function(j$) { expected: '', actual: '', message, - error: isError ? error : new Error(message), + error: checkIsError ? error : new Error(message), }); }; } diff --git a/packages/jest-jasmine2/src/jasmine/js_api_reporter.js b/packages/jest-jasmine2/src/jasmine/JsApiReporter.js similarity index 100% rename from packages/jest-jasmine2/src/jasmine/js_api_reporter.js rename to packages/jest-jasmine2/src/jasmine/JsApiReporter.js diff --git a/packages/jest-jasmine2/src/jasmine/report_dispatcher.js b/packages/jest-jasmine2/src/jasmine/ReportDispatcher.js similarity index 100% rename from packages/jest-jasmine2/src/jasmine/report_dispatcher.js rename to packages/jest-jasmine2/src/jasmine/ReportDispatcher.js diff --git a/packages/jest-jasmine2/src/jasmine/Spec.js b/packages/jest-jasmine2/src/jasmine/Spec.js index c7ab00dfe70e..9f3bc12945ce 100644 --- a/packages/jest-jasmine2/src/jasmine/Spec.js +++ b/packages/jest-jasmine2/src/jasmine/Spec.js @@ -33,11 +33,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import {AssertionError} from 'assert'; -import ExpectationFailed from '../expectation_failed'; +import ExpectationFailed from '../ExpectationFailed'; -import expectationResultFactory from '../expectation_result_factory'; +import expectationResultFactory from '../expectationResultFactory'; -import assertionErrorMessage from '../assert_support'; +import assertionErrorMessage from '../assertionErrorMessage'; export default function Spec(attrs: Object) { this.resultCallback = attrs.resultCallback || function() {}; diff --git a/packages/jest-jasmine2/src/jasmine/spy_strategy.js b/packages/jest-jasmine2/src/jasmine/SpyStrategy.js similarity index 100% rename from packages/jest-jasmine2/src/jasmine/spy_strategy.js rename to packages/jest-jasmine2/src/jasmine/SpyStrategy.js diff --git a/packages/jest-jasmine2/src/jasmine/Suite.js b/packages/jest-jasmine2/src/jasmine/Suite.js index 307840c2dec6..90bd2a7cf21c 100644 --- a/packages/jest-jasmine2/src/jasmine/Suite.js +++ b/packages/jest-jasmine2/src/jasmine/Suite.js @@ -32,8 +32,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* eslint-disable sort-keys */ import {convertDescriptorToString} from 'jest-util'; -import ExpectationFailed from '../expectation_failed'; -import expectationResultFactory from '../expectation_result_factory'; +import ExpectationFailed from '../ExpectationFailed'; +import expectationResultFactory from '../expectationResultFactory'; export default function Suite(attrs: Object) { this.id = attrs.id; diff --git a/packages/jest-jasmine2/src/jasmine/create_spy.js b/packages/jest-jasmine2/src/jasmine/createSpy.js similarity index 96% rename from packages/jest-jasmine2/src/jasmine/create_spy.js rename to packages/jest-jasmine2/src/jasmine/createSpy.js index 7cd6325c3ead..ba05e617f86e 100644 --- a/packages/jest-jasmine2/src/jasmine/create_spy.js +++ b/packages/jest-jasmine2/src/jasmine/createSpy.js @@ -30,9 +30,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* eslint-disable sort-keys */ -import CallTracker from './call_tracker'; +import CallTracker from './CallTracker'; -import SpyStrategy from './spy_strategy'; +import SpyStrategy from './SpyStrategy'; function createSpy(name, originalFn) { const spyStrategy = new SpyStrategy({ diff --git a/packages/jest-jasmine2/src/jasmine/jasmine_light.js b/packages/jest-jasmine2/src/jasmine/jasmineLight.js similarity index 95% rename from packages/jest-jasmine2/src/jasmine/jasmine_light.js rename to packages/jest-jasmine2/src/jasmine/jasmineLight.js index f79918edcdeb..0d1b748bb3a3 100644 --- a/packages/jest-jasmine2/src/jasmine/jasmine_light.js +++ b/packages/jest-jasmine2/src/jasmine/jasmineLight.js @@ -33,12 +33,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. import type {Jasmine} from 'types/Jasmine'; -import createSpy from './create_spy'; +import createSpy from './createSpy'; import Env from './Env'; -import JsApiReporter from './js_api_reporter'; -import ReportDispatcher from './report_dispatcher'; +import JsApiReporter from './JsApiReporter'; +import ReportDispatcher from './ReportDispatcher'; import Spec from './Spec'; -import SpyRegistry from './spy_registry'; +import SpyRegistry from './spyRegistry'; import Suite from './Suite'; import Timer from './Timer'; diff --git a/packages/jest-jasmine2/src/jasmine/spy_registry.js b/packages/jest-jasmine2/src/jasmine/spyRegistry.js similarity index 97% rename from packages/jest-jasmine2/src/jasmine/spy_registry.js rename to packages/jest-jasmine2/src/jasmine/spyRegistry.js index 4a619eaba36f..b5775a24f1db 100644 --- a/packages/jest-jasmine2/src/jasmine/spy_registry.js +++ b/packages/jest-jasmine2/src/jasmine/spyRegistry.js @@ -30,10 +30,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* @flow */ -import CallTracker from './call_tracker'; +import CallTracker from './CallTracker'; -import createSpy from './create_spy'; -import SpyStrategy from './spy_strategy'; +import createSpy from './createSpy'; +import SpyStrategy from './SpyStrategy'; const formatErrorMsg = (domain: string, usage?: string) => { const usageDefinition = usage ? '\nUsage: ' + usage : ''; diff --git a/packages/jest-jasmine2/src/jasmine_async.js b/packages/jest-jasmine2/src/jasmineAsyncInstall.js similarity index 93% rename from packages/jest-jasmine2/src/jasmine_async.js rename to packages/jest-jasmine2/src/jasmineAsyncInstall.js index a45e9ac21c15..90f5556d77ca 100644 --- a/packages/jest-jasmine2/src/jasmine_async.js +++ b/packages/jest-jasmine2/src/jasmineAsyncInstall.js @@ -16,7 +16,7 @@ import type {Global} from 'types/Global'; import isGeneratorFn from 'is-generator-fn'; import co from 'co'; -import checkIsError from './is_error'; +import isError from './isError'; function isPromise(obj) { return obj && typeof obj.then === 'function'; @@ -51,12 +51,12 @@ function promisifyLifeCycleFunction(originalFn, env) { if (isPromise(returnValue)) { returnValue.then(done.bind(null, null), error => { - const {isError, message} = checkIsError(error); + const {isError: checkIsError, message} = isError(error); if (message) { extraError.message = message; } - done.fail(isError ? error : extraError); + done.fail(checkIsError ? error : extraError); }); } else { done(); @@ -97,7 +97,7 @@ function promisifyIt(originalFn, env, jasmine) { if (isPromise(returnValue)) { returnValue.then(done.bind(null, null), error => { - const {isError, message} = checkIsError(error); + const {isError: checkIsError, message} = isError(error); if (message) { extraError.message = message; @@ -107,7 +107,7 @@ function promisifyIt(originalFn, env, jasmine) { env.pending(message); done(); } else { - done.fail(isError ? error : extraError); + done.fail(checkIsError ? error : extraError); } }); } else if (returnValue === undefined) { @@ -148,7 +148,7 @@ function makeConcurrent(originalFn: Function, env) { }; } -export function install(global: Global) { +export default function jasmineAsyncInstall(global: Global) { const jasmine = global.jasmine; const env = jasmine.getEnv(); diff --git a/packages/jest-jasmine2/src/jest_expect.js b/packages/jest-jasmine2/src/jestExpect.js similarity index 100% rename from packages/jest-jasmine2/src/jest_expect.js rename to packages/jest-jasmine2/src/jestExpect.js diff --git a/packages/jest-jasmine2/src/p_timeout.js b/packages/jest-jasmine2/src/pTimeout.js similarity index 100% rename from packages/jest-jasmine2/src/p_timeout.js rename to packages/jest-jasmine2/src/pTimeout.js diff --git a/packages/jest-jasmine2/src/queue_runner.js b/packages/jest-jasmine2/src/queueRunner.js similarity index 96% rename from packages/jest-jasmine2/src/queue_runner.js rename to packages/jest-jasmine2/src/queueRunner.js index 280a1ff73edd..de1aa47a7c95 100644 --- a/packages/jest-jasmine2/src/queue_runner.js +++ b/packages/jest-jasmine2/src/queueRunner.js @@ -7,8 +7,8 @@ * @flow */ -import PCancelable from './p_cancelable'; -import pTimeout from './p_timeout'; +import PCancelable from './PCancelable'; +import pTimeout from './pTimeout'; type Options = { clearTimeout: (timeoutID: number) => void, diff --git a/packages/jest-jasmine2/src/tree_processor.js b/packages/jest-jasmine2/src/treeProcessor.js similarity index 100% rename from packages/jest-jasmine2/src/tree_processor.js rename to packages/jest-jasmine2/src/treeProcessor.js From 5054cc1268977f69c435a20f09c5386c4cc95d1f Mon Sep 17 00:00:00 2001 From: Anenth Date: Tue, 30 Oct 2018 03:47:47 +0530 Subject: [PATCH 61/76] Standardize file names in packages/jest-validate (#7294) * Rename files to follow facebook's conventions * Rename files to follow facebook's conventions for test --- ...options.test.js.snap => validateCLIOptions.test.js.snap} | 0 .../__tests__/fixtures/{jest_config.js => jestConfig.js} | 0 packages/jest-validate/src/__tests__/validate.test.js | 6 +++--- ...idate_cli_options.test.js => validateCLIOptions.test.js} | 2 +- .../src/{default_config.js => defaultConfig.js} | 0 .../src/{example_config.js => exampleConfig.js} | 0 packages/jest-validate/src/index.js | 2 +- packages/jest-validate/src/validate.js | 2 +- .../src/{validate_cli_options.js => validateCLIOptions.js} | 2 +- 9 files changed, 7 insertions(+), 7 deletions(-) rename packages/jest-validate/src/__tests__/__snapshots__/{validate_cli_options.test.js.snap => validateCLIOptions.test.js.snap} (100%) rename packages/jest-validate/src/__tests__/fixtures/{jest_config.js => jestConfig.js} (100%) rename packages/jest-validate/src/__tests__/{validate_cli_options.test.js => validateCLIOptions.test.js} (94%) rename packages/jest-validate/src/{default_config.js => defaultConfig.js} (100%) rename packages/jest-validate/src/{example_config.js => exampleConfig.js} (100%) rename packages/jest-validate/src/{validate_cli_options.js => validateCLIOptions.js} (98%) diff --git a/packages/jest-validate/src/__tests__/__snapshots__/validate_cli_options.test.js.snap b/packages/jest-validate/src/__tests__/__snapshots__/validateCLIOptions.test.js.snap similarity index 100% rename from packages/jest-validate/src/__tests__/__snapshots__/validate_cli_options.test.js.snap rename to packages/jest-validate/src/__tests__/__snapshots__/validateCLIOptions.test.js.snap diff --git a/packages/jest-validate/src/__tests__/fixtures/jest_config.js b/packages/jest-validate/src/__tests__/fixtures/jestConfig.js similarity index 100% rename from packages/jest-validate/src/__tests__/fixtures/jest_config.js rename to packages/jest-validate/src/__tests__/fixtures/jestConfig.js diff --git a/packages/jest-validate/src/__tests__/validate.test.js b/packages/jest-validate/src/__tests__/validate.test.js index a03895a813c6..05c50e5ad886 100644 --- a/packages/jest-validate/src/__tests__/validate.test.js +++ b/packages/jest-validate/src/__tests__/validate.test.js @@ -10,14 +10,14 @@ import validate from '../validate'; import {multipleValidOptions} from '../condition'; -import jestValidateExampleConfig from '../example_config'; -import jestValidateDefaultConfig from '../default_config'; +import jestValidateExampleConfig from '../exampleConfig'; +import jestValidateDefaultConfig from '../defaultConfig'; const { defaultConfig, validConfig, deprecatedConfig, -} = require('./fixtures/jest_config'); +} = require('./fixtures/jestConfig'); test('recursively validates default Jest config', () => { expect( diff --git a/packages/jest-validate/src/__tests__/validate_cli_options.test.js b/packages/jest-validate/src/__tests__/validateCLIOptions.test.js similarity index 94% rename from packages/jest-validate/src/__tests__/validate_cli_options.test.js rename to packages/jest-validate/src/__tests__/validateCLIOptions.test.js index 44348836fc1e..fb4eba73321d 100644 --- a/packages/jest-validate/src/__tests__/validate_cli_options.test.js +++ b/packages/jest-validate/src/__tests__/validateCLIOptions.test.js @@ -8,7 +8,7 @@ 'use strict'; -import validateCLIOptions from '../validate_cli_options'; +import validateCLIOptions from '../validateCLIOptions'; test('validates yargs special options', () => { const options = ['$0', '_', 'help', 'h']; diff --git a/packages/jest-validate/src/default_config.js b/packages/jest-validate/src/defaultConfig.js similarity index 100% rename from packages/jest-validate/src/default_config.js rename to packages/jest-validate/src/defaultConfig.js diff --git a/packages/jest-validate/src/example_config.js b/packages/jest-validate/src/exampleConfig.js similarity index 100% rename from packages/jest-validate/src/example_config.js rename to packages/jest-validate/src/exampleConfig.js diff --git a/packages/jest-validate/src/index.js b/packages/jest-validate/src/index.js index 3a62ea7e5315..75806e93bb2a 100644 --- a/packages/jest-validate/src/index.js +++ b/packages/jest-validate/src/index.js @@ -14,7 +14,7 @@ import { ValidationError, } from './utils'; import validate from './validate'; -import validateCLIOptions from './validate_cli_options'; +import validateCLIOptions from './validateCLIOptions'; import {multipleValidOptions} from './condition'; module.exports = { diff --git a/packages/jest-validate/src/validate.js b/packages/jest-validate/src/validate.js index 96c54cdcf7a4..cf68a608cdd2 100644 --- a/packages/jest-validate/src/validate.js +++ b/packages/jest-validate/src/validate.js @@ -9,7 +9,7 @@ import type {ValidationOptions} from './types'; -import defaultConfig from './default_config'; +import defaultConfig from './defaultConfig'; let hasDeprecationWarnings = false; diff --git a/packages/jest-validate/src/validate_cli_options.js b/packages/jest-validate/src/validateCLIOptions.js similarity index 98% rename from packages/jest-validate/src/validate_cli_options.js rename to packages/jest-validate/src/validateCLIOptions.js index 28f3debff0bf..255093959030 100644 --- a/packages/jest-validate/src/validate_cli_options.js +++ b/packages/jest-validate/src/validateCLIOptions.js @@ -12,7 +12,7 @@ import type {Argv} from 'types/Argv'; import chalk from 'chalk'; import {createDidYouMeanMessage, format, ValidationError} from './utils'; import {deprecationWarning} from './deprecated'; -import defaultConfig from './default_config'; +import defaultConfig from './defaultConfig'; const BULLET: string = chalk.bold('\u25cf'); export const DOCUMENTATION_NOTE = ` ${chalk.bold('CLI Options Documentation:')} From b69780d17187e537b099fcefcab61eefeba5f1e6 Mon Sep 17 00:00:00 2001 From: Anenth Date: Tue, 30 Oct 2018 03:48:21 +0530 Subject: [PATCH 62/76] Standardize file names in packages/jest-util (#7293) * Rename files to follow facebook's conventions * Rename files to follow facebook's conventions for test --- ...buffered_console.js => BufferedConsole.js} | 2 +- .../src/{Console.js => CustomConsole.js} | 2 +- ...{error_with_stack.js => ErrorWithStack.js} | 0 .../src/{fake_timers.js => FakeTimers.js} | 2 +- .../src/{null_console.js => NullConsole.js} | 4 +-- ...s.test.js.snap => fakeTimers.test.js.snap} | 0 ...onsole.test.js => bufferedConsole.test.js} | 2 +- .../jest-util/src/__tests__/console.test.js | 2 +- ...ct.test.js => createProcessObject.test.js} | 2 +- ...ic_copy.test.js => deepCyclicCopy.test.js} | 2 +- ...h_stack.test.js => errorWithStack.test.js} | 2 +- ...fake_timers.test.js => fakeTimers.test.js} | 2 +- ...ults.test.js => formatTestResults.test.js} | 2 +- ...t_callsite.test.js => getCallsite.test.js} | 2 +- ...shot.test.js => getFailedSnapshot.test.js} | 2 +- ...s.test.js => installCommonGlobals.test.js} | 2 +- ...eractive.test.js => isInteractive.test.js} | 10 +++--- .../src/{clear_line.js => clearLine.js} | 0 ...string.js => convertDescriptorToString.js} | 0 ...ocess_object.js => createProcessObject.js} | 2 +- ...{deep_cyclic_copy.js => deepCyclicCopy.js} | 0 ...t_test_results.js => formatTestResults.js} | 0 .../src/{get_callsite.js => getCallsite.js} | 0 ..._console_output.js => getConsoleOutput.js} | 0 ...hot_tests.js => getFailedSnapshotTests.js} | 0 packages/jest-util/src/index.js | 32 +++++++++---------- ...mon_globals.js => installCommonGlobals.js} | 4 +-- .../{is_interative.js => isInteractive.js} | 0 .../src/{set_global.js => setGlobal.js} | 0 29 files changed, 39 insertions(+), 39 deletions(-) rename packages/jest-util/src/{buffered_console.js => BufferedConsole.js} (98%) rename packages/jest-util/src/{Console.js => CustomConsole.js} (98%) rename packages/jest-util/src/{error_with_stack.js => ErrorWithStack.js} (100%) rename packages/jest-util/src/{fake_timers.js => FakeTimers.js} (99%) rename packages/jest-util/src/{null_console.js => NullConsole.js} (77%) rename packages/jest-util/src/__tests__/__snapshots__/{fake_timers.test.js.snap => fakeTimers.test.js.snap} (100%) rename packages/jest-util/src/__tests__/{buffered_console.test.js => bufferedConsole.test.js} (98%) rename packages/jest-util/src/__tests__/{create_process_object.test.js => createProcessObject.test.js} (98%) rename packages/jest-util/src/__tests__/{deep_cyclic_copy.test.js => deepCyclicCopy.test.js} (99%) rename packages/jest-util/src/__tests__/{error_with_stack.test.js => errorWithStack.test.js} (93%) rename packages/jest-util/src/__tests__/{fake_timers.test.js => fakeTimers.test.js} (99%) rename packages/jest-util/src/__tests__/{format_test_results.test.js => formatTestResults.test.js} (93%) rename packages/jest-util/src/__tests__/{get_callsite.test.js => getCallsite.test.js} (97%) rename packages/jest-util/src/__tests__/{get_failed_snapshot.test.js => getFailedSnapshot.test.js} (95%) rename packages/jest-util/src/__tests__/{install_common_globals.test.js => installCommonGlobals.test.js} (93%) rename packages/jest-util/src/__tests__/{is_interactive.test.js => isInteractive.test.js} (84%) rename packages/jest-util/src/{clear_line.js => clearLine.js} (100%) rename packages/jest-util/src/{convert_descriptor_to_string.js => convertDescriptorToString.js} (100%) rename packages/jest-util/src/{create_process_object.js => createProcessObject.js} (98%) rename packages/jest-util/src/{deep_cyclic_copy.js => deepCyclicCopy.js} (100%) rename packages/jest-util/src/{format_test_results.js => formatTestResults.js} (100%) rename packages/jest-util/src/{get_callsite.js => getCallsite.js} (100%) rename packages/jest-util/src/{get_console_output.js => getConsoleOutput.js} (100%) rename packages/jest-util/src/{get_failed_snapshot_tests.js => getFailedSnapshotTests.js} (100%) rename packages/jest-util/src/{install_common_globals.js => installCommonGlobals.js} (91%) rename packages/jest-util/src/{is_interative.js => isInteractive.js} (100%) rename packages/jest-util/src/{set_global.js => setGlobal.js} (100%) diff --git a/packages/jest-util/src/buffered_console.js b/packages/jest-util/src/BufferedConsole.js similarity index 98% rename from packages/jest-util/src/buffered_console.js rename to packages/jest-util/src/BufferedConsole.js index 434d8d194927..7b3b2a4a7129 100644 --- a/packages/jest-util/src/buffered_console.js +++ b/packages/jest-util/src/BufferedConsole.js @@ -21,7 +21,7 @@ import assert from 'assert'; import {Console} from 'console'; import {format} from 'util'; import chalk from 'chalk'; -import getCallsite from './get_callsite'; +import getCallsite from './getCallsite'; export default class BufferedConsole extends Console { _buffer: ConsoleBuffer; diff --git a/packages/jest-util/src/Console.js b/packages/jest-util/src/CustomConsole.js similarity index 98% rename from packages/jest-util/src/Console.js rename to packages/jest-util/src/CustomConsole.js index 064d9842fc2c..92335c788e67 100644 --- a/packages/jest-util/src/Console.js +++ b/packages/jest-util/src/CustomConsole.js @@ -14,7 +14,7 @@ import assert from 'assert'; import {format} from 'util'; import {Console} from 'console'; import chalk from 'chalk'; -import clearLine from './clear_line'; +import clearLine from './clearLine'; type Formatter = (type: LogType, message: LogMessage) => string; diff --git a/packages/jest-util/src/error_with_stack.js b/packages/jest-util/src/ErrorWithStack.js similarity index 100% rename from packages/jest-util/src/error_with_stack.js rename to packages/jest-util/src/ErrorWithStack.js diff --git a/packages/jest-util/src/fake_timers.js b/packages/jest-util/src/FakeTimers.js similarity index 99% rename from packages/jest-util/src/fake_timers.js rename to packages/jest-util/src/FakeTimers.js index e1c64f6ce2c4..953820c9995e 100644 --- a/packages/jest-util/src/fake_timers.js +++ b/packages/jest-util/src/FakeTimers.js @@ -12,7 +12,7 @@ import type {Global} from 'types/Global'; import type {ModuleMocker} from 'types/Mock'; import {formatStackTrace} from 'jest-message-util'; -import setGlobal from './set_global'; +import setGlobal from './setGlobal'; /** * We don't know the type of arguments for a callback ahead of time which is why diff --git a/packages/jest-util/src/null_console.js b/packages/jest-util/src/NullConsole.js similarity index 77% rename from packages/jest-util/src/null_console.js rename to packages/jest-util/src/NullConsole.js index d89d6f70f685..bfc753f926cf 100644 --- a/packages/jest-util/src/null_console.js +++ b/packages/jest-util/src/NullConsole.js @@ -7,9 +7,9 @@ * @flow */ -import Console from './Console'; +import CustomConsole from './CustomConsole'; -export default class NullConsole extends Console { +export default class NullConsole extends CustomConsole { assert() {} debug() {} dir() {} diff --git a/packages/jest-util/src/__tests__/__snapshots__/fake_timers.test.js.snap b/packages/jest-util/src/__tests__/__snapshots__/fakeTimers.test.js.snap similarity index 100% rename from packages/jest-util/src/__tests__/__snapshots__/fake_timers.test.js.snap rename to packages/jest-util/src/__tests__/__snapshots__/fakeTimers.test.js.snap diff --git a/packages/jest-util/src/__tests__/buffered_console.test.js b/packages/jest-util/src/__tests__/bufferedConsole.test.js similarity index 98% rename from packages/jest-util/src/__tests__/buffered_console.test.js rename to packages/jest-util/src/__tests__/bufferedConsole.test.js index ede81e84c810..368c03e0b89e 100644 --- a/packages/jest-util/src/__tests__/buffered_console.test.js +++ b/packages/jest-util/src/__tests__/bufferedConsole.test.js @@ -8,7 +8,7 @@ */ import chalk from 'chalk'; -import BufferedConsole from '../buffered_console'; +import BufferedConsole from '../BufferedConsole'; describe('CustomConsole', () => { let _console; diff --git a/packages/jest-util/src/__tests__/console.test.js b/packages/jest-util/src/__tests__/console.test.js index 4502f8ac32f6..375160a4698b 100644 --- a/packages/jest-util/src/__tests__/console.test.js +++ b/packages/jest-util/src/__tests__/console.test.js @@ -8,7 +8,7 @@ */ import chalk from 'chalk'; -import CustomConsole from '../Console'; +import CustomConsole from '../CustomConsole'; describe('CustomConsole', () => { let _console; diff --git a/packages/jest-util/src/__tests__/create_process_object.test.js b/packages/jest-util/src/__tests__/createProcessObject.test.js similarity index 98% rename from packages/jest-util/src/__tests__/create_process_object.test.js rename to packages/jest-util/src/__tests__/createProcessObject.test.js index dafb1ef4578e..55f582c4b200 100644 --- a/packages/jest-util/src/__tests__/create_process_object.test.js +++ b/packages/jest-util/src/__tests__/createProcessObject.test.js @@ -6,7 +6,7 @@ */ import EventEmitter from 'events'; -import createProcessObject from '../create_process_object'; +import createProcessObject from '../createProcessObject'; it('creates a process object that looks like the original one', () => { const fakeProcess = createProcessObject(); diff --git a/packages/jest-util/src/__tests__/deep_cyclic_copy.test.js b/packages/jest-util/src/__tests__/deepCyclicCopy.test.js similarity index 99% rename from packages/jest-util/src/__tests__/deep_cyclic_copy.test.js rename to packages/jest-util/src/__tests__/deepCyclicCopy.test.js index 3f26bff2ebad..556c516a1743 100644 --- a/packages/jest-util/src/__tests__/deep_cyclic_copy.test.js +++ b/packages/jest-util/src/__tests__/deepCyclicCopy.test.js @@ -6,7 +6,7 @@ * */ -import deepCyclicCopy from '../deep_cyclic_copy'; +import deepCyclicCopy from '../deepCyclicCopy'; it('returns the same value for primitive or function values', () => { const fn = () => {}; diff --git a/packages/jest-util/src/__tests__/error_with_stack.test.js b/packages/jest-util/src/__tests__/errorWithStack.test.js similarity index 93% rename from packages/jest-util/src/__tests__/error_with_stack.test.js rename to packages/jest-util/src/__tests__/errorWithStack.test.js index 98c35c57c6b9..6de67fe8489f 100644 --- a/packages/jest-util/src/__tests__/error_with_stack.test.js +++ b/packages/jest-util/src/__tests__/errorWithStack.test.js @@ -7,7 +7,7 @@ * @flow */ -import ErrorWithStack from '../error_with_stack'; +import ErrorWithStack from '../ErrorWithStack'; describe('ErrorWithStack', () => { const message = '💩 something went wrong'; diff --git a/packages/jest-util/src/__tests__/fake_timers.test.js b/packages/jest-util/src/__tests__/fakeTimers.test.js similarity index 99% rename from packages/jest-util/src/__tests__/fake_timers.test.js rename to packages/jest-util/src/__tests__/fakeTimers.test.js index c214f0312591..8a05fde1dee0 100644 --- a/packages/jest-util/src/__tests__/fake_timers.test.js +++ b/packages/jest-util/src/__tests__/fakeTimers.test.js @@ -14,7 +14,7 @@ describe('FakeTimers', () => { let FakeTimers, moduleMocker, timerConfig; beforeEach(() => { - FakeTimers = require('../fake_timers').default; + FakeTimers = require('../FakeTimers').default; const mock = require('jest-mock'); const global = vm.runInNewContext('this'); moduleMocker = new mock.ModuleMocker(global); diff --git a/packages/jest-util/src/__tests__/format_test_results.test.js b/packages/jest-util/src/__tests__/formatTestResults.test.js similarity index 93% rename from packages/jest-util/src/__tests__/format_test_results.test.js rename to packages/jest-util/src/__tests__/formatTestResults.test.js index f2187c9fbb8c..6d03ccee06fe 100644 --- a/packages/jest-util/src/__tests__/format_test_results.test.js +++ b/packages/jest-util/src/__tests__/formatTestResults.test.js @@ -8,7 +8,7 @@ 'use strict'; -import formatTestResults from '../format_test_results'; +import formatTestResults from '../formatTestResults'; describe('formatTestResults', () => { const assertion = { diff --git a/packages/jest-util/src/__tests__/get_callsite.test.js b/packages/jest-util/src/__tests__/getCallsite.test.js similarity index 97% rename from packages/jest-util/src/__tests__/get_callsite.test.js rename to packages/jest-util/src/__tests__/getCallsite.test.js index 98598f049f87..f615ddcd083b 100644 --- a/packages/jest-util/src/__tests__/get_callsite.test.js +++ b/packages/jest-util/src/__tests__/getCallsite.test.js @@ -2,7 +2,7 @@ import fs from 'fs'; import SourceMap from 'source-map'; -import getCallsite from '../get_callsite'; +import getCallsite from '../getCallsite'; // Node 10.5.x compatibility jest.mock('fs', () => diff --git a/packages/jest-util/src/__tests__/get_failed_snapshot.test.js b/packages/jest-util/src/__tests__/getFailedSnapshot.test.js similarity index 95% rename from packages/jest-util/src/__tests__/get_failed_snapshot.test.js rename to packages/jest-util/src/__tests__/getFailedSnapshot.test.js index ca9992978bb3..e2d26e30a304 100644 --- a/packages/jest-util/src/__tests__/get_failed_snapshot.test.js +++ b/packages/jest-util/src/__tests__/getFailedSnapshot.test.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import getFailedSnapshotTests from '../get_failed_snapshot_tests'; +import getFailedSnapshotTests from '../getFailedSnapshotTests'; test('return a list of path', () => { const targetFilename = 'somewhere.js'; diff --git a/packages/jest-util/src/__tests__/install_common_globals.test.js b/packages/jest-util/src/__tests__/installCommonGlobals.test.js similarity index 93% rename from packages/jest-util/src/__tests__/install_common_globals.test.js rename to packages/jest-util/src/__tests__/installCommonGlobals.test.js index b606ee81cc85..0aa0d42e454b 100644 --- a/packages/jest-util/src/__tests__/install_common_globals.test.js +++ b/packages/jest-util/src/__tests__/installCommonGlobals.test.js @@ -18,7 +18,7 @@ beforeEach(() => { fake = jest.fn(); global.DTRACE_NET_SERVER_CONNECTION = fake; - installCommonGlobals = require('../install_common_globals').default; + installCommonGlobals = require('../installCommonGlobals').default; }); it('returns the passed object', () => { diff --git a/packages/jest-util/src/__tests__/is_interactive.test.js b/packages/jest-util/src/__tests__/isInteractive.test.js similarity index 84% rename from packages/jest-util/src/__tests__/is_interactive.test.js rename to packages/jest-util/src/__tests__/isInteractive.test.js index d4b7efae05b2..5df194f2411a 100644 --- a/packages/jest-util/src/__tests__/is_interactive.test.js +++ b/packages/jest-util/src/__tests__/isInteractive.test.js @@ -19,7 +19,7 @@ it('Returns true when running on interactive environment', () => { process.stdout.isTTY = true; process.env.TERM = 'xterm-256color'; - const isInteractive = require('../is_interative').default; + const isInteractive = require('../isInteractive').default; expect(isInteractive).toBe(true); }); @@ -31,7 +31,7 @@ it('Returns false when running on a non-interactive environment', () => { jest.doMock('is-ci', () => true); process.stdout.isTTY = false; process.env.TERM = 'xterm-256color'; - isInteractive = require('../is_interative').default; + isInteractive = require('../isInteractive').default; expect(isInteractive).toBe(expectedResult); // Test with is-ci being false and isTTY false @@ -39,7 +39,7 @@ it('Returns false when running on a non-interactive environment', () => { jest.doMock('is-ci', () => false); process.stdout.isTTY = false; process.env.TERM = 'xterm-256color'; - isInteractive = require('../is_interative').default; + isInteractive = require('../isInteractive').default; expect(isInteractive).toBe(expectedResult); // Test with is-ci being true and isTTY true @@ -47,7 +47,7 @@ it('Returns false when running on a non-interactive environment', () => { jest.doMock('is-ci', () => true); process.stdout.isTTY = true; process.env.TERM = 'xterm-256color'; - isInteractive = require('../is_interative').default; + isInteractive = require('../isInteractive').default; expect(isInteractive).toBe(expectedResult); // Test with dumb terminal @@ -55,6 +55,6 @@ it('Returns false when running on a non-interactive environment', () => { jest.doMock('is-ci', () => false); process.stdout.isTTY = false; process.env.TERM = 'dumb'; - isInteractive = require('../is_interative').default; + isInteractive = require('../isInteractive').default; expect(isInteractive).toBe(expectedResult); }); diff --git a/packages/jest-util/src/clear_line.js b/packages/jest-util/src/clearLine.js similarity index 100% rename from packages/jest-util/src/clear_line.js rename to packages/jest-util/src/clearLine.js diff --git a/packages/jest-util/src/convert_descriptor_to_string.js b/packages/jest-util/src/convertDescriptorToString.js similarity index 100% rename from packages/jest-util/src/convert_descriptor_to_string.js rename to packages/jest-util/src/convertDescriptorToString.js diff --git a/packages/jest-util/src/create_process_object.js b/packages/jest-util/src/createProcessObject.js similarity index 98% rename from packages/jest-util/src/create_process_object.js rename to packages/jest-util/src/createProcessObject.js index 426b0dfcfd61..02619dcf4439 100644 --- a/packages/jest-util/src/create_process_object.js +++ b/packages/jest-util/src/createProcessObject.js @@ -7,7 +7,7 @@ * @flow */ -import deepCyclicCopy from './deep_cyclic_copy'; +import deepCyclicCopy from './deepCyclicCopy'; const BLACKLIST = new Set(['env', 'mainModule', '_events']); diff --git a/packages/jest-util/src/deep_cyclic_copy.js b/packages/jest-util/src/deepCyclicCopy.js similarity index 100% rename from packages/jest-util/src/deep_cyclic_copy.js rename to packages/jest-util/src/deepCyclicCopy.js diff --git a/packages/jest-util/src/format_test_results.js b/packages/jest-util/src/formatTestResults.js similarity index 100% rename from packages/jest-util/src/format_test_results.js rename to packages/jest-util/src/formatTestResults.js diff --git a/packages/jest-util/src/get_callsite.js b/packages/jest-util/src/getCallsite.js similarity index 100% rename from packages/jest-util/src/get_callsite.js rename to packages/jest-util/src/getCallsite.js diff --git a/packages/jest-util/src/get_console_output.js b/packages/jest-util/src/getConsoleOutput.js similarity index 100% rename from packages/jest-util/src/get_console_output.js rename to packages/jest-util/src/getConsoleOutput.js diff --git a/packages/jest-util/src/get_failed_snapshot_tests.js b/packages/jest-util/src/getFailedSnapshotTests.js similarity index 100% rename from packages/jest-util/src/get_failed_snapshot_tests.js rename to packages/jest-util/src/getFailedSnapshotTests.js diff --git a/packages/jest-util/src/index.js b/packages/jest-util/src/index.js index 0d206057f5a5..5cd88557a8ff 100644 --- a/packages/jest-util/src/index.js +++ b/packages/jest-util/src/index.js @@ -9,21 +9,21 @@ import mkdirp from 'mkdirp'; -import BufferedConsole from './buffered_console'; -import clearLine from './clear_line'; -import Console from './Console'; -import ErrorWithStack from './error_with_stack'; -import FakeTimers from './fake_timers'; -import formatTestResults from './format_test_results'; -import getFailedSnapshotTests from './get_failed_snapshot_tests'; -import getConsoleOutput from './get_console_output'; -import installCommonGlobals from './install_common_globals'; -import NullConsole from './null_console'; -import isInteractive from './is_interative'; -import getCallsite from './get_callsite'; -import setGlobal from './set_global'; -import deepCyclicCopy from './deep_cyclic_copy'; -import convertDescriptorToString from './convert_descriptor_to_string'; +import BufferedConsole from './BufferedConsole'; +import clearLine from './clearLine'; +import CustomConsole from './CustomConsole'; +import ErrorWithStack from './ErrorWithStack'; +import FakeTimers from './FakeTimers'; +import formatTestResults from './formatTestResults'; +import getFailedSnapshotTests from './getFailedSnapshotTests'; +import getConsoleOutput from './getConsoleOutput'; +import installCommonGlobals from './installCommonGlobals'; +import NullConsole from './NullConsole'; +import isInteractive from './isInteractive'; +import getCallsite from './getCallsite'; +import setGlobal from './setGlobal'; +import deepCyclicCopy from './deepCyclicCopy'; +import convertDescriptorToString from './convertDescriptorToString'; const createDirectory = (path: string) => { try { @@ -37,7 +37,7 @@ const createDirectory = (path: string) => { module.exports = { BufferedConsole, - Console, + Console: CustomConsole, ErrorWithStack, FakeTimers, NullConsole, diff --git a/packages/jest-util/src/install_common_globals.js b/packages/jest-util/src/installCommonGlobals.js similarity index 91% rename from packages/jest-util/src/install_common_globals.js rename to packages/jest-util/src/installCommonGlobals.js index d87e16a28861..571972449af7 100644 --- a/packages/jest-util/src/install_common_globals.js +++ b/packages/jest-util/src/installCommonGlobals.js @@ -10,8 +10,8 @@ import type {ConfigGlobals} from 'types/Config'; import type {Global} from 'types/Global'; -import createProcessObject from './create_process_object'; -import deepCyclicCopy from './deep_cyclic_copy'; +import createProcessObject from './createProcessObject'; +import deepCyclicCopy from './deepCyclicCopy'; const DTRACE = Object.keys(global).filter(key => key.startsWith('DTRACE')); diff --git a/packages/jest-util/src/is_interative.js b/packages/jest-util/src/isInteractive.js similarity index 100% rename from packages/jest-util/src/is_interative.js rename to packages/jest-util/src/isInteractive.js diff --git a/packages/jest-util/src/set_global.js b/packages/jest-util/src/setGlobal.js similarity index 100% rename from packages/jest-util/src/set_global.js rename to packages/jest-util/src/setGlobal.js From 682afa9875029c7faa0c27b59e8905d7780fc500 Mon Sep 17 00:00:00 2001 From: Anenth Date: Tue, 30 Oct 2018 03:48:47 +0530 Subject: [PATCH 63/76] Standardize file names in packages/jest-resolve (#7292) * Rename files to follow facebook's conventions * Rename files to follow facebook's conventions for test * Remove .js * Fix file path --- e2e/custom-resolver/resolver.js | 2 +- .../{is_builtin_module.test.js => isBuiltinModule.test.js} | 2 +- packages/jest-resolve/src/__tests__/resolve.test.js | 2 +- .../src/{default_resolver.js => defaultResolver.js} | 4 ++-- packages/jest-resolve/src/index.js | 6 +++--- .../src/{is_builtin_module.js => isBuiltinModule.js} | 0 .../src/{node_modules_paths.js => nodeModulesPaths.js} | 0 packages/jest-runtime/src/__tests__/defaultResolver.js | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) rename packages/jest-resolve/src/__tests__/{is_builtin_module.test.js => isBuiltinModule.test.js} (92%) rename packages/jest-resolve/src/{default_resolver.js => defaultResolver.js} (97%) rename packages/jest-resolve/src/{is_builtin_module.js => isBuiltinModule.js} (100%) rename packages/jest-resolve/src/{node_modules_paths.js => nodeModulesPaths.js} (100%) diff --git a/e2e/custom-resolver/resolver.js b/e2e/custom-resolver/resolver.js index 7385bfdd28c4..e9a718b139b5 100644 --- a/e2e/custom-resolver/resolver.js +++ b/e2e/custom-resolver/resolver.js @@ -2,7 +2,7 @@ const { default: defaultResolver, -} = require('jest-resolve/build/default_resolver'); +} = require('jest-resolve/build/defaultResolver'); const exportedModules = new Map([ ['foo', 'foo'], diff --git a/packages/jest-resolve/src/__tests__/is_builtin_module.test.js b/packages/jest-resolve/src/__tests__/isBuiltinModule.test.js similarity index 92% rename from packages/jest-resolve/src/__tests__/is_builtin_module.test.js rename to packages/jest-resolve/src/__tests__/isBuiltinModule.test.js index 7be6a38dcae6..a18f8b4a0b0d 100644 --- a/packages/jest-resolve/src/__tests__/is_builtin_module.test.js +++ b/packages/jest-resolve/src/__tests__/isBuiltinModule.test.js @@ -1,7 +1,7 @@ // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. // @flow -import isBuiltinModule from '../is_builtin_module'; +import isBuiltinModule from '../isBuiltinModule'; describe('isBuiltinModule', () => { it('should return true for the `path` module', () => { diff --git a/packages/jest-resolve/src/__tests__/resolve.test.js b/packages/jest-resolve/src/__tests__/resolve.test.js index 7d17eebac935..f4c75c4e6927 100644 --- a/packages/jest-resolve/src/__tests__/resolve.test.js +++ b/packages/jest-resolve/src/__tests__/resolve.test.js @@ -15,7 +15,7 @@ const path = require('path'); const ModuleMap = require('jest-haste-map').ModuleMap; const Resolver = require('../'); const userResolver = require('../__mocks__/userResolver'); -const nodeModulesPaths = require('../node_modules_paths').default; +const nodeModulesPaths = require('../nodeModulesPaths').default; beforeEach(() => { userResolver.mockClear(); diff --git a/packages/jest-resolve/src/default_resolver.js b/packages/jest-resolve/src/defaultResolver.js similarity index 97% rename from packages/jest-resolve/src/default_resolver.js rename to packages/jest-resolve/src/defaultResolver.js index ae85c4e888d8..02f311c22ece 100644 --- a/packages/jest-resolve/src/default_resolver.js +++ b/packages/jest-resolve/src/defaultResolver.js @@ -13,8 +13,8 @@ import type {ErrorWithCode} from 'types/Errors'; import browserResolve from 'browser-resolve'; import fs from 'fs'; import path from 'path'; -import isBuiltinModule from './is_builtin_module'; -import nodeModulesPaths from './node_modules_paths'; +import isBuiltinModule from './isBuiltinModule'; +import nodeModulesPaths from './nodeModulesPaths'; type ResolverOptions = {| basedir: Path, diff --git a/packages/jest-resolve/src/index.js b/packages/jest-resolve/src/index.js index 4d3c042d7117..7ad9ea1e960d 100644 --- a/packages/jest-resolve/src/index.js +++ b/packages/jest-resolve/src/index.js @@ -14,9 +14,9 @@ import type {ErrorWithCode} from 'types/Errors'; import fs from 'fs'; import path from 'path'; -import nodeModulesPaths from './node_modules_paths'; -import isBuiltinModule from './is_builtin_module'; -import defaultResolver from './default_resolver.js'; +import nodeModulesPaths from './nodeModulesPaths'; +import isBuiltinModule from './isBuiltinModule'; +import defaultResolver from './defaultResolver'; import chalk from 'chalk'; type ResolverConfig = {| diff --git a/packages/jest-resolve/src/is_builtin_module.js b/packages/jest-resolve/src/isBuiltinModule.js similarity index 100% rename from packages/jest-resolve/src/is_builtin_module.js rename to packages/jest-resolve/src/isBuiltinModule.js diff --git a/packages/jest-resolve/src/node_modules_paths.js b/packages/jest-resolve/src/nodeModulesPaths.js similarity index 100% rename from packages/jest-resolve/src/node_modules_paths.js rename to packages/jest-resolve/src/nodeModulesPaths.js diff --git a/packages/jest-runtime/src/__tests__/defaultResolver.js b/packages/jest-runtime/src/__tests__/defaultResolver.js index 089aa58e6055..adb6f54aa902 100644 --- a/packages/jest-runtime/src/__tests__/defaultResolver.js +++ b/packages/jest-runtime/src/__tests__/defaultResolver.js @@ -6,5 +6,5 @@ * of patent rights can be found in the PATENTS file in the same directory. * */ -import resolver from 'jest-resolve/build/default_resolver.js'; +import resolver from 'jest-resolve/build/defaultResolver.js'; module.exports = resolver; From 714cb516944c74a9ed9d6eda867911b398003468 Mon Sep 17 00:00:00 2001 From: Alcedo Nathaniel De Guzman Jr Date: Tue, 30 Oct 2018 06:23:12 +0800 Subject: [PATCH 64/76] Update toStrictEqual failure message (#7224) ## Summary This pull request updates the failure message returned by toStrictEqual so that it is more inline with what #7105 envisions. ## Test plan The matcher is tested with a snapshot test. Here are a few screenshots of the before and after along with the test file. Before: (I had to minimize the image to fit both tests in one screen) ![image](https://user-images.githubusercontent.com/18214059/47253151-16505300-d482-11e8-9596-a5a37c238d4b.png) After: ![image](https://user-images.githubusercontent.com/18214059/47253131-e012d380-d481-11e8-9211-be3417ec0cd7.png) --- CHANGELOG.md | 1 + .../__snapshots__/matchers.test.js.snap | 24 +++++++++++++++++++ .../expect/src/__tests__/matchers.test.js | 14 +++++++++++ packages/expect/src/matchers.js | 21 ++++++---------- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 986b2950b6dd..51eea6cb9c45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ - `[babel-jest]` Cache includes babel environment variables ([#7239](https://github.com/facebook/jest/pull/7239)) - `[jest-config]` Use strings instead of `RegExp` instances in normalized configuration ([#7251](https://github.com/facebook/jest/pull/7251)) - `[jest-circus]` Make sure to display real duration even if time is mocked ([#7264](https://github.com/facebook/jest/pull/7264)) +- `[expect]` Improves the failing message for `toStrictEqual` matcher. ([#7224](https://github.com/facebook/jest/pull/7224)) ### Chore & Maintenance diff --git a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap index 400e8b6e424d..5a3e468bb84b 100644 --- a/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap @@ -3479,6 +3479,30 @@ Received: \\"bar\\"" `; +exports[`.toStrictEqual() matches the expected snapshot when it fails 1`] = ` +"expect(received).toStrictEqual(expected) + +Difference: + +- Expected ++ Received + + Object { +- \\"test\\": TestClassA { +- \\"a\\": 1, +- \\"b\\": 2, +- }, ++ \\"test\\": 2, + }" +`; + +exports[`.toStrictEqual() matches the expected snapshot when it fails 2`] = ` +"expect(received).not.toStrictEqual(expected) + +Expected: {\\"test\\": {\\"a\\": 1, \\"b\\": 2}} +Received: {\\"test\\": {\\"a\\": 1, \\"b\\": 2}}" +`; + exports[`toMatchObject() {pass: false} expect([0]).toMatchObject([-0]) 1`] = ` "expect(received).toMatchObject(expected) diff --git a/packages/expect/src/__tests__/matchers.test.js b/packages/expect/src/__tests__/matchers.test.js index e695eec418ed..344e451b55e4 100644 --- a/packages/expect/src/__tests__/matchers.test.js +++ b/packages/expect/src/__tests__/matchers.test.js @@ -244,6 +244,20 @@ describe('.toStrictEqual()', () => { }).toStrictEqual({test: new TestClassA(1, 2)}); }); + it('matches the expected snapshot when it fails', () => { + expect(() => + jestExpect({ + test: 2, + }).toStrictEqual({test: new TestClassA(1, 2)}), + ).toThrowErrorMatchingSnapshot(); + + expect(() => + jestExpect({ + test: new TestClassA(1, 2), + }).not.toStrictEqual({test: new TestClassA(1, 2)}), + ).toThrowErrorMatchingSnapshot(); + }); + it('does not pass for different types', () => { expect({ test: new TestClassA(1, 2), diff --git a/packages/expect/src/matchers.js b/packages/expect/src/matchers.js index 215114de52d5..043032bc0803 100644 --- a/packages/expect/src/matchers.js +++ b/packages/expect/src/matchers.js @@ -628,27 +628,20 @@ const matchers: MatchersObject = { true, ); + const hint = matcherHint('.toStrictEqual', undefined, undefined, { + isNot: this.isNot, + }); const message = pass ? () => - matcherHint('.not.toStrictEqual') + + hint + '\n\n' + - `Expected value to not equal:\n` + - ` ${printExpected(expected)}\n` + - `Received:\n` + - ` ${printReceived(received)}` + `Expected: ${printExpected(expected)}\n` + + `Received: ${printReceived(received)}` : () => { const diffString = diff(expected, received, { expand: this.expand, }); - return ( - matcherHint('.toStrictEqual') + - '\n\n' + - `Expected value to equal:\n` + - ` ${printExpected(expected)}\n` + - `Received:\n` + - ` ${printReceived(received)}` + - (diffString ? `\n\nDifference:\n\n${diffString}` : '') - ); + return hint + (diffString ? `\n\nDifference:\n\n${diffString}` : ''); }; // Passing the the actual and expected objects so that a custom reporter From 5cdfc22af486e8ef8fcf9ce1c5464c998d33d5c7 Mon Sep 17 00:00:00 2001 From: Jess Sze Date: Tue, 30 Oct 2018 15:39:49 +0800 Subject: [PATCH 65/76] Remove duplicate doc entry (#7297) --- CHANGELOG.md | 1 + docs/MockFunctions.md | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51eea6cb9c45..37eae7df2063 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,7 @@ - `[*]` [**BREAKING**] Require Node.js 6+ for all packages ([#7258](https://github.com/facebook/jest/pull/7258)) - `[docs]` Add correct default value for `testUrl` config option ([#7277](https://github.com/facebook/jest/pull/7277)) - `[jest-util]` [**BREAKING**] Remove long-deprecated globals for fake timers ([#7285](https://github.com/facebook/jest/pull/7285)) +- `[docs]` Remove duplicate code in `MockFunctions` ([#7297](https://github.com/facebook/jest/pull/7297)) ### Performance diff --git a/docs/MockFunctions.md b/docs/MockFunctions.md index eb96d94ca990..dfc33a7af6f3 100644 --- a/docs/MockFunctions.md +++ b/docs/MockFunctions.md @@ -160,9 +160,6 @@ Still, there are cases where it's useful to go beyond the ability to specify ret ```javascript const myMockFn = jest.fn(cb => cb(null, true)); -myMockFn((err, val) => console.log(val)); -// > true - myMockFn((err, val) => console.log(val)); // > true ``` From 51e68e7df4d673a49a50a794ebd2c45c8294a46a Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Tue, 30 Oct 2018 08:58:06 +0000 Subject: [PATCH 66/76] [jest-each]: Add empty string/array validation check (#7249) * Add empty array check to jest-each * Add changelog entry * Add empty string check to jest-each * Fix types in error messages * Add tagged template literal with no data validation check --- CHANGELOG.md | 1 + .../__snapshots__/array.test.js.snap | 56 +++++++++++-- .../__snapshots__/template.test.js.snap | 80 +++++++++++++++++++ .../jest-each/src/__tests__/array.test.js | 13 +++ .../jest-each/src/__tests__/template.test.js | 32 ++++++++ packages/jest-each/src/bind.js | 36 ++++++++- 6 files changed, 209 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37eae7df2063..7793451b3ace 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ ### Fixes +- `[jest-each]` Add empty array validation check ([#7249](https://github.com/facebook/jest/pull/7249)) - `[jest-cli]` Interrupt tests if interactive watch plugin key is pressed ([#7222](https://github.com/facebook/jest/pull/7222)) - `[jest-cli]` Fix coverage summary reporting ([#7058](https://github.com/facebook/jest/pull/7058)) - `[jest-each]` Add each array validation check ([#7033](https://github.com/facebook/jest/pull/7033)) diff --git a/packages/jest-each/src/__tests__/__snapshots__/array.test.js.snap b/packages/jest-each/src/__tests__/__snapshots__/array.test.js.snap index 75cc81d64769..d779a5e5df50 100644 --- a/packages/jest-each/src/__tests__/__snapshots__/array.test.js.snap +++ b/packages/jest-each/src/__tests__/__snapshots__/array.test.js.snap @@ -1,56 +1,96 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`jest-each .describe throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .describe throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .describe.only throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .describe.only throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .fdescribe throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .fdescribe throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .fit throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .fit throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .it throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .it throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .it.only throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .it.only throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .test throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .test throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " `; +exports[`jest-each .test.only throws an error when called with an empty array 1`] = ` +"Error: \`.each\` called with an empty Array of table data. +" +`; + exports[`jest-each .test.only throws an error when not called with an array 1`] = ` -"\`.each\` must be called with an Array or Tagged Template String. +"\`.each\` must be called with an Array or Tagged Template Literal. Instead was called with: undefined " diff --git a/packages/jest-each/src/__tests__/__snapshots__/template.test.js.snap b/packages/jest-each/src/__tests__/__snapshots__/template.test.js.snap index f99bb2662c27..f5097aa6218d 100644 --- a/packages/jest-each/src/__tests__/__snapshots__/template.test.js.snap +++ b/packages/jest-each/src/__tests__/__snapshots__/template.test.js.snap @@ -1,5 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`jest-each .describe throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .describe throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -29,6 +34,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .describe throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .describe.only throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .describe.only throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -58,6 +73,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .describe.only throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .fdescribe throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .fdescribe throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -87,6 +112,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .fdescribe throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .fit throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .fit throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -116,6 +151,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .fit throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .it throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .it throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -145,6 +190,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .it throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .it.only throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .it.only throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -174,6 +229,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .it.only throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .test throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .test throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -203,6 +268,16 @@ Received: Missing 2 arguments" `; +exports[`jest-each .test throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; + +exports[`jest-each .test.only throws an error when called with an empty string 1`] = ` +"Error: \`.each\` called with an empty Tagged Template Literal of table data. +" +`; + exports[`jest-each .test.only throws error when there are fewer arguments than headings over multiple rows 1`] = ` "Not enough arguments supplied for given headings: a | b | expected @@ -231,3 +306,8 @@ Received: Missing 2 arguments" `; + +exports[`jest-each .test.only throws error when there are no arguments for given headings 1`] = ` +"Error: \`.each\` called with a Tagged Template Literal with no data, remember to interpolate with \${expression} syntax. +" +`; diff --git a/packages/jest-each/src/__tests__/array.test.js b/packages/jest-each/src/__tests__/array.test.js index 594b25ef0161..95268afa597d 100644 --- a/packages/jest-each/src/__tests__/array.test.js +++ b/packages/jest-each/src/__tests__/array.test.js @@ -60,6 +60,19 @@ describe('jest-each', () => { ).toThrowErrorMatchingSnapshot(); }); + test('throws an error when called with an empty array', () => { + const globalTestMocks = getGlobalTestMocks(); + const eachObject = each.withGlobal(globalTestMocks)([]); + const testFunction = get(eachObject, keyPath); + + testFunction('expected string', noop); + const globalMock = get(globalTestMocks, keyPath); + + expect(() => + globalMock.mock.calls[0][1](), + ).toThrowErrorMatchingSnapshot(); + }); + test('calls global with given title', () => { const globalTestMocks = getGlobalTestMocks(); const eachObject = each.withGlobal(globalTestMocks)([[]]); diff --git a/packages/jest-each/src/__tests__/template.test.js b/packages/jest-each/src/__tests__/template.test.js index 30f368ef54ce..ed5f9664d2eb 100644 --- a/packages/jest-each/src/__tests__/template.test.js +++ b/packages/jest-each/src/__tests__/template.test.js @@ -46,6 +46,23 @@ describe('jest-each', () => { ['describe', 'only'], ].forEach(keyPath => { describe(`.${keyPath.join('.')}`, () => { + test('throws error when there are no arguments for given headings', () => { + const globalTestMocks = getGlobalTestMocks(); + const eachObject = each.withGlobal(globalTestMocks)` + a | b | expected + `; + const testFunction = get(eachObject, keyPath); + const testCallBack = jest.fn(); + testFunction('this will blow up :(', testCallBack); + + const globalMock = get(globalTestMocks, keyPath); + + expect(() => + globalMock.mock.calls[0][1](), + ).toThrowErrorMatchingSnapshot(); + expect(testCallBack).not.toHaveBeenCalled(); + }); + test('throws error when there are fewer arguments than headings when given one row', () => { const globalTestMocks = getGlobalTestMocks(); const eachObject = each.withGlobal(globalTestMocks)` @@ -83,6 +100,21 @@ describe('jest-each', () => { expect(testCallBack).not.toHaveBeenCalled(); }); + test('throws an error when called with an empty string', () => { + const globalTestMocks = getGlobalTestMocks(); + const eachObject = each.withGlobal(globalTestMocks)` `; + const testFunction = get(eachObject, keyPath); + const testCallBack = jest.fn(); + testFunction('this will blow up :(', testCallBack); + + const globalMock = get(globalTestMocks, keyPath); + + expect(() => + globalMock.mock.calls[0][1](), + ).toThrowErrorMatchingSnapshot(); + expect(testCallBack).not.toHaveBeenCalled(); + }); + test('calls global with given title', () => { const globalTestMocks = getGlobalTestMocks(); const eachObject = each.withGlobal(globalTestMocks)` diff --git a/packages/jest-each/src/bind.js b/packages/jest-each/src/bind.js index 9d78fc25dc81..d2a7d1ebd550 100644 --- a/packages/jest-each/src/bind.js +++ b/packages/jest-each/src/bind.js @@ -31,7 +31,7 @@ export default (cb: Function, supportsDone: boolean = true) => (...args: any) => if (!Array.isArray(tableArg)) { const error = new ErrorWithStack( - '`.each` must be called with an Array or Tagged Template String.\n\n' + + '`.each` must be called with an Array or Tagged Template Literal.\n\n' + `Instead was called with: ${pretty(tableArg, { maxDepth: 1, min: true, @@ -42,6 +42,36 @@ export default (cb: Function, supportsDone: boolean = true) => (...args: any) => throw error; }); } + + if (isTaggedTemplateLiteral(tableArg)) { + if (isEmptyString(tableArg[0])) { + const error = new ErrorWithStack( + 'Error: `.each` called with an empty Tagged Template Literal of table data.\n', + eachBind, + ); + return cb(title, () => { + throw error; + }); + } + + const error = new ErrorWithStack( + 'Error: `.each` called with a Tagged Template Literal with no data, remember to interpolate with ${expression} syntax.\n', + eachBind, + ); + return cb(title, () => { + throw error; + }); + } + + if (isEmptyTable(tableArg)) { + const error = new ErrorWithStack( + 'Error: `.each` called with an empty Array of table data.\n', + eachBind, + ); + return cb(title, () => { + throw error; + }); + } const table: Table = tableArg.every(Array.isArray) ? tableArg : tableArg.map(entry => [entry]); @@ -91,6 +121,10 @@ export default (cb: Function, supportsDone: boolean = true) => (...args: any) => ); }; +const isTaggedTemplateLiteral = array => array.raw !== undefined; +const isEmptyTable = table => table.length === 0; +const isEmptyString = str => typeof str === 'string' && str.trim() === ''; + const getPrettyIndexes = placeholders => placeholders.reduce( (indexes, placeholder, index) => From fb61bfffb803bad0c2ff9ab1798a6c4c31cb14fa Mon Sep 17 00:00:00 2001 From: Andrew Pyle Date: Tue, 30 Oct 2018 09:05:19 -0500 Subject: [PATCH 67/76] [WIP] [jest-validate] Add config comments feature (#7295) --- CHANGELOG.md | 1 + docs/Configuration.md | 18 +++++++++++++++++ .../src/__tests__/validate.test.js | 20 +++++++++++++++++++ packages/jest-validate/src/defaultConfig.js | 3 ++- packages/jest-validate/src/validate.js | 7 +++++++ 5 files changed, 48 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7793451b3ace..fef44a6a3939 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### Features +- `[jest-validate]` Add support for comments in `package.json` using a `"//"` key [#7295](https://github.com/facebook/jest/pull/7295)) - `[jest-config]` Add shorthand for watch plugins and runners ([#7213](https://github.com/facebook/jest/pull/7213)) - `[jest-config]` [**BREAKING**] Deprecate `setupTestFrameworkScriptFile` in favor of new `setupFilesAfterEnv` ([#7119](https://github.com/facebook/jest/pull/7119)) - `[jest-jasmine2/jest-circus/jest-cli]` Add test.todo ([#6996](https://github.com/facebook/jest/pull/6996)) diff --git a/docs/Configuration.md b/docs/Configuration.md index edd6a0f1cf54..35bddeccbdf6 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -980,3 +980,21 @@ Examples of watch plugins include: - [`jest-watch-yarn-workspaces`](https://github.com/cameronhunter/jest-watch-directories/tree/master/packages/jest-watch-yarn-workspaces) _Note: The values in the `watchPlugins` property value can omit the `jest-watch-` prefix of the package name._ + +### `//` [string] + +No default + +This option allow comments in `package.json`. Include the comment text as the value of this key anywhere in `package.json`. + +Example: + +```json +{ + "name": "my-project", + "jest": { + "//": "Comment goes here", + "verbose": true + } +} +``` diff --git a/packages/jest-validate/src/__tests__/validate.test.js b/packages/jest-validate/src/__tests__/validate.test.js index 05c50e5ad886..9f93b9a713e2 100644 --- a/packages/jest-validate/src/__tests__/validate.test.js +++ b/packages/jest-validate/src/__tests__/validate.test.js @@ -266,3 +266,23 @@ test('Repeated types within multiple valid examples are coalesced in error repor ), ).toThrowErrorMatchingSnapshot(); }); + +test('Comments in config JSON using "//" key are not warned', () => { + jest.spyOn(console, 'warn').mockImplementation(() => {}); + const config = {'//': 'a comment'}; + + validate(config, { + exampleConfig: validConfig, + }); + expect(console.warn).not.toBeCalled(); + + console.warn.mockReset(); + + validate(config, { + exampleConfig: validConfig, + recursiveBlacklist: [('myCustomKey': "don't validate this")], + }); + expect(console.warn).not.toBeCalled(); + + console.warn.mockRestore(); +}); diff --git a/packages/jest-validate/src/defaultConfig.js b/packages/jest-validate/src/defaultConfig.js index 2d3d097e6c67..cef77d526f4d 100644 --- a/packages/jest-validate/src/defaultConfig.js +++ b/packages/jest-validate/src/defaultConfig.js @@ -23,7 +23,8 @@ export default ({ error: errorMessage, exampleConfig: {}, recursive: true, - recursiveBlacklist: [], + // Allow NPM-sanctioned comments in package.json. Use a "//" key. + recursiveBlacklist: ['//'], title: { deprecation: DEPRECATION, error: ERROR, diff --git a/packages/jest-validate/src/validate.js b/packages/jest-validate/src/validate.js index cf68a608cdd2..832cba8814ee 100644 --- a/packages/jest-validate/src/validate.js +++ b/packages/jest-validate/src/validate.js @@ -81,10 +81,17 @@ const _validate = ( const validate = (config: Object, options: ValidationOptions) => { hasDeprecationWarnings = false; + // Preserve default blacklist entries even with user-supplied blacklist + const combinedBlacklist: Array = [].concat( + defaultConfig.recursiveBlacklist || [], + options.recursiveBlacklist || [], + ); + const defaultedOptions: ValidationOptions = Object.assign( {}, defaultConfig, options, + {recursiveBlacklist: combinedBlacklist}, {title: Object.assign({}, defaultConfig.title, options.title)}, ); From 968ddc416ae52f15e15ed1e64b0196f44c3dabde Mon Sep 17 00:00:00 2001 From: Andrew Pyle Date: Wed, 31 Oct 2018 04:28:34 -0500 Subject: [PATCH 68/76] Standardize filenames in packages/expect (#7306) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary References Standardize file naming #4969. Updates naming in package expect. Uses conventions listed in #4969 (comment): - Files that primarily export types, objects or classes should use CapitalizedFileNames.js and should mirror what’s inside 1:1. - Files that export a single function should have the function name with camelCase in it. - Folder names should use dashes, unless they are special folders. ### Decisions - Test & snapshot files retained their name, but converted it to camelCase. - Files which exported an object were named according to the internal object, which was camelCase. However, I believe that the standard referenced above states that objects should have CapitalizedNames. Should the internal objects be renamed too? - `matchers.js` - `jestMatchersObject.js` - `spyMatchers.js` - `toThrowmatchers.js` ### Questions How should `asymmetricMatchers.js` be named? It exports a class `AsymmetricMatcher`, but it also exports a bunch of functions, and was named in camelCase before. ## Test plan Output of yarn run test on master and standardize filenames in packages/jest circus branches was the same. [jest-test-expect-master.txt](https://github.com/facebook/jest/files/2532360/jest-test-expect-master.txt) [jest-test-expect-standardize-filenames.txt](https://github.com/facebook/jest/files/2532363/jest-test-expect-standardize-filenames.txt) --- CHANGELOG.md | 1 + ...atchers.test.js.snap => spyMatchers.test.js.snap} | 0 ...ers.test.js.snap => toThrowMatchers.test.js.snap} | 0 ...ertion_counts.test.js => assertionCounts.test.js} | 0 ...c_matchers.test.js => asymmetricMatchers.test.js} | 2 +- packages/expect/src/__tests__/extend.test.js | 2 +- .../{fake_chalk.test.js => fakeChalk.test.js} | 2 +- .../__tests__/{is_error.test.js => isError.test.js} | 0 .../{spy_matchers.test.js => spyMatchers.test.js} | 0 ...ol_in_objects.test.js => symbolInObjects.test.js} | 0 ...hrow_matchers.test.js => toThrowMatchers.test.js} | 0 ...{asymmetric_matchers.js => asymmetricMatchers.js} | 8 +------- ..._errors.js => extractExpectedAssertionsErrors.js} | 2 +- packages/expect/src/{fake_chalk.js => fakeChalk.js} | 0 packages/expect/src/index.js | 12 ++++++------ .../expect/src/{jasmine_utils.js => jasmineUtils.js} | 0 ...jest_matchers_object.js => jestMatchersObject.js} | 2 +- packages/expect/src/matchers.js | 2 +- .../expect/src/{spy_matchers.js => spyMatchers.js} | 2 +- .../src/{to_throw_matchers.js => toThrowMatchers.js} | 2 +- packages/expect/src/utils.js | 2 +- scripts/browserBuild.js | 2 +- 22 files changed, 18 insertions(+), 23 deletions(-) rename packages/expect/src/__tests__/__snapshots__/{spy_matchers.test.js.snap => spyMatchers.test.js.snap} (100%) rename packages/expect/src/__tests__/__snapshots__/{to_throw_matchers.test.js.snap => toThrowMatchers.test.js.snap} (100%) rename packages/expect/src/__tests__/{assertion_counts.test.js => assertionCounts.test.js} (100%) rename packages/expect/src/__tests__/{asymmetric_matchers.test.js => asymmetricMatchers.test.js} (99%) rename packages/expect/src/__tests__/{fake_chalk.test.js => fakeChalk.test.js} (88%) rename packages/expect/src/__tests__/{is_error.test.js => isError.test.js} (100%) rename packages/expect/src/__tests__/{spy_matchers.test.js => spyMatchers.test.js} (100%) rename packages/expect/src/__tests__/{symbol_in_objects.test.js => symbolInObjects.test.js} (100%) rename packages/expect/src/__tests__/{to_throw_matchers.test.js => toThrowMatchers.test.js} (100%) rename packages/expect/src/{asymmetric_matchers.js => asymmetricMatchers.js} (98%) rename packages/expect/src/{extract_expected_assertions_errors.js => extractExpectedAssertionsErrors.js} (97%) rename packages/expect/src/{fake_chalk.js => fakeChalk.js} (100%) rename packages/expect/src/{jasmine_utils.js => jasmineUtils.js} (100%) rename packages/expect/src/{jest_matchers_object.js => jestMatchersObject.js} (97%) rename packages/expect/src/{spy_matchers.js => spyMatchers.js} (99%) rename packages/expect/src/{to_throw_matchers.js => toThrowMatchers.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index fef44a6a3939..7b67389a430c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ ### Fixes +- `[expect]` Standardize file naming in `expect` ([#7306](https://github.com/facebook/jest/pull/7306)) - `[jest-each]` Add empty array validation check ([#7249](https://github.com/facebook/jest/pull/7249)) - `[jest-cli]` Interrupt tests if interactive watch plugin key is pressed ([#7222](https://github.com/facebook/jest/pull/7222)) - `[jest-cli]` Fix coverage summary reporting ([#7058](https://github.com/facebook/jest/pull/7058)) diff --git a/packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap similarity index 100% rename from packages/expect/src/__tests__/__snapshots__/spy_matchers.test.js.snap rename to packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap diff --git a/packages/expect/src/__tests__/__snapshots__/to_throw_matchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.js.snap similarity index 100% rename from packages/expect/src/__tests__/__snapshots__/to_throw_matchers.test.js.snap rename to packages/expect/src/__tests__/__snapshots__/toThrowMatchers.test.js.snap diff --git a/packages/expect/src/__tests__/assertion_counts.test.js b/packages/expect/src/__tests__/assertionCounts.test.js similarity index 100% rename from packages/expect/src/__tests__/assertion_counts.test.js rename to packages/expect/src/__tests__/assertionCounts.test.js diff --git a/packages/expect/src/__tests__/asymmetric_matchers.test.js b/packages/expect/src/__tests__/asymmetricMatchers.test.js similarity index 99% rename from packages/expect/src/__tests__/asymmetric_matchers.test.js rename to packages/expect/src/__tests__/asymmetricMatchers.test.js index 9b7a030d4d54..08b0907d09ee 100644 --- a/packages/expect/src/__tests__/asymmetric_matchers.test.js +++ b/packages/expect/src/__tests__/asymmetricMatchers.test.js @@ -20,7 +20,7 @@ const { stringNotContaining, stringMatching, stringNotMatching, -} = require('../asymmetric_matchers'); +} = require('../asymmetricMatchers'); test('Any.asymmetricMatch()', () => { const Thing = function() {}; diff --git a/packages/expect/src/__tests__/extend.test.js b/packages/expect/src/__tests__/extend.test.js index 8fe6b6f3c78e..e2f3ecf0bdd6 100644 --- a/packages/expect/src/__tests__/extend.test.js +++ b/packages/expect/src/__tests__/extend.test.js @@ -8,7 +8,7 @@ const matcherUtils = require('jest-matcher-utils'); const {iterableEquality, subsetEquality} = require('../utils'); -const {equals} = require('../jasmine_utils'); +const {equals} = require('../jasmineUtils'); const jestExpect = require('../'); jestExpect.extend({ diff --git a/packages/expect/src/__tests__/fake_chalk.test.js b/packages/expect/src/__tests__/fakeChalk.test.js similarity index 88% rename from packages/expect/src/__tests__/fake_chalk.test.js rename to packages/expect/src/__tests__/fakeChalk.test.js index c461b75c1b2d..532dae6144c7 100644 --- a/packages/expect/src/__tests__/fake_chalk.test.js +++ b/packages/expect/src/__tests__/fakeChalk.test.js @@ -6,7 +6,7 @@ */ 'use strict'; -const fakeChalk = jest.requireActual('../fake_chalk'); +const fakeChalk = jest.requireActual('../fakeChalk'); describe('Fake Chalk', () => { it('returns input when invoked', () => { diff --git a/packages/expect/src/__tests__/is_error.test.js b/packages/expect/src/__tests__/isError.test.js similarity index 100% rename from packages/expect/src/__tests__/is_error.test.js rename to packages/expect/src/__tests__/isError.test.js diff --git a/packages/expect/src/__tests__/spy_matchers.test.js b/packages/expect/src/__tests__/spyMatchers.test.js similarity index 100% rename from packages/expect/src/__tests__/spy_matchers.test.js rename to packages/expect/src/__tests__/spyMatchers.test.js diff --git a/packages/expect/src/__tests__/symbol_in_objects.test.js b/packages/expect/src/__tests__/symbolInObjects.test.js similarity index 100% rename from packages/expect/src/__tests__/symbol_in_objects.test.js rename to packages/expect/src/__tests__/symbolInObjects.test.js diff --git a/packages/expect/src/__tests__/to_throw_matchers.test.js b/packages/expect/src/__tests__/toThrowMatchers.test.js similarity index 100% rename from packages/expect/src/__tests__/to_throw_matchers.test.js rename to packages/expect/src/__tests__/toThrowMatchers.test.js diff --git a/packages/expect/src/asymmetric_matchers.js b/packages/expect/src/asymmetricMatchers.js similarity index 98% rename from packages/expect/src/asymmetric_matchers.js rename to packages/expect/src/asymmetricMatchers.js index b182fb1f1c44..01cc89af8550 100644 --- a/packages/expect/src/asymmetric_matchers.js +++ b/packages/expect/src/asymmetricMatchers.js @@ -7,13 +7,7 @@ * @flow */ -import { - equals, - fnNameFor, - hasProperty, - isA, - isUndefined, -} from './jasmine_utils'; +import {equals, fnNameFor, hasProperty, isA, isUndefined} from './jasmineUtils'; import {emptyObject} from './utils'; diff --git a/packages/expect/src/extract_expected_assertions_errors.js b/packages/expect/src/extractExpectedAssertionsErrors.js similarity index 97% rename from packages/expect/src/extract_expected_assertions_errors.js rename to packages/expect/src/extractExpectedAssertionsErrors.js index af7d243142ae..29f766e6d7f9 100644 --- a/packages/expect/src/extract_expected_assertions_errors.js +++ b/packages/expect/src/extractExpectedAssertionsErrors.js @@ -14,7 +14,7 @@ import { pluralize, } from 'jest-matcher-utils'; -import {getState, setState} from './jest_matchers_object'; +import {getState, setState} from './jestMatchersObject'; const resetAssertionsLocalState = () => { setState({ diff --git a/packages/expect/src/fake_chalk.js b/packages/expect/src/fakeChalk.js similarity index 100% rename from packages/expect/src/fake_chalk.js rename to packages/expect/src/fakeChalk.js diff --git a/packages/expect/src/index.js b/packages/expect/src/index.js index 573d1bf9b42c..4c0aef0d3e92 100644 --- a/packages/expect/src/index.js +++ b/packages/expect/src/index.js @@ -23,11 +23,11 @@ import type { import * as matcherUtils from 'jest-matcher-utils'; import {iterableEquality, subsetEquality} from './utils'; import matchers from './matchers'; -import spyMatchers from './spy_matchers'; +import spyMatchers from './spyMatchers'; import toThrowMatchers, { createMatcher as createThrowMatcher, -} from './to_throw_matchers'; -import {equals} from './jasmine_utils'; +} from './toThrowMatchers'; +import {equals} from './jasmineUtils'; import { any, anything, @@ -39,15 +39,15 @@ import { stringNotContaining, stringMatching, stringNotMatching, -} from './asymmetric_matchers'; +} from './asymmetricMatchers'; import { INTERNAL_MATCHER_FLAG, getState, setState, getMatchers, setMatchers, -} from './jest_matchers_object'; -import extractExpectedAssertionsErrors from './extract_expected_assertions_errors'; +} from './jestMatchersObject'; +import extractExpectedAssertionsErrors from './extractExpectedAssertionsErrors'; class JestAssertionError extends Error { matcherResult: any; diff --git a/packages/expect/src/jasmine_utils.js b/packages/expect/src/jasmineUtils.js similarity index 100% rename from packages/expect/src/jasmine_utils.js rename to packages/expect/src/jasmineUtils.js diff --git a/packages/expect/src/jest_matchers_object.js b/packages/expect/src/jestMatchersObject.js similarity index 97% rename from packages/expect/src/jest_matchers_object.js rename to packages/expect/src/jestMatchersObject.js index 253681620fce..b3b7d8f87d7d 100644 --- a/packages/expect/src/jest_matchers_object.js +++ b/packages/expect/src/jestMatchersObject.js @@ -7,7 +7,7 @@ * @flow */ -import {AsymmetricMatcher} from './asymmetric_matchers'; +import {AsymmetricMatcher} from './asymmetricMatchers'; import type { Expect, MatchersObject, diff --git a/packages/expect/src/matchers.js b/packages/expect/src/matchers.js index 043032bc0803..4e9575213513 100644 --- a/packages/expect/src/matchers.js +++ b/packages/expect/src/matchers.js @@ -32,7 +32,7 @@ import { typeEquality, isOneline, } from './utils'; -import {equals} from './jasmine_utils'; +import {equals} from './jasmineUtils'; type ContainIterable = | Array diff --git a/packages/expect/src/spy_matchers.js b/packages/expect/src/spyMatchers.js similarity index 99% rename from packages/expect/src/spy_matchers.js rename to packages/expect/src/spyMatchers.js index 2a176fb9e1f1..5571bd837c79 100644 --- a/packages/expect/src/spy_matchers.js +++ b/packages/expect/src/spyMatchers.js @@ -23,7 +23,7 @@ import { printWithType, RECEIVED_COLOR, } from 'jest-matcher-utils'; -import {equals} from './jasmine_utils'; +import {equals} from './jasmineUtils'; import {iterableEquality, partition, isOneline} from './utils'; import diff from 'jest-diff'; diff --git a/packages/expect/src/to_throw_matchers.js b/packages/expect/src/toThrowMatchers.js similarity index 99% rename from packages/expect/src/to_throw_matchers.js rename to packages/expect/src/toThrowMatchers.js index b5e953a10792..48f69b46d630 100644 --- a/packages/expect/src/to_throw_matchers.js +++ b/packages/expect/src/toThrowMatchers.js @@ -19,7 +19,7 @@ import { printExpected, printWithType, } from 'jest-matcher-utils'; -import {equals} from './jasmine_utils'; +import {equals} from './jasmineUtils'; import {isError} from './utils'; export const createMatcher = (matcherName: string, fromPromise?: boolean) => ( diff --git a/packages/expect/src/utils.js b/packages/expect/src/utils.js index 9a7a0220fac5..2c7de7ab2237 100644 --- a/packages/expect/src/utils.js +++ b/packages/expect/src/utils.js @@ -12,7 +12,7 @@ import { isA, isImmutableUnorderedKeyed, isImmutableUnorderedSet, -} from './jasmine_utils'; +} from './jasmineUtils'; type GetPath = { hasEndProp?: boolean, diff --git a/scripts/browserBuild.js b/scripts/browserBuild.js index c7f0414c7aa5..ae1c5b3cc636 100644 --- a/scripts/browserBuild.js +++ b/scripts/browserBuild.js @@ -45,7 +45,7 @@ function browserBuild(pkgName, entryPath, destination) { { resolveId(id) { return id === 'chalk' - ? path.resolve(__dirname, '../packages/expect/build/fake_chalk.js') + ? path.resolve(__dirname, '../packages/expect/build/fakeChalk.js') : undefined; }, }, From 2f32100c0e8ae04dc24da25f0713c004bb6b2c51 Mon Sep 17 00:00:00 2001 From: Andrew Pyle Date: Wed, 31 Oct 2018 04:29:05 -0500 Subject: [PATCH 69/76] Standardize filenames in packages/jest circus (#7301) * Rename event_handler -> eventHandler. Function & Mocks * Rename error_handlers -> globalErrorHandlers. File & imports * Rename format_node_assert_errors -> formatNodeAssertErrors - File, Function & Imports renamed - `export default (...` changed to `const formatNodeAssertErrors = (...` with `export default formatNodeAssertErrors` at end of file * Rename test_utils & runTest -> testUtils - Rename file, function, imports, mocks, & tests * Rename after_all.test.js -> afterAll.test.js - Rename file only * Rename after_all.test.js.snap -> afterAll.test.js.snap - Forgot snapshot when renaming afterAll.test.js - Rename snapshot to match test filename * Rename base_test.test.js -> baseTest.test.js - Rename file & snap * Rename circus_it_test_error.test.js -> circusItTestError.test.js * Rename circus_todo_test_error.test.js -> CircusItTodoTestError.test.js - Added "it" to name to match CircusItTestError.test.js - Rename file * Rename hooks_error.test.js -> hooksError.test.js - Rename file * Rename legacy_code_todo_rewrite -> legacy-code-todo-rewrite - Directory names should use dashes * Add CHANGELOG.md entry * Fix broken link to legacy-code-todo-rewrite/ in jest-circus/runner.js * Revert export in testUtils.js to runTest per @thymikee's request * Rename files in legacy-code-todo-rewrite/ - jest_adapter.js -> jestAdapter.js - jest_adapter_init.js -> jestAdapterInit.js - jest_expect.js -> jestExpect.js - Fixed imports within directory and in runner.js --- CHANGELOG.md | 1 + packages/jest-circus/runner.js | 2 +- .../{test_event_handler.js => testEventHandler.js} | 0 .../src/__mocks__/{test_utils.js => testUtils.js} | 2 +- .../{after_all.test.js.snap => afterAll.test.js.snap} | 0 .../{base_test.test.js.snap => baseTest.test.js.snap} | 0 .../src/__tests__/{after_all.test.js => afterAll.test.js} | 2 +- .../src/__tests__/{base_test.test.js => baseTest.test.js} | 2 +- ...rcus_it_test_error.test.js => circusItTestError.test.js} | 0 ...odo_test_error.test.js => circusItTodoTestError.test.js} | 0 packages/jest-circus/src/__tests__/hooks.test.js | 2 +- .../__tests__/{hooks_error.test.js => hooksError.test.js} | 0 .../jest-circus/src/{event_handler.js => eventHandler.js} | 6 +++--- ...rmat_node_assert_errors.js => formatNodeAssertErrors.js} | 4 +++- .../src/{error_handlers.js => globalErrorHandlers.js} | 0 .../jestAdapter.js} | 4 ++-- .../jestAdapterInit.js} | 0 .../jestExpect.js} | 0 packages/jest-circus/src/state.js | 4 ++-- 19 files changed, 16 insertions(+), 13 deletions(-) rename packages/jest-circus/src/__mocks__/{test_event_handler.js => testEventHandler.js} (100%) rename packages/jest-circus/src/__mocks__/{test_utils.js => testUtils.js} (97%) rename packages/jest-circus/src/__tests__/__snapshots__/{after_all.test.js.snap => afterAll.test.js.snap} (100%) rename packages/jest-circus/src/__tests__/__snapshots__/{base_test.test.js.snap => baseTest.test.js.snap} (100%) rename packages/jest-circus/src/__tests__/{after_all.test.js => afterAll.test.js} (97%) rename packages/jest-circus/src/__tests__/{base_test.test.js => baseTest.test.js} (94%) rename packages/jest-circus/src/__tests__/{circus_it_test_error.test.js => circusItTestError.test.js} (100%) rename packages/jest-circus/src/__tests__/{circus_todo_test_error.test.js => circusItTodoTestError.test.js} (100%) rename packages/jest-circus/src/__tests__/{hooks_error.test.js => hooksError.test.js} (100%) rename packages/jest-circus/src/{event_handler.js => eventHandler.js} (97%) rename packages/jest-circus/src/{format_node_assert_errors.js => formatNodeAssertErrors.js} (97%) rename packages/jest-circus/src/{error_handlers.js => globalErrorHandlers.js} (100%) rename packages/jest-circus/src/{legacy_code_todo_rewrite/jest_adapter.js => legacy-code-todo-rewrite/jestAdapter.js} (95%) rename packages/jest-circus/src/{legacy_code_todo_rewrite/jest_adapter_init.js => legacy-code-todo-rewrite/jestAdapterInit.js} (100%) rename packages/jest-circus/src/{legacy_code_todo_rewrite/jest_expect.js => legacy-code-todo-rewrite/jestExpect.js} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b67389a430c..42f65a4894b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ ### Chore & Maintenance +- `[jest-circus]` Standardize file naming in `jest-circus` ([#7301](https://github.com/facebook/jest/pull/7301)) - `[docs]` Add synchronous test.each setup ([#7150](https://github.com/facebook/jest/pull/7150)) - `[docs]` Add `this.extend` to the Custom Matchers API reference ([#7130](https://github.com/facebook/jest/pull/7130)) - `[docs]` Fix default value for `coverageReporters` value in configuration docs ([#7126](https://github.com/facebook/jest/pull/7126)) diff --git a/packages/jest-circus/runner.js b/packages/jest-circus/runner.js index 214956a9f42a..8ed8163ee414 100644 --- a/packages/jest-circus/runner.js +++ b/packages/jest-circus/runner.js @@ -9,5 +9,5 @@ */ // Allow people to use `jest-circus/runner` as a runner. -const runner = require('./build/legacy_code_todo_rewrite/jest_adapter'); +const runner = require('./build/legacy-code-todo-rewrite/jestAdapter'); module.exports = runner; diff --git a/packages/jest-circus/src/__mocks__/test_event_handler.js b/packages/jest-circus/src/__mocks__/testEventHandler.js similarity index 100% rename from packages/jest-circus/src/__mocks__/test_event_handler.js rename to packages/jest-circus/src/__mocks__/testEventHandler.js diff --git a/packages/jest-circus/src/__mocks__/test_utils.js b/packages/jest-circus/src/__mocks__/testUtils.js similarity index 97% rename from packages/jest-circus/src/__mocks__/test_utils.js rename to packages/jest-circus/src/__mocks__/testUtils.js index 39594b009a2b..4e3ca543dccb 100644 --- a/packages/jest-circus/src/__mocks__/test_utils.js +++ b/packages/jest-circus/src/__mocks__/testUtils.js @@ -20,7 +20,7 @@ import {skipSuiteOnWindows} from '../../../../scripts/ConditionalTest'; const CIRCUS_PATH = require.resolve('../../build/index'); const CIRCUS_RUN_PATH = require.resolve('../../build/run'); const CIRCUS_STATE_PATH = require.resolve('../../build/state'); -const TEST_EVENT_HANDLER_PATH = require.resolve('./test_event_handler'); +const TEST_EVENT_HANDLER_PATH = require.resolve('./testEventHandler'); const BABEL_REGISTER_PATH = require.resolve('babel-register'); skipSuiteOnWindows(); diff --git a/packages/jest-circus/src/__tests__/__snapshots__/after_all.test.js.snap b/packages/jest-circus/src/__tests__/__snapshots__/afterAll.test.js.snap similarity index 100% rename from packages/jest-circus/src/__tests__/__snapshots__/after_all.test.js.snap rename to packages/jest-circus/src/__tests__/__snapshots__/afterAll.test.js.snap diff --git a/packages/jest-circus/src/__tests__/__snapshots__/base_test.test.js.snap b/packages/jest-circus/src/__tests__/__snapshots__/baseTest.test.js.snap similarity index 100% rename from packages/jest-circus/src/__tests__/__snapshots__/base_test.test.js.snap rename to packages/jest-circus/src/__tests__/__snapshots__/baseTest.test.js.snap diff --git a/packages/jest-circus/src/__tests__/after_all.test.js b/packages/jest-circus/src/__tests__/afterAll.test.js similarity index 97% rename from packages/jest-circus/src/__tests__/after_all.test.js rename to packages/jest-circus/src/__tests__/afterAll.test.js index 22e424d96f20..7cccc1f66d49 100644 --- a/packages/jest-circus/src/__tests__/after_all.test.js +++ b/packages/jest-circus/src/__tests__/afterAll.test.js @@ -10,7 +10,7 @@ 'use strict'; -import {runTest} from '../__mocks__/test_utils'; +import {runTest} from '../__mocks__/testUtils'; test('tests are not marked done until their parent afterAll runs', () => { const {stdout} = runTest(` diff --git a/packages/jest-circus/src/__tests__/base_test.test.js b/packages/jest-circus/src/__tests__/baseTest.test.js similarity index 94% rename from packages/jest-circus/src/__tests__/base_test.test.js rename to packages/jest-circus/src/__tests__/baseTest.test.js index ec83663ba8db..1cc1c2abab94 100644 --- a/packages/jest-circus/src/__tests__/base_test.test.js +++ b/packages/jest-circus/src/__tests__/baseTest.test.js @@ -10,7 +10,7 @@ 'use strict'; -import {runTest} from '../__mocks__/test_utils'; +import {runTest} from '../__mocks__/testUtils'; test('simple test', () => { const {stdout} = runTest(` diff --git a/packages/jest-circus/src/__tests__/circus_it_test_error.test.js b/packages/jest-circus/src/__tests__/circusItTestError.test.js similarity index 100% rename from packages/jest-circus/src/__tests__/circus_it_test_error.test.js rename to packages/jest-circus/src/__tests__/circusItTestError.test.js diff --git a/packages/jest-circus/src/__tests__/circus_todo_test_error.test.js b/packages/jest-circus/src/__tests__/circusItTodoTestError.test.js similarity index 100% rename from packages/jest-circus/src/__tests__/circus_todo_test_error.test.js rename to packages/jest-circus/src/__tests__/circusItTodoTestError.test.js diff --git a/packages/jest-circus/src/__tests__/hooks.test.js b/packages/jest-circus/src/__tests__/hooks.test.js index 2486cc3d6e62..6d9b58bce341 100644 --- a/packages/jest-circus/src/__tests__/hooks.test.js +++ b/packages/jest-circus/src/__tests__/hooks.test.js @@ -10,7 +10,7 @@ 'use strict'; -import {runTest} from '../__mocks__/test_utils'; +import {runTest} from '../__mocks__/testUtils'; test('beforeEach is executed before each test in current/child describe blocks', () => { const {stdout} = runTest(` diff --git a/packages/jest-circus/src/__tests__/hooks_error.test.js b/packages/jest-circus/src/__tests__/hooksError.test.js similarity index 100% rename from packages/jest-circus/src/__tests__/hooks_error.test.js rename to packages/jest-circus/src/__tests__/hooksError.test.js diff --git a/packages/jest-circus/src/event_handler.js b/packages/jest-circus/src/eventHandler.js similarity index 97% rename from packages/jest-circus/src/event_handler.js rename to packages/jest-circus/src/eventHandler.js index fb5af141b802..893e61f61410 100644 --- a/packages/jest-circus/src/event_handler.js +++ b/packages/jest-circus/src/eventHandler.js @@ -20,12 +20,12 @@ import { import { injectGlobalErrorHandlers, restoreGlobalErrorHandlers, -} from './error_handlers'; +} from './globalErrorHandlers'; // To pass this value from Runtime object to state we need to use global[sym] const TEST_TIMEOUT_SYMBOL = Symbol.for('TEST_TIMEOUT_SYMBOL'); -const handler: EventHandler = (event, state): void => { +const eventHandler: EventHandler = (event, state): void => { switch (event.name) { case 'include_test_location_in_result': { state.includeTestLocationInResult = true; @@ -183,4 +183,4 @@ const handler: EventHandler = (event, state): void => { } }; -export default handler; +export default eventHandler; diff --git a/packages/jest-circus/src/format_node_assert_errors.js b/packages/jest-circus/src/formatNodeAssertErrors.js similarity index 97% rename from packages/jest-circus/src/format_node_assert_errors.js rename to packages/jest-circus/src/formatNodeAssertErrors.js index 9151fa9fe3fa..d6080ce0b168 100644 --- a/packages/jest-circus/src/format_node_assert_errors.js +++ b/packages/jest-circus/src/formatNodeAssertErrors.js @@ -43,7 +43,7 @@ const humanReadableOperators = { strictEqual: 'to strictly be equal', }; -export default (event: Event, state: State) => { +const formatNodeAssertErrors = (event: Event, state: State) => { switch (event.name) { case 'test_done': { event.test.errors = event.test.errors.map(errors => { @@ -167,3 +167,5 @@ function assertionErrorMessage(error: AssertionError, options: DiffOptions) { trimmedStack ); } + +export default formatNodeAssertErrors; diff --git a/packages/jest-circus/src/error_handlers.js b/packages/jest-circus/src/globalErrorHandlers.js similarity index 100% rename from packages/jest-circus/src/error_handlers.js rename to packages/jest-circus/src/globalErrorHandlers.js diff --git a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.js similarity index 95% rename from packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js rename to packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.js index bf2d87b9f4bd..af85e4d095b4 100644 --- a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter.js +++ b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapter.js @@ -12,7 +12,7 @@ import type {GlobalConfig, ProjectConfig} from 'types/Config'; import type {TestResult} from 'types/TestResult'; import type Runtime from 'jest-runtime'; -const FRAMEWORK_INITIALIZER = require.resolve('./jest_adapter_init'); +const FRAMEWORK_INITIALIZER = require.resolve('./jestAdapterInit'); import path from 'path'; const jestAdapter = async ( @@ -28,7 +28,7 @@ const jestAdapter = async ( } = runtime.requireInternalModule(FRAMEWORK_INITIALIZER); runtime - .requireInternalModule(path.resolve(__dirname, './jest_expect.js')) + .requireInternalModule(path.resolve(__dirname, './jestExpect.js')) .default({ expand: globalConfig.expand, }); diff --git a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js b/packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.js similarity index 100% rename from packages/jest-circus/src/legacy_code_todo_rewrite/jest_adapter_init.js rename to packages/jest-circus/src/legacy-code-todo-rewrite/jestAdapterInit.js diff --git a/packages/jest-circus/src/legacy_code_todo_rewrite/jest_expect.js b/packages/jest-circus/src/legacy-code-todo-rewrite/jestExpect.js similarity index 100% rename from packages/jest-circus/src/legacy_code_todo_rewrite/jest_expect.js rename to packages/jest-circus/src/legacy-code-todo-rewrite/jestExpect.js diff --git a/packages/jest-circus/src/state.js b/packages/jest-circus/src/state.js index 3187775bcc2f..36d4fa69cf04 100644 --- a/packages/jest-circus/src/state.js +++ b/packages/jest-circus/src/state.js @@ -10,8 +10,8 @@ import type {Event, State, EventHandler} from 'types/Circus'; import {makeDescribe} from './utils'; -import eventHandler from './event_handler'; -import formatNodeAssertErrors from './format_node_assert_errors'; +import eventHandler from './eventHandler'; +import formatNodeAssertErrors from './formatNodeAssertErrors'; const eventHandlers: Array = [ eventHandler, From b5310c1a41debd5f37108b3b8fd117a84d2c95bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Wed, 31 Oct 2018 11:41:06 +0100 Subject: [PATCH 70/76] feat: upgrade Flow to 0.85.0 (#7303) --- .flowconfig | 2 +- package.json | 2 +- packages/expect/src/jasmineUtils.js | 5 ++++- .../jest-cli/src/lib/__tests__/init.test.js | 4 ++++ .../jest-cli/src/reporters/verbose_reporter.js | 4 +++- packages/jest-config/src/normalize.js | 17 ++++++++++++----- .../src/__tests__/inline_snapshots.test.js | 16 ++++++++++++++++ .../src/lib/format_test_name_by_pattern.js | 1 - .../pretty-format/src/__tests__/react.test.js | 7 +------ types/Matchers.js | 2 +- types/TestResult.js | 8 +++++++- yarn.lock | 8 ++++---- 12 files changed, 54 insertions(+), 22 deletions(-) diff --git a/.flowconfig b/.flowconfig index 27a7723184e7..e4a6b93f5217 100644 --- a/.flowconfig +++ b/.flowconfig @@ -18,4 +18,4 @@ untyped-import untyped-type-import [version] -^0.80.0 +^0.85.0 diff --git a/package.json b/package.json index 412ff5e20274..1a1dff05b021 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "eslint-plugin-react": "^7.1.0", "eslint-plugin-relay": "~0.0.19", "execa": "^1.0.0", - "flow-bin": "^0.80.0", + "flow-bin": "^0.85.0", "glob": "^7.1.1", "graceful-fs": "^4.1.11", "istanbul-api": "^1.3.1", diff --git a/packages/expect/src/jasmineUtils.js b/packages/expect/src/jasmineUtils.js index 144374f0cdff..a1b88aac8f5a 100644 --- a/packages/expect/src/jasmineUtils.js +++ b/packages/expect/src/jasmineUtils.js @@ -39,7 +39,7 @@ export function equals( } function isAsymmetric(obj) { - return obj && isA('Function', obj.asymmetricMatch); + return !!obj && isA('Function', obj.asymmetricMatch); } function asymmetricMatch(a, b) { @@ -51,6 +51,7 @@ function asymmetricMatch(a, b) { } if (asymmetricA) { + // $FlowFixMe – Flow sees `a` as a number return a.asymmetricMatch(b); } @@ -96,6 +97,7 @@ function eq(a, b, aStack, bStack, customTesters, hasKey): boolean { case '[object String]': // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is // equivalent to `new String("5")`. + // $FlowFixMe – Flow sees `a` as a number return a == String(b); case '[object Number]': // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for @@ -113,6 +115,7 @@ function eq(a, b, aStack, bStack, customTesters, hasKey): boolean { a.source == b.source && a.global == b.global && a.multiline == b.multiline && + // $FlowFixMe – Flow sees `a` as a number a.ignoreCase == b.ignoreCase ); } diff --git a/packages/jest-cli/src/lib/__tests__/init.test.js b/packages/jest-cli/src/lib/__tests__/init.test.js index a38c59492e18..81981ce6e0c2 100644 --- a/packages/jest-cli/src/lib/__tests__/init.test.js +++ b/packages/jest-cli/src/lib/__tests__/init.test.js @@ -31,7 +31,9 @@ describe('init', () => { beforeEach(() => { // $FlowFixMe mock console.log to reduce noise from the tests console.log = jest.fn(); + // $FlowFixMe mock fs.writeFileSync = jest.fn(); + // $FlowFixMe mock path.sep = '/'; }); @@ -39,7 +41,9 @@ describe('init', () => { jest.clearAllMocks(); // $FlowFixMe console.log = consoleLog; + // $FlowFixMe mock fs.writeFileSync = writeFileSync; + // $FlowFixMe mock path.sep = sep; }); diff --git a/packages/jest-cli/src/reporters/verbose_reporter.js b/packages/jest-cli/src/reporters/verbose_reporter.js index 9883c1844049..ff82c3f573ea 100644 --- a/packages/jest-cli/src/reporters/verbose_reporter.js +++ b/packages/jest-cli/src/reporters/verbose_reporter.js @@ -28,7 +28,9 @@ export default class VerboseReporter extends DefaultReporter { this._globalConfig = globalConfig; } - static filterTestResults(testResults: Array) { + static filterTestResults( + testResults: Array, + ): Array { return testResults.filter(({status}) => status !== 'pending'); } diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index 0defd7699714..fc04dd34deec 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -8,7 +8,13 @@ */ import type {Argv} from 'types/Argv'; -import type {InitialOptions, ReporterConfig} from 'types/Config'; +import type { + InitialOptions, + DefaultOptions, + ReporterConfig, + GlobalConfig, + ProjectConfig, +} from 'types/Config'; import crypto from 'crypto'; import glob from 'glob'; @@ -419,9 +425,9 @@ export default function normalize(options: InitialOptions, argv: Argv) { } const babelJest = setupBabelJest(options); - const newOptions = Object.assign({}, DEFAULT_CONFIG); - // Cast back to exact type - options = (options: InitialOptions); + const newOptions: $Shape< + DefaultOptions & ProjectConfig & GlobalConfig, + > = (Object.assign({}, DEFAULT_CONFIG): any); if (options.resolver) { newOptions.resolver = resolve(null, { @@ -431,7 +437,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { }); } - Object.keys(options).reduce((newOptions, key) => { + Object.keys(options).reduce((newOptions, key: $Keys) => { // The resolver has been resolved separately; skip it if (key === 'resolver') { return newOptions; @@ -687,6 +693,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { }); break; } + // $FlowFixMe - automock is missing in GlobalConfig, so what newOptions[key] = value; return newOptions; }, newOptions); diff --git a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js index d8a19052e9d9..cbd98b3bd297 100644 --- a/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js +++ b/packages/jest-snapshot/src/__tests__/inline_snapshots.test.js @@ -23,27 +23,37 @@ const existsSync = fs.existsSync; const statSync = fs.statSync; const readdirSync = fs.readdirSync; beforeEach(() => { + // $FlowFixMe mock fs.writeFileSync = jest.fn(); + // $FlowFixMe mock fs.readFileSync = jest.fn(); + // $FlowFixMe mock fs.existsSync = jest.fn(() => true); // $FlowFixMe mock fs.statSync = jest.fn(filePath => ({ isDirectory: () => !filePath.endsWith('.js'), })); + // $FlowFixMe mock fs.readdirSync = jest.fn(() => []); prettier.resolveConfig.sync.mockReset(); }); afterEach(() => { + // $FlowFixMe mock fs.writeFileSync = writeFileSync; + // $FlowFixMe mock fs.readFileSync = readFileSync; + // $FlowFixMe mock fs.existsSync = existsSync; + // $FlowFixMe mock fs.statSync = statSync; + // $FlowFixMe mock fs.readdirSync = readdirSync; }); test('saveInlineSnapshots() replaces empty function call with a template literal', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => `expect(1).toMatchInlineSnapshot();\n`, ): any); @@ -69,6 +79,7 @@ test.each([['babylon'], ['flow'], ['typescript']])( 'saveInlineSnapshots() replaces existing template literal - %s parser', parser => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => 'expect(1).toMatchInlineSnapshot(`2`);\n', ): any); @@ -97,6 +108,7 @@ test.each([['babylon'], ['flow'], ['typescript']])( test('saveInlineSnapshots() replaces existing template literal with property matchers', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => 'expect(1).toMatchInlineSnapshot({}, `2`);\n', ): any); @@ -120,6 +132,7 @@ test('saveInlineSnapshots() replaces existing template literal with property mat test('saveInlineSnapshots() throws if frame does not match', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => 'expect(1).toMatchInlineSnapshot();\n', ): any); @@ -141,6 +154,7 @@ test('saveInlineSnapshots() throws if frame does not match', () => { test('saveInlineSnapshots() throws if multiple calls to to the same location', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => 'expect(1).toMatchInlineSnapshot();\n', ): any); @@ -160,6 +174,7 @@ test('saveInlineSnapshots() throws if multiple calls to to the same location', ( test('saveInlineSnapshots() uses escaped backticks', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => 'expect("`").toMatchInlineSnapshot();\n', ): any); @@ -175,6 +190,7 @@ test('saveInlineSnapshots() uses escaped backticks', () => { test('saveInlineSnapshots() works with non-literals in expect call', () => { const filename = path.join(__dirname, 'my.test.js'); + // $FlowFixMe mock fs.readFileSync = (jest.fn( () => `expect({a: 'a'}).toMatchInlineSnapshot();\n`, ): any); diff --git a/packages/jest-watcher/src/lib/format_test_name_by_pattern.js b/packages/jest-watcher/src/lib/format_test_name_by_pattern.js index ea07bfc726ee..ac4b3b090bec 100644 --- a/packages/jest-watcher/src/lib/format_test_name_by_pattern.js +++ b/packages/jest-watcher/src/lib/format_test_name_by_pattern.js @@ -31,7 +31,6 @@ export default (testName: string, pattern: string, width: number) => { return chalk.dim(inlineTestName); } - // $FlowFixMe const startPatternIndex = Math.max(match.index, 0); const endPatternIndex = startPatternIndex + match[0].length; diff --git a/packages/pretty-format/src/__tests__/react.test.js b/packages/pretty-format/src/__tests__/react.test.js index 77ed951983e4..ebd2a4fd4cd1 100644 --- a/packages/pretty-format/src/__tests__/react.test.js +++ b/packages/pretty-format/src/__tests__/react.test.js @@ -272,12 +272,7 @@ test('supports a single element with custom React elements with props (using dis test('supports a single element with custom React elements with props (using anonymous function)', () => { assertPrintedJSX( React.createElement('Mouse', { - prop: React.createElement( - () => { - React.createElement('div'); - }, - {foo: 'bar'}, - ), + prop: React.createElement(() => React.createElement('div'), {foo: 'bar'}), }), '\n }\n/>', ); diff --git a/types/Matchers.js b/types/Matchers.js index 70be4f1a50ab..79e89d433fb8 100644 --- a/types/Matchers.js +++ b/types/Matchers.js @@ -50,7 +50,7 @@ export type Expect = { assertions(number): void, extend(any): void, extractExpectedAssertionsErrors: () => Array<{ - actual: string, + actual: string | number, error: Error, expected: string, }>, diff --git a/types/TestResult.js b/types/TestResult.js index 7ef862e2308e..2cf15a5dbfa9 100644 --- a/types/TestResult.js +++ b/types/TestResult.js @@ -83,7 +83,13 @@ export type AssertionLocation = {| path: string, |}; -export type Status = 'passed' | 'failed' | 'skipped' | 'pending' | 'todo'; +export type Status = + | 'passed' + | 'failed' + | 'skipped' + | 'pending' + | 'todo' + | 'disabled'; export type Bytes = number; export type Milliseconds = number; diff --git a/yarn.lock b/yarn.lock index 9fab80793a82..b20d4a6f2266 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6099,10 +6099,10 @@ flatten@^1.0.2: resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= -flow-bin@^0.80.0: - version "0.80.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.80.0.tgz#04cc1ee626a6f50786f78170c92ebe1745235403" - integrity sha512-0wRnqvXErQRPrx6GBLB5swgndfWkotd9MgfePgT7Z+VsE046c8Apzl7KKTCypB/pzn0pZF2g5Jurxxb2umET8g== +flow-bin@^0.85.0: + version "0.85.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.85.0.tgz#a3ca80748a35a071d5bbb2fcd61d64d977fc53a6" + integrity sha512-ougBA2q6Rn9sZrjZQ9r5pTFxCotlGouySpD2yRIuq5AYwwfIT8HHhVMeSwrN5qJayjHINLJyrnsSkkPCZyfMrQ== flow-remove-types@^1.1.0: version "1.2.3" From bb9efac6c0e5fa3e487d80a639658c29044e081c Mon Sep 17 00:00:00 2001 From: Jeff Lau Date: Wed, 31 Oct 2018 19:41:34 -0400 Subject: [PATCH 71/76] Fix bugs with mock/spy result tracking of recursive functions. (#6381) --- CHANGELOG.md | 6 +- docs/MockFunctionAPI.md | 16 +- .../__snapshots__/spyMatchers.test.js.snap | 142 ++++++++++++++++++ .../expect/src/__tests__/spyMatchers.test.js | 142 +++++++++++++++++- packages/expect/src/spyMatchers.js | 49 +++--- .../jest-mock/src/__tests__/jest_mock.test.js | 138 +++++++++++++++-- packages/jest-mock/src/index.js | 36 ++++- .../mock_serializer.test.js.snap | 12 +- .../src/__tests__/mock_serializer.test.js | 6 +- 9 files changed, 488 insertions(+), 59 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42f65a4894b7..8a0b85b5fb40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ - `[jest-config]` Use strings instead of `RegExp` instances in normalized configuration ([#7251](https://github.com/facebook/jest/pull/7251)) - `[jest-circus]` Make sure to display real duration even if time is mocked ([#7264](https://github.com/facebook/jest/pull/7264)) - `[expect]` Improves the failing message for `toStrictEqual` matcher. ([#7224](https://github.com/facebook/jest/pull/7224)) +- `[jest-mock]` [**BREAKING**] Fix bugs with mock/spy result tracking of recursive functions ([#6381](https://github.com/facebook/jest/pull/6381) ### Chore & Maintenance @@ -185,9 +186,6 @@ ### Fixes - `[jest-haste-map]` Optimize watchman crawler by using `glob` on initial query ([#6689](https://github.com/facebook/jest/pull/6689)) - -### Fixes - - `[pretty-format]` Fix formatting of invalid Date objects ([#6635](https://github.com/facebook/jest/pull/6635)) ## 23.4.0 @@ -348,7 +346,7 @@ - `[jest-diff]` Support returning diff from oneline strings ([#6221](https://github.com/facebook/jest/pull/6221)) - `[expect]` Improve return matchers ([#6172](https://github.com/facebook/jest/pull/6172)) - `[jest-cli]` Overhaul watch plugin hooks names ([#6249](https://github.com/facebook/jest/pull/6249)) -- `[jest-mock]` Include tracked call results in serialized mock ([#6244](https://github.com/facebook/jest/pull/6244)) +- `[jest-mock]` [**BREAKING**] Include tracked call results in serialized mock ([#6244](https://github.com/facebook/jest/pull/6244)) ### Fixes diff --git a/docs/MockFunctionAPI.md b/docs/MockFunctionAPI.md index dfdfb7672ac8..199d7a797175 100644 --- a/docs/MockFunctionAPI.md +++ b/docs/MockFunctionAPI.md @@ -29,24 +29,30 @@ For example: A mock function `f` that has been called twice, with the arguments ### `mockFn.mock.results` -An array containing the results of all calls that have been made to this mock function. Each entry in this array is an object containing a boolean `isThrow` property, and a `value` property. `isThrow` is true if the call terminated due to a `throw`, or false if the the call returned normally. The `value` property contains the value that was thrown or returned. +An array containing the results of all calls that have been made to this mock function. Each entry in this array is an object containing a `type` property, and a `value` property. `type` will be one of the following: -For example: A mock function `f` that has been called three times, returning `result1`, throwing an error, and then returning `result2`, would have a `mock.results` array that looks like this: +- `'return'` - Indicates that the call completed by returning normally. +- `'throw'` - Indicates that the call completed by throwing a value. +- `'incomplete'` - Indicates that the call has not yet completed. This occurs if you test the result from within the mock function itself, or from within a function that was called by the mock. + +The `value` property contains the value that was thrown or returned. `value` is undefined when `type === 'incomplete'`. + +For example: A mock function `f` that has been called three times, returning `'result1'`, throwing an error, and then returning `'result2'`, would have a `mock.results` array that looks like this: ```js [ { - isThrow: false, + type: 'return', value: 'result1', }, { - isThrow: true, + type: 'throw', value: { /* Error instance */ }, }, { - isThrow: false, + type: 'return', value: 'result2', }, ]; diff --git a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap index 95a15e70ccf4..220a4e47e8de 100644 --- a/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap +++ b/packages/expect/src/__tests__/__snapshots__/spyMatchers.test.js.snap @@ -149,6 +149,14 @@ Expected mock function \\"named-mock\\" to have last returned: But it was not called" `; +exports[`lastReturnedWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).lastReturnedWith(expected) + +Expected mock function to have last returned: + 0 +But the last call has not returned yet" +`; + exports[`lastReturnedWith works only on spies or jest.fn 1`] = ` "expect(jest.fn())[.not].lastReturnedWith() @@ -237,6 +245,15 @@ But the last call returned: \\"foo\\"" `; +exports[`lastReturnedWith works with three calls 1`] = ` +"expect(jest.fn()).not.lastReturnedWith(expected) + +Expected mock function to not have last returned: + \\"foo3\\" +But it last returned exactly: + \\"foo3\\"" +`; + exports[`lastReturnedWith works with undefined 1`] = ` "expect(jest.fn()).not.lastReturnedWith(expected) @@ -406,6 +423,40 @@ Expected mock function \\"named-mock\\" first call to have returned with: But it was not called" `; +exports[`nthReturnedWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).nthReturnedWith(expected) + +Expected mock function first call to have returned with: + 6 +But the first call has not returned yet" +`; + +exports[`nthReturnedWith incomplete recursive calls are handled properly 2`] = ` +"expect(jest.fn()).nthReturnedWith(expected) + +Expected mock function second call to have returned with: + 3 +But the second call has not returned yet" +`; + +exports[`nthReturnedWith incomplete recursive calls are handled properly 3`] = ` +"expect(jest.fn()).not.nthReturnedWith(expected) + +Expected mock function third call to not have returned with: + 1 +But the third call returned exactly: + 1" +`; + +exports[`nthReturnedWith incomplete recursive calls are handled properly 4`] = ` +"expect(jest.fn()).not.nthReturnedWith(expected) + +Expected mock function 4th call to not have returned with: + 0 +But the 4th call returned exactly: + 0" +`; + exports[`nthReturnedWith should reject non integer nth value 1`] = `"nth value 0.1 must be a positive integer greater than 0"`; exports[`nthReturnedWith should reject nth value greater than number of calls 1`] = ` @@ -1437,6 +1488,14 @@ Expected mock function \\"named-mock\\" to have last returned: But it was not called" `; +exports[`toHaveLastReturnedWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toHaveLastReturnedWith(expected) + +Expected mock function to have last returned: + 0 +But the last call has not returned yet" +`; + exports[`toHaveLastReturnedWith works only on spies or jest.fn 1`] = ` "expect(jest.fn())[.not].toHaveLastReturnedWith() @@ -1525,6 +1584,15 @@ But the last call returned: \\"foo\\"" `; +exports[`toHaveLastReturnedWith works with three calls 1`] = ` +"expect(jest.fn()).not.toHaveLastReturnedWith(expected) + +Expected mock function to not have last returned: + \\"foo3\\" +But it last returned exactly: + \\"foo3\\"" +`; + exports[`toHaveLastReturnedWith works with undefined 1`] = ` "expect(jest.fn()).not.toHaveLastReturnedWith(expected) @@ -1558,6 +1626,40 @@ Expected mock function \\"named-mock\\" first call to have returned with: But it was not called" `; +exports[`toHaveNthReturnedWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toHaveNthReturnedWith(expected) + +Expected mock function first call to have returned with: + 6 +But the first call has not returned yet" +`; + +exports[`toHaveNthReturnedWith incomplete recursive calls are handled properly 2`] = ` +"expect(jest.fn()).toHaveNthReturnedWith(expected) + +Expected mock function second call to have returned with: + 3 +But the second call has not returned yet" +`; + +exports[`toHaveNthReturnedWith incomplete recursive calls are handled properly 3`] = ` +"expect(jest.fn()).not.toHaveNthReturnedWith(expected) + +Expected mock function third call to not have returned with: + 1 +But the third call returned exactly: + 1" +`; + +exports[`toHaveNthReturnedWith incomplete recursive calls are handled properly 4`] = ` +"expect(jest.fn()).not.toHaveNthReturnedWith(expected) + +Expected mock function 4th call to not have returned with: + 0 +But the 4th call returned exactly: + 0" +`; + exports[`toHaveNthReturnedWith should reject non integer nth value 1`] = `"nth value 0.1 must be a positive integer greater than 0"`; exports[`toHaveNthReturnedWith should reject nth value greater than number of calls 1`] = ` @@ -1735,6 +1837,12 @@ Expected mock function \\"named-mock\\" not to have returned, but it returned: 42" `; +exports[`toHaveReturned incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toHaveReturned() + +Expected mock function to have returned." +`; + exports[`toHaveReturned passes when at least one call does not throw 1`] = ` "expect(jest.fn()).not.toHaveReturned() @@ -1850,6 +1958,12 @@ exports[`toHaveReturnedTimes includes the custom mock name in the error message Expected mock function \\"named-mock\\" to have returned one time, but it returned two times." `; +exports[`toHaveReturnedTimes incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).not.toHaveReturnedTimes(2) + +Expected mock function not to have returned two times, but it returned exactly two times." +`; + exports[`toHaveReturnedTimes only accepts a number argument 1`] = ` "expect(received)[.not].toHaveReturnedTimes(expected) @@ -1936,6 +2050,14 @@ Expected mock function \\"named-mock\\" to have returned: But it did not return." `; +exports[`toHaveReturnedWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toHaveReturnedWith(expected) + +Expected mock function to have returned: + undefined +But it did not return." +`; + exports[`toHaveReturnedWith works only on spies or jest.fn 1`] = ` "expect(jest.fn())[.not].toHaveReturnedWith() @@ -2093,6 +2215,12 @@ Expected mock function \\"named-mock\\" not to have returned, but it returned: 42" `; +exports[`toReturn incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toReturn() + +Expected mock function to have returned." +`; + exports[`toReturn passes when at least one call does not throw 1`] = ` "expect(jest.fn()).not.toReturn() @@ -2208,6 +2336,12 @@ exports[`toReturnTimes includes the custom mock name in the error message 1`] = Expected mock function \\"named-mock\\" to have returned one time, but it returned two times." `; +exports[`toReturnTimes incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).not.toReturnTimes(2) + +Expected mock function not to have returned two times, but it returned exactly two times." +`; + exports[`toReturnTimes only accepts a number argument 1`] = ` "expect(received)[.not].toReturnTimes(expected) @@ -2294,6 +2428,14 @@ Expected mock function \\"named-mock\\" to have returned: But it did not return." `; +exports[`toReturnWith incomplete recursive calls are handled properly 1`] = ` +"expect(jest.fn()).toReturnWith(expected) + +Expected mock function to have returned: + undefined +But it did not return." +`; + exports[`toReturnWith works only on spies or jest.fn 1`] = ` "expect(jest.fn())[.not].toReturnWith() diff --git a/packages/expect/src/__tests__/spyMatchers.test.js b/packages/expect/src/__tests__/spyMatchers.test.js index 3ae90bfe7b11..d90a959cafd0 100644 --- a/packages/expect/src/__tests__/spyMatchers.test.js +++ b/packages/expect/src/__tests__/spyMatchers.test.js @@ -491,6 +491,25 @@ const jestExpect = require('../'); jestExpect(fn).not[returned](), ).toThrowErrorMatchingSnapshot(); }); + + test(`incomplete recursive calls are handled properly`, () => { + // sums up all integers from 0 -> value, using recursion + const fn = jest.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + jestExpect(fn).not[returned](); + expect(() => + jestExpect(fn)[returned](), + ).toThrowErrorMatchingSnapshot(); + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); }); }); @@ -641,6 +660,29 @@ const jestExpect = require('../'); jestExpect(fn)[returnedTimes](1), ).toThrowErrorMatchingSnapshot(); }); + + test(`incomplete recursive calls are handled properly`, () => { + // sums up all integers from 0 -> value, using recursion + const fn = jest.fn(value => { + if (value === 0) { + return 0; + } else { + const recursiveResult = fn(value - 1); + + if (value === 2) { + // Only 2 of the recursive calls have returned at this point + jestExpect(fn)[returnedTimes](2); + expect(() => + jestExpect(fn).not[returnedTimes](2), + ).toThrowErrorMatchingSnapshot(); + } + + return value + recursiveResult; + } + }); + + fn(3); + }); }); }); @@ -849,10 +891,32 @@ const jestExpect = require('../'); jestExpect(fn)[returnedWith]('bar'); }).toThrowErrorMatchingSnapshot(); }); + + test(`incomplete recursive calls are handled properly`, () => { + // sums up all integers from 0 -> value, using recursion + const fn = jest.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + // This test ensures that the incomplete calls are not incorrectly + // interpretted as have returned undefined + jestExpect(fn).not[returnedWith](undefined); + expect(() => + jestExpect(fn)[returnedWith](undefined), + ).toThrowErrorMatchingSnapshot(); + + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); } - const nthCalled = ['toHaveNthReturnedWith', 'nthReturnedWith']; - if (nthCalled.indexOf(returnedWith) >= 0) { + const nthReturnedWith = ['toHaveNthReturnedWith', 'nthReturnedWith']; + if (nthReturnedWith.indexOf(returnedWith) >= 0) { test(`works with three calls`, () => { const fn = jest.fn(); fn.mockReturnValueOnce('foo1'); @@ -923,6 +987,80 @@ const jestExpect = require('../'); jestExpect(fn)[returnedWith](0.1, 'foo'); }).toThrowErrorMatchingSnapshot(); }); + + test(`incomplete recursive calls are handled properly`, () => { + // sums up all integers from 0 -> value, using recursion + const fn = jest.fn(value => { + if (value === 0) { + return 0; + } else { + const recursiveResult = fn(value - 1); + + if (value === 2) { + // Only 2 of the recursive calls have returned at this point + jestExpect(fn).not[returnedWith](1, 6); + jestExpect(fn).not[returnedWith](2, 3); + jestExpect(fn)[returnedWith](3, 1); + jestExpect(fn)[returnedWith](4, 0); + + expect(() => + jestExpect(fn)[returnedWith](1, 6), + ).toThrowErrorMatchingSnapshot(); + expect(() => + jestExpect(fn)[returnedWith](2, 3), + ).toThrowErrorMatchingSnapshot(); + expect(() => + jestExpect(fn).not[returnedWith](3, 1), + ).toThrowErrorMatchingSnapshot(); + expect(() => + jestExpect(fn).not[returnedWith](4, 0), + ).toThrowErrorMatchingSnapshot(); + } + + return value + recursiveResult; + } + }); + + fn(3); + }); + } + + const lastReturnedWith = ['toHaveLastReturnedWith', 'lastReturnedWith']; + if (lastReturnedWith.indexOf(returnedWith) >= 0) { + test(`works with three calls`, () => { + const fn = jest.fn(); + fn.mockReturnValueOnce('foo1'); + fn.mockReturnValueOnce('foo2'); + fn.mockReturnValueOnce('foo3'); + fn(); + fn(); + fn(); + + jestExpect(fn)[returnedWith]('foo3'); + + expect(() => { + jestExpect(fn).not[returnedWith]('foo3'); + }).toThrowErrorMatchingSnapshot(); + }); + + test(`incomplete recursive calls are handled properly`, () => { + // sums up all integers from 0 -> value, using recursion + const fn = jest.fn(value => { + if (value === 0) { + // Before returning from the base case of recursion, none of the + // calls have returned yet. + jestExpect(fn).not[returnedWith](0); + expect(() => + jestExpect(fn)[returnedWith](0), + ).toThrowErrorMatchingSnapshot(); + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + }); } test(`includes the custom mock name in the error message`, () => { diff --git a/packages/expect/src/spyMatchers.js b/packages/expect/src/spyMatchers.js index 5571bd837c79..a494cc8b2368 100644 --- a/packages/expect/src/spyMatchers.js +++ b/packages/expect/src/spyMatchers.js @@ -69,10 +69,9 @@ const createToReturnMatcher = matcherName => (received, expected) => { ? 'mock function' : `mock function "${receivedName}"`; - // List of return values that correspond only to calls that did not throw - // an error + // List of return values that correspond only to calls that returned const returnValues = received.mock.results - .filter(result => !result.isThrow) + .filter(result => result.type === 'return') .map(result => result.value); const count = returnValues.length; @@ -140,9 +139,10 @@ const createToReturnTimesMatcher = (matcherName: string) => ( ? 'mock function' : `mock function "${receivedName}"`; - // List of return results that correspond only to calls that did not throw - // an error - const returnResults = received.mock.results.filter(result => !result.isThrow); + // List of return results that correspond only to calls that returned + const returnResults = received.mock.results.filter( + result => result.type === 'return', + ); const count = returnResults.length; const pass = count === expected; @@ -214,10 +214,9 @@ const createToReturnWithMatcher = matcherName => ( ? 'mock function' : `mock function "${receivedName}"`; - // List of return values that correspond only to calls that did not throw - // an error + // List of return values that correspond only to calls that returned const returnValues = received.mock.results - .filter(result => !result.isThrow) + .filter(result => result.type === 'return') .map(result => result.value); const [match] = partition(returnValues, value => @@ -295,7 +294,7 @@ const createLastReturnedMatcher = matcherName => ( const lastResult = results[results.length - 1]; const pass = !!lastResult && - !lastResult.isThrow && + lastResult.type === 'return' && equals(lastResult.value, expected, [iterableEquality]); const message = pass @@ -313,11 +312,13 @@ const createLastReturnedMatcher = matcherName => ( ` ${printExpected(expected)}\n` + (!lastResult ? `But it was ${RECEIVED_COLOR('not called')}` - : lastResult.isThrow - ? `But the last call ${RECEIVED_COLOR('threw an error')}` - : `But the last call returned:\n ${printReceived( - lastResult.value, - )}`); + : lastResult.type === 'incomplete' + ? `But the last call ${RECEIVED_COLOR('has not returned yet')}` + : lastResult.type === 'throw' + ? `But the last call ${RECEIVED_COLOR('threw an error')}` + : `But the last call returned:\n ${printReceived( + lastResult.value, + )}`); return {message, pass}; }; @@ -400,7 +401,7 @@ const createNthReturnedWithMatcher = (matcherName: string) => ( const nthResult = results[nth - 1]; const pass = !!nthResult && - !nthResult.isThrow && + nthResult.type === 'return' && equals(nthResult.value, expected, [iterableEquality]); const nthString = nthToString(nth); const message = pass @@ -420,11 +421,17 @@ const createNthReturnedWithMatcher = (matcherName: string) => ( ? `But it was ${RECEIVED_COLOR('not called')}` : nth > results.length ? `But it was only called ${printReceived(results.length)} times` - : nthResult.isThrow - ? `But the ${nthString} call ${RECEIVED_COLOR('threw an error')}` - : `But the ${nthString} call returned with:\n ${printReceived( - nthResult.value, - )}`); + : nthResult.type === 'incomplete' + ? `But the ${nthString} call ${RECEIVED_COLOR( + 'has not returned yet', + )}` + : nthResult.type === 'throw' + ? `But the ${nthString} call ${RECEIVED_COLOR( + 'threw an error', + )}` + : `But the ${nthString} call returned with:\n ${printReceived( + nthResult.value, + )}`); return {message, pass}; }; diff --git a/packages/jest-mock/src/__tests__/jest_mock.test.js b/packages/jest-mock/src/__tests__/jest_mock.test.js index 5b440f0728d5..1e678adb12d9 100644 --- a/packages/jest-mock/src/__tests__/jest_mock.test.js +++ b/packages/jest-mock/src/__tests__/jest_mock.test.js @@ -579,11 +579,11 @@ describe('moduleMocker', () => { expect(fn.mock.results).toEqual([ { - isThrow: false, + type: 'return', value: 2, }, { - isThrow: false, + type: 'return', value: 4, }, ]); @@ -598,11 +598,11 @@ describe('moduleMocker', () => { expect(fn.mock.results).toEqual([ { - isThrow: false, + type: 'return', value: 'MOCKED!', }, { - isThrow: false, + type: 'return', value: 4, }, ]); @@ -618,11 +618,11 @@ describe('moduleMocker', () => { expect(fn.mock.results).toEqual([ { - isThrow: false, + type: 'return', value: 2, }, { - isThrow: false, + type: 'return', value: 4, }, ]); @@ -662,15 +662,15 @@ describe('moduleMocker', () => { // Results are tracked expect(fn.mock.results).toEqual([ { - isThrow: false, + type: 'return', value: 8, }, { - isThrow: true, + type: 'throw', value: error, }, { - isThrow: false, + type: 'return', value: 18, }, ]); @@ -693,12 +693,130 @@ describe('moduleMocker', () => { // Results are tracked expect(fn.mock.results).toEqual([ { - isThrow: true, + type: 'throw', value: undefined, }, ]); }); + it('results of recursive calls are tracked properly', () => { + // sums up all integers from 0 -> value, using recursion + const fn = moduleMocker.fn(value => { + if (value === 0) { + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(4); + + // All call args tracked + expect(fn.mock.calls).toEqual([[4], [3], [2], [1], [0]]); + // Results are tracked + // (in correct order of calls, rather than order of returns) + expect(fn.mock.results).toEqual([ + { + type: 'return', + value: 10, + }, + { + type: 'return', + value: 6, + }, + { + type: 'return', + value: 3, + }, + { + type: 'return', + value: 1, + }, + { + type: 'return', + value: 0, + }, + ]); + }); + + it('test results of recursive calls from within the recursive call', () => { + // sums up all integers from 0 -> value, using recursion + const fn = moduleMocker.fn(value => { + if (value === 0) { + return 0; + } else { + const recursiveResult = fn(value - 1); + + if (value === 3) { + // All recursive calls have been made at this point. + expect(fn.mock.calls).toEqual([[4], [3], [2], [1], [0]]); + // But only the last 3 calls have returned at this point. + expect(fn.mock.results).toEqual([ + { + type: 'incomplete', + value: undefined, + }, + { + type: 'incomplete', + value: undefined, + }, + { + type: 'return', + value: 3, + }, + { + type: 'return', + value: 1, + }, + { + type: 'return', + value: 0, + }, + ]); + } + + return value + recursiveResult; + } + }); + + fn(4); + }); + + it('call mockClear inside recursive mock', () => { + // sums up all integers from 0 -> value, using recursion + const fn = moduleMocker.fn(value => { + if (value === 3) { + fn.mockClear(); + } + + if (value === 0) { + return 0; + } else { + return value + fn(value - 1); + } + }); + + fn(3); + + // All call args (after the call that cleared the mock) are tracked + expect(fn.mock.calls).toEqual([[2], [1], [0]]); + // Results (after the call that cleared the mock) are tracked + expect(fn.mock.results).toEqual([ + { + type: 'return', + value: 3, + }, + { + type: 'return', + value: 1, + }, + { + type: 'return', + value: 0, + }, + ]); + }); + describe('invocationCallOrder', () => { it('tracks invocationCallOrder made by mocks', () => { const fn1 = moduleMocker.fn(); diff --git a/packages/jest-mock/src/index.js b/packages/jest-mock/src/index.js index 4bde745a3c25..b3c901ecf64e 100644 --- a/packages/jest-mock/src/index.js +++ b/packages/jest-mock/src/index.js @@ -21,17 +21,27 @@ export type MockFunctionMetadata = { length?: number, }; +/** + * Possible types of a MockFunctionResult. + * 'return': The call completed by returning normally. + * 'throw': The call completed by throwing a value. + * 'incomplete': The call has not completed yet. This is possible if you read + * the mock function result from within the mock function itself + * (or a function called by the mock function). + */ +type MockFunctionResultType = 'return' | 'throw' | 'incomplete'; + /** * Represents the result of a single call to a mock function. */ type MockFunctionResult = { /** - * True if the function threw. - * False if the function returned. + * Indicates how the call completed. */ - isThrow: boolean, + type: MockFunctionResultType, /** * The value that was either thrown or returned by the function. + * Undefined when type === 'incomplete'. */ value: any, }; @@ -379,6 +389,15 @@ class ModuleMockerClass { const mockConfig = mocker._ensureMockConfig(f); mockState.instances.push(this); mockState.calls.push(Array.prototype.slice.call(arguments)); + // Create and record an "incomplete" mock result immediately upon + // calling rather than waiting for the mock to return. This avoids + // issues caused by recursion where results can be recorded in the + // wrong order. + const mockResult = { + type: 'incomplete', + value: undefined, + }; + mockState.results.push(mockResult); mockState.invocationCallOrder.push(mocker._invocationCallCounter++); // Will be set to the return value of the mock if an error is not thrown @@ -457,11 +476,12 @@ class ModuleMockerClass { callDidThrowError = true; throw error; } finally { - // Record the result of the function - mockState.results.push({ - isThrow: callDidThrowError, - value: callDidThrowError ? thrownError : finalReturnValue, - }); + // Record the result of the function. + // NOTE: Intentionally NOT pushing/indexing into the array of mock + // results here to avoid corrupting results data if mockClear() + // is called during the execution of the mock. + mockResult.type = callDidThrowError ? 'throw' : 'return'; + mockResult.value = callDidThrowError ? thrownError : finalReturnValue; } return finalReturnValue; diff --git a/packages/jest-snapshot/src/__tests__/__snapshots__/mock_serializer.test.js.snap b/packages/jest-snapshot/src/__tests__/__snapshots__/mock_serializer.test.js.snap index 95477e6fff5c..f1fa6c9bd478 100644 --- a/packages/jest-snapshot/src/__tests__/__snapshots__/mock_serializer.test.js.snap +++ b/packages/jest-snapshot/src/__tests__/__snapshots__/mock_serializer.test.js.snap @@ -24,7 +24,7 @@ Object { ], "results": Array [ Object { - "isThrow": false, + "type": "return", "value": undefined, }, ], @@ -43,7 +43,7 @@ exports[`mock with 1 calls in React element 1`] = ` ], "results": Array [ Object { - "isThrow": false, + "type": "return", "value": undefined, }, ], @@ -67,11 +67,11 @@ exports[`mock with 2 calls 1`] = ` ], "results": Array [ Object { - "isThrow": false, + "type": "return", "value": undefined, }, Object { - "isThrow": false, + "type": "return", "value": undefined, }, ], @@ -90,11 +90,11 @@ exports[`mock with 2 calls, 1 return, 1 throw 1`] = ` ], "results": Array [ Object { - "isThrow": false, + "type": "return", "value": 4, }, Object { - "isThrow": true, + "type": "throw", "value": [Error: Error Message!], }, ], diff --git a/packages/jest-snapshot/src/__tests__/mock_serializer.test.js b/packages/jest-snapshot/src/__tests__/mock_serializer.test.js index 986cff352f01..a2ff554e6548 100644 --- a/packages/jest-snapshot/src/__tests__/mock_serializer.test.js +++ b/packages/jest-snapshot/src/__tests__/mock_serializer.test.js @@ -101,7 +101,7 @@ test('indent option', () => { '],', '"results": Array [', 'Object {', - '"isThrow": false,', + '"type": "return",', '"value": Object {', '"key": "value",', '},', @@ -116,7 +116,7 @@ test('min option', () => { const fn = jest.fn(val => val); fn({key: 'value'}); const expected = - '[MockFunction] {"calls": [[{"key": "value"}]], "results": [{"isThrow": false, "value": {"key": "value"}}]}'; + '[MockFunction] {"calls": [[{"key": "value"}]], "results": [{"type": "return", "value": {"key": "value"}}]}'; expect(prettyFormat(fn, {min: true, plugins: [plugin]})).toBe(expected); }); @@ -150,7 +150,7 @@ test('maxDepth option', () => { ' ],', ' "results": Array [', // ++depth === 2 ' Object {', // ++depth === 3 - ' "isThrow": false,', + ' "type": "return",', ' "value": undefined,', ' },', ' ],', From 29ae86820eb0e53ef48a57cafac0fe50b2160c86 Mon Sep 17 00:00:00 2001 From: Andrea Rosales Date: Thu, 1 Nov 2018 02:23:51 -0500 Subject: [PATCH 72/76] Update naming convention in jest-watcher (#7315) ## Summary This is part of #4969. It standardizes file names in packages/jest-watcher under Facebook naming conventions. ## Test plan Running `yarn run clean-all` followed by `yarn` and `yarn test` is not completely clean on my machine, but it yields the same results in this branch and `master` --- CHANGELOG.md | 1 + .../src/{base_watch_plugin.js => BaseWatchPlugin.js} | 0 packages/jest-watcher/src/{jest_hooks.js => JestHooks.js} | 0 .../src/{pattern_prompt.js => PatternPrompt.js} | 0 packages/jest-watcher/src/index.js | 8 ++++---- ....test.js.snap => formatTestNameByPattern.test.js.snap} | 0 ...by_pattern.test.js => formatTestNameByPattern.test.js} | 2 +- .../lib/__tests__/{scroll_list.test.js => scroll.test.js} | 2 +- ...test_name_by_pattern.js => formatTestNameByPattern.js} | 0 .../{pattern_mode_helpers.js => patternModeHelpers.js} | 0 .../jest-watcher/src/lib/{scroll_list.js => scroll.js} | 0 11 files changed, 7 insertions(+), 6 deletions(-) rename packages/jest-watcher/src/{base_watch_plugin.js => BaseWatchPlugin.js} (100%) rename packages/jest-watcher/src/{jest_hooks.js => JestHooks.js} (100%) rename packages/jest-watcher/src/{pattern_prompt.js => PatternPrompt.js} (100%) rename packages/jest-watcher/src/lib/__tests__/__snapshots__/{format_test_name_by_pattern.test.js.snap => formatTestNameByPattern.test.js.snap} (100%) rename packages/jest-watcher/src/lib/__tests__/{format_test_name_by_pattern.test.js => formatTestNameByPattern.test.js} (97%) rename packages/jest-watcher/src/lib/__tests__/{scroll_list.test.js => scroll.test.js} (97%) rename packages/jest-watcher/src/lib/{format_test_name_by_pattern.js => formatTestNameByPattern.js} (100%) rename packages/jest-watcher/src/lib/{pattern_mode_helpers.js => patternModeHelpers.js} (100%) rename packages/jest-watcher/src/lib/{scroll_list.js => scroll.js} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a0b85b5fb40..e62cd0e6a7e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ ### Chore & Maintenance +- `[jest-watcher]` Standardize filenames ([#7314](https://github.com/facebook/jest/pull/7314)) - `[jest-circus]` Standardize file naming in `jest-circus` ([#7301](https://github.com/facebook/jest/pull/7301)) - `[docs]` Add synchronous test.each setup ([#7150](https://github.com/facebook/jest/pull/7150)) - `[docs]` Add `this.extend` to the Custom Matchers API reference ([#7130](https://github.com/facebook/jest/pull/7130)) diff --git a/packages/jest-watcher/src/base_watch_plugin.js b/packages/jest-watcher/src/BaseWatchPlugin.js similarity index 100% rename from packages/jest-watcher/src/base_watch_plugin.js rename to packages/jest-watcher/src/BaseWatchPlugin.js diff --git a/packages/jest-watcher/src/jest_hooks.js b/packages/jest-watcher/src/JestHooks.js similarity index 100% rename from packages/jest-watcher/src/jest_hooks.js rename to packages/jest-watcher/src/JestHooks.js diff --git a/packages/jest-watcher/src/pattern_prompt.js b/packages/jest-watcher/src/PatternPrompt.js similarity index 100% rename from packages/jest-watcher/src/pattern_prompt.js rename to packages/jest-watcher/src/PatternPrompt.js diff --git a/packages/jest-watcher/src/index.js b/packages/jest-watcher/src/index.js index fbe13be62b2c..ec145efba3bd 100644 --- a/packages/jest-watcher/src/index.js +++ b/packages/jest-watcher/src/index.js @@ -7,9 +7,9 @@ * @flow */ -export {default as BaseWatchPlugin} from './base_watch_plugin'; -export {default as JestHook} from './jest_hooks'; -export {default as PatternPrompt} from './pattern_prompt'; +export {default as BaseWatchPlugin} from './BaseWatchPlugin'; +export {default as JestHook} from './JestHooks'; +export {default as PatternPrompt} from './PatternPrompt'; export * from './constants'; export {default as Prompt} from './lib/Prompt'; -export * from './lib/pattern_mode_helpers'; +export * from './lib/patternModeHelpers'; diff --git a/packages/jest-watcher/src/lib/__tests__/__snapshots__/format_test_name_by_pattern.test.js.snap b/packages/jest-watcher/src/lib/__tests__/__snapshots__/formatTestNameByPattern.test.js.snap similarity index 100% rename from packages/jest-watcher/src/lib/__tests__/__snapshots__/format_test_name_by_pattern.test.js.snap rename to packages/jest-watcher/src/lib/__tests__/__snapshots__/formatTestNameByPattern.test.js.snap diff --git a/packages/jest-watcher/src/lib/__tests__/format_test_name_by_pattern.test.js b/packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.js similarity index 97% rename from packages/jest-watcher/src/lib/__tests__/format_test_name_by_pattern.test.js rename to packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.js index 08b688f77aae..16bea7d02681 100644 --- a/packages/jest-watcher/src/lib/__tests__/format_test_name_by_pattern.test.js +++ b/packages/jest-watcher/src/lib/__tests__/formatTestNameByPattern.test.js @@ -9,7 +9,7 @@ 'use strict'; -import formatTestNameByPattern from '../format_test_name_by_pattern'; +import formatTestNameByPattern from '../formatTestNameByPattern'; describe('for multiline test name returns', () => { const testNames = [ diff --git a/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js b/packages/jest-watcher/src/lib/__tests__/scroll.test.js similarity index 97% rename from packages/jest-watcher/src/lib/__tests__/scroll_list.test.js rename to packages/jest-watcher/src/lib/__tests__/scroll.test.js index c63a357cb3f6..171e5c98b03e 100644 --- a/packages/jest-watcher/src/lib/__tests__/scroll_list.test.js +++ b/packages/jest-watcher/src/lib/__tests__/scroll.test.js @@ -1,6 +1,6 @@ // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -import scroll from '../scroll_list'; +import scroll from '../scroll'; it('When offset is -1', () => { expect(scroll(25, {max: 10, offset: -1})).toEqual({ diff --git a/packages/jest-watcher/src/lib/format_test_name_by_pattern.js b/packages/jest-watcher/src/lib/formatTestNameByPattern.js similarity index 100% rename from packages/jest-watcher/src/lib/format_test_name_by_pattern.js rename to packages/jest-watcher/src/lib/formatTestNameByPattern.js diff --git a/packages/jest-watcher/src/lib/pattern_mode_helpers.js b/packages/jest-watcher/src/lib/patternModeHelpers.js similarity index 100% rename from packages/jest-watcher/src/lib/pattern_mode_helpers.js rename to packages/jest-watcher/src/lib/patternModeHelpers.js diff --git a/packages/jest-watcher/src/lib/scroll_list.js b/packages/jest-watcher/src/lib/scroll.js similarity index 100% rename from packages/jest-watcher/src/lib/scroll_list.js rename to packages/jest-watcher/src/lib/scroll.js From f9fd98fd4e38978e96a86f1c8796593cad7ac470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Pierzcha=C5=82a?= Date: Thu, 1 Nov 2018 09:23:51 +0100 Subject: [PATCH 73/76] fix: unable to resolve path to mapped file with custom platform (#7312) --- CHANGELOG.md | 3 ++- .../__snapshots__/module_name_mapper.test.js.snap | 2 +- e2e/resolve/__tests__/resolve.test.js | 5 +++++ e2e/resolve/package.json | 9 +++++++-- e2e/resolve/test2mapper.js | 8 ++++++++ e2e/resolve/test2mapper.native.js | 8 ++++++++ .../jest-resolve/src/__tests__/resolve.test.js | 1 + packages/jest-resolve/src/index.js | 15 ++++++++++++++- 8 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 e2e/resolve/test2mapper.js create mode 100644 e2e/resolve/test2mapper.native.js diff --git a/CHANGELOG.md b/CHANGELOG.md index e62cd0e6a7e7..1385882907c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,7 +61,8 @@ - `[jest-config]` Use strings instead of `RegExp` instances in normalized configuration ([#7251](https://github.com/facebook/jest/pull/7251)) - `[jest-circus]` Make sure to display real duration even if time is mocked ([#7264](https://github.com/facebook/jest/pull/7264)) - `[expect]` Improves the failing message for `toStrictEqual` matcher. ([#7224](https://github.com/facebook/jest/pull/7224)) -- `[jest-mock]` [**BREAKING**] Fix bugs with mock/spy result tracking of recursive functions ([#6381](https://github.com/facebook/jest/pull/6381) +- `[jest-mock]` [**BREAKING**] Fix bugs with mock/spy result tracking of recursive functions ([#6381](https://github.com/facebook/jest/pull/6381)) +- `[jest-resolve]` Fix not being able to resolve path to mapped file with custom platform ([#7312](https://github.com/facebook/jest/pull/7312)) ### Chore & Maintenance diff --git a/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap b/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap index 9f692951261f..0f917a0aad15 100644 --- a/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap +++ b/e2e/__tests__/__snapshots__/module_name_mapper.test.js.snap @@ -32,7 +32,7 @@ exports[`moduleNameMapper wrong configuration 1`] = ` 12 | module.exports = () => 'test'; 13 | - at packages/jest-resolve/build/index.js:410:17 + at packages/jest-resolve/build/index.js:429:17 at index.js:10:1 " diff --git a/e2e/resolve/__tests__/resolve.test.js b/e2e/resolve/__tests__/resolve.test.js index 41a840c2d56d..e8a5571f59ef 100644 --- a/e2e/resolve/__tests__/resolve.test.js +++ b/e2e/resolve/__tests__/resolve.test.js @@ -47,6 +47,11 @@ test('should resolve filename.native.js', () => { expect(platform.extension).toBe('native.js'); }); +test('should resolve filename.native.js with moduleNameMapper', () => { + expect(testRequire('test2mapper')).not.toThrow(); + expect(platform.extension).toBe('native.js'); +}); + test('should resolve filename.js', () => { expect(testRequire('../test3')).not.toThrow(); expect(platform.extension).toBe('js'); diff --git a/e2e/resolve/package.json b/e2e/resolve/package.json index 743e0a83f202..f3feb16b420f 100644 --- a/e2e/resolve/package.json +++ b/e2e/resolve/package.json @@ -2,9 +2,14 @@ "name": "custom-resolve", "jest": { "haste": { - "platforms": ["native"], + "platforms": [ + "native" + ], "defaultPlatform": "android" }, - "testEnvironment": "node" + "testEnvironment": "node", + "moduleNameMapper": { + "test2mapper": "/test2mapper" + } } } diff --git a/e2e/resolve/test2mapper.js b/e2e/resolve/test2mapper.js new file mode 100644 index 000000000000..a265d4b021c8 --- /dev/null +++ b/e2e/resolve/test2mapper.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = {extension: '.js'}; diff --git a/e2e/resolve/test2mapper.native.js b/e2e/resolve/test2mapper.native.js new file mode 100644 index 000000000000..68a290a4b715 --- /dev/null +++ b/e2e/resolve/test2mapper.native.js @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +module.exports = {extension: 'native.js'}; diff --git a/packages/jest-resolve/src/__tests__/resolve.test.js b/packages/jest-resolve/src/__tests__/resolve.test.js index f4c75c4e6927..8d3b91d9bfb9 100644 --- a/packages/jest-resolve/src/__tests__/resolve.test.js +++ b/packages/jest-resolve/src/__tests__/resolve.test.js @@ -161,6 +161,7 @@ describe('getMockModule', () => { const moduleMap = ModuleMap.create('/'); const resolver = new Resolver(moduleMap, { + extensions: ['.js'], moduleNameMapper: [ { moduleName: '$1', diff --git a/packages/jest-resolve/src/index.js b/packages/jest-resolve/src/index.js index 7ad9ea1e960d..cf3ba0d85093 100644 --- a/packages/jest-resolve/src/index.js +++ b/packages/jest-resolve/src/index.js @@ -341,10 +341,23 @@ class Resolver { _resolveStubModuleName(from: Path, moduleName: string): ?Path { const dirname = path.dirname(from); const paths = this._options.modulePaths; - const extensions = this._options.extensions; + const extensions = this._options.extensions.slice(); const moduleDirectory = this._options.moduleDirectories; const moduleNameMapper = this._options.moduleNameMapper; const resolver = this._options.resolver; + const defaultPlatform = this._options.defaultPlatform; + + if (this._supportsNativePlatform) { + extensions.unshift( + ...this._options.extensions.map(ext => '.' + NATIVE_PLATFORM + ext), + ); + } + + if (defaultPlatform) { + extensions.unshift( + ...this._options.extensions.map(ext => '.' + defaultPlatform + ext), + ); + } if (moduleNameMapper) { for (const {moduleName: mappedModuleName, regex} of moduleNameMapper) { From 223c3dbc4b2c4a48ff3b3b840b550e874906b9b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Thu, 1 Nov 2018 11:37:31 -0700 Subject: [PATCH 74/76] Add support for custom dependency extractors (#7313) --- CHANGELOG.md | 1 + docs/Configuration.md | 8 ++++ .../__snapshots__/show_config.test.js.snap | 1 + e2e/__tests__/find_related_files.test.js | 40 +++++++++++++++++++ jest.config.js | 1 + .../__tests__/__snapshots__/init.test.js.snap | 3 ++ packages/jest-config/src/Defaults.js | 1 + packages/jest-config/src/Descriptions.js | 1 + packages/jest-config/src/ValidConfig.js | 1 + packages/jest-config/src/index.js | 1 + packages/jest-config/src/normalize.js | 1 + .../src/__tests__/dependencyExtractor.js | 31 ++++++++++++++ .../src/__tests__/index.test.js | 8 ++++ .../src/__tests__/worker.test.js | 16 +++++++- packages/jest-haste-map/src/index.js | 5 +++ .../src/lib/__tests__/extractRequires.test.js | 30 ++++++++------ .../jest-haste-map/src/lib/extractRequires.js | 4 +- packages/jest-haste-map/src/types.js | 1 + packages/jest-haste-map/src/worker.js | 8 +++- packages/jest-runtime/src/index.js | 1 + types/Config.js | 3 ++ 21 files changed, 149 insertions(+), 17 deletions(-) create mode 100644 packages/jest-haste-map/src/__tests__/dependencyExtractor.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 1385882907c5..4a9eeb537f3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - `[babel-preset-jest]` [**BREAKING**] Export a function instead of an object for Babel 7 compatibility ([#7203](https://github.com/facebook/jest/pull/7203)) - `[expect]` Check constructor equality in .toStrictEqual() ([#7005](https://github.com/facebook/jest/pull/7005)) - `[jest-util]` Add `jest.getTimerCount()` to get the count of scheduled fake timers ([#7285](https://github.com/facebook/jest/pull/7285)) +- `[jest-config]` Add `dependencyExtractor` option to use a custom module to extract dependencies from files ([#7313](https://github.com/facebook/jest/pull/7313)) ### Fixes diff --git a/docs/Configuration.md b/docs/Configuration.md index 35bddeccbdf6..8035bb5c8278 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -257,6 +257,14 @@ Jest will fail if: - The `./src/api/very-important-module.js` file has less than 100% coverage. - Every remaining file combined has less than 50% coverage (`global`). +### `dependencyExtractor` [string] + +Default: `undefined` + +This option allows the use of a custom dependency extractor. It must be a node module that exports a function expecting a string as the first argument for the code to analyze and Jest's dependency extractor as the second argument (in case you only want to extend it). + +The function should return an iterable (`Array`, `Set`, etc.) with the dependencies found in the code. + ### `errorOnDeprecated` [boolean] Default: `false` diff --git a/e2e/__tests__/__snapshots__/show_config.test.js.snap b/e2e/__tests__/__snapshots__/show_config.test.js.snap index f3982dde87f3..cf77d55b5751 100644 --- a/e2e/__tests__/__snapshots__/show_config.test.js.snap +++ b/e2e/__tests__/__snapshots__/show_config.test.js.snap @@ -13,6 +13,7 @@ exports[`--showConfig outputs config info and exits 1`] = ` \\"/node_modules/\\" ], \\"cwd\\": \\"<>\\", + \\"dependencyExtractor\\": null, \\"detectLeaks\\": false, \\"detectOpenHandles\\": false, \\"errorOnDeprecated\\": false, diff --git a/e2e/__tests__/find_related_files.test.js b/e2e/__tests__/find_related_files.test.js index 2024e1dd97e5..f7ba19cf16bf 100644 --- a/e2e/__tests__/find_related_files.test.js +++ b/e2e/__tests__/find_related_files.test.js @@ -41,6 +41,46 @@ describe('--findRelatedTests flag', () => { expect(stderr).toMatch(summaryMsg); }); + test('runs tests related to filename with a custom dependency extractor', () => { + writeFiles(DIR, { + '.watchmanconfig': '', + '__tests__/test.test.js': ` + const dynamicImport = path => Promise.resolve(require(path)); + test('a', () => dynamicImport('../a').then(a => { + expect(a.foo).toBe(5); + })); + `, + 'a.js': 'module.exports = {foo: 5};', + 'dependencyExtractor.js': ` + const DYNAMIC_IMPORT_RE = /(?:^|[^.]\\s*)(\\bdynamicImport\\s*?\\(\\s*?)([\`'"])([^\`'"]+)(\\2\\s*?\\))/g; + module.exports = function dependencyExtractor(code) { + const dependencies = new Set(); + const addDependency = (match, pre, quot, dep, post) => { + dependencies.add(dep); + return match; + }; + code.replace(DYNAMIC_IMPORT_RE, addDependency); + return dependencies; + }; + `, + 'package.json': JSON.stringify({ + jest: { + dependencyExtractor: '/dependencyExtractor.js', + testEnvironment: 'node', + }, + }), + }); + + const {stdout} = runJest(DIR, ['a.js']); + expect(stdout).toMatch(''); + + const {stderr} = runJest(DIR, ['--findRelatedTests', 'a.js']); + expect(stderr).toMatch('PASS __tests__/test.test.js'); + + const summaryMsg = 'Ran all test suites related to files matching /a.js/i.'; + expect(stderr).toMatch(summaryMsg); + }); + test('generates coverage report for filename', () => { writeFiles(DIR, { '.watchmanconfig': '', diff --git a/jest.config.js b/jest.config.js index 06cb6ca2e84c..9c16175c878b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -40,6 +40,7 @@ module.exports = { '/packages/jest-cli/src/__tests__/__fixtures__/', '/packages/jest-cli/src/lib/__tests__/fixtures/', '/packages/jest-haste-map/src/__tests__/haste_impl.js', + '/packages/jest-haste-map/src/__tests__/dependencyExtractor.js', '/packages/jest-resolve-dependencies/src/__tests__/__fixtures__/', '/packages/jest-runtime/src/__tests__/defaultResolver.js', '/packages/jest-runtime/src/__tests__/module_dir/', diff --git a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap index 8f49360f6ebc..d0b63fa1c18a 100644 --- a/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap +++ b/packages/jest-cli/src/lib/__tests__/__snapshots__/init.test.js.snap @@ -63,6 +63,9 @@ module.exports = { // An object that configures minimum threshold enforcement for coverage results // coverageThreshold: null, + // A path to a custom dependency extractor + // dependencyExtractor: null, + // Make calling deprecated APIs throw helpful error messages // errorOnDeprecated: false, diff --git a/packages/jest-config/src/Defaults.js b/packages/jest-config/src/Defaults.js index b6aafa6e13ad..ea40b3cf4e05 100644 --- a/packages/jest-config/src/Defaults.js +++ b/packages/jest-config/src/Defaults.js @@ -30,6 +30,7 @@ export default ({ coverageReporters: ['json', 'text', 'lcov', 'clover'], coverageThreshold: null, cwd: process.cwd(), + dependencyExtractor: null, detectLeaks: false, detectOpenHandles: false, errorOnDeprecated: false, diff --git a/packages/jest-config/src/Descriptions.js b/packages/jest-config/src/Descriptions.js index 48c3b2d321ad..6ff881d1501d 100644 --- a/packages/jest-config/src/Descriptions.js +++ b/packages/jest-config/src/Descriptions.js @@ -26,6 +26,7 @@ export default ({ 'A list of reporter names that Jest uses when writing coverage reports', coverageThreshold: 'An object that configures minimum threshold enforcement for coverage results', + dependencyExtractor: 'A path to a custom dependency extractor', errorOnDeprecated: 'Make calling deprecated APIs throw helpful error messages', forceCoverageMatch: diff --git a/packages/jest-config/src/ValidConfig.js b/packages/jest-config/src/ValidConfig.js index cb732dc76555..2d2d4128bc48 100644 --- a/packages/jest-config/src/ValidConfig.js +++ b/packages/jest-config/src/ValidConfig.js @@ -40,6 +40,7 @@ export default ({ statements: 100, }, }, + dependencyExtractor: '/dependencyExtractor.js', displayName: 'project-name', errorOnDeprecated: false, expand: false, diff --git a/packages/jest-config/src/index.js b/packages/jest-config/src/index.js index ec6a856c75f0..b1832b94af6a 100644 --- a/packages/jest-config/src/index.js +++ b/packages/jest-config/src/index.js @@ -160,6 +160,7 @@ const groupOptions = ( clearMocks: options.clearMocks, coveragePathIgnorePatterns: options.coveragePathIgnorePatterns, cwd: options.cwd, + dependencyExtractor: options.dependencyExtractor, detectLeaks: options.detectLeaks, detectOpenHandles: options.detectOpenHandles, displayName: options.displayName, diff --git a/packages/jest-config/src/normalize.js b/packages/jest-config/src/normalize.js index fc04dd34deec..ef6886ce2a3b 100644 --- a/packages/jest-config/src/normalize.js +++ b/packages/jest-config/src/normalize.js @@ -483,6 +483,7 @@ export default function normalize(options: InitialOptions, argv: Argv) { replaceRootDirInPath(options.rootDir, options[key]), ); break; + case 'dependencyExtractor': case 'globalSetup': case 'globalTeardown': case 'moduleLoader': diff --git a/packages/jest-haste-map/src/__tests__/dependencyExtractor.js b/packages/jest-haste-map/src/__tests__/dependencyExtractor.js new file mode 100644 index 000000000000..3e872ae3227e --- /dev/null +++ b/packages/jest-haste-map/src/__tests__/dependencyExtractor.js @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +'use strict'; + +const blockCommentRe = /\/\*[^]*?\*\//g; +const lineCommentRe = /\/\/.*/g; +const LOAD_MODULE_RE = /(?:^|[^.]\s*)(\bloadModule\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g; + +module.exports = function dependencyExtractor( + code, + defaultDependencyExtractor, +) { + const dependencies = defaultDependencyExtractor(code); + + const addDependency = (match, pre, quot, dep, post) => { + dependencies.add(dep); + return match; + }; + + code + .replace(blockCommentRe, '') + .replace(lineCommentRe, '') + .replace(LOAD_MODULE_RE, addDependency); + + return dependencies; +}; diff --git a/packages/jest-haste-map/src/__tests__/index.test.js b/packages/jest-haste-map/src/__tests__/index.test.js index df716c9f0c09..3b1a49f37626 100644 --- a/packages/jest-haste-map/src/__tests__/index.test.js +++ b/packages/jest-haste-map/src/__tests__/index.test.js @@ -885,8 +885,11 @@ describe('HasteMap', () => { it('distributes work across workers', () => { const jestWorker = require('jest-worker'); + const path = require('path'); + const dependencyExtractor = path.join(__dirname, 'dependencyExtractor.js'); return new HasteMap( Object.assign({}, defaultConfig, { + dependencyExtractor, hasteImplModulePath: undefined, maxWorkers: 4, }), @@ -902,6 +905,7 @@ describe('HasteMap', () => { { computeDependencies: true, computeSha1: false, + dependencyExtractor, filePath: '/project/fruits/Banana.js', hasteImplModulePath: undefined, rootDir: '/project', @@ -911,6 +915,7 @@ describe('HasteMap', () => { { computeDependencies: true, computeSha1: false, + dependencyExtractor, filePath: '/project/fruits/Pear.js', hasteImplModulePath: undefined, rootDir: '/project', @@ -920,6 +925,7 @@ describe('HasteMap', () => { { computeDependencies: true, computeSha1: false, + dependencyExtractor, filePath: '/project/fruits/Strawberry.js', hasteImplModulePath: undefined, rootDir: '/project', @@ -929,6 +935,7 @@ describe('HasteMap', () => { { computeDependencies: true, computeSha1: false, + dependencyExtractor, filePath: '/project/fruits/__mocks__/Pear.js', hasteImplModulePath: undefined, rootDir: '/project', @@ -938,6 +945,7 @@ describe('HasteMap', () => { { computeDependencies: true, computeSha1: false, + dependencyExtractor, filePath: '/project/vegetables/Melon.js', hasteImplModulePath: undefined, rootDir: '/project', diff --git a/packages/jest-haste-map/src/__tests__/worker.test.js b/packages/jest-haste-map/src/__tests__/worker.test.js index 426502dd3d92..3c044a3668c3 100644 --- a/packages/jest-haste-map/src/__tests__/worker.test.js +++ b/packages/jest-haste-map/src/__tests__/worker.test.js @@ -32,6 +32,7 @@ describe('worker', () => { '/project/fruits/Pear.js': ` const Banana = require("Banana"); const Strawberry = require('Strawberry'); + const Lime = loadModule('Lime'); `, '/project/fruits/Strawberry.js': ` // Strawberry! @@ -95,6 +96,19 @@ describe('worker', () => { }); }); + it('accepts a custom dependency extractor', async () => { + expect( + await worker({ + computeDependencies: true, + dependencyExtractor: path.join(__dirname, 'dependencyExtractor.js'), + filePath: '/project/fruits/Pear.js', + rootDir, + }), + ).toEqual({ + dependencies: ['Banana', 'Strawberry', 'Lime'], + }); + }); + it('delegates to hasteImplModulePath for getting the id', async () => { expect( await worker({ @@ -179,7 +193,7 @@ describe('worker', () => { filePath: '/project/fruits/Pear.js', rootDir, }), - ).toEqual({sha1: '0cb0930919e068f146da84d9a0ad0182e4bdb673'}); + ).toEqual({sha1: 'c7a7a68a1c8aaf452669dd2ca52ac4a434d25552'}); await expect( getSha1({computeSha1: true, filePath: '/i/dont/exist.js', rootDir}), diff --git a/packages/jest-haste-map/src/index.js b/packages/jest-haste-map/src/index.js index f7acf0cbfee4..fabadb3b33ee 100644 --- a/packages/jest-haste-map/src/index.js +++ b/packages/jest-haste-map/src/index.js @@ -52,6 +52,7 @@ type Options = { computeDependencies?: boolean, computeSha1?: boolean, console?: Console, + dependencyExtractor?: string, extensions: Array, forceNodeFilesystemAPI?: boolean, hasteImplModulePath?: string, @@ -75,6 +76,7 @@ type InternalOptions = { cacheDirectory: string, computeDependencies: boolean, computeSha1: boolean, + dependencyExtractor?: string, extensions: Array, forceNodeFilesystemAPI: boolean, hasteImplModulePath?: string, @@ -233,6 +235,7 @@ class HasteMap extends EventEmitter { ? true : options.computeDependencies, computeSha1: options.computeSha1 || false, + dependencyExtractor: options.dependencyExtractor, extensions: options.extensions, forceNodeFilesystemAPI: !!options.forceNodeFilesystemAPI, hasteImplModulePath: options.hasteImplModulePath, @@ -504,6 +507,7 @@ class HasteMap extends EventEmitter { .getSha1({ computeDependencies: this._options.computeDependencies, computeSha1, + dependencyExtractor: this._options.dependencyExtractor, filePath, hasteImplModulePath: this._options.hasteImplModulePath, rootDir, @@ -567,6 +571,7 @@ class HasteMap extends EventEmitter { .worker({ computeDependencies: this._options.computeDependencies, computeSha1, + dependencyExtractor: this._options.dependencyExtractor, filePath, hasteImplModulePath: this._options.hasteImplModulePath, rootDir, diff --git a/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js b/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js index a6172e0dcb8e..a349d083735e 100644 --- a/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js +++ b/packages/jest-haste-map/src/lib/__tests__/extractRequires.test.js @@ -18,7 +18,9 @@ it('extracts both requires and imports from code', () => { import('module3').then(module3 => {})'; `; - expect(extractRequires(code)).toEqual(['module1', 'module2', 'module3']); + expect(extractRequires(code)).toEqual( + new Set(['module1', 'module2', 'module3']), + ); }); it('extracts requires in order', () => { @@ -28,13 +30,15 @@ it('extracts requires in order', () => { const module3 = require('module3'); `; - expect(extractRequires(code)).toEqual(['module1', 'module2', 'module3']); + expect(extractRequires(code)).toEqual( + new Set(['module1', 'module2', 'module3']), + ); }); it('strips out comments from code', () => { const code = `// comment const module2 = require('module2');`; - expect(extractRequires(code)).toEqual([]); + expect(extractRequires(code)).toEqual(new Set([])); }); it('ignores requires in comments', () => { @@ -45,7 +49,7 @@ it('ignores requires in comments', () => { ' */', ].join('\n'); - expect(extractRequires(code)).toEqual([]); + expect(extractRequires(code)).toEqual(new Set([])); }); it('ignores requires in comments with Windows line endings', () => { @@ -56,7 +60,7 @@ it('ignores requires in comments with Windows line endings', () => { ' */', ].join('\r\n'); - expect(extractRequires(code)).toEqual([]); + expect(extractRequires(code)).toEqual(new Set([])); }); it('ignores requires in comments with unicode line endings', () => { @@ -68,7 +72,7 @@ it('ignores requires in comments with unicode line endings', () => { ' */', ].join(''); - expect(extractRequires(code)).toEqual([]); + expect(extractRequires(code)).toEqual(new Set([])); }); it('does not contain duplicates', () => { @@ -77,7 +81,7 @@ it('does not contain duplicates', () => { const module1Dup = require('module1'); `; - expect(extractRequires(code)).toEqual(['module1']); + expect(extractRequires(code)).toEqual(new Set(['module1'])); }); it('ignores type imports', () => { @@ -89,7 +93,7 @@ it('ignores type imports', () => { "} from 'wham'", ].join('\r\n'); - expect(extractRequires(code)).toEqual([]); + expect(extractRequires(code)).toEqual(new Set([])); }); it('ignores type exports', () => { @@ -99,25 +103,25 @@ it('ignores type exports', () => { "export * from 'module1'", ].join('\r\n'); - expect(extractRequires(code)).toEqual(['module1']); + expect(extractRequires(code)).toEqual(new Set(['module1'])); }); it('understands require.requireActual', () => { const code = `require.requireActual('pizza');`; - expect(extractRequires(code)).toEqual(['pizza']); + expect(extractRequires(code)).toEqual(new Set(['pizza'])); }); it('understands jest.requireActual', () => { const code = `jest.requireActual('whiskey');`; - expect(extractRequires(code)).toEqual(['whiskey']); + expect(extractRequires(code)).toEqual(new Set(['whiskey'])); }); it('understands require.requireMock', () => { const code = `require.requireMock('cheeseburger');`; - expect(extractRequires(code)).toEqual(['cheeseburger']); + expect(extractRequires(code)).toEqual(new Set(['cheeseburger'])); }); it('understands jest.requireMock', () => { const code = `jest.requireMock('scotch');`; - expect(extractRequires(code)).toEqual(['scotch']); + expect(extractRequires(code)).toEqual(new Set(['scotch'])); }); diff --git a/packages/jest-haste-map/src/lib/extractRequires.js b/packages/jest-haste-map/src/lib/extractRequires.js index 7457f44b6236..dfdcece33a29 100644 --- a/packages/jest-haste-map/src/lib/extractRequires.js +++ b/packages/jest-haste-map/src/lib/extractRequires.js @@ -18,7 +18,7 @@ const replacePatterns = { REQUIRE_RE: /(?:^|[^.]\s*)(\brequire\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g, }; -export default function extractRequires(code: string): Array { +export default function extractRequires(code: string): Set { const dependencies = new Set(); const addDependency = (match, pre, quot, dep, post) => { dependencies.add(dep); @@ -34,5 +34,5 @@ export default function extractRequires(code: string): Array { .replace(replacePatterns.REQUIRE_RE, addDependency) .replace(replacePatterns.DYNAMIC_IMPORT_RE, addDependency); - return Array.from(dependencies); + return dependencies; } diff --git a/packages/jest-haste-map/src/types.js b/packages/jest-haste-map/src/types.js index caba081b9a9a..8ee12a279fb5 100644 --- a/packages/jest-haste-map/src/types.js +++ b/packages/jest-haste-map/src/types.js @@ -15,6 +15,7 @@ export type Mapper = (item: string) => ?Array; export type WorkerMessage = { computeDependencies: boolean, computeSha1: boolean, + dependencyExtractor?: string, rootDir: string, filePath: string, hasteImplModulePath?: string, diff --git a/packages/jest-haste-map/src/worker.js b/packages/jest-haste-map/src/worker.js index acf575098e8f..6096372a6aa2 100644 --- a/packages/jest-haste-map/src/worker.js +++ b/packages/jest-haste-map/src/worker.js @@ -77,7 +77,13 @@ export async function worker(data: WorkerMessage): Promise { } if (computeDependencies) { - dependencies = extractRequires(getContent()); + const content = getContent(); + dependencies = Array.from( + data.dependencyExtractor + ? // $FlowFixMe + require(data.dependencyExtractor)(content, extractRequires) + : extractRequires(content), + ); } if (id) { diff --git a/packages/jest-runtime/src/index.js b/packages/jest-runtime/src/index.js index a24ed1712fd3..f60b33b0dae6 100644 --- a/packages/jest-runtime/src/index.js +++ b/packages/jest-runtime/src/index.js @@ -237,6 +237,7 @@ class Runtime { return new HasteMap({ cacheDirectory: config.cacheDirectory, console: options && options.console, + dependencyExtractor: config.dependencyExtractor, extensions: [Snapshot.EXTENSION].concat(config.moduleFileExtensions), hasteImplModulePath: config.haste.hasteImplModulePath, ignorePattern, diff --git a/types/Config.js b/types/Config.js index c152976c0957..957cb3afeaab 100644 --- a/types/Config.js +++ b/types/Config.js @@ -36,6 +36,7 @@ export type DefaultOptions = {| coverageReporters: Array, coverageThreshold: ?{global: {[key: string]: number}}, cwd: Path, + dependencyExtractor: ?string, errorOnDeprecated: boolean, expand: boolean, filter: ?Path, @@ -104,6 +105,7 @@ export type InitialOptions = { coveragePathIgnorePatterns?: Array, coverageReporters?: Array, coverageThreshold?: {global: {[key: string]: number}}, + dependencyExtractor?: string, detectLeaks?: boolean, detectOpenHandles?: boolean, displayName?: string, @@ -249,6 +251,7 @@ export type ProjectConfig = {| clearMocks: boolean, coveragePathIgnorePatterns: Array, cwd: Path, + dependencyExtractor?: string, detectLeaks: boolean, detectOpenHandles: boolean, displayName: ?string, From dd6f79b66c7b9b90857d3a372c53df7f1b09d0c6 Mon Sep 17 00:00:00 2001 From: Kunio Ozawa Date: Fri, 2 Nov 2018 22:58:01 +0900 Subject: [PATCH 75/76] Update MongoDB.md (#7305) --- docs/MongoDB.md | 6 +++--- website/versioned_docs/version-22.3/MongoDB.md | 6 +++--- website/versioned_docs/version-23.0/MongoDB.md | 6 +++--- website/versioned_docs/version-23.2/MongoDB.md | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/MongoDB.md b/docs/MongoDB.md index 6d4fcbf88108..2950c2a9c604 100644 --- a/docs/MongoDB.md +++ b/docs/MongoDB.md @@ -26,7 +26,7 @@ const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongoMemoryServer({ +const mongod = new MongoMemoryServer({ autoStart: false, }); @@ -37,14 +37,14 @@ module.exports = async () => { const mongoConfig = { mongoDBName: 'jest', - mongoUri: await mongoServer.getConnectionString(), + mongoUri: await mongod.getConnectionString(), }; // Write global config to disk because all tests run in different contexts. fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig)); // Set reference to mongod in order to close the server during teardown. - global.__MONGOD__ = mongoServer; + global.__MONGOD__ = mongod; }; ``` diff --git a/website/versioned_docs/version-22.3/MongoDB.md b/website/versioned_docs/version-22.3/MongoDB.md index edbbf86e44c3..3a9285891dd2 100644 --- a/website/versioned_docs/version-22.3/MongoDB.md +++ b/website/versioned_docs/version-22.3/MongoDB.md @@ -27,7 +27,7 @@ const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongoMemoryServer({ +const mongod = new MongoMemoryServer({ autoStart: false, }); @@ -38,14 +38,14 @@ module.exports = async () => { const mongoConfig = { mongoDBName: 'jest', - mongoUri: await mongoServer.getConnectionString(), + mongoUri: await mongod.getConnectionString(), }; // Write global config to disk because all tests run in different contexts. fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig)); // Set reference to mongod in order to close the server during teardown. - global.__MONGOD__ = mongoServer; + global.__MONGOD__ = mongod; }; ``` diff --git a/website/versioned_docs/version-23.0/MongoDB.md b/website/versioned_docs/version-23.0/MongoDB.md index f12a6d257b31..c73ae02b0623 100644 --- a/website/versioned_docs/version-23.0/MongoDB.md +++ b/website/versioned_docs/version-23.0/MongoDB.md @@ -27,7 +27,7 @@ const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongoMemoryServer({ +const mongod = new MongoMemoryServer({ autoStart: false, }); @@ -38,14 +38,14 @@ module.exports = async () => { const mongoConfig = { mongoDBName: 'jest', - mongoUri: await mongoServer.getConnectionString(), + mongoUri: await mongod.getConnectionString(), }; // Write global config to disk because all tests run in different contexts. fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig)); // Set reference to mongod in order to close the server during teardown. - global.__MONGOD__ = mongoServer; + global.__MONGOD__ = mongod; }; ``` diff --git a/website/versioned_docs/version-23.2/MongoDB.md b/website/versioned_docs/version-23.2/MongoDB.md index e229d0fa0798..a05fbe53a526 100644 --- a/website/versioned_docs/version-23.2/MongoDB.md +++ b/website/versioned_docs/version-23.2/MongoDB.md @@ -27,7 +27,7 @@ const {MongoMemoryServer} = require('mongodb-memory-server'); const globalConfigPath = path.join(__dirname, 'globalConfig.json'); -const mongoServer = new MongoMemoryServer({ +const mongod = new MongoMemoryServer({ autoStart: false, }); @@ -38,14 +38,14 @@ module.exports = async () => { const mongoConfig = { mongoDBName: 'jest', - mongoUri: await mongoServer.getConnectionString(), + mongoUri: await mongod.getConnectionString(), }; // Write global config to disk because all tests run in different contexts. fs.writeFileSync(globalConfigPath, JSON.stringify(mongoConfig)); // Set reference to mongod in order to close the server during teardown. - global.__MONGOD__ = mongoServer; + global.__MONGOD__ = mongod; }; ``` From 322efc3512ddaa117de6cc7d63d5341c8fdc85ed Mon Sep 17 00:00:00 2001 From: Rafael de Oleza Date: Fri, 2 Nov 2018 09:22:34 -0700 Subject: [PATCH 76/76] Make getFileIterator() return relative paths (#7321) --- CHANGELOG.md | 1 + packages/jest-haste-map/src/HasteFS.js | 12 ++++++++---- packages/jest-resolve-dependencies/src/index.js | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a9eeb537f3c..79853f757e56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - `[expect]` Check constructor equality in .toStrictEqual() ([#7005](https://github.com/facebook/jest/pull/7005)) - `[jest-util]` Add `jest.getTimerCount()` to get the count of scheduled fake timers ([#7285](https://github.com/facebook/jest/pull/7285)) - `[jest-config]` Add `dependencyExtractor` option to use a custom module to extract dependencies from files ([#7313](https://github.com/facebook/jest/pull/7313)) +- `[jest-haste-map]` [**BREAKING**] Expose relative paths when getting the file iterator ([#7321](https://github.com/facebook/jest/pull/7321)) ### Fixes diff --git a/packages/jest-haste-map/src/HasteFS.js b/packages/jest-haste-map/src/HasteFS.js index 69df848a5975..03b60a1e946e 100644 --- a/packages/jest-haste-map/src/HasteFS.js +++ b/packages/jest-haste-map/src/HasteFS.js @@ -43,10 +43,14 @@ export default class HasteFS { } getAllFiles(): Array { - return Array.from(this.getFileIterator()); + return Array.from(this.getAbsoluteFileIterator()); } - *getFileIterator(): Iterator { + getFileIterator(): Iterator { + return this._files.keys(); + } + + *getAbsoluteFileIterator(): Iterator { for (const file of this._files.keys()) { yield fastPath.resolve(this._rootDir, file); } @@ -57,7 +61,7 @@ export default class HasteFS { pattern = new RegExp(pattern); } const files = []; - for (const file of this.getFileIterator()) { + for (const file of this.getAbsoluteFileIterator()) { if (pattern.test(file)) { files.push(file); } @@ -67,7 +71,7 @@ export default class HasteFS { matchFilesWithGlob(globs: Array, root: ?Path): Set { const files = new Set(); - for (const file of this.getFileIterator()) { + for (const file of this.getAbsoluteFileIterator()) { const filePath = root ? fastPath.relative(root, file) : file; if (micromatch([filePath], globs).length) { files.add(file); diff --git a/packages/jest-resolve-dependencies/src/index.js b/packages/jest-resolve-dependencies/src/index.js index b5e5f5a4efbc..64e3474037df 100644 --- a/packages/jest-resolve-dependencies/src/index.js +++ b/packages/jest-resolve-dependencies/src/index.js @@ -97,7 +97,7 @@ class DependencyResolver { } } const modules = []; - for (const file of this._hasteFS.getFileIterator()) { + for (const file of this._hasteFS.getAbsoluteFileIterator()) { modules.push({ dependencies: this.resolve(file, options), file,