From d0c1e97a377cb47071d387ed38e2b905437c3d80 Mon Sep 17 00:00:00 2001 From: Jeff Dickey <216188+jdxcode@users.noreply.github.com> Date: Mon, 15 Jan 2018 15:00:07 -0800 Subject: [PATCH] feat: added mock and improved std mocking --- .circleci/config.yml | 10 +- .gitignore | 7 +- README.md | 2 + package.json | 22 ++-- scripts/circleci | 9 +- src/index.ts | 143 ++++++++++++---------- test/index.test.ts | 35 +++++- yarn.lock | 283 ++++++------------------------------------- 8 files changed, 172 insertions(+), 339 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f989c461..e3a4cb7b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,14 +9,14 @@ jobs: - checkout - restore_cache: &restore_cache keys: - - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}-{{checksum "yarn.lock"}} - - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}- - - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum ".circleci/config.yml"}}-master + - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum "scripts/circleci"}}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}-{{checksum "yarn.lock"}} + - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum "scripts/circleci"}}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}- + - v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum "scripts/circleci"}}-{{checksum ".circleci/config.yml"}}-master- - run: ./scripts/circleci - store_test_results: path: ~/cli/reports - save_cache: &save_cache - key: v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}-{{checksum "yarn.lock"}} + key: v0-yarn-{{ .Environment.CIRCLE_JOB }}-{{checksum "scripts/circleci"}}-{{checksum ".circleci/config.yml"}}-{{ .Branch }}-{{checksum "yarn.lock"}} paths: - ~/cli/node_modules - /usr/local/share/.cache/yarn @@ -36,7 +36,7 @@ jobs: workflows: version: 2 - test: + "@dxcli/dev-test": jobs: - node-latest - node-8 diff --git a/.gitignore b/.gitignore index daf0cee9..d2c07abd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ +*-debug.log +*-error.log /coverage -/lib /node_modules /tmp +/lib /.nyc_output - -*-error.log -*-debug.log diff --git a/README.md b/README.md index 08f8205e..d2dd4bf4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ @dxcli/dev-test =============== +test helpers for dxcli components + [![Version](https://img.shields.io/npm/v/@dxcli/dev-test.svg)](https://npmjs.org/package/@dxcli/dev-test) [![CircleCI](https://circleci.com/gh/dxcli/dev-test/tree/master.svg?style=svg)](https://circleci.com/gh/dxcli/dev-test/tree/master) [![Appveyor CI](https://ci.appveyor.com/api/projects/status/github/dxcli/dev-test?branch=master&svg=true)](https://ci.appveyor.com/project/heroku/dev-test/branch/master) diff --git a/package.json b/package.json index aa767959..afdf672f 100644 --- a/package.json +++ b/package.json @@ -18,13 +18,13 @@ "ts-node": "^4.1.0" }, "devDependencies": { - "@dxcli/dev": "^1.0.0", + "@dxcli/dev": "^1.1.2", "@dxcli/dev-semantic-release": "^0.0.3", - "@dxcli/dev-tslint": "^0.0.6", + "@dxcli/dev-test": "^0.0.1", + "@dxcli/dev-tslint": "^0.0.8", "@types/node": "^9.3.0", - "del-cli": "^1.1.0", "eslint": "^4.15.0", - "eslint-config-dxcli": "^1.1.2", + "eslint-config-dxcli": "^1.1.4", "husky": "^0.14.3", "mocha": "^4.1.0", "nyc": "^11.4.1", @@ -34,16 +34,16 @@ "workflows": { "test": [ "eslint .", - "tsc", - "tslint -p .", - "commitlint --from master", + "tsc -p test --noEmit", + "tslint -p test", + "commitlint --from origin/master", "mocha \"test/**/*.ts\"" ], "lint": [ "eslint .", - "tsc", - "tslint -p .", - "commitlint --from master" + "tsc -p test --noEmit", + "tslint -p test", + "commitlint --from origin/master" ] } }, @@ -60,7 +60,7 @@ "commitmsg": "dxcli-dev-commitmsg", "lint": "dxcli-dev lint", "precommit": "dxcli-dev test", - "prepare": "del-cli lib && tsc", + "prepare": "rm -rf lib && tsc", "test": "dxcli-dev test" }, "types": "lib/index.d.ts" diff --git a/scripts/circleci b/scripts/circleci index fe03db09..c135e0cc 100755 --- a/scripts/circleci +++ b/scripts/circleci @@ -21,12 +21,13 @@ if [[ "$CLI_ENGINE_GREENKEEPER_BRANCH" == 1 ]]; then greenkeeper-lockfile-upload fi -NYC="npx nyc --nycrc-path node_modules/@dxcli/dev-nyc-config/.nycrc" +CWD=$(pwd) +NYC="./node_modules/.bin/nyc --nycrc-path node_modules/@dxcli/dev-nyc-config/.nycrc" mkdir -p reports -MOCHA_FILE="reports/mocha.xml" \ +MOCHA_FILE="$CWD/reports/mocha.xml" \ DXCLI_MOCHA_OPTS="--reporter mocha-junit-reporter" \ - DXCLI_ESLINT_OPTS="--format junit --output-file reports/eslint.xml" \ - DXCLI_TSLINT_OPTS="--format junit > reports/tslint.xml" \ + DXCLI_ESLINT_OPTS="--format junit --output-file $CWD/reports/eslint.xml" \ + DXCLI_TSLINT_OPTS="--format junit > $CWD/reports/tslint.xml" \ $NYC yarn test $NYC report --reporter=text-lcov > coverage.lcov diff --git a/src/index.ts b/src/index.ts index 9d4db3d0..9c07edee 100644 --- a/src/index.ts +++ b/src/index.ts @@ -36,85 +36,94 @@ interface Options { only?: boolean skip?: boolean print?: boolean - env?: {[k: string]: string} + mock?: [any, string, any][] } -export interface Describe { - (description: string, cb: (this: mocha.ISuiteCallbackContext) => void): mocha.ISuite - stdout: Describe - stderr: Describe - only: Describe - skip: Describe - print: Describe - env(env?: {[k: string]: string}): Describe +export interface Settings { + (description: string, cb: (this: T) => void): U + stdout: Settings + stderr: Settings + only: Settings + skip: Settings + print: Settings + mock(object: any, path: string, value: any): Settings + env(env?: {[k: string]: string}): Settings } +export type Describe = Settings +export type It = Settings + const env = process.env -const __describe = (options: Options = {}): Describe => { - _.defaults(options, { - stdout: false, - stderr: false, - print: false, - only: false, - skip: false, +function hooks(options: Options) { + options.mock!.forEach(([object, path, value]) => { + const desc = ['mock', path].join(':') + const orig = _.get(object, path) + beforeEach(desc, () => _.set(object, path, value)) + afterEach(desc, () => _.set(object, path, orig)) }) + // always reset process.env no matter what + afterEach('resetEnv', () => process.env = env) + // always reset stdMocks + afterEach('std-mocks', () => stdMocks.restore()) + + if (options.stdout || options.stderr) { + const desc = _([options.stdout && 'stdout', options.stderr && 'stderr']).compact().join(':') + beforeEach(desc, () => stdMocks.use(options)) + } +} + +const settings = (builder: any, opts: Options) => { + const prop = (name: string, value: any): PropertyDescriptor => { + const prop: PropertyDescriptor = {enumerable: true} + if (typeof value === 'function') { + prop.value = (...args: any[]) => builder({...opts, [name]: value(...args)}) + } else { + prop.get = () => builder({...opts, [name]: value}) + } + return prop + } + const mock = opts.mock = opts.mock || [] + + return { + print: prop('print', true), + stdout: prop('stdout', true), + stderr: prop('stderr', true), + only: prop('only', true), + skip: prop('skip', true), + env: prop('mock', (env: {[k: string]: string} = {}) => mock.concat(Object.entries(env).map(([k, v]) => [process.env, k, v] as [any, string, any]))), + mock: prop('mock', (object: any, path: string, value: any) => mock.concat([[object, path, value]])), + } +} + +const __describe = (options: Options = {}): Describe => { return Object.defineProperties((description: string, cb: (this: mocha.ISuiteCallbackContext) => void) => { - let thisSuite: any = describe - if (options.only) thisSuite = describe.only - if (options.skip) thisSuite = describe.skip - - return thisSuite(description, function (this: mocha.ISuiteCallbackContext) { - if (options.env) { - beforeEach(() => { - process.env = {} - }) - } - - // always reset process.env no matter what - afterEach(() => { - process.env = env + return ((options.only && describe.only) || (options.skip && describe.skip) || describe)( + description, + function (this: mocha.ISuiteCallbackContext) { + hooks(options) + cb.call(this) }) + }, settings(__describe, options)) +} - if (options.stdout || options.stderr) { - beforeEach(() => { - stdMocks.use(options) - }) - afterEach(() => { - stdMocks.restore() - }) - } - cb.call(this) - }) - }, { - print: { - enumerable: true, - get: () => __describe({...options, print: true}) - }, - stdout: { - enumerable: true, - get: () => __describe({...options, stdout: true}) - }, - stderr: { - enumerable: true, - get: () => __describe({...options, stderr: true}) - }, - only: { - enumerable: true, - get: () => __describe({...options, only: true}) - }, - skip: { - enumerable: true, - get: () => __describe({...options, skip: true}) - }, - env: { - enumerable: true, - value: (env: {[k: string]: string} = {}) => __describe({...options, env}) - }, - }) +const __it = (options: Options = {}): It => { + return Object.defineProperties((expectation: string, cb: (this: mocha.ITestCallbackContext) => void) => { + return ((options.only && it.only) || (options.skip && it.skip) || it)( + expectation, + async function (this: mocha.ITestCallbackContext) { + hooks(options) + await cb.call(this) + stdMocks.restore() + }) + }, settings(__it, options)) } const _describe = __describe() +const _it = __it() -export {_describe as describe} +export { + _describe as describe, + _it as it, +} diff --git a/test/index.test.ts b/test/index.test.ts index 254b65f2..6be8d953 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1,10 +1,43 @@ // tslint:disable no-console -import {describe, expect, output} from '../src' +import * as OS from 'os' + +import {describe, expect, it, output} from '../src' describe.stdout('stdout', () => { it('logs', () => { console.log('foo') expect(output.stdout).to.equal('foo\n') }) + + it('logs twice', () => { + console.log('foo') + expect(output.stdout).to.equal('foo\n') + console.log('bar') + expect(output.stdout).to.equal('bar\n') + }) +}) + +describe.stdout.stderr('stdout + stderr', () => { + it('logs and errors', () => { + console.log('foo') + console.error('bar') + expect(output.stdout).to.equal('foo\n') + expect(output.stderr).to.equal('bar\n') + }) +}) + +const os = ['darwin', 'win32', 'linux'] +os.forEach(os => { + describe.mock(OS, 'platform', () => os)(os, () => { + it('sets os', () => { + expect(OS.platform()).to.equal(os) + }) + }) +}) + +describe.env({foo: 'bar'})('mock env', () => { + it('gets env', () => { + expect(process.env).to.include({foo: 'bar'}) + }) }) diff --git a/yarn.lock b/yarn.lock index 56e6027c..61109a63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -130,16 +130,33 @@ "@semantic-release/npm" "^2.6.1" semantic-release "^12.2.0" -"@dxcli/dev-tslint@^0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@dxcli/dev-tslint/-/dev-tslint-0.0.6.tgz#5d307afcaff763a1baf84ed4cdd9937f709b913f" +"@dxcli/dev-test@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@dxcli/dev-test/-/dev-test-0.0.1.tgz#8440c7fec40ccf7ad5dc21d5224be09ca42a4cb4" + dependencies: + "@dxcli/dev-nyc-config" "^0.0.3" + "@types/ansi-styles" "^2.0.30" + "@types/chai" "^4.1.0" + "@types/lodash" "^4.14.92" + "@types/mocha" "^2.2.46" + "@types/strip-ansi" "^3.0.0" + chai "^4.1.2" + lodash "^4.17.4" + mocha-junit-reporter "^1.15.0" + std-mocks "^1.0.1" + strip-ansi "^4.0.0" + ts-node "^4.1.0" + +"@dxcli/dev-tslint@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@dxcli/dev-tslint/-/dev-tslint-0.0.8.tgz#f07750d0152b26764b43fd99110076db87b4a22e" dependencies: tslint "^5.9.1" - tslint-xo "^0.4.0" + tslint-xo "^0.5.0" -"@dxcli/dev@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@dxcli/dev/-/dev-1.0.0.tgz#5cfab36108fcfb44f7a94ad5bca06328f909aec0" +"@dxcli/dev@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@dxcli/dev/-/dev-1.1.2.tgz#66acd0b6d5cc9cf8a94a00692c67d40c94ebf81b" dependencies: cli-ux "^2.0.21" concurrently "^3.5.1" @@ -338,12 +355,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - dependencies: - string-width "^2.0.0" - ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -610,18 +621,6 @@ boom@5.x.x: dependencies: hoek "4.x.x" -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" @@ -718,14 +717,10 @@ camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -capture-stack-trace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" - cardinal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" @@ -818,10 +813,6 @@ clean-regexp@^1.0.0: dependencies: escape-string-regexp "^1.0.5" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - cli-cursor@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -992,17 +983,6 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -configstore@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1077,12 +1057,6 @@ cosmiconfig@^3.0.1, cosmiconfig@^3.1.0: parse-json "^3.0.0" require-from-string "^2.0.1" -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - dependencies: - capture-stack-trace "^1.0.0" - cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -1108,10 +1082,6 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1222,14 +1192,6 @@ define-property@^1.0.0: dependencies: is-descriptor "^1.0.0" -del-cli@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-1.1.0.tgz#27557d69a0b7df99dcbaa1e34a09e6ac6591d2c4" - dependencies: - del "^3.0.0" - meow "^3.6.0" - update-notifier "^2.1.0" - del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -1242,17 +1204,6 @@ del@^2.0.2: pinkie-promise "^2.0.0" rimraf "^2.2.8" -del@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" - dependencies: - globby "^6.1.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - p-map "^1.1.1" - pify "^3.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1307,12 +1258,6 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" @@ -1323,10 +1268,6 @@ duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1367,9 +1308,9 @@ eslint-ast-utils@^1.0.0: lodash.get "^4.4.2" lodash.zip "^4.2.0" -eslint-config-dxcli@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/eslint-config-dxcli/-/eslint-config-dxcli-1.1.2.tgz#284fe88dd54312217659ec81656e57e2b375ea56" +eslint-config-dxcli@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/eslint-config-dxcli/-/eslint-config-dxcli-1.1.4.tgz#e74a6be724d4de72f116d87f300afb5aacd25fe9" dependencies: eslint-config-xo-space "^0.17.0" eslint-plugin-node "^5.2.1" @@ -1969,16 +1910,6 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" @@ -1990,22 +1921,6 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2150,10 +2065,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - import-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-1.1.0.tgz#748db79c5cc42bb9701efab424f894e72600e9dc" @@ -2352,17 +2263,6 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2423,25 +2323,17 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - is-resolvable@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - is-ssh@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.0.tgz#ebea1169a2614da392a63740366c3ce049d8dff6" dependencies: protocols "^1.1.0" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2634,12 +2526,6 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - dependencies: - package-json "^4.0.0" - lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -2791,10 +2677,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - lru-cache@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" @@ -2802,12 +2684,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -make-dir@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" - dependencies: - pify "^3.0.0" - make-error@^1.1.1: version "1.3.2" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.2.tgz#8762ffad2444dd8ff1f7c819629fa28e24fea1c4" @@ -2864,7 +2740,7 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" -meow@3.7.0, meow@^3.3.0, meow@^3.6.0: +meow@3.7.0, meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" dependencies: @@ -3275,10 +3151,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -3287,15 +3159,6 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - pad-right@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" @@ -3440,10 +3303,6 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -3503,7 +3362,7 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" -rc@^1.0.1, rc@^1.1.6: +rc@^1.1.6: version "1.2.3" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b" dependencies: @@ -3593,19 +3452,13 @@ regex-not@^1.0.0: dependencies: extend-shallow "^2.0.1" -registry-auth-token@^3.0.1, registry-auth-token@^3.3.1: +registry-auth-token@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" dependencies: rc "^1.1.6" safe-buffer "^5.0.1" -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - dependencies: - rc "^1.0.1" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3796,13 +3649,7 @@ semantic-release@^12.2.0: resolve-from "^4.0.0" semver "^5.4.1" -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - dependencies: - semver "^5.0.3" - -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: +"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -4173,12 +4020,6 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - dependencies: - execa "^0.7.0" - test-exclude@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" @@ -4208,10 +4049,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - tmp@^0.0.29: version "0.0.29" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" @@ -4330,9 +4167,9 @@ tslint-microsoft-contrib@^5.0.1: dependencies: tsutils "^1.4.0" -tslint-xo@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/tslint-xo/-/tslint-xo-0.4.0.tgz#7cbdfc933ff60d88449c64142e3e060e6432e734" +tslint-xo@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/tslint-xo/-/tslint-xo-0.5.0.tgz#56e591dcd2731de35e7462a0dfa1214731ba9f27" dependencies: tslint-consistent-codestyle "^1.11.0" tslint-eslint-rules "^4.1.1" @@ -4415,12 +4252,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -4432,24 +4263,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - -update-notifier@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -4458,12 +4271,6 @@ url-join@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - url-template@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" @@ -4527,12 +4334,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2" -widest-line@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" - dependencies: - string-width "^2.1.1" - window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -4572,24 +4373,12 @@ write-file-atomic@^1.1.4: imurmurhash "^0.1.4" slide "^1.1.5" -write-file-atomic@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - xml@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"