From fe401db2169115c5a593938c8b25018dfa54a0ef Mon Sep 17 00:00:00 2001 From: Simon Vocella Date: Thu, 15 Jun 2017 11:29:41 +0200 Subject: [PATCH] update jest and flow --- .flowconfig | 2 +- __tests__/commands/install/integration.js | 16 +- __tests__/commands/upgrade.js | 120 ++--- __tests__/package-hoister.js | 53 +-- __tests__/util/env-replace.js | 10 +- __tests__/util/promise.js | 26 - ...s => jest_v20.x.x.with_custom_matchers.js} | 123 +++-- flow-typed/npm/semver_v5.1.x.js | 32 +- package.json | 4 +- src/cli/commands/_build-sub-commands.js | 2 +- src/cli/commands/add.js | 2 +- src/cli/commands/bin.js | 4 +- src/cli/commands/check.js | 2 +- src/cli/commands/clean.js | 4 +- src/cli/commands/create.js | 4 +- src/cli/commands/exec.js | 4 +- src/cli/commands/generate-lock-entry.js | 2 +- src/cli/commands/help.js | 4 +- src/cli/commands/import.js | 4 +- src/cli/commands/info.js | 4 +- src/cli/commands/init.js | 2 +- src/cli/commands/install.js | 4 +- src/cli/commands/link.js | 4 +- src/cli/commands/list.js | 2 +- src/cli/commands/login.js | 4 +- src/cli/commands/logout.js | 4 +- src/cli/commands/outdated.js | 2 +- src/cli/commands/pack.js | 2 +- src/cli/commands/publish.js | 2 +- src/cli/commands/remove.js | 4 +- src/cli/commands/run.js | 4 +- src/cli/commands/unlink.js | 4 +- src/cli/commands/upgrade-interactive.js | 2 +- src/cli/commands/upgrade.js | 2 +- src/cli/commands/version.js | 2 +- src/cli/commands/versions.js | 4 +- src/cli/commands/why.js | 4 +- src/cli/commands/workspace.js | 4 +- src/fetchers/tarball-fetcher.js | 1 - src/package-fetcher.js | 2 +- src/package-linker.js | 8 +- src/reporters/event-reporter.js | 1 - src/reporters/json-reporter.js | 2 +- src/resolvers/exotics/tarball-resolver.js | 3 +- src/util/fs.js | 6 +- src/util/git.js | 1 - src/util/promise.js | 14 +- yarn.lock | 445 +++++++++++------- 48 files changed, 508 insertions(+), 453 deletions(-) rename flow-typed/npm/{jest_v18.x.x.js => jest_v20.x.x.with_custom_matchers.js} (81%) diff --git a/.flowconfig b/.flowconfig index 3e05fd4a7a..6a4c6cebe8 100644 --- a/.flowconfig +++ b/.flowconfig @@ -16,4 +16,4 @@ suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe unsafe.enable_getters_and_setters=true [version] -^0.43.0 +^0.48.0 diff --git a/__tests__/commands/install/integration.js b/__tests__/commands/install/integration.js index e0d6b636f8..6d7fb208bc 100644 --- a/__tests__/commands/install/integration.js +++ b/__tests__/commands/install/integration.js @@ -471,8 +471,7 @@ test.concurrent('install should be idempotent', (): Promise => { async (config, reporter) => { expect(await getPackageVersion(config, 'dep-a')).toEqual('1.0.0'); }, - null, - false, + null ); return runInstall({}, 'install-should-be-idempotent', async (config, reporter) => { @@ -815,15 +814,10 @@ test.concurrent('prunes the offline mirror tarballs after pruning is enabled', ( test.concurrent('scoped packages remain in offline mirror after pruning is enabled', (): Promise => { return runInstall({}, 'prune-offline-mirror-scoped', async (config): Promise => { const mirrorPath = 'mirror-for-offline'; - // Ensure that scoped packages remain mangled and resolvable - expect(await fs.exists(path.join(config.cwd, `${mirrorPath}/@fakescope-fake-dependency-1.0.1.tgz`))).toEqual( - true, - 'scoped package exists', - ); - expect(await fs.exists(path.join(config.cwd, `${mirrorPath}/fake-dependency-1.0.1.tgz`))).toEqual( - true, - 'unscoped package exists', - ); + // scoped package exists + expect(await fs.exists(path.join(config.cwd, `${mirrorPath}/@fakescope-fake-dependency-1.0.1.tgz`))).toEqual(true); + // unscoped package exists + expect(await fs.exists(path.join(config.cwd, `${mirrorPath}/fake-dependency-1.0.1.tgz`))).toEqual(true); }); }); diff --git a/__tests__/commands/upgrade.js b/__tests__/commands/upgrade.js index 12f5aefbd8..79b6988d1e 100644 --- a/__tests__/commands/upgrade.js +++ b/__tests__/commands/upgrade.js @@ -174,25 +174,17 @@ test.concurrent('upgrades dependency packages not in registry', (): Promise lockfile.includes(` resolved "${gitRemote}#${sha}"`); - expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual( - true, - 'Lockfile should point to the same yarn-test-git-repo branch.', - ); - - expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual( - false, - 'Lockfile should update yarn-test-git-repo SHA.', - ); - - expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual( - true, - 'Lockfile should point to the same e2e-test-repo branch.', - ); - - expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual( - true, - 'Lockfile should keep latest e2e-test-repo SHA.', - ); + // Lockfile should point to the same yarn-test-git-repo branch + expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual(true); + + // Lockfile should update yarn-test-git-repo SHA + expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual(false); + + // Lockfile should point to the same e2e-test-repo branch + expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual(true); + + // Lockfile should keep latest e2e-test-repo SHA + expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual(true); }); }); @@ -204,25 +196,17 @@ test.concurrent('upgrades dev dependency packages not in registry', (): Promise< const lockFileIncludes = sha => lockfile.includes(` resolved "${gitRemote}#${sha}"`); - expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual( - true, - 'Lockfile should point to the same yarn-test-git-repo branch.', - ); - - expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual( - false, - 'Lockfile should update yarn-test-git-repo SHA.', - ); - - expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual( - true, - 'Lockfile should point to the same e2e-test-repo branch.', - ); - - expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual( - true, - 'Lockfile should keep latest e2e-test-repo SHA.', - ); + // Lockfile should point to the same yarn-test-git-repo branch + expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual(true); + + // Lockfile should update yarn-test-git-repo SHA + expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual(false); + + // Lockfile should point to the same e2e-test-repo branch + expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual(true); + + // Lockfile should keep latest e2e-test-repo SHA + expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual(true); }); }); @@ -234,25 +218,17 @@ test.concurrent('upgrades optional dependency packages not in registry', (): Pro const lockFileIncludes = sha => lockfile.includes(` resolved "${gitRemote}#${sha}"`); - expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual( - true, - 'Lockfile should point to the same yarn-test-git-repo branch.', - ); - - expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual( - false, - 'Lockfile should update yarn-test-git-repo SHA.', - ); - - expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual( - true, - 'Lockfile should point to the same e2e-test-repo branch.', - ); - - expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual( - true, - 'Lockfile should keep latest e2e-test-repo SHA.', - ); + // Lockfile should point to the same yarn-test-git-repo branch + expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual(true); + + // Lockfile should update yarn-test-git-repo SHA + expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual(false); + + // Lockfile should point to the same e2e-test-repo branch + expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual(true); + + // Lockfile should keep latest e2e-test-repo SHA + expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual(true); }); }); @@ -264,25 +240,17 @@ test.concurrent('upgrades peer dependency packages not in registry', (): Promise const lockFileIncludes = sha => lockfile.includes(` resolved "${gitRemote}#${sha}"`); - expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual( - true, - 'Lockfile should point to the same yarn-test-git-repo branch.', - ); - - expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual( - false, - 'Lockfile should update yarn-test-git-repo SHA.', - ); - - expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual( - true, - 'Lockfile should point to the same e2e-test-repo branch.', - ); - - expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual( - true, - 'Lockfile should keep latest e2e-test-repo SHA.', - ); + // Lockfile should point to the same yarn-test-git-repo branch + expect(lockfile.includes(`"yarn-test-git-repo@${gitRemote}#master":`)).toEqual(true); + + // Lockfile should update yarn-test-git-repo SHA + expect(lockFileIncludes('d2027157d0c7188fc9ed6a6654325d1e3bf4db40')).toEqual(false); + + // Lockfile should point to the same e2e-test-repo branch + expect(lockfile.includes(`"e2e-test-repo@${gitRemote}#greenkeeper/cross-env-3.1.4":`)).toEqual(true); + + // Lockfile should keep latest e2e-test-repo SHA + expect(lockFileIncludes('da5940e1ad2b7451c00edffb6e755bf2411fc705')).toEqual(true); }); }); diff --git a/__tests__/package-hoister.js b/__tests__/package-hoister.js index 39dbac0005..64cce2c15b 100644 --- a/__tests__/package-hoister.js +++ b/__tests__/package-hoister.js @@ -50,7 +50,7 @@ function createTestFixture(testModules: any = {}): any { packageResolver.addPattern(uid, packageManifest); }); - const packageHoister = new PackageHoister(config, packageResolver, false); + const packageHoister = new PackageHoister(config, packageResolver); const atPath = function(...installPaths): string { const rootPath = config.modulesFolder || path.join(config.cwd, 'node_modules'); @@ -70,35 +70,30 @@ function createTestFixture(testModules: any = {}): any { }; } -beforeEach(function() { - jasmine.addMatchers({ - toContainPackage(): any { - return { - compare(received, uid, expectedInstallPath): any { - let pass: boolean = false; - received.forEach(pkg => { - const [location: string, hoistManifest: HoistManifest] = pkg; - if (location === expectedInstallPath && hoistManifest.pkg._reference.uid === uid) { - pass = true; - } - }); - - if (pass) { - return { - pass: true, - message: () => `expected ${received} to not contain package UID ${uid} at path ${expectedInstallPath}`, - }; - } else { - return { - pass: false, - message: () => `expected ${received} to contain package UID ${uid} at path ${expectedInstallPath}`, - }; - } - }, - }; - }, +const toContainPackage = function(received: any, ...expected: any): JestMatcherResult { + const [uid, expectedInstallPath] = expected; + let pass: boolean = false; + received.forEach(pkg => { + const [location: string, hoistManifest: HoistManifest] = pkg; + if (location === expectedInstallPath && hoistManifest.pkg._reference.uid === uid) { + pass = true; + } }); -}); + + if (pass) { + return { + pass: true, + message: () => `expected ${received} to not contain package UID ${uid} at path ${expectedInstallPath}`, + }; + } else { + return { + pass: false, + message: () => `expected ${received} to contain package UID ${uid} at path ${expectedInstallPath}`, + }; + } +}; + +expect.extend({toContainPackage}); test('Produces valid destination paths for scoped modules', () => { const expected = path.join(CWD, 'node_modules', '@scoped', 'dep'); diff --git a/__tests__/util/env-replace.js b/__tests__/util/env-replace.js index f0478dc6ed..971aa49319 100644 --- a/__tests__/util/env-replace.js +++ b/__tests__/util/env-replace.js @@ -4,13 +4,13 @@ import envReplace from '../../src/util/env-replace'; describe('environment variable replacement', () => { it('will replace a token that exists in the environment', () => { let result = envReplace('test ${a} replacement', {a: 'token'}); - expect(result).toEqual('test token replacement', `result: ${result}`); + expect(result).toEqual('test token replacement'); result = envReplace('${a} replacement', {a: 'token'}); - expect(result).toEqual('token replacement', `result: ${result}`); + expect(result).toEqual('token replacement'); result = envReplace('${a}', {a: 'token'}); - expect(result).toEqual('token', `result: ${result}`); + expect(result).toEqual('token'); }); it('will not replace a token that does not exist in the environment', () => { @@ -19,13 +19,13 @@ describe('environment variable replacement', () => { envReplace('${a} replacement', {b: 'token'}); } catch (err) { thrown = true; - expect(err.message).toEqual('Failed to replace env in config: ${a}', `error message: ${err.message}`); + expect(err.message).toEqual('Failed to replace env in config: ${a}'); } expect(thrown).toEqual(true); }); it('will not replace a token when a the token-replacement mechanism is prefixed a backslash literal', () => { const result = envReplace('\\${a} replacement', {a: 'token'}); - expect(result).toEqual('\\${a} replacement', `result: ${result}`); + expect(result).toEqual('\\${a} replacement'); }); }); diff --git a/__tests__/util/promise.js b/__tests__/util/promise.js index 4c0f5953d5..0bcddb3037 100644 --- a/__tests__/util/promise.js +++ b/__tests__/util/promise.js @@ -32,32 +32,6 @@ test('promisify', async function(): Promise { expect(error && error.message).toEqual('yep'); }); -test('promisifyObject', async function(): Promise { - const obj = promise.promisifyObject({ - foo(callback) { - callback(null, 'foo'); - }, - - bar(data, callback) { - callback(null, data + 'bar'); - }, - - foobar(callback) { - callback(new Error('yep')); - }, - }); - - expect(await obj.foo()).toBe('foo'); - expect(await obj.bar('foo')).toBe('foobar'); - let error; - try { - await obj.foobar(); - } catch (e) { - error = e; - } - expect(error && error.message).toEqual('yep'); -}); - test('queue', async function(): Promise { let running = 0; diff --git a/flow-typed/npm/jest_v18.x.x.js b/flow-typed/npm/jest_v20.x.x.with_custom_matchers.js similarity index 81% rename from flow-typed/npm/jest_v18.x.x.js rename to flow-typed/npm/jest_v20.x.x.with_custom_matchers.js index 83a52324a2..39df68d536 100644 --- a/flow-typed/npm/jest_v18.x.x.js +++ b/flow-typed/npm/jest_v20.x.x.with_custom_matchers.js @@ -1,3 +1,6 @@ +// flow-typed signature: 4a17c39f87ff2e03571b7c8dd220d801 +// flow-typed version: fd46f49e63/jest_v20.x.x/flow_>=v0.33.x + type JestMockFn = { (...args: Array): any, /** @@ -14,7 +17,7 @@ type JestMockFn = { * An array that contains all the object instances that have been * instantiated from this mock function. */ - instances: mixed, + instances: mixed }, /** * Resets all information stored in the mockFn.mock.calls and @@ -27,6 +30,14 @@ type JestMockFn = { * completely restore a mock back to its initial state. */ mockReset(): Function, + /** + * Removes the mock and restores the initial implementation. This is useful + * when you want to mock functions in certain test cases and restore the + * original implementation in others. Beware that mockFn.mockRestore only + * works when mock was created with jest.spyOn. Thus you have to take care of + * restoration yourself when manually assigning jest.fn(). + */ + mockRestore(): Function, /** * Accepts a function that should be used as the implementation of the mock. * The mock itself will still record all calls that go into and instances @@ -51,15 +62,15 @@ type JestMockFn = { /** * Sugar for only returning a value once inside your mock */ - mockReturnValueOnce(value: any): JestMockFn, -} + mockReturnValueOnce(value: any): JestMockFn +}; type JestAsymmetricEqualityType = { /** * A custom Jasmine equality tester */ - asymmetricMatch(value: mixed): boolean, -} + asymmetricMatch(value: mixed): boolean +}; type JestCallsType = { allArgs(): mixed, @@ -68,23 +79,36 @@ type JestCallsType = { count(): number, first(): mixed, mostRecent(): mixed, - reset(): void, -} + reset(): void +}; type JestClockType = { install(): void, mockDate(date: Date): void, - tick(): void, - uninstall(): void, -} + tick(milliseconds?: number): void, + uninstall(): void +}; type JestMatcherResult = { - message?: string | ()=>string, - pass: boolean, -} + message?: string | (() => string), + pass: boolean +}; type JestMatcher = (actual: any, expected: any) => JestMatcherResult; +type JestPromiseType = { + /** + * Use rejects to unwrap the reason of a rejected promise so any other + * matcher can be chained. If the promise is fulfilled the assertion fails. + */ + rejects: JestExpectType, + /** + * Use resolves to unwrap the value of a fulfilled promise so any other + * matcher can be chained. If the promise is rejected the assertion fails. + */ + resolves: JestExpectType +}; + type JestExpectType = { not: JestExpectType, /** @@ -186,6 +210,11 @@ type JestExpectType = { * specific arguments. */ toHaveBeenCalledWith(...args: Array): void, + /** + * Use .toHaveBeenLastCalledWith to ensure that a mock function was last called + * with specific arguments. + */ + toHaveBeenLastCalledWith(...args: Array): void, /** * Check that an object has a .length property and it is set to a certain * numeric value. @@ -209,24 +238,26 @@ type JestExpectType = { toMatchSnapshot(name?: string): void, /** * Use .toThrow to test that a function throws when it is called. + * If you want to test that a specific error gets thrown, you can provide an + * argument to toThrow. The argument can be a string for the error message, + * a class for the error, or a regex that should match the error. + * + * Alias: .toThrowError */ - toThrow(message?: string | Error): void, - /** - * Use .toThrowError to test that a function throws a specific error when it - * is called. The argument can be a string for the error message, a class for - * the error, or a regex that should match the error. - */ + toThrow(message?: string | Error | RegExp): void, toThrowError(message?: string | Error | RegExp): void, /** * Use .toThrowErrorMatchingSnapshot to test that a function throws a error * matching the most recent snapshot when it is called. */ toThrowErrorMatchingSnapshot(): void, - /** - * Custom function; need to be backported when updating this file + + /* + * Custom matcher defined in yarn */ - toContainPackage(packageName: string, path: string): void; -} + + toContainPackage(uid: string, expectedInstallPath: string): void +}; type JestObjectType = { /** @@ -248,6 +279,11 @@ type JestObjectType = { * An un-hoisted version of enableAutomock */ autoMockOn(): JestObjectType, + /** + * Clears the mock.calls and mock.instances properties of all mocks. + * Equivalent to calling .mockClear() on every mocked function. + */ + clearAllMocks(): JestObjectType, /** * Resets the state of all mocks. Equivalent to calling .mockReset() on every * mocked function. @@ -290,7 +326,11 @@ type JestObjectType = { * The third argument can be used to create virtual mocks -- mocks of modules * that don't exist anywhere in the system. */ - mock(moduleName: string, moduleFactory?: any): JestObjectType, + mock( + moduleName: string, + moduleFactory?: any, + options?: Object + ): JestObjectType, /** * Resets the module registry - the cache of all required modules. This is * useful to isolate modules where local state might conflict between tests. @@ -343,11 +383,16 @@ type JestObjectType = { * Instructs Jest to use the real versions of the standard timer functions. */ useRealTimers(): JestObjectType, -} + /** + * Creates a mock function similar to jest.fn but also tracks calls to + * object[methodName]. + */ + spyOn(object: Object, methodName: string): JestMockFn +}; type JestSpyType = { - calls: JestCallsType, -} + calls: JestCallsType +}; /** Runs this function after every test inside this context */ declare function afterEach(fn: Function): void; @@ -389,7 +434,7 @@ declare var it: { * @param {string} Name of Test * @param {Function} Test */ - concurrent(name: string, fn?: Function): ?Promise, + concurrent(name: string, fn?: Function): ?Promise }; declare function fit(name: string, fn: Function): ?Promise; /** An individual test unit */ @@ -406,15 +451,20 @@ declare var xtest: typeof it; /** The expect function is used every time you want to test a value */ declare var expect: { /** The object that you want to make assertions against */ - (value: any): JestExpectType, + (value: any): JestExpectType & JestPromiseType, /** Add additional Jasmine matchers to Jest's roster */ - extend(matchers: {[name:string]: JestMatcher}): void, + extend(matchers: { [name: string]: JestMatcher }): void, + /** Add a module that formats application-specific data structures. */ + addSnapshotSerializer(serializer: (input: Object) => string): void, assertions(expectedAssertions: number): void, + hasAssertions(): void, any(value: mixed): JestAsymmetricEqualityType, anything(): void, arrayContaining(value: Array): void, objectContaining(value: Object): void, - stringMatching(value: string): void, + /** Matches any received string that contains the exact expected string. */ + stringContaining(value: string): void, + stringMatching(value: string | RegExp): void }; // TODO handle return type @@ -422,7 +472,7 @@ declare var expect: { declare function spyOn(value: mixed, method: string): Object; /** Holds all functions related to manipulating test runner */ -declare var jest: JestObjectType +declare var jest: JestObjectType; /** * The global Jamine object, this is generally not exposed as the public API, @@ -435,7 +485,10 @@ declare var jasmine: { arrayContaining(value: Array): void, clock(): JestClockType, createSpy(name: string): JestSpyType, + createSpyObj( + baseName: string, + methodNames: Array + ): { [methodName: string]: JestSpyType }, objectContaining(value: Object): void, - stringMatching(value: string): void, - addMatchers(matcher: Object): void, -} + stringMatching(value: string): void +}; diff --git a/flow-typed/npm/semver_v5.1.x.js b/flow-typed/npm/semver_v5.1.x.js index 1b0810165a..43a0f685c5 100644 --- a/flow-typed/npm/semver_v5.1.x.js +++ b/flow-typed/npm/semver_v5.1.x.js @@ -34,32 +34,34 @@ declare module 'semver' { prerelease: Array, build: Array, version: string, + + constructor(range: string, loose?: boolean): SemVer | string } // Functions - declare function clean(v: string): string | null; - declare function valid(v: string): string | null; - declare function inc(v: string, release: string): string | null; - declare function major(v: string): number; - declare function minor(v: string): number; - declare function patch(v: string): number; + declare function clean(v: string, loose?: boolean): string | null; + declare function valid(v: string, loose?: boolean): string | null; + declare function inc(v: string, release: string, loose?: boolean): string | null; + declare function major(v: string, loose?: boolean): number; + declare function minor(v: string, loose?: boolean): number; + declare function patch(v: string, loose?: boolean): number; // Comparison - declare function gt(v1: string, v2: string): boolean; - declare function gte(v1: string, v2: string): boolean; - declare function lt(v1: string, v2: string): boolean; - declare function lte(v1: string, v2: string): boolean; - declare function eq(v1: string, v2: string): boolean; - declare function neq(v1: string, v2: string): boolean; + declare function gt(v1: string, v2: string, loose?: boolean): boolean; + declare function gte(v1: string, v2: string, loose?: boolean): boolean; + declare function lt(v1: string, v2: string, loose?: boolean): boolean; + declare function lte(v1: string, v2: string, loose?: boolean): boolean; + declare function eq(v1: string, v2: string, loose?: boolean): boolean; + declare function neq(v1: string, v2: string, loose?: boolean): boolean; declare function cmp(v1: string, comparator: Comparator, v2: string): boolean; declare function compare(v1: string, v2: string): -1 | 0 | 1; declare function rcompare(v1: string, v2: string): -1 | 0 | 1; declare function diff(v1: string, v2: string): ?Release; // Ranges - declare function validRange(r: string): string | null; - declare function satisfies(version: string, range: string): boolean; - declare function maxSatisfying(versions: Array, range: string): string | null; + declare function validRange(r: string, loose?: boolean): string | null; + declare function satisfies(version: string, range: string, loose?: boolean): boolean; + declare function maxSatisfying(versions: Array, range: string, loose?: boolean): string | null; declare function gtr(version: string, range: string): boolean; declare function ltr(version: string, range: string): boolean; declare function outside(version: string, range: string, hilo: '>' | '<'): boolean; diff --git a/package.json b/package.json index 9d1e793fc5..795b5b71d1 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "eslint-plugin-flowtype": "^2.32.1", "eslint-plugin-react": "^6.7.1", "eslint-plugin-yarn-internal": "file:scripts/eslint-rules", - "flow-bin": "^0.43.0", + "flow-bin": "^0.48.0", "gulp": "^3.9.0", "gulp-babel": "^6.0.0", "gulp-if": "^2.0.1", @@ -68,7 +68,7 @@ "gulp-sourcemaps": "^2.2.0", "gulp-util": "^3.0.7", "gulp-watch": "^4.3.5", - "jest": "^19.0.2", + "jest": "^20.0.4", "mock-stdin": "^0.3.0", "prettier": "^1.3.1", "temp": "^0.8.3", diff --git a/src/cli/commands/_build-sub-commands.js b/src/cli/commands/_build-sub-commands.js index 70392f587d..247c920c1b 100644 --- a/src/cli/commands/_build-sub-commands.js +++ b/src/cli/commands/_build-sub-commands.js @@ -45,7 +45,7 @@ export default function(rootCommandName: string, subCommands: SubCommands, usage return Promise.reject(new MessageError(reporter.lang('invalidCommand', subCommandNames.join(', ')))); } - function hasWrapper(): boolean { + function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/add.js b/src/cli/commands/add.js index cff8131063..37f11766dd 100644 --- a/src/cli/commands/add.js +++ b/src/cli/commands/add.js @@ -173,7 +173,7 @@ export class Add extends Install { } } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object): boolean { return true; } diff --git a/src/cli/commands/bin.js b/src/cli/commands/bin.js index 71dd64e5ee..7ed3cadf31 100644 --- a/src/cli/commands/bin.js +++ b/src/cli/commands/bin.js @@ -6,11 +6,11 @@ import RegistryYarn from '../../resolvers/registries/yarn-resolver.js'; const path = require('path'); -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object): boolean { return false; } -export function setFlags() {} +export function setFlags(commander: Object) {} export function run(config: Config, reporter: Reporter, flags: Object, args: Array): Promise { const binFolder = path.join(config.cwd, config.registries[RegistryYarn.registry].folder, '.bin'); diff --git a/src/cli/commands/check.js b/src/cli/commands/check.js index 6d09d69c40..bd6eccd1f2 100644 --- a/src/cli/commands/check.js +++ b/src/cli/commands/check.js @@ -15,7 +15,7 @@ const path = require('path'); export const requireLockfile = false; export const noArguments = true; -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object): boolean { return true; } diff --git a/src/cli/commands/clean.js b/src/cli/commands/clean.js index 6ebe48bf1d..d823fb941f 100644 --- a/src/cli/commands/clean.js +++ b/src/cli/commands/clean.js @@ -126,8 +126,8 @@ export async function run(config: Config, reporter: Reporter, flags: Object, arg reporter.info(reporter.lang('cleanSavedSize', Number((removedSize / 1024 / 1024).toFixed(2)))); } -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object): boolean { return true; } diff --git a/src/cli/commands/create.js b/src/cli/commands/create.js index 0bd26aa7ff..a6e2f2c0d2 100644 --- a/src/cli/commands/create.js +++ b/src/cli/commands/create.js @@ -10,9 +10,9 @@ import * as child from '../../util/child.js'; import * as fs from '../../util/fs.js'; import {run as runGlobal} from './global.js'; -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/exec.js b/src/cli/commands/exec.js index e3703608ce..139de0f269 100644 --- a/src/cli/commands/exec.js +++ b/src/cli/commands/exec.js @@ -6,9 +6,9 @@ import type {Reporter} from '../../reporters/index.js'; import * as child from '../../util/child.js'; import {makeEnv} from '../../util/execute-lifecycle-script.js'; -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/generate-lock-entry.js b/src/cli/commands/generate-lock-entry.js index 4477b916f7..b8c9726d0a 100644 --- a/src/cli/commands/generate-lock-entry.js +++ b/src/cli/commands/generate-lock-entry.js @@ -6,7 +6,7 @@ import {MessageError} from '../../errors.js'; import {implodeEntry} from '../../lockfile/wrapper.js'; import stringify from '../../lockfile/stringify.js'; -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return false; } diff --git a/src/cli/commands/help.js b/src/cli/commands/help.js index be2fd0bb16..132334a53b 100644 --- a/src/cli/commands/help.js +++ b/src/cli/commands/help.js @@ -7,11 +7,11 @@ import type Config from '../../config.js'; import {sortAlpha, hyphenate} from '../../util/misc.js'; const chalk = require('chalk'); -export function hasWrapper(): boolean { +export function hasWrapper(flags: Object, args: Array): boolean { return false; } -export function setFlags() {} +export function setFlags(commander: Object) {} export function run(config: Config, reporter: Reporter, commander: Object, args: Array): Promise { if (args.length) { diff --git a/src/cli/commands/import.js b/src/cli/commands/import.js index 0904edefed..554a38d8af 100644 --- a/src/cli/commands/import.js +++ b/src/cli/commands/import.js @@ -294,9 +294,9 @@ export class Import extends Install { } } -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/info.js b/src/cli/commands/info.js index 68102098c8..b89bac054d 100644 --- a/src/cli/commands/info.js +++ b/src/cli/commands/info.js @@ -36,9 +36,9 @@ function clean(object: any): any { } } -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/init.js b/src/cli/commands/init.js index b60fc1af37..b78e42618f 100644 --- a/src/cli/commands/init.js +++ b/src/cli/commands/init.js @@ -15,7 +15,7 @@ export function setFlags(commander: Object) { commander.option('-y, --yes', 'use default options'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/install.js b/src/cli/commands/install.js index e61db5838b..e88a93a000 100644 --- a/src/cli/commands/install.js +++ b/src/cli/commands/install.js @@ -249,7 +249,7 @@ export class Install { } let pattern = name; - if (!this.lockfile.getLocked(pattern, true)) { + if (!this.lockfile.getLocked(pattern)) { // when we use --save we save the dependency to the lockfile with just the name rather than the // version combo pattern += '@' + depMap[name]; @@ -808,7 +808,7 @@ export class Install { maybeOutputUpdate: any; } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/link.js b/src/cli/commands/link.js index dc526a3591..1eb2537108 100644 --- a/src/cli/commands/link.js +++ b/src/cli/commands/link.js @@ -22,11 +22,11 @@ export async function getRegistryFolder(config: Config, name: string): Promise): boolean { return true; } -export function setFlags() {} +export function setFlags(commander: Object) {} export async function run(config: Config, reporter: Reporter, flags: Object, args: Array): Promise { if (args.length) { diff --git a/src/cli/commands/list.js b/src/cli/commands/list.js index da224b996b..a5f2be2807 100644 --- a/src/cli/commands/list.js +++ b/src/cli/commands/list.js @@ -147,7 +147,7 @@ export function getParent(key: string, treesByKey: Object): Object { return treesByKey[parentKey]; } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/login.js b/src/cli/commands/login.js index 134bb4e688..f2523977e4 100644 --- a/src/cli/commands/login.js +++ b/src/cli/commands/login.js @@ -106,11 +106,11 @@ export async function getToken(config: Config, reporter: Reporter, name: string } } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } -export function setFlags() {} +export function setFlags(commander: Object) {} export async function run(config: Config, reporter: Reporter, flags: Object, args: Array): Promise { await getCredentials(config, reporter); diff --git a/src/cli/commands/logout.js b/src/cli/commands/logout.js index 90b4b5e3e6..beb29f38a3 100644 --- a/src/cli/commands/logout.js +++ b/src/cli/commands/logout.js @@ -3,9 +3,9 @@ import type {Reporter} from '../../reporters/index.js'; import type Config from '../../config.js'; -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/outdated.js b/src/cli/commands/outdated.js index 597b114d53..b38f51b97f 100644 --- a/src/cli/commands/outdated.js +++ b/src/cli/commands/outdated.js @@ -12,7 +12,7 @@ export function setFlags(commander: Object) { commander.usage('outdated [packages ...]'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/pack.js b/src/cli/commands/pack.js index c7ef97a8b4..a81a43392d 100644 --- a/src/cli/commands/pack.js +++ b/src/cli/commands/pack.js @@ -140,7 +140,7 @@ export function setFlags(commander: Object) { commander.option('-f, --filename ', 'filename'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/publish.js b/src/cli/commands/publish.js index 7a848f126f..e32fe66644 100644 --- a/src/cli/commands/publish.js +++ b/src/cli/commands/publish.js @@ -23,7 +23,7 @@ export function setFlags(commander: Object) { commander.option('--tag [tag]', 'tag'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/remove.js b/src/cli/commands/remove.js index 2289d331ca..d048d82ada 100644 --- a/src/cli/commands/remove.js +++ b/src/cli/commands/remove.js @@ -14,9 +14,9 @@ const path = require('path'); export const requireLockfile = true; -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/run.js b/src/cli/commands/run.js index 27fdc1c185..cac30c43a0 100644 --- a/src/cli/commands/run.js +++ b/src/cli/commands/run.js @@ -22,9 +22,9 @@ function sanitizedArgs(args: Array): Array { return newArgs; } -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/unlink.js b/src/cli/commands/unlink.js index e53d5e508b..b772cc0462 100644 --- a/src/cli/commands/unlink.js +++ b/src/cli/commands/unlink.js @@ -9,9 +9,9 @@ import {getBinFolder as getGlobalBinFolder} from './global'; const path = require('path'); -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/upgrade-interactive.js b/src/cli/commands/upgrade-interactive.js index 0394787ed3..87a66830b7 100644 --- a/src/cli/commands/upgrade-interactive.js +++ b/src/cli/commands/upgrade-interactive.js @@ -17,7 +17,7 @@ export function setFlags(commander: Object) { commander.option('-T, --tilde', 'install most recent release with the same minor version'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/upgrade.js b/src/cli/commands/upgrade.js index 2e8f9c86c9..78bf1993cf 100644 --- a/src/cli/commands/upgrade.js +++ b/src/cli/commands/upgrade.js @@ -14,7 +14,7 @@ export function setFlags(commander: Object) { commander.option('--latest', 'upgrade packages to the latest version, ignoring version ranges in package.json'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/version.js b/src/cli/commands/version.js index 0efc605035..05fe984e46 100644 --- a/src/cli/commands/version.js +++ b/src/cli/commands/version.js @@ -24,7 +24,7 @@ export function setFlags(commander: Object) { commander.option('--no-git-tag-version', 'no git tag version'); } -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/versions.js b/src/cli/commands/versions.js index b6745b6dc8..a38a0831ae 100644 --- a/src/cli/commands/versions.js +++ b/src/cli/commands/versions.js @@ -5,9 +5,9 @@ import type Config from '../../config.js'; import {version as yarnVersion} from '../../util/yarn-version.js'; -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/why.js b/src/cli/commands/why.js index f086a3023b..8234348a48 100644 --- a/src/cli/commands/why.js +++ b/src/cli/commands/why.js @@ -108,9 +108,9 @@ function getSharedDependencies(hoistManifests: HoistManifestTuples, transitiveKe return sharedDependencies; } -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/cli/commands/workspace.js b/src/cli/commands/workspace.js index 38bd175891..dacab9b112 100644 --- a/src/cli/commands/workspace.js +++ b/src/cli/commands/workspace.js @@ -7,9 +7,9 @@ import * as child from '../../util/child.js'; const invariant = require('invariant'); -export function setFlags() {} +export function setFlags(commander: Object) {} -export function hasWrapper(): boolean { +export function hasWrapper(commander: Object, args: Array): boolean { return true; } diff --git a/src/fetchers/tarball-fetcher.js b/src/fetchers/tarball-fetcher.js index 572ae5e558..51d53029b5 100644 --- a/src/fetchers/tarball-fetcher.js +++ b/src/fetchers/tarball-fetcher.js @@ -150,7 +150,6 @@ export default class TarballFetcher extends BaseFetcher { const handleRequestError = res => { if (res.statusCode >= 400) { - // $FlowFixMe const statusDescription = http.STATUS_CODES[res.statusCode]; reject(new Error(reporter.lang('requestFailed', `${res.statusCode} ${statusDescription}`))); } diff --git a/src/package-fetcher.js b/src/package-fetcher.js index dd7403ee27..7e252670eb 100644 --- a/src/package-fetcher.js +++ b/src/package-fetcher.js @@ -111,7 +111,7 @@ export function fetch(pkgs: Array, config: Config): Promise { const binLoc = path.join(dest, this.config.getFolder(pkg)); await this.linkBinDependencies(pkg, binLoc); - tickBin(dest); + tickBin(); }, linkBinConcurrency, ); @@ -328,7 +328,7 @@ export default class PackageLinker { if (pkg.bin && Object.keys(pkg.bin).length) { const binLoc = path.join(this.config.cwd, this.config.getFolder(pkg)); await this.linkSelfDependencies(pkg, dest, binLoc); - tickBin(this.config.cwd); + tickBin(); } }, linkBinConcurrency, diff --git a/src/reporters/event-reporter.js b/src/reporters/event-reporter.js index c683108436..1d7c6f15ee 100644 --- a/src/reporters/event-reporter.js +++ b/src/reporters/event-reporter.js @@ -19,5 +19,4 @@ export default class EventReporter extends JSONReporter { } } -// $FlowFixMe: need to "inherit" from it Object.assign(EventReporter.prototype, EventEmitter.prototype); diff --git a/src/reporters/json-reporter.js b/src/reporters/json-reporter.js index be730f3bb9..df44f7f994 100644 --- a/src/reporters/json-reporter.js +++ b/src/reporters/json-reporter.js @@ -42,7 +42,7 @@ export default class JSONReporter extends BaseReporter { this._dump('inspect', value); } - footer() { + footer(showPeakMemory: boolean) { this._dump('finished', this.getTotalTime()); } diff --git a/src/resolvers/exotics/tarball-resolver.js b/src/resolvers/exotics/tarball-resolver.js index fcf0fc323e..40a6adaad6 100644 --- a/src/resolvers/exotics/tarball-resolver.js +++ b/src/resolvers/exotics/tarball-resolver.js @@ -73,8 +73,7 @@ export default class TarballResolver extends ExoticResolver { registry, hash, }, - this.config, - false, + this.config ); // fetch file and get it's hash diff --git a/src/util/fs.js b/src/util/fs.js index af3a0f15cc..9adfe91261 100644 --- a/src/util/fs.js +++ b/src/util/fs.js @@ -14,7 +14,7 @@ const path = require('path'); export const lockQueue = new BlockingQueue('fs lock'); export const readFileBuffer = promisify(fs.readFile); -export const writeFile: (path: string, data: string) => Promise = promisify(fs.writeFile); +export const writeFile: (path: string, data: string, options?: Object) => Promise = promisify(fs.writeFile); export const readlink: (path: string, opts: void) => Promise = promisify(fs.readlink); export const realpath: (path: string, opts: void) => Promise = promisify(fs.realpath); export const readdir: (path: string, opts: void) => Promise> = promisify(fs.readdir); @@ -26,8 +26,8 @@ export const mkdirp: (path: string) => Promise = promisify(require('mkdirp export const exists: (path: string) => Promise = promisify(fs.exists, true); export const lstat: (path: string) => Promise = promisify(fs.lstat); export const chmod: (path: string, mode: number | string) => Promise = promisify(fs.chmod); -export const link: (path: string) => Promise = promisify(fs.link); -export const glob: (path: string) => Promise> = promisify(globModule); +export const link: (src: string, dst: string) => Promise = promisify(fs.link); +export const glob: (path: string, options?: Object) => Promise> = promisify(globModule); const CONCURRENT_QUEUE_ITEMS = 4; diff --git a/src/util/git.js b/src/util/git.js index a9c57ee298..b73f590041 100644 --- a/src/util/git.js +++ b/src/util/git.js @@ -335,7 +335,6 @@ export default class Git { fileContent += decoder.write(buffer); }); stream.on('end', () => { - // $FlowFixMe: suppressing this error due to bug https://github.com/facebook/flow/pull/3483 const remaining: string = decoder.end(); update(fileContent + remaining); next(); diff --git a/src/util/promise.js b/src/util/promise.js index ec7676ffc8..bb80f65c67 100644 --- a/src/util/promise.js +++ b/src/util/promise.js @@ -6,7 +6,7 @@ export function wait(delay: number): Promise { }); } -export function promisify(fn: Function, firstData?: boolean): () => Promise { +export function promisify(fn: Function, firstData?: boolean): (...args: Array) => Promise { return function(...args): Promise { return new Promise(function(resolve, reject) { args.push(function(err, ...result) { @@ -33,18 +33,6 @@ export function promisify(fn: Function, firstData?: boolean): () => Promise }; } -export function promisifyObject(obj: { - [key: string]: Function, -}): { - [key: string]: () => Promise, -} { - const promisedObj = {}; - for (const key in obj) { - promisedObj[key] = promisify(obj[key]); - } - return promisedObj; -} - export function queue( arr: Array, promiseProducer: (result: U) => Promise, diff --git a/yarn.lock b/yarn.lock index 99e06fc49f..296fb255ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -84,7 +84,7 @@ ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-regex@^2.0.0: +ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -402,6 +402,14 @@ babel-jest@^19.0.0: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^19.0.0" +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + babel-loader@^6.2.5: version "6.4.1" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-6.4.1.tgz#0b34112d5b0748a8dcdbf51acf6f9bd42d50b8ca" @@ -429,6 +437,10 @@ babel-plugin-jest-hoist@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + babel-plugin-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" @@ -683,6 +695,12 @@ babel-preset-jest@^19.0.0: dependencies: babel-plugin-jest-hoist "^19.0.0" +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + babel-preset-node5@^10.2.0: version "10.9.0" resolved "https://registry.yarnpkg.com/babel-preset-node5/-/babel-preset-node5-10.9.0.tgz#1614a4a14dec98e35bb5c69d4cf26f78dff847fa" @@ -1155,7 +1173,7 @@ content-type-parser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" -convert-source-map@1.X, convert-source-map@^1.1.0: +convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1359,7 +1377,7 @@ detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@^3.0.0: +diff@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -1884,9 +1902,9 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.43.0: - version "0.43.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.43.1.tgz#0733958b448fb8ad4b1576add7e87c31794c81bc" +flow-bin@^0.48.0: + version "0.48.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.48.0.tgz#72d075143524358db8901525e3c784dc13a7c7ee" flow-parser@0.45.0: version "0.45.0" @@ -2128,7 +2146,7 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -graceful-fs@4.X, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2519,7 +2537,7 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.0.10, is-ci@^1.0.9: +is-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: @@ -2696,33 +2714,37 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.0-alpha.1: - version "1.1.8" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" +istanbul-api@^1.1.1: + version "1.1.9" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.1.0" - istanbul-lib-hook "^1.0.6" - istanbul-lib-instrument "^1.7.1" - istanbul-lib-report "^1.1.0" - istanbul-lib-source-maps "^1.2.0" - istanbul-reports "^1.1.0" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.0.7" + istanbul-lib-instrument "^1.7.2" + istanbul-lib-report "^1.1.1" + istanbul-lib-source-maps "^1.2.1" + istanbul-reports "^1.1.1" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.0: +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" -istanbul-lib-hook@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.7.1: +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" dependencies: @@ -2734,127 +2756,149 @@ istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.7.1: istanbul-lib-coverage "^1.1.0" semver "^5.3.0" -istanbul-lib-report@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" +istanbul-lib-instrument@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" dependencies: - istanbul-lib-coverage "^1.1.0" + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.13.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" + dependencies: + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" dependencies: debug "^2.6.3" - istanbul-lib-coverage "^1.1.0" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" +istanbul-reports@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" dependencies: handlebars "^4.0.3" -jest-changed-files@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" +jest-changed-files@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" -jest-cli@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" +jest-cli@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" dependencies: ansi-escapes "^1.4.0" callsites "^2.0.0" - chalk "^1.1.1" - graceful-fs "^4.1.6" - is-ci "^1.0.9" - istanbul-api "^1.1.0-alpha.1" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-instrument "^1.1.1" - jest-changed-files "^19.0.2" - jest-config "^19.0.2" - jest-environment-jsdom "^19.0.2" - jest-haste-map "^19.0.0" - jest-jasmine2 "^19.0.2" - jest-message-util "^19.0.0" - jest-regex-util "^19.0.0" - jest-resolve-dependencies "^19.0.0" - jest-runtime "^19.0.2" - jest-snapshot "^19.0.2" - jest-util "^19.0.2" + chalk "^1.1.3" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^20.0.3" + jest-config "^20.0.4" + jest-docblock "^20.0.3" + jest-environment-jsdom "^20.0.3" + jest-haste-map "^20.0.4" + jest-jasmine2 "^20.0.4" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve-dependencies "^20.0.3" + jest-runtime "^20.0.4" + jest-snapshot "^20.0.3" + jest-util "^20.0.3" micromatch "^2.3.11" - node-notifier "^5.0.1" + node-notifier "^5.0.2" + pify "^2.3.0" slash "^1.0.0" string-length "^1.0.1" throat "^3.0.0" - which "^1.1.1" + which "^1.2.12" worker-farm "^1.3.1" - yargs "^6.3.0" + yargs "^7.0.2" -jest-config@^19.0.2: - version "19.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd" +jest-config@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" dependencies: - chalk "^1.1.1" - jest-environment-jsdom "^19.0.2" - jest-environment-node "^19.0.2" - jest-jasmine2 "^19.0.2" - jest-regex-util "^19.0.0" - jest-resolve "^19.0.2" - jest-validate "^19.0.2" - pretty-format "^19.0.0" - -jest-diff@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" + chalk "^1.1.3" + glob "^7.1.1" + jest-environment-jsdom "^20.0.3" + jest-environment-node "^20.0.3" + jest-jasmine2 "^20.0.4" + jest-matcher-utils "^20.0.3" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-validate "^20.0.3" + pretty-format "^20.0.3" + +jest-diff@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" dependencies: chalk "^1.1.3" - diff "^3.0.0" - jest-matcher-utils "^19.0.0" - pretty-format "^19.0.0" + diff "^3.2.0" + jest-matcher-utils "^20.0.3" + pretty-format "^20.0.3" -jest-environment-jsdom@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" - dependencies: - jest-mock "^19.0.0" - jest-util "^19.0.2" - jsdom "^9.11.0" +jest-docblock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" -jest-environment-node@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" +jest-environment-jsdom@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" dependencies: - jest-mock "^19.0.0" - jest-util "^19.0.2" + jest-mock "^20.0.3" + jest-util "^20.0.3" + jsdom "^9.12.0" -jest-file-exists@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" +jest-environment-node@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" + dependencies: + jest-mock "^20.0.3" + jest-util "^20.0.3" -jest-haste-map@^19.0.0: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07" +jest-haste-map@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" dependencies: fb-watchman "^2.0.0" - graceful-fs "^4.1.6" + graceful-fs "^4.1.11" + jest-docblock "^20.0.3" micromatch "^2.3.11" - sane "~1.5.0" + sane "~1.6.0" worker-farm "^1.3.1" -jest-jasmine2@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" +jest-jasmine2@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" dependencies: - graceful-fs "^4.1.6" - jest-matcher-utils "^19.0.0" - jest-matchers "^19.0.0" - jest-message-util "^19.0.0" - jest-snapshot "^19.0.2" + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-matchers "^20.0.3" + jest-message-util "^20.0.3" + jest-snapshot "^20.0.3" + once "^1.4.0" + p-map "^1.1.1" jest-matcher-utils@^19.0.0: version "19.0.0" @@ -2863,87 +2907,93 @@ jest-matcher-utils@^19.0.0: chalk "^1.1.3" pretty-format "^19.0.0" -jest-matchers@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" +jest-matcher-utils@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" dependencies: - jest-diff "^19.0.0" - jest-matcher-utils "^19.0.0" - jest-message-util "^19.0.0" - jest-regex-util "^19.0.0" + chalk "^1.1.3" + pretty-format "^20.0.3" -jest-message-util@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" +jest-matchers@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" dependencies: - chalk "^1.1.1" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-message-util "^20.0.3" + jest-regex-util "^20.0.3" + +jest-message-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" + dependencies: + chalk "^1.1.3" micromatch "^2.3.11" + slash "^1.0.0" -jest-mock@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" +jest-mock@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" -jest-regex-util@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" +jest-regex-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" -jest-resolve-dependencies@^19.0.0: - version "19.0.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" +jest-resolve-dependencies@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" dependencies: - jest-file-exists "^19.0.0" + jest-regex-util "^20.0.3" -jest-resolve@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" +jest-resolve@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" dependencies: browser-resolve "^1.11.2" - jest-haste-map "^19.0.0" - resolve "^1.2.0" + is-builtin-module "^1.0.0" + resolve "^1.3.2" -jest-runtime@^19.0.2: - version "19.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" +jest-runtime@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" dependencies: babel-core "^6.0.0" - babel-jest "^19.0.0" + babel-jest "^20.0.3" babel-plugin-istanbul "^4.0.0" chalk "^1.1.3" - graceful-fs "^4.1.6" - jest-config "^19.0.2" - jest-file-exists "^19.0.0" - jest-haste-map "^19.0.0" - jest-regex-util "^19.0.0" - jest-resolve "^19.0.2" - jest-util "^19.0.2" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^20.0.4" + jest-haste-map "^20.0.4" + jest-regex-util "^20.0.3" + jest-resolve "^20.0.4" + jest-util "^20.0.3" json-stable-stringify "^1.0.1" micromatch "^2.3.11" strip-bom "3.0.0" - yargs "^6.3.0" + yargs "^7.0.2" -jest-snapshot@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" +jest-snapshot@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" dependencies: chalk "^1.1.3" - jest-diff "^19.0.0" - jest-file-exists "^19.0.0" - jest-matcher-utils "^19.0.0" - jest-util "^19.0.2" + jest-diff "^20.0.3" + jest-matcher-utils "^20.0.3" + jest-util "^20.0.3" natural-compare "^1.4.0" - pretty-format "^19.0.0" + pretty-format "^20.0.3" -jest-util@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" +jest-util@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" dependencies: - chalk "^1.1.1" - graceful-fs "^4.1.6" - jest-file-exists "^19.0.0" - jest-message-util "^19.0.0" - jest-mock "^19.0.0" - jest-validate "^19.0.2" - leven "^2.0.0" + chalk "^1.1.3" + graceful-fs "^4.1.11" + jest-message-util "^20.0.3" + jest-mock "^20.0.3" + jest-validate "^20.0.3" + leven "^2.1.0" mkdirp "^0.5.1" jest-validate@19.0.0: @@ -2955,20 +3005,20 @@ jest-validate@19.0.0: leven "^2.0.0" pretty-format "^19.0.0" -jest-validate@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" +jest-validate@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" dependencies: - chalk "^1.1.1" - jest-matcher-utils "^19.0.0" - leven "^2.0.0" - pretty-format "^19.0.0" + chalk "^1.1.3" + jest-matcher-utils "^20.0.3" + leven "^2.1.0" + pretty-format "^20.0.3" -jest@^19.0.2: - version "19.0.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" +jest@^20.0.4: + version "20.0.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" dependencies: - jest-cli "^19.0.2" + jest-cli "^20.0.4" jodid25519@^1.0.0: version "1.0.2" @@ -2991,7 +3041,7 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@^9.11.0: +jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" dependencies: @@ -3086,7 +3136,7 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -leven@^2.0.0: +leven@^2.0.0, leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -3464,7 +3514,7 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-notifier@^5.0.1: +node-notifier@^5.0.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: @@ -3652,6 +3702,10 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" +p-map@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -3819,6 +3873,13 @@ pretty-format@^19.0.0: dependencies: ansi-styles "^3.0.0" +pretty-format@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" + dependencies: + ansi-regex "^2.1.1" + ansi-styles "^3.0.0" + pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" @@ -4109,7 +4170,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -4180,9 +4241,9 @@ safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" -sane@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" +sane@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" @@ -4858,7 +4919,7 @@ which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" -which@^1.1.1, which@^1.2.12: +which@^1.2.12: version "1.2.14" resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" dependencies: @@ -4924,6 +4985,12 @@ yargs-parser@^4.2.0: dependencies: camelcase "^3.0.0" +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + yargs@^6.0.0, yargs@^6.3.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" @@ -4942,6 +5009,24 @@ yargs@^6.0.0, yargs@^6.3.0: y18n "^3.2.1" yargs-parser "^4.2.0" +yargs@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"