diff --git a/package.json b/package.json index 0757034..35f5f3a 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,19 @@ "version": "0.0.1", "author": "Jeff Dickey @jdxcode", "bugs": "https://github.com/jdxcode/fancy-mocha/issues", - "dependencies": {}, + "dependencies": { + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "lodash": "^4.17.4", + "stdout-stderr": "^0.1.4" + }, "devDependencies": { "@dxcli/dev-semantic-release": "^0.1.0", - "@dxcli/dev-test": "^0.7.0", "@dxcli/dev-tslint": "^0.0.15", + "@types/chai": "^4.1.1", + "@types/chai-as-promised": "^7.1.0", + "@types/lodash": "^4.14.93", + "@types/mocha": "^2.2.46", "@types/node": "^9.3.0", "eslint": "^4.16.0", "eslint-config-dxcli": "^1.1.4", diff --git a/src/chai.ts b/src/chai.ts new file mode 100644 index 0000000..66e2f21 --- /dev/null +++ b/src/chai.ts @@ -0,0 +1,5 @@ +import * as chai from 'chai' +import * as chaiAsPromised from 'chai-as-promised' +chai.use(chaiAsPromised) + +export const {expect} = chai diff --git a/src/env.ts b/src/env.ts new file mode 100644 index 0000000..760107d --- /dev/null +++ b/src/env.ts @@ -0,0 +1,10 @@ +const original = process.env + +export default (env: {[k: string]: string}) => ({ + before() { + process.env = {...env} + }, + after() { + process.env = original + } +}) diff --git a/src/index.ts b/src/index.ts index 7e3ceb7..1a8d361 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,5 @@ -export const add = (a: number, b: number) => a + b +export * from './chai' + +import test from './test' +export {test} +export default test diff --git a/src/mock.ts b/src/mock.ts new file mode 100644 index 0000000..19587e7 --- /dev/null +++ b/src/mock.ts @@ -0,0 +1,17 @@ +import * as _ from 'lodash' + +/** + * mocks an object's property + */ +export default (object: any, path: string, value: any) => { + let original = _.get(object, path) + return { + before() { + original = _.get(object, path) + _.set(object, path, value) + }, + finally() { + _.set(object, path, original) + } + } +} diff --git a/src/stdmock.ts b/src/stdmock.ts new file mode 100644 index 0000000..420ea5b --- /dev/null +++ b/src/stdmock.ts @@ -0,0 +1,19 @@ +import * as mock from 'stdout-stderr' + +const create = (std: T) => () => { + const _finally = () => mock[std].stop() + return { + before() { + mock[std].start() + return { + get [std]() { return mock[std].output } + } as {[P in T]: string} + }, + after: _finally, + catch: _finally, + finally: _finally, + } +} + +export const stdout = create('stdout') +export const stderr = create('stderr') diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..115b6b1 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,210 @@ +import * as mocha from 'mocha' + +import env from './env' +import mock from './mock' +import {stderr, stdout} from './stdmock' + +export type Extension = (a1: A1, a2: A2, a3: A3, a4: A4) => Filters +export interface Filters { + before?(input: any): Promise | C | void + after?(context: C): Promise | any + catch?(context: C, err: Error): Promise | any + finally?(context: C): Promise | any +} + +export type MochaDone = (error?: any) => any + +// export type TestCallback = (this: T, context: C & {done: MochaDone}) => TR +export type TestCallback = (this: T, context: C) => TR +export type ItCallback = TestCallback | any> +export type DescribeCallback = TestCallback + +export type Extensions = [{[k: string]: object}, {[k: string]: [object, any]}] + +export interface It { + (expectation: string, cb: ItCallback): mocha.ITest + only(expectation: string, cb: ItCallback): mocha.ITest + skip(expectation: string, cb: ItCallback): void +} + +export interface Describe { + (expectation: string, cb: DescribeCallback): mocha.ISuite + only(expectation: string, cb: DescribeCallback): mocha.ISuite + skip(expectation: string, cb: (this: mocha.ISuiteCallbackContext) => void): void +} + +export interface TestBase { + /** + * wrapper for mocha's describe() + */ + describe: Describe + /** + * wrapper for mocha's it() + */ + it: It + /** + * currently loaded filters + */ + filters: Filters[] + /** + * add your own filters + * + * @example + * import test from 'fancy-mocha' + * + * // this will run before each command and add {foo: 100} to the context object in the callback + * test.extend(myopts => { + * return { + * before(): { + * console.log('do something with myopts') + * return {foo: 100} + * } + * } + * }) + */ + extend(key: K, filter: Extension): Test, C> + extend(key: K, filter: Extension): Test, C> + extend(key: K, filter: Extension): Test, C> + extend(key: K, filter: Extension): Test, C> + extend(key: K, filter: Extension): Test, C> +} +export type Test = TestBase & + {[P in keyof E[0]]: FilterFn0} & + {[P in keyof E[1]]: FilterFn1} & + {[P in keyof E[1]]: FilterFn2} & + {[P in keyof E[1]]: FilterFn3} & + {[P in keyof E[1]]: FilterFn4} + +export type AddExtension0 = [E[0] & {[P in K]: O}, E[1]] +export type AddExtension1 = [E[0], E[1] & {[P in K]: [O, A1]}] +export type AddExtension2 = [E[0], E[1] & {[P in K]: [O, A1, A2]}] +export type AddExtension3 = [E[0], E[1] & {[P in K]: [O, A1, A2, A3]}] +export type AddExtension4 = [E[0], E[1] & {[P in K]: [O, A1, A2, A3, A4]}] +export type FilterFn0 = () => Test +export type FilterFn1 = (a1?: A1) => Test +export type FilterFn2 = (a1?: A1, a2?: A2) => Test +export type FilterFn3 = (a1?: A1, a2?: A2, a3?: A3) => Test +export type FilterFn4 = (a1?: A1, a2?: A2, a3?: A3, a4?: A4) => Test + +// This is an assign function that copies full descriptors +function completeAssign(target: any, ...sources: any[]) { + if (!target) target = sources.find(f => !!f) + sources.forEach(source => { + if (!source) return + let descriptors: any = Object.keys(source).reduce((descriptors: any, key) => { + descriptors[key] = Object.getOwnPropertyDescriptor(source, key) + return descriptors + }, {}) + // by default, Object.assign copies enumerable Symbols too + Object.getOwnPropertySymbols(source).forEach(sym => { + let descriptor: any = Object.getOwnPropertyDescriptor(source, sym) + if (descriptor.enumerable) { + descriptors[sym] = descriptor + } + }) + Object.defineProperties(target, descriptors) + }) + return target +} + +const test = (previous?: Test): TestBase => { + const filters: Filters[] = previous ? previous.filters : [] + const before = async () => { + let context = {} + for (let f of filters) { + if (f.before) { + context = completeAssign(context, await f.before(context)) + } + } + return context + } + const _catch = async (err: Error, context?: object) => { + for (let f of filters) { + if (f.catch) await f.catch(context, err) + } + } + const _finally = async (context?: object) => { + for (let f of filters) { + if (f.finally) await f.finally(context) + } + } + const after = async (context?: object) => { + for (let f of filters) { + if (f.after) await f.after(context) + } + } + + const __it = (cb?: ItCallback) => async function (this: mocha.ITestCallbackContext) { + let error + try { + const context = await before() + if (cb) await cb.call(this, context) + await after(context) + } catch (err) { + error = err + await _catch(err) + } finally { + await _finally() + } + if (error) throw error + } + const _it = Object.assign((expectation: string, cb?: ItCallback): Mocha.ITest => { + return it(expectation, __it(cb)) + }, { + only(expectation: string, cb?: ItCallback): Mocha.ITest { + return it.only(expectation, __it(cb)) + }, + skip(expectation: string, cb?: ItCallback): void { + return it.skip(expectation, cb) + }, + }) + + const __describe = (cb?: ItCallback) => async function (this: mocha.ITestCallbackContext) { + let error + beforeEach(before) + afterEach(after) + try { + if (cb) await cb.call(this) + } catch (err) { + error = err + await _catch(err) + } finally { + await _finally() + } + if (error) throw error + } + const _describe = Object.assign((expectation: string, cb: DescribeCallback): Mocha.ISuite => { + return describe(expectation, __describe(cb)) + }, { + only(expectation: string, cb: DescribeCallback): Mocha.ISuite { + return describe.only(expectation, __describe(cb)) + }, + skip(expectation: string, cb: (this: mocha.ISuiteCallbackContext) => void): void { + return describe.skip(expectation, cb) + }, + }) + + return { + ...previous, + it: _it, + describe: _describe, + filters, + extend(this: any, key: string, extension: Extension) { + return test({ + ...this, + [key](...opts: any[]) { + return test({ + ...this, + filters: this.filters.concat([(extension as any)(...opts)]), + } as any) + } + }) + }, + } as any +} + +export default test() +.extend('env', env) +.extend('mock', mock) +.extend('stdout', stdout) +.extend('stderr', stderr) diff --git a/test/env.test.ts b/test/env.test.ts new file mode 100644 index 0000000..4a77cb9 --- /dev/null +++ b/test/env.test.ts @@ -0,0 +1,13 @@ +// tslint:disable no-console + +import {expect, test} from '../src' + +describe('stdout', () => { + test + .env({foo: 'BARBAZ'}) + .stdout() + .it('logs', output => { + console.log(process.env.foo) + expect(output.stdout).to.equal('BARBAZ\n') + }) +}) diff --git a/test/helpers/init.js b/test/helpers/init.js deleted file mode 100644 index 5916541..0000000 --- a/test/helpers/init.js +++ /dev/null @@ -1 +0,0 @@ -process.env.TS_NODE_PROJECT = 'test' diff --git a/test/integration/index.test.ts b/test/integration/index.test.ts deleted file mode 100644 index cceb12c..0000000 --- a/test/integration/index.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {describe, expect, it} from '@dxcli/dev-test' - -import {add} from '../../src' - -describe('add', () => { - it('1+2=3', () => { - expect(add(1, 2)).to.equal(3) - }) -}) diff --git a/test/mocha.opts b/test/mocha.opts index ccc7f34..4ae8860 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,4 +1,3 @@ ---require test/helpers/init.js --require ts-node/register --require source-map-support/register --watch-extensions ts diff --git a/test/mock.test.ts b/test/mock.test.ts new file mode 100644 index 0000000..89e1fba --- /dev/null +++ b/test/mock.test.ts @@ -0,0 +1,24 @@ +// tslint:disable no-console + +import * as os from 'os' + +import {expect, test} from '../src' + +const platform = os.platform() + +describe('stdout', () => { + test + .mock(os, 'platform', () => 'foobar') + .stdout() + .it('sets os', output => { + console.log(os.platform()) + expect(output.stdout).to.equal('foobar\n') + }) + + test + .stdout() + .it('resets os', output => { + console.log(os.platform()) + expect(output.stdout).to.equal(`${platform}\n`) + }) +}) diff --git a/test/stdmock.test.ts b/test/stdmock.test.ts new file mode 100644 index 0000000..99ec928 --- /dev/null +++ b/test/stdmock.test.ts @@ -0,0 +1,41 @@ +// tslint:disable no-console + +import {expect, test} from '../src' + +describe('stdout', () => { + test + .stderr() + .stdout() + .it('logs', output => { + console.error('about to write') + console.log('foo') + console.error('written') + expect(output.stdout).to.equal('foo\n') + }) + + test + .stdout() + .it('logs twice', output => { + console.log('foo') + expect(output.stdout).to.equal('foo\n') + console.log('bar') + expect(output.stdout).to.equal('foo\nbar\n') + }) + + test + .stderr() + .it('writes to stderr', output => { + console.error('foo') + expect(output.stderr).to.equal('foo\n') + }) + + test + .stdout() + .stderr() + .it('writes to both', output => { + console.error('foo') + console.log('bar') + expect(output.stderr).to.equal('foo\n') + expect(output.stdout).to.equal('bar\n') + }) +}) diff --git a/tsconfig.json b/tsconfig.json index 85f34bc..ada17e4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "sourceMap": true, "strict": true, "strictFunctionTypes": false, - "target": "es2017" + "target": "esnext" }, "include": [ "src/**/*" diff --git a/yarn.lock b/yarn.lock index 8c6ff1e..9239e40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -102,26 +102,6 @@ dependencies: find-up "^2.1.0" -"@dxcli/command@^0.1.13": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@dxcli/command/-/command-0.1.13.tgz#b4dec2e629076c2b50f4cf43c9324dd6ccb98382" - dependencies: - "@dxcli/config" "^0.1.20" - "@dxcli/parser" "^0.0.3" - "@dxcli/screen" "^0.0.1" - cli-ux "^3.1.3" - debug "^3.1.0" - -"@dxcli/config@^0.1.20": - version "0.1.21" - resolved "https://registry.yarnpkg.com/@dxcli/config/-/config-0.1.21.tgz#d3cf65e672c5d0e36ba64982199021ede4b7a11a" - dependencies: - debug "^3.1.0" - fs-extra "^5.0.0" - load-json-file "^4.0.0" - lodash "^4.17.4" - read-pkg "^3.0.0" - "@dxcli/dev-commitmsg@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@dxcli/dev-commitmsg/-/dev-commitmsg-0.0.4.tgz#c26f6b5856aa50d91dd36adc18d0c48f3d0dfa61" @@ -131,10 +111,6 @@ commitizen "^2.9.6" cz-conventional-changelog "^2.1.0" -"@dxcli/dev-nyc-config@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@dxcli/dev-nyc-config/-/dev-nyc-config-0.0.3.tgz#3ff59cf561663710f025a41f64d608d2977a3d3b" - "@dxcli/dev-semantic-release@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@dxcli/dev-semantic-release/-/dev-semantic-release-0.1.0.tgz#adc88f1eaee862b73ae824496d4076f3fcc5c7c9" @@ -146,27 +122,6 @@ "@semantic-release/npm" "^2.6.4" semantic-release "^12.2.2" -"@dxcli/dev-test@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@dxcli/dev-test/-/dev-test-0.7.0.tgz#bdbed14ed36cf94d3a5956643535b607611333f9" - dependencies: - "@dxcli/dev-nyc-config" "^0.0.3" - "@dxcli/engine" "^0.1.5" - "@types/ansi-styles" "^2.0.30" - "@types/chai" "^4.1.1" - "@types/chai-as-promised" "^7.1.0" - "@types/lodash" "^4.14.93" - "@types/mocha" "^2.2.46" - "@types/read-pkg" "^3.0.0" - "@types/strip-ansi" "^3.0.0" - chai "^4.1.2" - chai-as-promised "^7.1.1" - lodash "^4.17.4" - mocha-junit-reporter "^1.16.0" - std-mocks "^1.0.1" - strip-ansi "^4.0.0" - ts-node "^4.1.0" - "@dxcli/dev-tslint@^0.0.15": version "0.0.15" resolved "https://registry.yarnpkg.com/@dxcli/dev-tslint/-/dev-tslint-0.0.15.tgz#54dbd49deccaaaf9dc590d83894415e3fab0b0ac" @@ -174,57 +129,6 @@ tslint "^5.9.1" tslint-xo "^0.5.0" -"@dxcli/engine@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@dxcli/engine/-/engine-0.1.5.tgz#7d576b0d15cd65a4f57035af2bead7c0c069f0c2" - dependencies: - "@dxcli/command" "^0.1.13" - "@dxcli/config" "^0.1.20" - "@dxcli/loader" "^0.1.4" - cli-ux "^3.1.3" - debug "^3.1.0" - -"@dxcli/loader@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@dxcli/loader/-/loader-0.1.4.tgz#ac8e3e02574f191158beb9c7f1661229ebe52910" - dependencies: - "@dxcli/config" "^0.1.20" - "@dxcli/manifest-file" "^0.0.3" - cli-ux "^3.1.3" - debug "^3.1.0" - globby "^7.1.1" - lodash "^4.17.4" - -"@dxcli/manifest-file@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@dxcli/manifest-file/-/manifest-file-0.0.3.tgz#0bb44827b354e844f3276d4e38571104c2b8ecb2" - dependencies: - debug "^3.1.0" - fs-extra "^5.0.0" - load-json-file "^4.0.0" - lodash "^4.17.4" - rwlockfile "^2.0.21" - -"@dxcli/parser@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@dxcli/parser/-/parser-0.0.3.tgz#be08ac4b3809685b3351978ae702b1e14cae47fd" - dependencies: - "@dxcli/screen" "^0.0.0" - chalk "^2.3.0" - lodash "^4.17.4" - -"@dxcli/screen@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@dxcli/screen/-/screen-0.0.0.tgz#a85f69bfb00d3961656bad5d7b12f8e603c7ce09" - -"@dxcli/screen@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@dxcli/screen/-/screen-0.0.1.tgz#9af4e8d0e5a9475e9e4b5f2da775b0447ff72fc2" - -"@heroku/linewrap@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@heroku/linewrap/-/linewrap-1.0.0.tgz#a9d4e99f0a3e423a899b775f5f3d6747a1ff15c6" - "@marionebl/sander@^0.6.0": version "0.6.1" resolved "https://registry.yarnpkg.com/@marionebl/sander/-/sander-0.6.1.tgz#1958965874f24bc51be48875feb50d642fc41f7b" @@ -329,10 +233,6 @@ into-stream "^3.1.0" lodash "^4.17.4" -"@types/ansi-styles@^2.0.30": - version "2.0.30" - resolved "https://registry.yarnpkg.com/@types/ansi-styles/-/ansi-styles-2.0.30.tgz#9a645299020a224afc6a8cd055195850b3c2af85" - "@types/chai-as-promised@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9" @@ -355,20 +255,6 @@ version "9.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" -"@types/normalize-package-data@*": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - -"@types/read-pkg@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/read-pkg/-/read-pkg-3.0.0.tgz#17ab6f0b396a58a5567ee387f558f2caedc8ae53" - dependencies: - "@types/normalize-package-data" "*" - -"@types/strip-ansi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-ansi/-/strip-ansi-3.0.0.tgz#9b63d453a6b54aa849182207711a08be8eea48ae" - "@types/strip-bom@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" @@ -457,7 +343,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0, ansi-styles@^3.2.0: +ansi-styles@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: @@ -870,10 +756,6 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - check-error@^1.0.1, check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -919,22 +801,6 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" -cli-ux@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-3.1.4.tgz#725957c36a53db6fea6cff569896aa84e1247b22" - dependencies: - "@dxcli/screen" "^0.0.1" - "@heroku/linewrap" "^1.0.0" - ansi-styles "^3.2.0" - cardinal "^1.0.0" - chalk "^2.3.0" - fs-extra "^5.0.0" - lodash "^4.17.4" - password-prompt "^1.0.4" - semver "^5.5.0" - strip-ansi "^4.0.0" - supports-color "^5.1.0" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1209,10 +1075,6 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" @@ -1273,7 +1135,7 @@ debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@3.1.0, debug@^3.1.0: +debug@*, debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -2327,7 +2189,7 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -is-buffer@^1.1.5, is-buffer@~1.1.1: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2481,12 +2343,6 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-process-active@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-process-active/-/is-process-active-1.0.1.tgz#63616541f447d84b71783cb2002360cf7e690b4f" - dependencies: - debug "^3.1.0" - is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -2837,7 +2693,7 @@ lodash@4.17.2: version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: +lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2915,14 +2771,6 @@ md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" -md5@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" @@ -3033,21 +2881,12 @@ 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.1, mkdirp@~0.5.1: +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" dependencies: minimist "0.0.8" -mocha-junit-reporter@^1.16.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.16.0.tgz#3d76af53e2f5e81f9b93406acee1e48b5dd6e6cc" - dependencies: - debug "^2.2.0" - md5 "^2.1.0" - mkdirp "~0.5.1" - xml "^1.0.0" - mocha@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.0.tgz#cccac988b0bc5477119cba0e43de7af6d6ad8f4e" @@ -3456,13 +3295,6 @@ pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" -password-prompt@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.0.4.tgz#933bac8db3528fcb27e9fdbc0a6592adcbdb5ed9" - dependencies: - ansi-escapes "^3.0.0" - cross-spawn "^5.1.0" - path-exists@2.1.0, path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -3890,14 +3722,6 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -rwlockfile@^2.0.21: - version "2.0.21" - resolved "https://registry.yarnpkg.com/rwlockfile/-/rwlockfile-2.0.21.tgz#c2eb13d77df18dbb268dcd28017df17d5a97f8a8" - dependencies: - fs-extra "^5.0.0" - is-process-active "^1.0.1" - uuid "^3.2.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" @@ -3945,7 +3769,7 @@ semantic-release@^12.2.2: resolve-from "^4.0.0" semver "^5.4.1" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -4206,11 +4030,12 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -std-mocks@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/std-mocks/-/std-mocks-1.0.1.tgz#d3388876d7beeba3c70fbd8e2bcaf46eb07d79fe" +stdout-stderr@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/stdout-stderr/-/stdout-stderr-0.1.4.tgz#57aae28cf19bbc0faddcf75a7464389d813faa9f" dependencies: - lodash "^4.11.1" + debug "*" + strip-ansi "^4.0.0" stream-combiner2@~1.1.1: version "1.1.1" @@ -4326,12 +4151,6 @@ supports-color@^4.0.0: dependencies: has-flag "^2.0.0" -supports-color@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5" - dependencies: - has-flag "^2.0.0" - table@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -4619,7 +4438,7 @@ uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.1.0, uuid@^3.2.1: +uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" @@ -4711,10 +4530,6 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -xml@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"