diff --git a/.eslintrc.yml b/.eslintrc.yml index 86337ec874..cd953505e6 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -1,15 +1,40 @@ root: true -extends: semistandard +extends: + - semistandard + - plugin:prettier/recommended env: node: yes browser: yes - es6: no parserOptions: + ecmaVersion: 5 + ecmaFeatures: + globalReturn: no + experimentalObjectRestSpread: no + jsx: no sourceType: script rules: strict: - error - safe - linebreak-style: - - error - - unix +overrides: + - files: + - scripts/**/*.js + - package-scripts.js + - karma.conf.js + - .wallaby.js + - bin/* + parserOptions: + ecmaVersion: 6 + env: + browser: no + - files: + - test/**/*.js + env: + mocha: yes + globals: + expect: no + - files: + - doc/**/*.js + env: + node: no + diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..176a458f94 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.gitignore b/.gitignore index b947909011..f11fc29c86 100644 --- a/.gitignore +++ b/.gitignore @@ -21,5 +21,5 @@ yarn.lock *_REMOTE_* docs/_site docs/_dist +docs/api .vscode/ - diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 0000000000..19b7946fff --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,12 @@ +{ + "linters": { + "(bin/*|**/*.js)": [ + "prettier-eslint --write", + "git add" + ] + }, + "ignore": [ + "docs/**/*.js", + "test/**/*.fixture.js" + ] +} diff --git a/.travis.yml b/.travis.yml index b721e268ca..94aa85770e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,13 +7,13 @@ stages: # defaults language: node_js -node_js: '9' +node_js: '10' # `nvm install` happens before the cache is restored, which means # we must install our own npm elsewhere (`~/npm`) before_install: | [[ ! -x ~/npm/node_modules/.bin/npm ]] && { # caching feature creates `~/npm` for us - cd ~/npm && npm install npm + cd ~/npm && npm install npm@^5 cd - } || true # avoids bugs around https://github.com/travis-ci/travis-ci/issues/5092 @@ -32,13 +32,13 @@ jobs: - &node script: npm start test.node - node_js: '8' + node_js: '9' - <<: *node - node_js: '6' + node_js: '8' - <<: *node - node_js: '4' + node_js: '6' - script: npm start test.bundle test.browser install: npm ci # we need the native modules here @@ -67,13 +67,13 @@ jobs: - node_modules # npm install, unlike npm ci, doesn't wipe node_modules - <<: *smoke - node_js: '8' + node_js: '9' - <<: *smoke - node_js: '6' + node_js: '8' - <<: *smoke - node_js: '4' + node_js: '6' - stage: precache script: true diff --git a/.wallaby.js b/.wallaby.js index 5296c52d62..5b85d21486 100644 --- a/.wallaby.js +++ b/.wallaby.js @@ -3,7 +3,7 @@ module.exports = () => { return { files: [ - 'index.js', 'lib/**/*.js', 'test/setup.js', + 'index.js', 'lib/**/*.js', 'test/setup.js', 'test/assertions.js', { pattern: 'test/node-unit/**/*.fixture.js', instrument: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ea07b8eb7..fadfa60637 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,78 @@ +# 5.2.0 / 2018-05-18 + +## :tada: Enhancements + +- [#3375]: Add support for comments in `mocha.opts` ([@plroebuck]) + +## :bug: Fixes + +- [#3346]: Exit correctly from `before` hooks when using `--bail` ([@outsideris]) + +## :book: Documentation + +- [#3328]: Mocha-flavored [API docs](https://mochajs.org/api/)! ([@Munter]) + +## :nut_and_bolt: Other + +- [#3330]: Use `Buffer.from()` ([@harrysarson]) +- [#3295]: Remove redundant folder ([@DavNej](https://github.com/DajNev)) +- [#3356](https://github.com/mochajs/mocha/pull/3356): Refactoring ([@plroebuck]) + +[#3375]: https://github.com/mochajs/mocha/pull/3375 +[#3346]: https://github.com/mochajs/mocha/pull/3346 +[#3328]: https://github.com/mochajs/mocha/pull/3328 +[#3330]: https://github.com/mochajs/mocha/pull/3330 +[#3295]: https://github.com/mochajs/mocha/pull/3295 + +[@plroebuck]: https://github.com/plroebuck +[@harrysarson]: https://github.com/harrysarson +[@outsideris]: https://github.com/outsideris +[@Munter]: https://github.com/Munter + +# 5.1.1 / 2018-04-18 + +## :bug: Fixes + +- [#3325]: Revert change which broke `--watch` ([@boneskull]) + +[#3325]: https://github.com/mochajs/mocha/issues/3325 + +# 5.1.0 / 2018-04-12 + +## :tada: Enhancements + +- [#3210]: Add `--exclude` option ([@metalex9]) + +## :bug: Fixes + +- [#3318]: Fix failures in circular objects in JSON reporter ([@jeversmann], [@boneskull]) + +## :book: Documentation + +- [#3323]: Publish actual [API documentation](https://mochajs.org/api/)! ([@dfberry], [@Munter]) +- [#3299]: Improve docs around exclusive tests ([@nicgirault]) + +## :nut_and_bolt: Other + +- [#3302], [#3308], [#3310], [#3315], [#3316]: Build matrix improvements ([more info](https://boneskull.com/mocha-and-travis-ci-build-stages/)) ([@outsideris], [@boneskull]) +- [#3272]: Refactor reporter tests ([@jMuzsik]) + +[#3210]: https://github.com/mochajs/mocha/pull/3210 +[#3318]: https://github.com/mochajs/mocha/pull/3318 +[#3323]: https://github.com/mochajs/mocha/pull/3323 +[#3299]: https://github.com/mochajs/mocha/pull/3299 +[#3302]: https://github.com/mochajs/mocha/pull/3302 +[#3308]: https://github.com/mochajs/mocha/pull/3308 +[#3310]: https://github.com/mochajs/mocha/pull/3310 +[#3315]: https://github.com/mochajs/mocha/pull/3315 +[#3316]: https://github.com/mochajs/mocha/pull/3316 +[#3272]: https://github.com/mochajs/mocha/pull/3272 +[@metalex9]: https://github.com/metalex9 +[@jeversmann]: https://github.com/jeversmann +[@dfberry]: https://github.com/dfberry +[@nicgirault]: https://github.com/nicgirault +[@jMuzsik]: https://github.com/jMuzsik + # 5.0.5 / 2018-03-22 Welcome [@outsideris] to the team! diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 847e76a1e0..bee04f42d1 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -18,7 +18,7 @@ Anyone involved with Mocha will fall into one of these buckets: **user**, **cont A "user" for the purpose of this document is any *individual developer* who consumes Mocha to write and/or execute tests. A user interacts with contributors. A user interacts with the software, web site, documentation, etc., which these contributors provide. -As a user, you're expected to follow the [code of conduct](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) when interacting in Mocha's "official" social spaces. This includes: +As a user, you're expected to follow the [code of conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) when interacting in Mocha's "official" social spaces. This includes: - Any chatroom under the `mochajs` organization on Gitter - Any project under the `mochajs` organization on GitHub @@ -45,7 +45,7 @@ A "contributor" is any individual who has *given back* in some way to the projec 1. Recruiting more contributors! Don't spam. 1. Researching the user base, getting feedback, etc. Don't spam. -A contributor is *usually* a user as well, but this isn't a hard-and-fast rule. A contributor is also expected to adhere to the [code of conduct](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) as a user would. +A contributor is *usually* a user as well, but this isn't a hard-and-fast rule. A contributor is also expected to adhere to the [code of conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) as a user would. As you can see, it's wide open! Think of it another way: if you are *adding value to Mocha*, then you are a contributor. diff --git a/appveyor.yml b/appveyor.yml index 3708cd8691..2d2e1e459d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,16 +2,16 @@ platform: - x64 environment: matrix: + - nodejs_version: '10' + - nodejs_version: '9' - nodejs_version: '8' - - nodejs_version: '7' - nodejs_version: '6' - - nodejs_version: '4' install: - ps: Install-Product node $env:nodejs_version x64 - set CI=true - set PATH=%APPDATA%\npm;c:\MinGW\bin;%PATH% - - npm install -g npm - - npm install + - npm install -g npm@^5 + - npm ci --ignore-scripts matrix: fast_finish: true build: off diff --git a/images/error.png b/assets/growl/error.png similarity index 100% rename from images/error.png rename to assets/growl/error.png diff --git a/images/ok.png b/assets/growl/ok.png similarity index 100% rename from images/ok.png rename to assets/growl/ok.png diff --git a/bin/.eslintrc.yml b/bin/.eslintrc.yml deleted file mode 100644 index 36e0a779be..0000000000 --- a/bin/.eslintrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -env: - es6: true - browser: false diff --git a/bin/_mocha b/bin/_mocha index c7d9c7f3d0..7e84a3e507 100755 --- a/bin/_mocha +++ b/bin/_mocha @@ -58,7 +58,7 @@ const exit = code => { // https://github.com/joyent/node/issues/6247 is just one bug example // https://github.com/visionmedia/mocha/issues/333 has a good discussion const done = () => { - if (!(draining--)) { + if (!draining--) { process.exit(clampedCode); } }; @@ -99,25 +99,10 @@ const showCursor = () => { }; /** - * Stop play()ing. + * Stop. */ const stop = () => { process.stdout.write('\u001b[2K'); - clearInterval(play.timer); -}; - -/** - * Play the given array of strings. - */ -const play = (arr, interval) => { - const len = arr.length; - interval = interval || 100; - let i = 0; - - play.timer = setInterval(() => { - const str = arr[i++ % len]; - process.stdout.write(`\u001b[0G${str}`); - }, interval); }; /** @@ -143,16 +128,23 @@ const requires = []; */ const images = { - fail: path.join(__dirname, '..', 'images', 'error.png'), - pass: path.join(__dirname, '..', 'images', 'ok.png') + fail: path.join(__dirname, '..', 'assets', 'growl', 'error.png'), + pass: path.join(__dirname, '..', 'assets', 'growl', 'ok.png') }; // options program - .version(JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8')).version) + .version( + JSON.parse( + fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8') + ).version + ) .usage('[debug] [options] [files]') - .option('-A, --async-only', 'force all tests to take a callback (async) or return a promise') + .option( + '-A, --async-only', + 'force all tests to take a callback (async) or return a promise' + ) .option('-c, --colors', 'force enabling of colors') .option('-C, --no-colors', 'force disabling of colors') .option('-G, --growl', 'enable growl notification support') @@ -168,24 +160,53 @@ program .option('-r, --require ', 'require the given module') .option('-s, --slow ', '"slow" test threshold in milliseconds [75]') .option('-t, --timeout ', 'set test-case timeout in milliseconds [2000]') - .option('-u, --ui ', `specify user-interface (${interfaceNames.join('|')})`, 'bdd') + .option( + '-u, --ui ', + `specify user-interface (${interfaceNames.join('|')})`, + 'bdd' + ) .option('-w, --watch', 'watch files for changes') .option('--check-leaks', 'check for global variable leaks') .option('--full-trace', 'display the full stack trace') - .option('--compilers :,...', 'use the given module(s) to compile files', list, []) + .option( + '--compilers :,...', + 'use the given module(s) to compile files', + list, + [] + ) .option('--debug-brk', "enable node's debugger breaking on the first line") - .option('--globals ', 'allow the given comma-delimited global [names]', list, []) + .option( + '--globals ', + 'allow the given comma-delimited global [names]', + list, + [] + ) .option('--es_staging', 'enable all staged features') - .option('--harmony<_classes,_generators,...>', 'all node --harmony* flags are available') - .option('--preserve-symlinks', 'Instructs the module loader to preserve symbolic links when resolving and caching modules') + .option( + '--harmony<_classes,_generators,...>', + 'all node --harmony* flags are available' + ) + .option( + '--preserve-symlinks', + 'Instructs the module loader to preserve symbolic links when resolving and caching modules' + ) .option('--icu-data-dir', 'include ICU data') - .option('--inline-diffs', 'display actual/expected differences inline within each string') + .option( + '--inline-diffs', + 'display actual/expected differences inline within each string' + ) .option('--no-diff', 'do not show a diff on failure') .option('--inspect', 'activate devtools in chrome') - .option('--inspect-brk', 'activate devtools in chrome and break on the first line') + .option( + '--inspect-brk', + 'activate devtools in chrome and break on the first line' + ) .option('--interfaces', 'display available interfaces') .option('--no-deprecation', 'silence deprecation warnings') - .option('--exit', 'force shutdown of the event loop after test run: mocha will call process.exit') + .option( + '--exit', + 'force shutdown of the event loop after test run: mocha will call process.exit' + ) .option('--no-timeouts', 'disables timeouts, given implicitly with --debug') .option('--no-warnings', 'silence all node process warnings') .option('--opts ', 'specify opts path', 'test/mocha.opts') @@ -195,18 +216,37 @@ program .option('--log-timer-events', 'Time events including external callbacks') .option('--recursive', 'include sub directories') .option('--reporters', 'display available reporters') - .option('--retries ', 'set numbers of time to retry a failed test case') - .option('--throw-deprecation', 'throw an exception anytime a deprecated function is used') + .option( + '--retries ', + 'set numbers of time to retry a failed test case' + ) + .option( + '--throw-deprecation', + 'throw an exception anytime a deprecated function is used' + ) .option('--trace', 'trace function calls') .option('--trace-deprecation', 'show stack traces on deprecations') .option('--trace-warnings', 'show stack traces on node process warnings') .option('--use_strict', 'enforce strict mode') - .option('--watch-extensions ,...', 'specify extensions to monitor with --watch', list, []) + .option( + '--watch-extensions ,...', + 'specify extensions to monitor with --watch', + list, + ['js'] + ) .option('--delay', 'wait for async suite definition') .option('--allow-uncaught', 'enable uncaught errors to propagate') .option('--forbid-only', 'causes test marked with only to fail the suite') - .option('--forbid-pending', 'causes pending tests and test marked with skip to fail the suite') - .option('--file ', 'include a file to be ran during the suite', collect, []) + .option( + '--forbid-pending', + 'causes pending tests and test marked with skip to fail the suite' + ) + .option( + '--file ', + 'include a file to be ran during the suite', + collect, + [] + ) .option('--exclude ', 'a file or glob pattern to ignore', collect, []); program._name = 'mocha'; @@ -312,19 +352,6 @@ if (program.reporterOptions !== undefined) { mocha.reporter(program.reporter, reporterOptions); -// load reporter - -let Reporter = null; -try { - Reporter = require(`../lib/reporters/${program.reporter}`); -} catch (err) { - try { - Reporter = require(program.reporter); - } catch (err2) { - throw new Error(`reporter "${program.reporter}" does not exist`); - } -} - // --no-colors if (!program.colors) { @@ -447,7 +474,7 @@ if (program.forbidPending) mocha.forbidPending(); if (program.compilers.length > 0) { require('util').deprecate(() => {}, - '"--compilers" will be removed in a future version of Mocha; see https://git.io/vdcSr for more info')(); + '"--compilers" will be removed in a future version of Mocha; see https://git.io/vdcSr for more info')(); } const extensions = ['js']; program.compilers.forEach(c => { @@ -489,7 +516,9 @@ args.forEach(arg => { newFiles = utils.lookupFiles(arg, extensions, program.recursive); } catch (err) { if (err.message.indexOf('cannot resolve path') === 0) { - console.error(`Warning: Could not find any test files matching pattern: ${arg}`); + console.error( + `Warning: Could not find any test files matching pattern: ${arg}` + ); return; } @@ -500,7 +529,9 @@ args.forEach(arg => { if (typeof newFiles === 'string') { newFiles = [newFiles]; } - newFiles = newFiles.filter(fileName => program.exclude.every(pattern => !minimatch(fileName, pattern))); + newFiles = newFiles.filter(fileName => + program.exclude.every(pattern => !minimatch(fileName, pattern)) + ); } files = files.concat(newFiles); @@ -585,7 +616,7 @@ if (program.watch) { } }); } else { -// load + // load mocha.files = files; runner = mocha.run(program.exit ? exit : exitLater); diff --git a/bin/mocha b/bin/mocha index 38d09fb822..334e8fb0e9 100755 --- a/bin/mocha +++ b/bin/mocha @@ -38,6 +38,7 @@ process.argv.slice(2).forEach(arg => { break; case '--gc-global': case '--es_staging': + case '--experimental-modules': case '--no-deprecation': case '--no-warnings': case '--prof': diff --git a/bin/options.js b/bin/options.js index ac835bf833..a25a18e28e 100644 --- a/bin/options.js +++ b/bin/options.js @@ -16,17 +16,23 @@ module.exports = getOptions; * Get options. */ -function getOptions () { - if (process.argv.length === 3 && (process.argv[2] === '-h' || process.argv[2] === '--help')) { +function getOptions() { + if ( + process.argv.length === 3 && + (process.argv[2] === '-h' || process.argv[2] === '--help') + ) { return; } - const optsPath = process.argv.indexOf('--opts') === -1 - ? 'test/mocha.opts' - : process.argv[process.argv.indexOf('--opts') + 1]; + const optsPath = + process.argv.indexOf('--opts') === -1 + ? 'test/mocha.opts' + : process.argv[process.argv.indexOf('--opts') + 1]; try { - const opts = fs.readFileSync(optsPath, 'utf8') + const opts = fs + .readFileSync(optsPath, 'utf8') + .replace(/^#.*$/gm, '') .replace(/\\\s/g, '%20') .split(/\s/) .filter(Boolean) @@ -35,8 +41,8 @@ function getOptions () { process.argv = process.argv .slice(0, 2) .concat(opts.concat(process.argv.slice(2))); - } catch (err) { - // ignore + } catch (ignore) { + // NOTE: should console.error() and throw the error } process.env.LOADED_MOCHA_OPTS = true; diff --git a/browser-entry.js b/browser-entry.js index 2d1aeecea5..ad422e6c5b 100644 --- a/browser-entry.js +++ b/browser-entry.js @@ -17,7 +17,7 @@ var Mocha = require('./lib/mocha'); * @return {undefined} */ -var mocha = new Mocha({ reporter: 'html' }); +var mocha = new Mocha({reporter: 'html'}); /** * Save timer references to avoid Sinon interfering (see GH-237). @@ -38,12 +38,12 @@ var originalOnerrorHandler = global.onerror; * Revert to original onerror handler if previously defined. */ -process.removeListener = function (e, fn) { +process.removeListener = function(e, fn) { if (e === 'uncaughtException') { if (originalOnerrorHandler) { global.onerror = originalOnerrorHandler; } else { - global.onerror = function () {}; + global.onerror = function() {}; } var i = uncaughtExceptionHandlers.indexOf(fn); if (i !== -1) { @@ -56,9 +56,9 @@ process.removeListener = function (e, fn) { * Implements uncaughtException listener. */ -process.on = function (e, fn) { +process.on = function(e, fn) { if (e === 'uncaughtException') { - global.onerror = function (err, url, line) { + global.onerror = function(err, url, line) { fn(new Error(err + ' (' + url + ':' + line + ')')); return !mocha.allowUncaught; }; @@ -74,9 +74,9 @@ mocha.suite.removeAllListeners('pre-require'); var immediateQueue = []; var immediateTimeout; -function timeslice () { +function timeslice() { var immediateStart = new Date().getTime(); - while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) { + while (immediateQueue.length && new Date().getTime() - immediateStart < 100) { immediateQueue.shift()(); } if (immediateQueue.length) { @@ -90,7 +90,7 @@ function timeslice () { * High-performance override of Runner.immediately. */ -Mocha.Runner.immediately = function (callback) { +Mocha.Runner.immediately = function(callback) { immediateQueue.push(callback); if (!immediateTimeout) { immediateTimeout = setTimeout(timeslice, 0); @@ -102,8 +102,8 @@ Mocha.Runner.immediately = function (callback) { * This is useful when running tests in a browser because window.onerror will * only receive the 'message' attribute of the Error. */ -mocha.throwError = function (err) { - uncaughtExceptionHandlers.forEach(function (fn) { +mocha.throwError = function(err) { + uncaughtExceptionHandlers.forEach(function(fn) { fn(err); }); throw err; @@ -114,7 +114,7 @@ mocha.throwError = function (err) { * Normally this would happen in Mocha.prototype.loadFiles. */ -mocha.ui = function (ui) { +mocha.ui = function(ui) { Mocha.prototype.ui.call(this, ui); this.suite.emit('pre-require', global, null, this); return this; @@ -124,9 +124,9 @@ mocha.ui = function (ui) { * Setup mocha with the given setting options. */ -mocha.setup = function (opts) { +mocha.setup = function(opts) { if (typeof opts === 'string') { - opts = { ui: opts }; + opts = {ui: opts}; } for (var opt in opts) { if (opts.hasOwnProperty(opt)) { @@ -140,7 +140,7 @@ mocha.setup = function (opts) { * Run mocha, returning the Runner. */ -mocha.run = function (fn) { +mocha.run = function(fn) { var options = mocha.options; mocha.globals('location'); @@ -155,10 +155,14 @@ mocha.run = function (fn) { mocha.invert(); } - return Mocha.prototype.run.call(mocha, function (err) { + return Mocha.prototype.run.call(mocha, function(err) { // The DOM Document is not available in Web Workers. var document = global.document; - if (document && document.getElementById('mocha') && options.noHighlighting !== true) { + if ( + document && + document.getElementById('mocha') && + options.noHighlighting !== true + ) { Mocha.utils.highlightTags('code'); } if (fn) { diff --git a/docs/.eslintrc.yml b/docs/.eslintrc.yml deleted file mode 100644 index 6887df39ef..0000000000 --- a/docs/.eslintrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -env: - browser: true - node: false diff --git a/docs/API.md b/docs/API.md new file mode 100644 index 0000000000..d92d3e689c --- /dev/null +++ b/docs/API.md @@ -0,0 +1,20 @@ +# Mocha's API Documentation + +* * * + +Congratulations! You've found Mocha's API documentation. These docs are for developers who wish to: + +- Create an extension for Mocha, or +- Develop Mocha itself, or +- Do something else fancy with Mocha + +Otherwise, **you probably want the [main documentation](https://mochajs.org)**. + +## Other Links + +- **[Main Documentation](https://mochajs.org)** +- **[Release Notes / History / Changes](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)** +- [Code of Conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) +- [Gitter Chatroom](https://gitter.im/mochajs/mocha) (ask questions here!) +- [Google Group](https://groups.google.com/group/mochajs) +- [Issue Tracker](https://github.com/mochajs/mocha/issues) diff --git a/docs/README.md b/docs/README.md index 928bbfe9d7..0a069dff03 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,24 +9,25 @@ - Ruby - RubyGems - Bundler (`gem install bundler`) -- Node.js v4.0.0 or greater +- Node.js v6.x or greater ## Development -1. Run `npm install` to get Node.js deps. +1. Run `npm install` from working copy root to get Node.js deps. 1. Run `bundle install` to install Jekyll and its dependencies. This may or may not require elevated privileges, depending on your system. -1. To serve the site and rebuild as changes are made, execute `npm run serveDocs`. -1. To rebuild the site *once*, execute `npm start buildDocs`. +1. To serve the site and rebuild as changes are made, execute `npm start docs.watch`. +1. To rebuild the site *once*, execute `npm start docs`. ### Notes - The content lives in `docs/index.md`; everything else is markup, scripts, assets, etc. -- `docs/index.md` may be mutated upon build. If you update the table of contents, **you must commit `index.md`**; GitHub won't do it for you. +- This file (`docs/README.md`) should *not* be included in the build. +- `docs/index.md` may be mutated upon build, depending on what `scripts/docs-update-toc.js` does. If it updates the table of contents (because of your changes), **you must commit `docs/index.md`**. - `docs/_site/` is where the generated static site lives (and is what you see at [mochajs.org](https://mochajs.org)). It is *not* under version control. ## License -:copyright: 2016-2017 [JS Foundation](https://js.foundation) and contributors. +:copyright: 2016-2018 [JS Foundation](https://js.foundation) and contributors. Content licensed [CC-BY-4.0](https://raw.githubusercontent.com/mochajs/mocha/master/docs/LICENSE-CC-BY-4.0). diff --git a/docs/_config.yml b/docs/_config.yml index ac625af7d3..600bcbcf3b 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -3,6 +3,7 @@ exclude: - README.md - .* - LICENSE* + - API.md repository: mochajs/mocha source: docs diff --git a/docs/index.md b/docs/index.md index 659d0edda6..4ba7c501b0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -52,6 +52,7 @@ Mocha is a feature-rich JavaScript test framework running on [Node.js](https://n - [Installation](#installation) - [Getting Started](#getting-started) +- [Detects Multiple Calls to `done()`](#detects-multiple-calls-to-done) - [Assertions](#assertions) - [Asynchronous Code](#asynchronous-code) - [Synchronous Code](#synchronous-code) @@ -91,9 +92,7 @@ or as a development dependency for your project: $ npm install --save-dev mocha ``` -> To install Mocha v3.0.0 or newer with `npm`, you will need `npm` v2.14.2 or newer. Additionally, to run Mocha, you will need Node.js v4 or newer. - -Mocha can also be installed via [Bower](https://bower.io) (`bower install mocha`), and is available at [cdnjs](https://cdnjs.com/libraries/mocha). +> Mocha currently requires Node.js v6.x or newer. ## Getting Started @@ -741,7 +740,6 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass ```text Usage: mocha [debug] [options] [files] - Options: -V, --version output the version number @@ -750,7 +748,7 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass -C, --no-colors force disabling of colors -G, --growl enable growl notification support -O, --reporter-options reporter-specific options - -R, --reporter specify the reporter to use + -R, --reporter specify the reporter to use (default: spec) -S, --sort sort test files -b, --bail bail after first test failure -d, --debug enable node's debugger, synonym for node --debug @@ -761,19 +759,19 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass -r, --require require the given module -s, --slow "slow" test threshold in milliseconds [75] -t, --timeout set test-case timeout in milliseconds [2000] - -u, --ui specify user-interface (bdd|tdd|qunit|exports) + -u, --ui specify user-interface (bdd|tdd|qunit|exports) (default: bdd) -w, --watch watch files for changes --check-leaks check for global variable leaks --full-trace display the full stack trace - --compilers :,... use the given module(s) to compile files + --compilers :,... use the given module(s) to compile files (default: ) --debug-brk enable node's debugger breaking on the first line - --globals allow the given comma-delimited global [names] + --globals allow the given comma-delimited global [names] (default: ) --es_staging enable all staged features - --file include a file to be ran during the suite [file] --harmony<_classes,_generators,...> all node --harmony* flags are available --preserve-symlinks Instructs the module loader to preserve symbolic links when resolving and caching modules --icu-data-dir include ICU data --inline-diffs display actual/expected differences inline within each string + --no-diff do not show a diff on failure --inspect activate devtools in chrome --inspect-brk activate devtools in chrome and break on the first line --interfaces display available interfaces @@ -781,7 +779,7 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass --exit force shutdown of the event loop after test run: mocha will call process.exit --no-timeouts disables timeouts, given implicitly with --debug --no-warnings silence all node process warnings - --opts specify opts path + --opts specify opts path (default: test/mocha.opts) --perf-basic-prof enable perf linux profiler (basic support) --napi-modules enable experimental NAPI modules --prof log statistical profiling information @@ -794,14 +792,15 @@ Mocha supports the `err.expected` and `err.actual` properties of any thrown `Ass --trace-deprecation show stack traces on deprecations --trace-warnings show stack traces on node process warnings --use_strict enforce strict mode - --watch-extensions ,... additional extensions to monitor with --watch + --watch-extensions ,... specify extensions to monitor with --watch (default: js) --delay wait for async suite definition --allow-uncaught enable uncaught errors to propagate --forbid-only causes test marked with only to fail the suite --forbid-pending causes pending tests and test marked with skip to fail the suite + --file include a file to be ran during the suite (default: ) + --exclude a file or glob pattern to ignore (default: ) -h, --help output usage information - Commands: init initialize a client-side mocha setup at @@ -1192,14 +1191,13 @@ A typical setup might look something like the following, where we call `mocha.se Mocha Tests - +
- - - + + @@ -1207,7 +1205,6 @@ A typical setup might look something like the following, where we call `mocha.se @@ -1256,15 +1253,32 @@ The "HTML" reporter is what you see when running Mocha in the browser. It looks ## `mocha.opts` -Back on the server, Mocha will attempt to load `./test/mocha.opts` as a configuration file of sorts. The lines in this file are combined with any command-line arguments. The command-line arguments take precedence. For example, suppose you have the following `mocha.opts` file: +Back on the server, Mocha will attempt to load `"./test/mocha.opts"` as a +Run-Control file of sorts. + +Beginning-of-line comment support is available; any line _starting_ with a +hash (#) symbol will be considered a comment. Blank lines may also be used. +Any other line will be treated as a command-line argument (along with any +associated option value) to be used as a default setting. Settings should be +specified one per line. + +The lines in this file are prepended to any actual command-line arguments. +As such, actual command-line arguments will take precedence over the defaults. + +For example, suppose you have the following `mocha.opts` file: ```sh +# mocha.opts + --require should --reporter dot --ui bdd ``` -This will default the reporter to `dot`, require the `should` library, and use `bdd` as the interface. With this, you may then invoke `mocha` with additional arguments, here enabling [Growl](http://growl.info) support, and changing the reporter to `list`: +The settings above will default the reporter to `dot`, require the `should` +library, and use `bdd` as the interface. With this, you may then invoke `mocha` +with additional arguments, here enabling [Growl](http://growl.info/) support, +and changing the reporter to `list`: ```sh $ mocha --reporter list --growl @@ -1272,7 +1286,21 @@ $ mocha --reporter list --growl ## The `test/` Directory -By default, `mocha` looks for the glob `./test/*.js`, so you may want to put your tests in `test/` folder. If you want to include sub directories, use `--recursive`, since `./test/*.js` only matches files in the first level of `test` and `./test/**/*.js` only matches files in the second level of `test`. +By default, `mocha` looks for the glob `./test/*.js`, so you may want to put your tests in `test/` folder. If you want to include sub directories, pass the `--recursive` option. + +To configure where `mocha` looks for tests, you may pass your own glob: + +```sh +$ mocha --recursive "./spec/*.js" +``` + +Some shells support recursive matching by using the `**` wildcard in a glob. Bash >= 4.3 supports this with the [`globstar` option](https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html) which [must be enabled](https://github.com/mochajs/mocha/pull/3348#issuecomment-383937247) to get the same results as passing the `--recursive` option ([ZSH](http://zsh.sourceforge.net/Doc/Release/Expansion.html#Recursive-Globbing) and [Fish](https://fishshell.com/docs/current/#expand-wildcard) support this by default). With recursive matching enabled, the following is the same as passing `--recursive`: + +```sh +$ mocha "./spec/**/*.js" +``` + +*Note*: Double quotes around the glob are recommended for portability. ## Editor Plugins @@ -1343,4 +1371,4 @@ $ REPORTER=nyan npm test ## More Information -In addition to chatting with us on [Gitter](https://gitter.im/mochajs/mocha), for additional information such as using spies, mocking, and shared behaviours be sure to check out the [Mocha Wiki](https://github.com/mochajs/mocha/wiki) on GitHub. For discussions join the [Google Group](https://groups.google.com/group/mochajs). For a running example of Mocha, view [example/tests.html](example/tests.html). For the JavaScript API, view the [source](https://github.com/mochajs/mocha/blob/master/lib/mocha.js#L51). +In addition to chatting with us on [Gitter](https://gitter.im/mochajs/mocha), for additional information such as using spies, mocking, and shared behaviours be sure to check out the [Mocha Wiki](https://github.com/mochajs/mocha/wiki) on GitHub. For discussions join the [Google Group](https://groups.google.com/group/mochajs). For a running example of Mocha, view [example/tests.html](example/tests.html). For the JavaScript API, view the [API documentation](api/) or the [source](https://github.com/mochajs/mocha/blob/master/lib/mocha.js#L51). diff --git a/jsdoc.conf.json b/jsdoc.conf.json new file mode 100644 index 0000000000..28824e989d --- /dev/null +++ b/jsdoc.conf.json @@ -0,0 +1,32 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "source": { + "include": ["lib/", "./docs/API.md"] + }, + "plugins": ["plugins/markdown"], + "opts": { + "encoding": "utf8", + "template": "node_modules/@mocha/docdash", + "destination": "docs/api", + "recurse": true, + "verbose": true + }, + "markdown": { + "parser": "gfm", + "hardwrap": true + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "default": { + "outputSourceFiles": true, + "includeDate": false + } + }, + "mocha-docdash": { + "static": false, + "sort": true + } +} diff --git a/karma.conf.js b/karma.conf.js index 1db52054f1..7b9036908c 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -16,11 +16,7 @@ const browserPlatformPairs = { module.exports = config => { let bundleDirpath; const cfg = { - frameworks: [ - 'browserify', - 'expect', - 'mocha' - ], + frameworks: ['browserify', 'mocha'], files: [ // we use the BDD interface for all of the tests that // aren't interface-specific. @@ -32,8 +28,9 @@ module.exports = config => { }, browserify: { debug: true, - configure: function configure (b) { - b.ignore('glob') + configure: function configure(b) { + b + .ignore('glob') .ignore('fs') .ignore('path') .ignore('supports-color') @@ -43,8 +40,10 @@ module.exports = config => { } if (bundleDirpath) { // write bundle to directory for debugging - fs.writeFileSync(path.join(bundleDirpath, - `mocha.${Date.now()}.js`), content); + fs.writeFileSync( + path.join(bundleDirpath, `mocha.${Date.now()}.js`), + content + ); } }); } @@ -142,8 +141,8 @@ module.exports = config => { // support cfg.browsers = ['ChromeHeadless']; cfg.files = [ - 'test/browser-fixtures/esm.fixture.html', - 'test/browser-specific/esm.spec.js' + 'test/browser-specific/esm.spec.js', + 'test/browser-fixtures/esm.fixture.html' ]; break; default: @@ -152,10 +151,16 @@ module.exports = config => { } } + cfg.files.unshift( + 'node_modules/unexpected/unexpected.js', + {pattern: 'node_modules/unexpected/unexpected.js.map', included: false}, + 'test/browser-specific/setup.js' + ); + config.set(cfg); }; -function addSauceTests (cfg) { +function addSauceTests(cfg) { cfg.reporters.push('saucelabs'); const browsers = Object.keys(browserPlatformPairs); cfg.browsers = cfg.browsers.concat(browsers); diff --git a/lib/browser/.eslintrc.yml b/lib/browser/.eslintrc.yml deleted file mode 100644 index d85f537d3b..0000000000 --- a/lib/browser/.eslintrc.yml +++ /dev/null @@ -1,4 +0,0 @@ -env: - node: false - browser: false - commonjs: true diff --git a/lib/browser/progress.js b/lib/browser/progress.js index 2b23656b99..7bf400b58e 100644 --- a/lib/browser/progress.js +++ b/lib/browser/progress.js @@ -9,7 +9,7 @@ module.exports = Progress; /** * Initialize a new `Progress` indicator. */ -function Progress () { +function Progress() { this.percent = 0; this.size(0); this.fontSize(11); @@ -23,7 +23,7 @@ function Progress () { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.size = function (size) { +Progress.prototype.size = function(size) { this._size = size; return this; }; @@ -35,7 +35,7 @@ Progress.prototype.size = function (size) { * @param {string} text * @return {Progress} Progress instance. */ -Progress.prototype.text = function (text) { +Progress.prototype.text = function(text) { this._text = text; return this; }; @@ -47,7 +47,7 @@ Progress.prototype.text = function (text) { * @param {number} size * @return {Progress} Progress instance. */ -Progress.prototype.fontSize = function (size) { +Progress.prototype.fontSize = function(size) { this._fontSize = size; return this; }; @@ -58,7 +58,7 @@ Progress.prototype.fontSize = function (size) { * @param {string} family * @return {Progress} Progress instance. */ -Progress.prototype.font = function (family) { +Progress.prototype.font = function(family) { this._font = family; return this; }; @@ -69,7 +69,7 @@ Progress.prototype.font = function (family) { * @param {number} n * @return {Progress} Progress instance. */ -Progress.prototype.update = function (n) { +Progress.prototype.update = function(n) { this.percent = n; return this; }; @@ -80,7 +80,7 @@ Progress.prototype.update = function (n) { * @param {CanvasRenderingContext2d} ctx * @return {Progress} Progress instance. */ -Progress.prototype.draw = function (ctx) { +Progress.prototype.draw = function(ctx) { try { var percent = Math.min(this.percent, 100); var size = this._size; @@ -112,7 +112,7 @@ Progress.prototype.draw = function (ctx) { var w = ctx.measureText(text).width; ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1); - } catch (err) { + } catch (ignore) { // don't fail if we can't render progress } return this; diff --git a/lib/browser/tty.js b/lib/browser/tty.js index c77f7e99a6..e903365023 100644 --- a/lib/browser/tty.js +++ b/lib/browser/tty.js @@ -1,10 +1,10 @@ 'use strict'; -exports.isatty = function isatty () { +exports.isatty = function isatty() { return true; }; -exports.getWindowSize = function getWindowSize () { +exports.getWindowSize = function getWindowSize() { if ('innerHeight' in global) { return [global.innerHeight, global.innerWidth]; } diff --git a/lib/context.js b/lib/context.js index f5a80118c0..812162b137 100644 --- a/lib/context.js +++ b/lib/context.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Context + */ /** * Expose `Context`. */ @@ -11,16 +13,16 @@ module.exports = Context; * * @api private */ -function Context () {} +function Context() {} /** * Set or get the context `Runnable` to `runnable`. * * @api private * @param {Runnable} runnable - * @return {Context} + * @return {Context} context */ -Context.prototype.runnable = function (runnable) { +Context.prototype.runnable = function(runnable) { if (!arguments.length) { return this._runnable; } @@ -35,7 +37,7 @@ Context.prototype.runnable = function (runnable) { * @param {number} ms * @return {Context} self */ -Context.prototype.timeout = function (ms) { +Context.prototype.timeout = function(ms) { if (!arguments.length) { return this.runnable().timeout(); } @@ -50,7 +52,7 @@ Context.prototype.timeout = function (ms) { * @param {boolean} enabled * @return {Context} self */ -Context.prototype.enableTimeouts = function (enabled) { +Context.prototype.enableTimeouts = function(enabled) { if (!arguments.length) { return this.runnable().enableTimeouts(); } @@ -65,7 +67,7 @@ Context.prototype.enableTimeouts = function (enabled) { * @param {number} ms * @return {Context} self */ -Context.prototype.slow = function (ms) { +Context.prototype.slow = function(ms) { if (!arguments.length) { return this.runnable().slow(); } @@ -79,7 +81,7 @@ Context.prototype.slow = function (ms) { * @api private * @throws Pending */ -Context.prototype.skip = function () { +Context.prototype.skip = function() { this.runnable().skip(); }; @@ -90,7 +92,7 @@ Context.prototype.skip = function () { * @param {number} n * @return {Context} self */ -Context.prototype.retries = function (n) { +Context.prototype.retries = function(n) { if (!arguments.length) { return this.runnable().retries(); } diff --git a/lib/hook.js b/lib/hook.js index 392a4cfb4d..71440d23d0 100644 --- a/lib/hook.js +++ b/lib/hook.js @@ -1,9 +1,5 @@ 'use strict'; -/** - * Module dependencies. - */ - var Runnable = require('./runnable'); var inherits = require('./utils').inherits; @@ -14,13 +10,14 @@ var inherits = require('./utils').inherits; module.exports = Hook; /** - * Initialize a new `Hook` with the given `title` and callback `fn`. + * Initialize a new `Hook` with the given `title` and callback `fn` * + * @class + * @extends Runnable * @param {String} title * @param {Function} fn - * @api private */ -function Hook (title, fn) { +function Hook(title, fn) { Runnable.call(this, title, fn); this.type = 'hook'; } @@ -33,11 +30,12 @@ inherits(Hook, Runnable); /** * Get or set the test `err`. * + * @memberof Hook + * @public * @param {Error} err * @return {Error} - * @api public */ -Hook.prototype.error = function (err) { +Hook.prototype.error = function(err) { if (!arguments.length) { err = this._error; this._error = null; diff --git a/lib/interfaces/bdd.js b/lib/interfaces/bdd.js index 7a54375a94..730e67e0e8 100644 --- a/lib/interfaces/bdd.js +++ b/lib/interfaces/bdd.js @@ -1,9 +1,5 @@ 'use strict'; -/** - * Module dependencies. - */ - var Test = require('../test'); /** @@ -23,10 +19,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function (suite) { +module.exports = function bddInterface(suite) { var suites = [suite]; - suite.on('pre-require', function (context, file, mocha) { + suite.on('pre-require', function(context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -40,7 +36,7 @@ module.exports = function (suite) { * and/or tests. */ - context.describe = context.context = function (title, fn) { + context.describe = context.context = function(title, fn) { return common.suite.create({ title: title, file: file, @@ -52,7 +48,10 @@ module.exports = function (suite) { * Pending describe. */ - context.xdescribe = context.xcontext = context.describe.skip = function (title, fn) { + context.xdescribe = context.xcontext = context.describe.skip = function( + title, + fn + ) { return common.suite.skip({ title: title, file: file, @@ -64,7 +63,7 @@ module.exports = function (suite) { * Exclusive suite. */ - context.describe.only = function (title, fn) { + context.describe.only = function(title, fn) { return common.suite.only({ title: title, file: file, @@ -78,7 +77,7 @@ module.exports = function (suite) { * acting as a thunk. */ - context.it = context.specify = function (title, fn) { + context.it = context.specify = function(title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -93,7 +92,7 @@ module.exports = function (suite) { * Exclusive test-case. */ - context.it.only = function (title, fn) { + context.it.only = function(title, fn) { return common.test.only(mocha, context.it(title, fn)); }; @@ -101,14 +100,14 @@ module.exports = function (suite) { * Pending test case. */ - context.xit = context.xspecify = context.it.skip = function (title) { + context.xit = context.xspecify = context.it.skip = function(title) { return context.it(title); }; /** * Number of attempts to retry. */ - context.it.retries = function (n) { + context.it.retries = function(n) { context.retries(n); }; }); diff --git a/lib/interfaces/common.js b/lib/interfaces/common.js index f0cdd4eb1a..4ca340a608 100644 --- a/lib/interfaces/common.js +++ b/lib/interfaces/common.js @@ -10,7 +10,7 @@ var Suite = require('../suite'); * @param {Mocha} mocha * @return {Object} An object containing common functions. */ -module.exports = function (suites, context, mocha) { +module.exports = function(suites, context, mocha) { return { /** * This is only present if flag --delay is passed into Mocha. It triggers @@ -19,8 +19,8 @@ module.exports = function (suites, context, mocha) { * @param {Suite} suite The root suite. * @return {Function} A function which runs the root suite */ - runWithSuite: function runWithSuite (suite) { - return function run () { + runWithSuite: function runWithSuite(suite) { + return function run() { suite.run(); }; }, @@ -31,7 +31,7 @@ module.exports = function (suites, context, mocha) { * @param {string} name * @param {Function} fn */ - before: function (name, fn) { + before: function(name, fn) { suites[0].beforeAll(name, fn); }, @@ -41,7 +41,7 @@ module.exports = function (suites, context, mocha) { * @param {string} name * @param {Function} fn */ - after: function (name, fn) { + after: function(name, fn) { suites[0].afterAll(name, fn); }, @@ -51,7 +51,7 @@ module.exports = function (suites, context, mocha) { * @param {string} name * @param {Function} fn */ - beforeEach: function (name, fn) { + beforeEach: function(name, fn) { suites[0].beforeEach(name, fn); }, @@ -61,7 +61,7 @@ module.exports = function (suites, context, mocha) { * @param {string} name * @param {Function} fn */ - afterEach: function (name, fn) { + afterEach: function(name, fn) { suites[0].afterEach(name, fn); }, @@ -73,7 +73,7 @@ module.exports = function (suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - only: function only (opts) { + only: function only(opts) { opts.isOnly = true; return this.create(opts); }, @@ -85,7 +85,7 @@ module.exports = function (suites, context, mocha) { * @param {Object} opts * @returns {Suite} */ - skip: function skip (opts) { + skip: function skip(opts) { opts.pending = true; return this.create(opts); }, @@ -100,7 +100,7 @@ module.exports = function (suites, context, mocha) { * @param {boolean} [opts.isOnly] Is Suite exclusive? * @returns {Suite} */ - create: function create (opts) { + create: function create(opts) { var suite = Suite.create(suites[0], opts.title); suite.pending = Boolean(opts.pending); suite.file = opts.file; @@ -112,7 +112,11 @@ module.exports = function (suites, context, mocha) { opts.fn.call(suite); suites.shift(); } else if (typeof opts.fn === 'undefined' && !suite.pending) { - throw new Error('Suite "' + suite.fullTitle() + '" was defined but no callback was supplied. Supply a callback or explicitly skip the suite.'); + throw new Error( + 'Suite "' + + suite.fullTitle() + + '" was defined but no callback was supplied. Supply a callback or explicitly skip the suite.' + ); } else if (!opts.fn && suite.pending) { suites.shift(); } @@ -122,7 +126,6 @@ module.exports = function (suites, context, mocha) { }, test: { - /** * Exclusive test-case. * @@ -130,7 +133,7 @@ module.exports = function (suites, context, mocha) { * @param {Function} test * @returns {*} */ - only: function (mocha, test) { + only: function(mocha, test) { test.parent._onlyTests = test.parent._onlyTests.concat(test); return test; }, @@ -140,7 +143,7 @@ module.exports = function (suites, context, mocha) { * * @param {string} title */ - skip: function (title) { + skip: function(title) { context.test(title); }, @@ -149,7 +152,7 @@ module.exports = function (suites, context, mocha) { * * @param {number} n */ - retries: function (n) { + retries: function(n) { context.retries(n); } } diff --git a/lib/interfaces/exports.js b/lib/interfaces/exports.js index debfaee3b8..1a5c5bbc2c 100644 --- a/lib/interfaces/exports.js +++ b/lib/interfaces/exports.js @@ -1,9 +1,4 @@ 'use strict'; - -/** - * Module dependencies. - */ - var Suite = require('../suite'); var Test = require('../test'); @@ -24,12 +19,12 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function (suite) { +module.exports = function(suite) { var suites = [suite]; suite.on('require', visit); - function visit (obj, file) { + function visit(obj, file) { var suite; for (var key in obj) { if (typeof obj[key] === 'function') { diff --git a/lib/interfaces/qunit.js b/lib/interfaces/qunit.js index 44491db926..ad3c900c2c 100644 --- a/lib/interfaces/qunit.js +++ b/lib/interfaces/qunit.js @@ -1,9 +1,5 @@ 'use strict'; -/** - * Module dependencies. - */ - var Test = require('../test'); /** @@ -31,10 +27,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function (suite) { +module.exports = function qUnitInterface(suite) { var suites = [suite]; - suite.on('pre-require', function (context, file, mocha) { + suite.on('pre-require', function(context, file, mocha) { var common = require('./common')(suites, context, mocha); context.before = common.before; @@ -46,7 +42,7 @@ module.exports = function (suite) { * Describe a "suite" with the given `title`. */ - context.suite = function (title) { + context.suite = function(title) { if (suites.length > 1) { suites.shift(); } @@ -61,7 +57,7 @@ module.exports = function (suite) { * Exclusive Suite. */ - context.suite.only = function (title) { + context.suite.only = function(title) { if (suites.length > 1) { suites.shift(); } @@ -78,7 +74,7 @@ module.exports = function (suite) { * acting as a thunk. */ - context.test = function (title, fn) { + context.test = function(title, fn) { var test = new Test(title, fn); test.file = file; suites[0].addTest(test); @@ -89,7 +85,7 @@ module.exports = function (suite) { * Exclusive test-case. */ - context.test.only = function (title, fn) { + context.test.only = function(title, fn) { return common.test.only(mocha, context.test(title, fn)); }; diff --git a/lib/interfaces/tdd.js b/lib/interfaces/tdd.js index 253e221575..1e72cf7ac3 100644 --- a/lib/interfaces/tdd.js +++ b/lib/interfaces/tdd.js @@ -1,9 +1,5 @@ 'use strict'; -/** - * Module dependencies. - */ - var Test = require('../test'); /** @@ -31,10 +27,10 @@ var Test = require('../test'); * * @param {Suite} suite Root suite. */ -module.exports = function (suite) { +module.exports = function(suite) { var suites = [suite]; - suite.on('pre-require', function (context, file, mocha) { + suite.on('pre-require', function(context, file, mocha) { var common = require('./common')(suites, context, mocha); context.setup = common.beforeEach; @@ -47,7 +43,7 @@ module.exports = function (suite) { * Describe a "suite" with the given `title` and callback `fn` containing * nested suites and/or tests. */ - context.suite = function (title, fn) { + context.suite = function(title, fn) { return common.suite.create({ title: title, file: file, @@ -58,7 +54,7 @@ module.exports = function (suite) { /** * Pending suite. */ - context.suite.skip = function (title, fn) { + context.suite.skip = function(title, fn) { return common.suite.skip({ title: title, file: file, @@ -69,7 +65,7 @@ module.exports = function (suite) { /** * Exclusive test-case. */ - context.suite.only = function (title, fn) { + context.suite.only = function(title, fn) { return common.suite.only({ title: title, file: file, @@ -81,7 +77,7 @@ module.exports = function (suite) { * Describe a specification or test-case with the given `title` and * callback `fn` acting as a thunk. */ - context.test = function (title, fn) { + context.test = function(title, fn) { var suite = suites[0]; if (suite.isPending()) { fn = null; @@ -96,7 +92,7 @@ module.exports = function (suite) { * Exclusive test-case. */ - context.test.only = function (title, fn) { + context.test.only = function(title, fn) { return common.test.only(mocha, context.test(title, fn)); }; diff --git a/lib/mocha.js b/lib/mocha.js index 2484ea5be8..673dbec394 100644 --- a/lib/mocha.js +++ b/lib/mocha.js @@ -6,19 +6,11 @@ * MIT Licensed */ -/** - * Module dependencies. - */ - var escapeRe = require('escape-string-regexp'); var path = require('path'); var reporters = require('./reporters'); var utils = require('./utils'); -/** - * Expose `Mocha`. - */ - exports = module.exports = Mocha; /** @@ -34,11 +26,25 @@ if (!process.browser) { * Expose internals. */ +/** + * @public + * @class utils + * @memberof Mocha + */ exports.utils = utils; exports.interfaces = require('./interfaces'); +/** + * + * @memberof Mocha + * @public + */ exports.reporters = reporters; exports.Runnable = require('./runnable'); exports.Context = require('./context'); +/** + * + * @memberof Mocha + */ exports.Runner = require('./runner'); exports.Suite = require('./suite'); exports.Hook = require('./hook'); @@ -47,12 +53,12 @@ exports.Test = require('./test'); /** * Return image `name` path. * - * @api private + * @private * @param {string} name * @return {string} */ -function image (name) { - return path.join(__dirname, '../images', name + '.png'); +function image(name) { + return path.join(__dirname, '..', 'assets', 'growl', name + '.png'); } /** @@ -71,10 +77,10 @@ function image (name) { * - `fullTrace` display the full stack-trace on failing * - `grep` string or regexp to filter tests with * + * @class Mocha * @param {Object} options - * @api public */ -function Mocha (options) { +function Mocha(options) { options = options || {}; this.files = []; this.options = options; @@ -106,10 +112,11 @@ function Mocha (options) { /** * Enable or disable bailing on the first failure. * + * @public * @api public * @param {boolean} [bail] */ -Mocha.prototype.bail = function (bail) { +Mocha.prototype.bail = function(bail) { if (!arguments.length) { bail = true; } @@ -120,10 +127,11 @@ Mocha.prototype.bail = function (bail) { /** * Add test `file`. * + * @public * @api public * @param {string} file */ -Mocha.prototype.addFile = function (file) { +Mocha.prototype.addFile = function(file) { this.files.push(file); return this; }; @@ -131,13 +139,14 @@ Mocha.prototype.addFile = function (file) { /** * Set reporter to `reporter`, defaults to "spec". * + * @public * @param {String|Function} reporter name or constructor * @param {Object} reporterOptions optional options * @api public * @param {string|Function} reporter name or constructor * @param {Object} reporterOptions optional options */ -Mocha.prototype.reporter = function (reporter, reporterOptions) { +Mocha.prototype.reporter = function(reporter, reporterOptions) { if (typeof reporter === 'function') { this._reporter = reporter; } else { @@ -157,18 +166,28 @@ Mocha.prototype.reporter = function (reporter, reporterOptions) { try { _reporter = require(path.resolve(process.cwd(), reporter)); } catch (_err) { - err.message.indexOf('Cannot find module') !== -1 ? console.warn('"' + reporter + '" reporter not found') - : console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack); + err.message.indexOf('Cannot find module') !== -1 + ? console.warn('"' + reporter + '" reporter not found') + : console.warn( + '"' + + reporter + + '" reporter blew up with error:\n' + + err.stack + ); } } else { - console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack); + console.warn( + '"' + reporter + '" reporter blew up with error:\n' + err.stack + ); } } } if (!_reporter && reporter === 'teamcity') { - console.warn('The Teamcity reporter was moved to a package named ' + - 'mocha-teamcity-reporter ' + - '(https://npmjs.org/package/mocha-teamcity-reporter).'); + console.warn( + 'The Teamcity reporter was moved to a package named ' + + 'mocha-teamcity-reporter ' + + '(https://npmjs.org/package/mocha-teamcity-reporter).' + ); } if (!_reporter) { throw new Error('invalid reporter "' + reporter + '"'); @@ -181,11 +200,11 @@ Mocha.prototype.reporter = function (reporter, reporterOptions) { /** * Set test UI `name`, defaults to "bdd". - * + * @public * @api public * @param {string} bdd */ -Mocha.prototype.ui = function (name) { +Mocha.prototype.ui = function(name) { name = name || 'bdd'; this._ui = exports.interfaces[name]; if (!this._ui) { @@ -197,7 +216,7 @@ Mocha.prototype.ui = function (name) { } this._ui = this._ui(this.suite); - this.suite.on('pre-require', function (context) { + this.suite.on('pre-require', function(context) { exports.afterEach = context.afterEach || context.teardown; exports.after = context.after || context.suiteTeardown; exports.beforeEach = context.beforeEach || context.setup; @@ -222,10 +241,10 @@ Mocha.prototype.ui = function (name) { * * @api private */ -Mocha.prototype.loadFiles = function (fn) { +Mocha.prototype.loadFiles = function(fn) { var self = this; var suite = this.suite; - this.files.forEach(function (file) { + this.files.forEach(function(file) { file = path.resolve(file); suite.emit('pre-require', global, file, self); suite.emit('require', require(file), file, self); @@ -239,14 +258,14 @@ Mocha.prototype.loadFiles = function (fn) { * * @api private */ -Mocha.prototype._growl = function (runner, reporter) { +Mocha.prototype._growl = function(runner, reporter) { var notify = require('growl'); - runner.on('end', function () { + runner.on('end', function() { var stats = reporter.stats; if (stats.failures) { var msg = stats.failures + ' of ' + runner.total + ' tests failed'; - notify(msg, { name: 'mocha', title: 'Failed', image: image('error') }); + notify(msg, {name: 'mocha', title: 'Failed', image: image('error')}); } else { notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', { name: 'mocha', @@ -260,24 +279,26 @@ Mocha.prototype._growl = function (runner, reporter) { /** * Escape string and add it to grep as a regexp. * + * @public * @api public * @param str * @returns {Mocha} */ -Mocha.prototype.fgrep = function (str) { +Mocha.prototype.fgrep = function(str) { return this.grep(new RegExp(escapeRe(str))); }; /** * Add regexp to grep, if `re` is a string it is escaped. * + * @public * @param {RegExp|String} re * @return {Mocha} * @api public * @param {RegExp|string} re * @return {Mocha} */ -Mocha.prototype.grep = function (re) { +Mocha.prototype.grep = function(re) { if (utils.isString(re)) { // extract args if it's regex-like, i.e: [string, pattern, flag] var arg = re.match(/^\/(.*)\/(g|i|)$|.*/); @@ -290,10 +311,11 @@ Mocha.prototype.grep = function (re) { /** * Invert `.grep()` matches. * + * @public * @return {Mocha} * @api public */ -Mocha.prototype.invert = function () { +Mocha.prototype.invert = function() { this.options.invert = true; return this; }; @@ -301,13 +323,14 @@ Mocha.prototype.invert = function () { /** * Ignore global leaks. * + * @public * @param {Boolean} ignore * @return {Mocha} * @api public * @param {boolean} ignore * @return {Mocha} */ -Mocha.prototype.ignoreLeaks = function (ignore) { +Mocha.prototype.ignoreLeaks = function(ignore) { this.options.ignoreLeaks = Boolean(ignore); return this; }; @@ -317,8 +340,9 @@ Mocha.prototype.ignoreLeaks = function (ignore) { * * @return {Mocha} * @api public + * @public */ -Mocha.prototype.checkLeaks = function () { +Mocha.prototype.checkLeaks = function() { this.options.ignoreLeaks = false; return this; }; @@ -328,8 +352,9 @@ Mocha.prototype.checkLeaks = function () { * * @return {Mocha} * @api public + * @public */ -Mocha.prototype.fullTrace = function () { +Mocha.prototype.fullTrace = function() { this.options.fullStackTrace = true; return this; }; @@ -339,8 +364,9 @@ Mocha.prototype.fullTrace = function () { * * @return {Mocha} * @api public + * @public */ -Mocha.prototype.growl = function () { +Mocha.prototype.growl = function() { this.options.growl = true; return this; }; @@ -351,10 +377,11 @@ Mocha.prototype.growl = function () { * @param {Array|String} globals * @return {Mocha} * @api public + * @public * @param {Array|string} globals * @return {Mocha} */ -Mocha.prototype.globals = function (globals) { +Mocha.prototype.globals = function(globals) { this.options.globals = (this.options.globals || []).concat(globals); return this; }; @@ -365,10 +392,11 @@ Mocha.prototype.globals = function (globals) { * @param {Boolean} colors * @return {Mocha} * @api public + * @public * @param {boolean} colors * @return {Mocha} */ -Mocha.prototype.useColors = function (colors) { +Mocha.prototype.useColors = function(colors) { if (colors !== undefined) { this.options.useColors = colors; } @@ -381,10 +409,11 @@ Mocha.prototype.useColors = function (colors) { * @param {Boolean} inlineDiffs * @return {Mocha} * @api public + * @public * @param {boolean} inlineDiffs * @return {Mocha} */ -Mocha.prototype.useInlineDiffs = function (inlineDiffs) { +Mocha.prototype.useInlineDiffs = function(inlineDiffs) { this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs; return this; }; @@ -395,10 +424,11 @@ Mocha.prototype.useInlineDiffs = function (inlineDiffs) { * @param {Boolean} hideDiff * @return {Mocha} * @api public + * @public * @param {boolean} hideDiff * @return {Mocha} */ -Mocha.prototype.hideDiff = function (hideDiff) { +Mocha.prototype.hideDiff = function(hideDiff) { this.options.hideDiff = hideDiff !== undefined && hideDiff; return this; }; @@ -409,10 +439,11 @@ Mocha.prototype.hideDiff = function (hideDiff) { * @param {Number} timeout * @return {Mocha} * @api public + * @public * @param {number} timeout * @return {Mocha} */ -Mocha.prototype.timeout = function (timeout) { +Mocha.prototype.timeout = function(timeout) { this.suite.timeout(timeout); return this; }; @@ -423,8 +454,9 @@ Mocha.prototype.timeout = function (timeout) { * @param {Number} retry times * @return {Mocha} * @api public + * @public */ -Mocha.prototype.retries = function (n) { +Mocha.prototype.retries = function(n) { this.suite.retries(n); return this; }; @@ -435,10 +467,11 @@ Mocha.prototype.retries = function (n) { * @param {Number} slow * @return {Mocha} * @api public + * @public * @param {number} slow * @return {Mocha} */ -Mocha.prototype.slow = function (slow) { +Mocha.prototype.slow = function(slow) { this.suite.slow(slow); return this; }; @@ -449,11 +482,14 @@ Mocha.prototype.slow = function (slow) { * @param {Boolean} enabled * @return {Mocha} * @api public + * @public * @param {boolean} enabled * @return {Mocha} */ -Mocha.prototype.enableTimeouts = function (enabled) { - this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true); +Mocha.prototype.enableTimeouts = function(enabled) { + this.suite.enableTimeouts( + arguments.length && enabled !== undefined ? enabled : true + ); return this; }; @@ -462,8 +498,9 @@ Mocha.prototype.enableTimeouts = function (enabled) { * * @return {Mocha} * @api public + * @public */ -Mocha.prototype.asyncOnly = function () { +Mocha.prototype.asyncOnly = function() { this.options.asyncOnly = true; return this; }; @@ -472,8 +509,9 @@ Mocha.prototype.asyncOnly = function () { * Disable syntax highlighting (in browser). * * @api public + * @public */ -Mocha.prototype.noHighlighting = function () { +Mocha.prototype.noHighlighting = function() { this.options.noHighlighting = true; return this; }; @@ -483,8 +521,9 @@ Mocha.prototype.noHighlighting = function () { * * @return {Mocha} * @api public + * @public */ -Mocha.prototype.allowUncaught = function () { +Mocha.prototype.allowUncaught = function() { this.options.allowUncaught = true; return this; }; @@ -493,7 +532,7 @@ Mocha.prototype.allowUncaught = function () { * Delay root suite execution. * @returns {Mocha} */ -Mocha.prototype.delay = function delay () { +Mocha.prototype.delay = function delay() { this.options.delay = true; return this; }; @@ -502,7 +541,7 @@ Mocha.prototype.delay = function delay () { * Tests marked only fail the suite * @returns {Mocha} */ -Mocha.prototype.forbidOnly = function () { +Mocha.prototype.forbidOnly = function() { this.options.forbidOnly = true; return this; }; @@ -511,7 +550,7 @@ Mocha.prototype.forbidOnly = function () { * Pending tests and tests marked skip fail the suite * @returns {Mocha} */ -Mocha.prototype.forbidPending = function () { +Mocha.prototype.forbidPending = function() { this.options.forbidPending = true; return this; }; @@ -528,10 +567,11 @@ Mocha.prototype.forbidPending = function () { * cache first in whichever manner best suits your needs. * * @api public + * @public * @param {Function} fn * @return {Runner} */ -Mocha.prototype.run = function (fn) { +Mocha.prototype.run = function(fn) { if (this.files.length) { this.loadFiles(); } @@ -561,7 +601,7 @@ Mocha.prototype.run = function (fn) { exports.reporters.Base.inlineDiffs = options.useInlineDiffs; exports.reporters.Base.hideDiff = options.hideDiff; - function done (failures) { + function done(failures) { if (reporter.done) { reporter.done(failures, fn); } else { diff --git a/lib/ms.js b/lib/ms.js index 2fdcaf3242..91c55afaa4 100644 --- a/lib/ms.js +++ b/lib/ms.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module milliseconds + */ /** * Helpers. */ @@ -13,11 +15,13 @@ var y = d * 365.25; /** * Parse or format the given `val`. * + * @memberof Mocha + * @public * @api public * @param {string|number} val * @return {string|number} */ -module.exports = function (val) { +module.exports = function(val) { if (typeof val === 'string') { return parse(val); } @@ -31,8 +35,10 @@ module.exports = function (val) { * @param {string} str * @return {number} */ -function parse (str) { - var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str); +function parse(str) { + var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec( + str + ); if (!match) { return; } @@ -62,7 +68,7 @@ function parse (str) { case 'ms': return n; default: - // No default case + // No default case } } @@ -73,7 +79,7 @@ function parse (str) { * @param {number} ms * @return {string} */ -function format (ms) { +function format(ms) { if (ms >= d) { return Math.round(ms / d) + 'd'; } diff --git a/lib/pending.js b/lib/pending.js index c780104610..bb9a505337 100644 --- a/lib/pending.js +++ b/lib/pending.js @@ -1,9 +1,5 @@ 'use strict'; -/** - * Expose `Pending`. - */ - module.exports = Pending; /** @@ -11,6 +7,6 @@ module.exports = Pending; * * @param {string} message */ -function Pending (message) { +function Pending(message) { this.message = message; } diff --git a/lib/reporters/base.js b/lib/reporters/base.js index aba25d04f7..fd72c17e26 100644 --- a/lib/reporters/base.js +++ b/lib/reporters/base.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Base + */ /** * Module dependencies. */ @@ -39,7 +41,9 @@ var isatty = tty.isatty(1) && tty.isatty(2); * Enable coloring by default, except in the browser interface. */ -exports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COLORS !== undefined)); +exports.useColors = + !process.browser && + (supportsColor.stdout || process.env.MOCHA_COLORS !== undefined); /** * Inline diffs instead of +/- @@ -103,12 +107,12 @@ if (process.platform === 'win32') { * @return {string} * @api private */ -var color = exports.color = function (type, str) { +var color = (exports.color = function(type, str) { if (!exports.useColors) { return String(str); } return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m'; -}; +}); /** * Expose term window size, with some defaults for when stderr is not a tty. @@ -129,23 +133,23 @@ if (isatty) { */ exports.cursor = { - hide: function () { + hide: function() { isatty && process.stdout.write('\u001b[?25l'); }, - show: function () { + show: function() { isatty && process.stdout.write('\u001b[?25h'); }, - deleteLine: function () { + deleteLine: function() { isatty && process.stdout.write('\u001b[2K'); }, - beginningOfLine: function () { + beginningOfLine: function() { isatty && process.stdout.write('\u001b[0G'); }, - CR: function () { + CR: function() { if (isatty) { exports.cursor.deleteLine(); exports.cursor.beginningOfLine(); @@ -155,11 +159,16 @@ exports.cursor = { } }; -function showDiff (err) { - return err && err.showDiff !== false && sameType(err.actual, err.expected) && err.expected !== undefined; +function showDiff(err) { + return ( + err && + err.showDiff !== false && + sameType(err.actual, err.expected) && + err.expected !== undefined + ); } -function stringifyDiffObjs (err) { +function stringifyDiffObjs(err) { if (!utils.isString(err.actual) || !utils.isString(err.expected)) { err.actual = utils.stringify(err.actual); err.expected = utils.stringify(err.expected); @@ -176,24 +185,28 @@ function stringifyDiffObjs (err) { * @param {string} expected * @return {string} Diff */ -var generateDiff = exports.generateDiff = function (actual, expected) { +var generateDiff = (exports.generateDiff = function(actual, expected) { return exports.inlineDiffs ? inlineDiff(actual, expected) : unifiedDiff(actual, expected); -}; +}); /** * Output the given `failures` as a list. * + * @public + * @memberof Mocha.reporters.Base + * @variation 1 * @param {Array} failures * @api public */ -exports.list = function (failures) { +exports.list = function(failures) { console.log(); - failures.forEach(function (test, i) { + failures.forEach(function(test, i) { // format - var fmt = color('error title', ' %s) %s:\n') + + var fmt = + color('error title', ' %s) %s:\n') + color('error message', ' %s') + color('error stack', '\n%s\n'); @@ -227,7 +240,8 @@ exports.list = function (failures) { // explicitly show diff if (!exports.hideDiff && showDiff(err)) { stringifyDiffObjs(err); - fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); + fmt = + color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n'); var match = message.match(/^([^:]+): expected/); msg = '\n ' + color('error message', match ? match[1] : msg); @@ -239,7 +253,7 @@ exports.list = function (failures) { // indented test title var testTitle = ''; - test.titlePath().forEach(function (str, index) { + test.titlePath().forEach(function(str, index) { if (index !== 0) { testTitle += '\n '; } @@ -249,7 +263,7 @@ exports.list = function (failures) { testTitle += str; }); - console.log(fmt, (i + 1), testTitle, msg, stack); + console.log(fmt, i + 1, testTitle, msg, stack); }); }; @@ -261,13 +275,22 @@ exports.list = function (failures) { * stats such as test duration, number * of tests passed / failed etc. * + * @memberof Mocha.reporters + * @public + * @class * @param {Runner} runner * @api public */ -function Base (runner) { - var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 }; - var failures = this.failures = []; +function Base(runner) { + var stats = (this.stats = { + suites: 0, + tests: 0, + passes: 0, + pending: 0, + failures: 0 + }); + var failures = (this.failures = []); if (!runner) { return; @@ -276,21 +299,21 @@ function Base (runner) { runner.stats = stats; - runner.on('start', function () { + runner.on('start', function() { stats.start = new Date(); }); - runner.on('suite', function (suite) { + runner.on('suite', function(suite) { stats.suites = stats.suites || 0; suite.root || stats.suites++; }); - runner.on('test end', function () { + runner.on('test end', function() { stats.tests = stats.tests || 0; stats.tests++; }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { stats.passes = stats.passes || 0; if (test.duration > test.slow()) { @@ -304,7 +327,7 @@ function Base (runner) { stats.passes++; }); - runner.on('fail', function (test, err) { + runner.on('fail', function(test, err) { stats.failures = stats.failures || 0; stats.failures++; if (showDiff(err)) { @@ -314,12 +337,12 @@ function Base (runner) { failures.push(test); }); - runner.once('end', function () { + runner.once('end', function() { stats.end = new Date(); stats.duration = stats.end - stats.start; }); - runner.on('pending', function () { + runner.on('pending', function() { stats.pending++; }); } @@ -328,27 +351,27 @@ function Base (runner) { * Output common epilogue used by many of * the bundled reporters. * + * @memberof Mocha.reporters.Base + * @public * @api public */ -Base.prototype.epilogue = function () { +Base.prototype.epilogue = function() { var stats = this.stats; var fmt; console.log(); // passes - fmt = color('bright pass', ' ') + + fmt = + color('bright pass', ' ') + color('green', ' %d passing') + color('light', ' (%s)'); - console.log(fmt, - stats.passes || 0, - ms(stats.duration)); + console.log(fmt, stats.passes || 0, ms(stats.duration)); // pending if (stats.pending) { - fmt = color('pending', ' ') + - color('pending', ' %d pending'); + fmt = color('pending', ' ') + color('pending', ' %d pending'); console.log(fmt, stats.pending); } @@ -374,7 +397,7 @@ Base.prototype.epilogue = function () { * @param {string} len * @return {string} */ -function pad (str, len) { +function pad(str, len) { str = String(str); return Array(len - str.length + 1).join(' ') + str; } @@ -387,20 +410,23 @@ function pad (str, len) { * @param {String} expected * @return {string} Diff */ -function inlineDiff (actual, expected) { +function inlineDiff(actual, expected) { var msg = errorDiff(actual, expected); // linenos var lines = msg.split('\n'); if (lines.length > 4) { var width = String(lines.length).length; - msg = lines.map(function (str, i) { - return pad(++i, width) + ' |' + ' ' + str; - }).join('\n'); + msg = lines + .map(function(str, i) { + return pad(++i, width) + ' |' + ' ' + str; + }) + .join('\n'); } // legend - msg = '\n' + + msg = + '\n' + color('diff removed', 'actual') + ' ' + color('diff added', 'expected') + @@ -421,9 +447,9 @@ function inlineDiff (actual, expected) { * @param {String} expected * @return {string} The diff. */ -function unifiedDiff (actual, expected) { +function unifiedDiff(actual, expected) { var indent = ' '; - function cleanUp (line) { + function cleanUp(line) { if (line[0] === '+') { return indent + colorLines('diff added', line); } @@ -438,16 +464,22 @@ function unifiedDiff (actual, expected) { } return indent + line; } - function notBlank (line) { + function notBlank(line) { return typeof line !== 'undefined' && line !== null; } var msg = diff.createPatch('string', actual, expected); var lines = msg.split('\n').splice(5); - return '\n ' + - colorLines('diff added', '+ expected') + ' ' + + return ( + '\n ' + + colorLines('diff added', '+ expected') + + ' ' + colorLines('diff removed', '- actual') + '\n\n' + - lines.map(cleanUp).filter(notBlank).join('\n'); + lines + .map(cleanUp) + .filter(notBlank) + .join('\n') + ); } /** @@ -458,16 +490,19 @@ function unifiedDiff (actual, expected) { * @param {String} expected * @return {string} the diff */ -function errorDiff (actual, expected) { - return diff.diffWordsWithSpace(actual, expected).map(function (str) { - if (str.added) { - return colorLines('diff added', str.value); - } - if (str.removed) { - return colorLines('diff removed', str.value); - } - return str.value; - }).join(''); +function errorDiff(actual, expected) { + return diff + .diffWordsWithSpace(actual, expected) + .map(function(str) { + if (str.added) { + return colorLines('diff added', str.value); + } + if (str.removed) { + return colorLines('diff removed', str.value); + } + return str.value; + }) + .join(''); } /** @@ -478,10 +513,13 @@ function errorDiff (actual, expected) { * @param {string} str * @return {string} */ -function colorLines (name, str) { - return str.split('\n').map(function (str) { - return color(name, str); - }).join('\n'); +function colorLines(name, str) { + return str + .split('\n') + .map(function(str) { + return color(name, str); + }) + .join('\n'); } /** @@ -497,6 +535,6 @@ var objToString = Object.prototype.toString; * @param {Object} b * @return {boolean} */ -function sameType (a, b) { +function sameType(a, b) { return objToString.call(a) === objToString.call(b); } diff --git a/lib/reporters/doc.js b/lib/reporters/doc.js index aad1d92522..5cb0bda8fc 100644 --- a/lib/reporters/doc.js +++ b/lib/reporters/doc.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Doc + */ /** * Module dependencies. */ @@ -16,19 +18,23 @@ exports = module.exports = Doc; /** * Initialize a new `Doc` reporter. * + * @class + * @memberof Mocha.reporters + * @extends {Base} + * @public * @param {Runner} runner * @api public */ -function Doc (runner) { +function Doc(runner) { Base.call(this, runner); var indents = 2; - function indent () { + function indent() { return Array(indents).join(' '); } - runner.on('suite', function (suite) { + runner.on('suite', function(suite) { if (suite.root) { return; } @@ -39,7 +45,7 @@ function Doc (runner) { console.log('%s
', indent()); }); - runner.on('suite end', function (suite) { + runner.on('suite end', function(suite) { if (suite.root) { return; } @@ -49,16 +55,24 @@ function Doc (runner) { --indents; }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { console.log('%s
%s
', indent(), utils.escape(test.title)); var code = utils.escape(utils.clean(test.body)); console.log('%s
%s
', indent(), code); }); - runner.on('fail', function (test, err) { - console.log('%s
%s
', indent(), utils.escape(test.title)); + runner.on('fail', function(test, err) { + console.log( + '%s
%s
', + indent(), + utils.escape(test.title) + ); var code = utils.escape(utils.clean(test.body)); - console.log('%s
%s
', indent(), code); + console.log( + '%s
%s
', + indent(), + code + ); console.log('%s
%s
', indent(), utils.escape(err)); }); } diff --git a/lib/reporters/dot.js b/lib/reporters/dot.js index 3ccbce9ad3..22320e31c3 100644 --- a/lib/reporters/dot.js +++ b/lib/reporters/dot.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Dot + */ /** * Module dependencies. */ @@ -17,28 +19,32 @@ exports = module.exports = Dot; /** * Initialize a new `Dot` matrix test reporter. * + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @public * @api public * @param {Runner} runner */ -function Dot (runner) { +function Dot(runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * 0.75 | 0; + var width = (Base.window.width * 0.75) | 0; var n = -1; - runner.on('start', function () { + runner.on('start', function() { process.stdout.write('\n'); }); - runner.on('pending', function () { + runner.on('pending', function() { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('pending', Base.symbols.comma)); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { if (++n % width === 0) { process.stdout.write('\n '); } @@ -49,14 +55,14 @@ function Dot (runner) { } }); - runner.on('fail', function () { + runner.on('fail', function() { if (++n % width === 0) { process.stdout.write('\n '); } process.stdout.write(color('fail', Base.symbols.bang)); }); - runner.once('end', function () { + runner.once('end', function() { console.log(); self.epilogue(); }); diff --git a/lib/reporters/html.js b/lib/reporters/html.js index e29aa36a5a..85a5b1b19f 100644 --- a/lib/reporters/html.js +++ b/lib/reporters/html.js @@ -1,7 +1,9 @@ 'use strict'; /* eslint-env browser */ - +/** + * @module HTML + */ /** * Module dependencies. */ @@ -34,7 +36,8 @@ exports = module.exports = HTML; * Stats template. */ -var statsTemplate = '
    ' + +var statsTemplate = + '
      ' + '
    • ' + '
    • passes: 0
    • ' + '
    • failures: 0
    • ' + @@ -46,10 +49,14 @@ var playIcon = '‣'; /** * Initialize a new `HTML` reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function HTML (runner) { +function HTML(runner) { Base.call(this, runner); var self = this; @@ -84,10 +91,10 @@ function HTML (runner) { } // pass toggle - on(passesLink, 'click', function (evt) { + on(passesLink, 'click', function(evt) { evt.preventDefault(); unhide(); - var name = (/pass/).test(report.className) ? '' : ' pass'; + var name = /pass/.test(report.className) ? '' : ' pass'; report.className = report.className.replace(/fail|pass/g, '') + name; if (report.className.trim()) { hideSuitesWithout('test pass'); @@ -95,10 +102,10 @@ function HTML (runner) { }); // failure toggle - on(failuresLink, 'click', function (evt) { + on(failuresLink, 'click', function(evt) { evt.preventDefault(); unhide(); - var name = (/fail/).test(report.className) ? '' : ' fail'; + var name = /fail/.test(report.className) ? '' : ' fail'; report.className = report.className.replace(/fail|pass/g, '') + name; if (report.className.trim()) { hideSuitesWithout('test fail'); @@ -112,14 +119,18 @@ function HTML (runner) { progress.size(40); } - runner.on('suite', function (suite) { + runner.on('suite', function(suite) { if (suite.root) { return; } // suite var url = self.suiteURL(suite); - var el = fragment('
    • %s

    • ', url, escape(suite.title)); + var el = fragment( + '
    • %s

    • ', + url, + escape(suite.title) + ); // container stack[0].appendChild(el); @@ -127,7 +138,7 @@ function HTML (runner) { el.appendChild(stack[0]); }); - runner.on('suite end', function (suite) { + runner.on('suite end', function(suite) { if (suite.root) { updateStats(); return; @@ -135,19 +146,27 @@ function HTML (runner) { stack.shift(); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { var url = self.testURL(test); - var markup = '
    • %e%ems ' + - '' + playIcon + '

    • '; + var markup = + '
    • %e%ems ' + + '' + + playIcon + + '

    • '; var el = fragment(markup, test.speed, test.title, test.duration, url); self.addCodeToggle(el, test.body); appendToStack(el); updateStats(); }); - runner.on('fail', function (test) { - var el = fragment('
    • %e ' + playIcon + '

    • ', - test.title, self.testURL(test)); + runner.on('fail', function(test) { + var el = fragment( + '
    • %e ' + + playIcon + + '

    • ', + test.title, + self.testURL(test) + ); var stackString; // Note: Includes leading newline var message = test.err.toString(); @@ -162,7 +181,9 @@ function HTML (runner) { if (indexOfMessage === -1) { stackString = test.err.stack; } else { - stackString = test.err.stack.substr(test.err.message.length + indexOfMessage); + stackString = test.err.stack.substr( + test.err.message.length + indexOfMessage + ); } } else if (test.err.sourceURL && test.err.line !== undefined) { // Safari doesn't give you a stack. Let's at least provide a source line. @@ -172,12 +193,21 @@ function HTML (runner) { stackString = stackString || ''; if (test.err.htmlMessage && stackString) { - el.appendChild(fragment('
      %s\n
      %e
      ', - test.err.htmlMessage, stackString)); + el.appendChild( + fragment( + '
      %s\n
      %e
      ', + test.err.htmlMessage, + stackString + ) + ); } else if (test.err.htmlMessage) { - el.appendChild(fragment('
      %s
      ', test.err.htmlMessage)); + el.appendChild( + fragment('
      %s
      ', test.err.htmlMessage) + ); } else { - el.appendChild(fragment('
      %e%e
      ', message, stackString)); + el.appendChild( + fragment('
      %e%e
      ', message, stackString) + ); } self.addCodeToggle(el, test.body); @@ -185,22 +215,25 @@ function HTML (runner) { updateStats(); }); - runner.on('pending', function (test) { - var el = fragment('
    • %e

    • ', test.title); + runner.on('pending', function(test) { + var el = fragment( + '
    • %e

    • ', + test.title + ); appendToStack(el); updateStats(); }); - function appendToStack (el) { + function appendToStack(el) { // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack. if (stack[0]) { stack[0].appendChild(el); } } - function updateStats () { + function updateStats() { // TODO: add to stats - var percent = stats.tests / runner.total * 100 | 0; + var percent = (stats.tests / runner.total * 100) | 0; if (progress) { progress.update(percent).draw(ctx); } @@ -219,7 +252,7 @@ function HTML (runner) { * @param {string} s * @return {string} A new URL. */ -function makeUrl (s) { +function makeUrl(s) { var search = window.location.search; // Remove previous grep query parameter if present @@ -227,7 +260,12 @@ function makeUrl (s) { search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?'); } - return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeRe(s)); + return ( + window.location.pathname + + (search ? search + '&' : '?') + + 'grep=' + + encodeURIComponent(escapeRe(s)) + ); } /** @@ -235,7 +273,7 @@ function makeUrl (s) { * * @param {Object} [suite] */ -HTML.prototype.suiteURL = function (suite) { +HTML.prototype.suiteURL = function(suite) { return makeUrl(suite.fullTitle()); }; @@ -244,7 +282,7 @@ HTML.prototype.suiteURL = function (suite) { * * @param {Object} [test] */ -HTML.prototype.testURL = function (test) { +HTML.prototype.testURL = function(test) { return makeUrl(test.fullTitle()); }; @@ -254,10 +292,10 @@ HTML.prototype.testURL = function (test) { * @param {HTMLLIElement} el * @param {string} contents */ -HTML.prototype.addCodeToggle = function (el, contents) { +HTML.prototype.addCodeToggle = function(el, contents) { var h2 = el.getElementsByTagName('h2')[0]; - on(h2, 'click', function () { + on(h2, 'click', function() { pre.style.display = pre.style.display === 'none' ? 'block' : 'none'; }); @@ -271,7 +309,7 @@ HTML.prototype.addCodeToggle = function (el, contents) { * * @param {string} msg */ -function error (msg) { +function error(msg) { document.body.appendChild(fragment('
      %s
      ', msg)); } @@ -280,15 +318,17 @@ function error (msg) { * * @param {string} html */ -function fragment (html) { +function fragment(html) { var args = arguments; var div = document.createElement('div'); var i = 1; - div.innerHTML = html.replace(/%([se])/g, function (_, type) { + div.innerHTML = html.replace(/%([se])/g, function(_, type) { switch (type) { - case 's': return String(args[i++]); - case 'e': return escape(args[i++]); + case 's': + return String(args[i++]); + case 'e': + return escape(args[i++]); // no default } }); @@ -302,7 +342,7 @@ function fragment (html) { * * @param {text} classname */ -function hideSuitesWithout (classname) { +function hideSuitesWithout(classname) { var suites = document.getElementsByClassName('suite'); for (var i = 0; i < suites.length; i++) { var els = suites[i].getElementsByClassName(classname); @@ -315,7 +355,7 @@ function hideSuitesWithout (classname) { /** * Unhide .hidden suites. */ -function unhide () { +function unhide() { var els = document.getElementsByClassName('suite hidden'); for (var i = 0; i < els.length; ++i) { els[i].className = els[i].className.replace('suite hidden', 'suite'); @@ -328,7 +368,7 @@ function unhide () { * @param {HTMLElement} el * @param {string} contents */ -function text (el, contents) { +function text(el, contents) { if (el.textContent) { el.textContent = contents; } else { @@ -339,7 +379,7 @@ function text (el, contents) { /** * Listen on `event` with callback `fn`. */ -function on (el, event, fn) { +function on(el, event, fn) { if (el.addEventListener) { el.addEventListener(event, fn, false); } else { diff --git a/lib/reporters/json-stream.js b/lib/reporters/json-stream.js index af3e86d259..0edd0cbf88 100644 --- a/lib/reporters/json-stream.js +++ b/lib/reporters/json-stream.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module JSONStream + */ /** * Module dependencies. */ @@ -13,33 +15,38 @@ var Base = require('./base'); exports = module.exports = List; /** - * Initialize a new `List` test reporter. + * Initialize a new `JSONStream` test reporter. * + * @public + * @name JSONStream + * @class JSONStream + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function List (runner) { +function List(runner) { Base.call(this, runner); var self = this; var total = runner.total; - runner.on('start', function () { - console.log(JSON.stringify(['start', { total: total }])); + runner.on('start', function() { + console.log(JSON.stringify(['start', {total: total}])); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { console.log(JSON.stringify(['pass', clean(test)])); }); - runner.on('fail', function (test, err) { + runner.on('fail', function(test, err) { test = clean(test); test.err = err.message; test.stack = err.stack || null; console.log(JSON.stringify(['fail', test])); }); - runner.once('end', function () { + runner.once('end', function() { process.stdout.write(JSON.stringify(['end', self.stats])); }); } @@ -52,7 +59,7 @@ function List (runner) { * @param {Object} test * @return {Object} */ -function clean (test) { +function clean(test) { return { title: test.title, fullTitle: test.fullTitle(), diff --git a/lib/reporters/json.js b/lib/reporters/json.js index efc79b4b02..046e4ba4a5 100644 --- a/lib/reporters/json.js +++ b/lib/reporters/json.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module JSON + */ /** * Module dependencies. */ @@ -15,10 +17,14 @@ exports = module.exports = JSONReporter; /** * Initialize a new `JSON` reporter. * + * @public + * @class JSON + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function JSONReporter (runner) { +function JSONReporter(runner) { Base.call(this, runner); var self = this; @@ -27,23 +33,23 @@ function JSONReporter (runner) { var failures = []; var passes = []; - runner.on('test end', function (test) { + runner.on('test end', function(test) { tests.push(test); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { passes.push(test); }); - runner.on('fail', function (test) { + runner.on('fail', function(test) { failures.push(test); }); - runner.on('pending', function (test) { + runner.on('pending', function(test) { pending.push(test); }); - runner.once('end', function () { + runner.once('end', function() { var obj = { stats: self.stats, tests: tests.map(clean), @@ -66,7 +72,7 @@ function JSONReporter (runner) { * @param {Object} test * @return {Object} */ -function clean (test) { +function clean(test) { var err = test.err || {}; if (err instanceof Error) { err = errorJSON(err); @@ -88,19 +94,21 @@ function clean (test) { * @param {Object} obj * @return {Object} */ -function cleanCycles (obj) { +function cleanCycles(obj) { var cache = []; - return JSON.parse(JSON.stringify(obj, function (key, value) { - if (typeof value === 'object' && value !== null) { - if (cache.indexOf(value) !== -1) { - // Instead of going in a circle, we'll print [object Object] - return '' + value; + return JSON.parse( + JSON.stringify(obj, function(key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Instead of going in a circle, we'll print [object Object] + return '' + value; + } + cache.push(value); } - cache.push(value); - } - return value; - })); + return value; + }) + ); } /** @@ -110,9 +118,9 @@ function cleanCycles (obj) { * @param {Error} err * @return {Object} */ -function errorJSON (err) { +function errorJSON(err) { var res = {}; - Object.getOwnPropertyNames(err).forEach(function (key) { + Object.getOwnPropertyNames(err).forEach(function(key) { res[key] = err[key]; }, err); return res; diff --git a/lib/reporters/landing.js b/lib/reporters/landing.js index 3cc036421d..b0a9fb23be 100644 --- a/lib/reporters/landing.js +++ b/lib/reporters/landing.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Landing + */ /** * Module dependencies. */ @@ -36,33 +38,37 @@ Base.colors.runway = 90; /** * Initialize a new `Landing` reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function Landing (runner) { +function Landing(runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * 0.75 | 0; + var width = (Base.window.width * 0.75) | 0; var total = runner.total; var stream = process.stdout; var plane = color('plane', '✈'); var crashed = -1; var n = 0; - function runway () { + function runway() { var buf = Array(width).join('-'); return ' ' + color('runway', buf); } - runner.on('start', function () { + runner.on('start', function() { stream.write('\n\n\n '); cursor.hide(); }); - runner.on('test end', function (test) { + runner.on('test end', function(test) { // check if the plane crashed - var col = crashed === -1 ? width * ++n / total | 0 : crashed; + var col = crashed === -1 ? (width * ++n / total) | 0 : crashed; // show the crash if (test.state === 'failed') { @@ -81,7 +87,7 @@ function Landing (runner) { stream.write('\u001b[0m'); }); - runner.once('end', function () { + runner.once('end', function() { cursor.show(); console.log(); self.epilogue(); diff --git a/lib/reporters/list.js b/lib/reporters/list.js index 719ec0166c..29ce74ab79 100644 --- a/lib/reporters/list.js +++ b/lib/reporters/list.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module List + */ /** * Module dependencies. */ @@ -18,38 +20,42 @@ exports = module.exports = List; /** * Initialize a new `List` test reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function List (runner) { +function List(runner) { Base.call(this, runner); var self = this; var n = 0; - runner.on('start', function () { + runner.on('start', function() { console.log(); }); - runner.on('test', function (test) { + runner.on('test', function(test) { process.stdout.write(color('pass', ' ' + test.fullTitle() + ': ')); }); - runner.on('pending', function (test) { - var fmt = color('checkmark', ' -') + - color('pending', ' %s'); + runner.on('pending', function(test) { + var fmt = color('checkmark', ' -') + color('pending', ' %s'); console.log(fmt, test.fullTitle()); }); - runner.on('pass', function (test) { - var fmt = color('checkmark', ' ' + Base.symbols.ok) + + runner.on('pass', function(test) { + var fmt = + color('checkmark', ' ' + Base.symbols.ok) + color('pass', ' %s: ') + color(test.speed, '%dms'); cursor.CR(); console.log(fmt, test.fullTitle(), test.duration); }); - runner.on('fail', function (test) { + runner.on('fail', function(test) { cursor.CR(); console.log(color('fail', ' %d) %s'), ++n, test.fullTitle()); }); diff --git a/lib/reporters/markdown.js b/lib/reporters/markdown.js index 2c27e1dc25..ff75ee4d67 100644 --- a/lib/reporters/markdown.js +++ b/lib/reporters/markdown.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Markdown + */ /** * Module dependencies. */ @@ -22,32 +24,36 @@ exports = module.exports = Markdown; /** * Initialize a new `Markdown` reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function Markdown (runner) { +function Markdown(runner) { Base.call(this, runner); var level = 0; var buf = ''; - function title (str) { + function title(str) { return Array(level).join('#') + ' ' + str; } - function mapTOC (suite, obj) { + function mapTOC(suite, obj) { var ret = obj; var key = SUITE_PREFIX + suite.title; - obj = obj[key] = obj[key] || { suite: suite }; - suite.suites.forEach(function (suite) { + obj = obj[key] = obj[key] || {suite: suite}; + suite.suites.forEach(function(suite) { mapTOC(suite, obj); }); return ret; } - function stringifyTOC (obj, level) { + function stringifyTOC(obj, level) { ++level; var buf = ''; var link; @@ -65,25 +71,25 @@ function Markdown (runner) { return buf; } - function generateTOC (suite) { + function generateTOC(suite) { var obj = mapTOC(suite, {}); return stringifyTOC(obj, 0); } generateTOC(runner.suite); - runner.on('suite', function (suite) { + runner.on('suite', function(suite) { ++level; var slug = utils.slug(suite.fullTitle()); buf += '' + '\n'; buf += title(suite.title) + '\n'; }); - runner.on('suite end', function () { + runner.on('suite end', function() { --level; }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { var code = utils.clean(test.body); buf += test.title + '.\n'; buf += '\n```js\n'; @@ -91,7 +97,7 @@ function Markdown (runner) { buf += '```\n\n'; }); - runner.once('end', function () { + runner.once('end', function() { process.stdout.write('# TOC\n'); process.stdout.write(generateTOC(runner.suite)); process.stdout.write(buf); diff --git a/lib/reporters/min.js b/lib/reporters/min.js index 2573a43450..2a91a3c1e2 100644 --- a/lib/reporters/min.js +++ b/lib/reporters/min.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Min + */ /** * Module dependencies. */ @@ -16,13 +18,17 @@ exports = module.exports = Min; /** * Initialize a new `Min` minimal test reporter (best used with --watch). * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function Min (runner) { +function Min(runner) { Base.call(this, runner); - runner.on('start', function () { + runner.on('start', function() { // clear screen process.stdout.write('\u001b[2J'); // set cursor position diff --git a/lib/reporters/nyan.js b/lib/reporters/nyan.js index 77478ebd51..164a3fadc4 100644 --- a/lib/reporters/nyan.js +++ b/lib/reporters/nyan.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Nyan + */ /** * Module dependencies. */ @@ -18,14 +20,18 @@ exports = module.exports = NyanCat; * * @param {Runner} runner * @api public + * @public + * @class Nyan + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base */ -function NyanCat (runner) { +function NyanCat(runner) { Base.call(this, runner); var self = this; - var width = Base.window.width * 0.75 | 0; - var nyanCatWidth = this.nyanCatWidth = 11; + var width = (Base.window.width * 0.75) | 0; + var nyanCatWidth = (this.nyanCatWidth = 11); this.colorIndex = 0; this.numberOfLines = 4; @@ -33,26 +39,26 @@ function NyanCat (runner) { this.scoreboardWidth = 5; this.tick = 0; this.trajectories = [[], [], [], []]; - this.trajectoryWidthMax = (width - nyanCatWidth); + this.trajectoryWidthMax = width - nyanCatWidth; - runner.on('start', function () { + runner.on('start', function() { Base.cursor.hide(); self.draw(); }); - runner.on('pending', function () { + runner.on('pending', function() { self.draw(); }); - runner.on('pass', function () { + runner.on('pass', function() { self.draw(); }); - runner.on('fail', function () { + runner.on('fail', function() { self.draw(); }); - runner.once('end', function () { + runner.once('end', function() { Base.cursor.show(); for (var i = 0; i < self.numberOfLines; i++) { write('\n'); @@ -72,7 +78,7 @@ inherits(NyanCat, Base); * @api private */ -NyanCat.prototype.draw = function () { +NyanCat.prototype.draw = function() { this.appendRainbow(); this.drawScoreboard(); this.drawRainbow(); @@ -87,10 +93,10 @@ NyanCat.prototype.draw = function () { * @api private */ -NyanCat.prototype.drawScoreboard = function () { +NyanCat.prototype.drawScoreboard = function() { var stats = this.stats; - function draw (type, n) { + function draw(type, n) { write(' '); write(Base.color(type, n)); write('\n'); @@ -110,7 +116,7 @@ NyanCat.prototype.drawScoreboard = function () { * @api private */ -NyanCat.prototype.appendRainbow = function () { +NyanCat.prototype.appendRainbow = function() { var segment = this.tick ? '_' : '-'; var rainbowified = this.rainbowify(segment); @@ -129,10 +135,10 @@ NyanCat.prototype.appendRainbow = function () { * @api private */ -NyanCat.prototype.drawRainbow = function () { +NyanCat.prototype.drawRainbow = function() { var self = this; - this.trajectories.forEach(function (line) { + this.trajectories.forEach(function(line) { write('\u001b[' + self.scoreboardWidth + 'C'); write(line.join('')); write('\n'); @@ -146,7 +152,7 @@ NyanCat.prototype.drawRainbow = function () { * * @api private */ -NyanCat.prototype.drawNyanCat = function () { +NyanCat.prototype.drawNyanCat = function() { var self = this; var startWidth = this.scoreboardWidth + this.trajectories[0].length; var dist = '\u001b[' + startWidth + 'C'; @@ -182,7 +188,7 @@ NyanCat.prototype.drawNyanCat = function () { * @return {string} */ -NyanCat.prototype.face = function () { +NyanCat.prototype.face = function() { var stats = this.stats; if (stats.failures) { return '( x .x)'; @@ -201,7 +207,7 @@ NyanCat.prototype.face = function () { * @param {number} n */ -NyanCat.prototype.cursorUp = function (n) { +NyanCat.prototype.cursorUp = function(n) { write('\u001b[' + n + 'A'); }; @@ -212,7 +218,7 @@ NyanCat.prototype.cursorUp = function (n) { * @param {number} n */ -NyanCat.prototype.cursorDown = function (n) { +NyanCat.prototype.cursorDown = function(n) { write('\u001b[' + n + 'B'); }; @@ -222,12 +228,12 @@ NyanCat.prototype.cursorDown = function (n) { * @api private * @return {Array} */ -NyanCat.prototype.generateColors = function () { +NyanCat.prototype.generateColors = function() { var colors = []; - for (var i = 0; i < (6 * 7); i++) { + for (var i = 0; i < 6 * 7; i++) { var pi3 = Math.floor(Math.PI / 3); - var n = (i * (1.0 / 6)); + var n = i * (1.0 / 6); var r = Math.floor(3 * Math.sin(n) + 3); var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3); var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3); @@ -244,7 +250,7 @@ NyanCat.prototype.generateColors = function () { * @param {string} str * @return {string} */ -NyanCat.prototype.rainbowify = function (str) { +NyanCat.prototype.rainbowify = function(str) { if (!Base.useColors) { return str; } @@ -258,6 +264,6 @@ NyanCat.prototype.rainbowify = function (str) { * * @param {string} string A message to write to stdout. */ -function write (string) { +function write(string) { process.stdout.write(string); } diff --git a/lib/reporters/progress.js b/lib/reporters/progress.js index 27b79f99e3..042fc1b91b 100644 --- a/lib/reporters/progress.js +++ b/lib/reporters/progress.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Progress + */ /** * Module dependencies. */ @@ -24,15 +26,19 @@ Base.colors.progress = 90; /** * Initialize a new `Progress` bar test reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner * @param {Object} options */ -function Progress (runner, options) { +function Progress(runner, options) { Base.call(this, runner); var self = this; - var width = Base.window.width * 0.50 | 0; + var width = (Base.window.width * 0.5) | 0; var total = runner.total; var complete = 0; var lastN = -1; @@ -48,17 +54,17 @@ function Progress (runner, options) { options.verbose = reporterOptions.verbose || false; // tests started - runner.on('start', function () { + runner.on('start', function() { console.log(); cursor.hide(); }); // tests complete - runner.on('test end', function () { + runner.on('test end', function() { complete++; var percent = complete / total; - var n = width * percent | 0; + var n = (width * percent) | 0; var i = width - n; if (n === lastN && !options.verbose) { @@ -80,7 +86,7 @@ function Progress (runner, options) { // tests are complete, output some stats // and the failures if any - runner.once('end', function () { + runner.once('end', function() { cursor.show(); console.log(); self.epilogue(); diff --git a/lib/reporters/spec.js b/lib/reporters/spec.js index d0543a5360..75e6dda1b5 100644 --- a/lib/reporters/spec.js +++ b/lib/reporters/spec.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module Spec + */ /** * Module dependencies. */ @@ -17,50 +19,56 @@ exports = module.exports = Spec; /** * Initialize a new `Spec` test reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function Spec (runner) { +function Spec(runner) { Base.call(this, runner); var self = this; var indents = 0; var n = 0; - function indent () { + function indent() { return Array(indents).join(' '); } - runner.on('start', function () { + runner.on('start', function() { console.log(); }); - runner.on('suite', function (suite) { + runner.on('suite', function(suite) { ++indents; console.log(color('suite', '%s%s'), indent(), suite.title); }); - runner.on('suite end', function () { + runner.on('suite end', function() { --indents; if (indents === 1) { console.log(); } }); - runner.on('pending', function (test) { + runner.on('pending', function(test) { var fmt = indent() + color('pending', ' - %s'); console.log(fmt, test.title); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { var fmt; if (test.speed === 'fast') { - fmt = indent() + + fmt = + indent() + color('checkmark', ' ' + Base.symbols.ok) + color('pass', ' %s'); console.log(fmt, test.title); } else { - fmt = indent() + + fmt = + indent() + color('checkmark', ' ' + Base.symbols.ok) + color('pass', ' %s') + color(test.speed, ' (%dms)'); @@ -68,7 +76,7 @@ function Spec (runner) { } }); - runner.on('fail', function (test) { + runner.on('fail', function(test) { console.log(indent() + color('fail', ' %d) %s'), ++n, test.title); }); diff --git a/lib/reporters/tap.js b/lib/reporters/tap.js index 7e2fbae720..feaf7ea21a 100644 --- a/lib/reporters/tap.js +++ b/lib/reporters/tap.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module TAP + */ /** * Module dependencies. */ @@ -15,35 +17,39 @@ exports = module.exports = TAP; /** * Initialize a new `TAP` reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function TAP (runner) { +function TAP(runner) { Base.call(this, runner); var n = 1; var passes = 0; var failures = 0; - runner.on('start', function () { + runner.on('start', function() { var total = runner.grepTotal(runner.suite); console.log('%d..%d', 1, total); }); - runner.on('test end', function () { + runner.on('test end', function() { ++n; }); - runner.on('pending', function (test) { + runner.on('pending', function(test) { console.log('ok %d %s # SKIP -', n, title(test)); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { passes++; console.log('ok %d %s', n, title(test)); }); - runner.on('fail', function (test, err) { + runner.on('fail', function(test, err) { failures++; console.log('not ok %d %s', n, title(test)); if (err.message) { @@ -54,7 +60,7 @@ function TAP (runner) { } }); - runner.once('end', function () { + runner.once('end', function() { console.log('# tests ' + (passes + failures)); console.log('# pass ' + passes); console.log('# fail ' + failures); @@ -68,6 +74,6 @@ function TAP (runner) { * @param {Object} test * @return {String} */ -function title (test) { +function title(test) { return test.fullTitle().replace(/#/g, ''); } diff --git a/lib/reporters/xunit.js b/lib/reporters/xunit.js index faf96adac1..c1a930d2d8 100644 --- a/lib/reporters/xunit.js +++ b/lib/reporters/xunit.js @@ -1,5 +1,7 @@ 'use strict'; - +/** + * @module XUnit + */ /** * Module dependencies. */ @@ -33,10 +35,14 @@ exports = module.exports = XUnit; /** * Initialize a new `XUnit` reporter. * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base * @api public * @param {Runner} runner */ -function XUnit (runner, options) { +function XUnit(runner, options) { Base.call(this, runner); var stats = this.stats; @@ -66,30 +72,36 @@ function XUnit (runner, options) { // fall back to the default suite name suiteName = suiteName || DEFAULT_SUITE_NAME; - runner.on('pending', function (test) { + runner.on('pending', function(test) { tests.push(test); }); - runner.on('pass', function (test) { + runner.on('pass', function(test) { tests.push(test); }); - runner.on('fail', function (test) { + runner.on('fail', function(test) { tests.push(test); }); - runner.once('end', function () { - self.write(tag('testsuite', { - name: suiteName, - tests: stats.tests, - failures: stats.failures, - errors: stats.failures, - skipped: stats.tests - stats.failures - stats.passes, - timestamp: (new Date()).toUTCString(), - time: (stats.duration / 1000) || 0 - }, false)); - - tests.forEach(function (t) { + runner.once('end', function() { + self.write( + tag( + 'testsuite', + { + name: suiteName, + tests: stats.tests, + failures: stats.failures, + errors: stats.failures, + skipped: stats.tests - stats.failures - stats.passes, + timestamp: new Date().toUTCString(), + time: stats.duration / 1000 || 0 + }, + false + ) + ); + + tests.forEach(function(t) { self.test(t); }); @@ -108,9 +120,9 @@ inherits(XUnit, Base); * @param failures * @param {Function} fn */ -XUnit.prototype.done = function (failures, fn) { +XUnit.prototype.done = function(failures, fn) { if (this.fileStream) { - this.fileStream.end(function () { + this.fileStream.end(function() { fn(failures); }); } else { @@ -123,7 +135,7 @@ XUnit.prototype.done = function (failures, fn) { * * @param {string} line */ -XUnit.prototype.write = function (line) { +XUnit.prototype.write = function(line) { if (this.fileStream) { this.fileStream.write(line + '\n'); } else if (typeof process === 'object' && process.stdout) { @@ -138,16 +150,28 @@ XUnit.prototype.write = function (line) { * * @param {Test} test */ -XUnit.prototype.test = function (test) { +XUnit.prototype.test = function(test) { var attrs = { classname: test.parent.fullTitle(), name: test.title, - time: (test.duration / 1000) || 0 + time: test.duration / 1000 || 0 }; if (test.state === 'failed') { var err = test.err; - this.write(tag('testcase', attrs, false, tag('failure', {}, false, escape(err.message) + '\n' + escape(err.stack)))); + this.write( + tag( + 'testcase', + attrs, + false, + tag( + 'failure', + {}, + false, + escape(err.message) + '\n' + escape(err.stack) + ) + ) + ); } else if (test.isPending()) { this.write(tag('testcase', attrs, false, tag('skipped', {}, true))); } else { @@ -164,7 +188,7 @@ XUnit.prototype.test = function (test) { * @param content * @return {string} */ -function tag (name, attrs, close, content) { +function tag(name, attrs, close, content) { var end = close ? '/>' : '>'; var pairs = []; var tag; diff --git a/lib/runnable.js b/lib/runnable.js index d03ec0966f..73da817793 100644 --- a/lib/runnable.js +++ b/lib/runnable.js @@ -1,9 +1,4 @@ 'use strict'; - -/** - * Module dependencies. - */ - var EventEmitter = require('events').EventEmitter; var Pending = require('./pending'); var debug = require('debug')('mocha:runnable'); @@ -22,28 +17,19 @@ var clearTimeout = global.clearTimeout; var clearInterval = global.clearInterval; /* eslint-enable no-unused-vars, no-native-reassign */ -/** - * Object#toString(). - */ - var toString = Object.prototype.toString; -/** - * Expose `Runnable`. - */ - module.exports = Runnable; /** - * Initialize a new `Runnable` with the given `title` and callback `fn`. + * Initialize a new `Runnable` with the given `title` and callback `fn`. Derived from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) * + * @class + * @extends EventEmitter * @param {String} title * @param {Function} fn - * @api private - * @param {string} title - * @param {Function} fn */ -function Runnable (title, fn) { +function Runnable(title, fn) { this.title = title; this.fn = fn; this.body = (fn || '').toString(); @@ -70,7 +56,7 @@ utils.inherits(Runnable, EventEmitter); * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.timeout = function (ms) { +Runnable.prototype.timeout = function(ms) { if (!arguments.length) { return this._timeout; } @@ -96,7 +82,7 @@ Runnable.prototype.timeout = function (ms) { * @param {number|string} ms * @return {Runnable|number} ms or Runnable instance. */ -Runnable.prototype.slow = function (ms) { +Runnable.prototype.slow = function(ms) { if (!arguments.length || typeof ms === 'undefined') { return this._slow; } @@ -115,7 +101,7 @@ Runnable.prototype.slow = function (ms) { * @param {boolean} enabled * @return {Runnable|boolean} enabled or Runnable instance. */ -Runnable.prototype.enableTimeouts = function (enabled) { +Runnable.prototype.enableTimeouts = function(enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -127,9 +113,11 @@ Runnable.prototype.enableTimeouts = function (enabled) { /** * Halt and mark as pending. * + * @memberof Mocha.Runnable + * @public * @api public */ -Runnable.prototype.skip = function () { +Runnable.prototype.skip = function() { throw new Pending('sync skip'); }; @@ -138,7 +126,7 @@ Runnable.prototype.skip = function () { * * @api private */ -Runnable.prototype.isPending = function () { +Runnable.prototype.isPending = function() { return this.pending || (this.parent && this.parent.isPending()); }; @@ -147,7 +135,7 @@ Runnable.prototype.isPending = function () { * @return {boolean} * @private */ -Runnable.prototype.isFailed = function () { +Runnable.prototype.isFailed = function() { return !this.isPending() && this.state === 'failed'; }; @@ -156,7 +144,7 @@ Runnable.prototype.isFailed = function () { * @return {boolean} * @private */ -Runnable.prototype.isPassed = function () { +Runnable.prototype.isPassed = function() { return !this.isPending() && this.state === 'passed'; }; @@ -165,7 +153,7 @@ Runnable.prototype.isPassed = function () { * * @api private */ -Runnable.prototype.retries = function (n) { +Runnable.prototype.retries = function(n) { if (!arguments.length) { return this._retries; } @@ -177,7 +165,7 @@ Runnable.prototype.retries = function (n) { * * @api private */ -Runnable.prototype.currentRetry = function (n) { +Runnable.prototype.currentRetry = function(n) { if (!arguments.length) { return this._currentRetry; } @@ -188,20 +176,24 @@ Runnable.prototype.currentRetry = function (n) { * Return the full title generated by recursively concatenating the parent's * full title. * + * @memberof Mocha.Runnable + * @public * @api public * @return {string} */ -Runnable.prototype.fullTitle = function () { +Runnable.prototype.fullTitle = function() { return this.titlePath().join(' '); }; /** * Return the title path generated by concatenating the parent's title path with the title. * + * @memberof Mocha.Runnable + * @public * @api public * @return {string} */ -Runnable.prototype.titlePath = function () { +Runnable.prototype.titlePath = function() { return this.parent.titlePath().concat([this.title]); }; @@ -210,7 +202,7 @@ Runnable.prototype.titlePath = function () { * * @api private */ -Runnable.prototype.clearTimeout = function () { +Runnable.prototype.clearTimeout = function() { clearTimeout(this.timer); }; @@ -220,19 +212,23 @@ Runnable.prototype.clearTimeout = function () { * @api private * @return {string} */ -Runnable.prototype.inspect = function () { - return JSON.stringify(this, function (key, val) { - if (key[0] === '_') { - return; - } - if (key === 'parent') { - return '#'; - } - if (key === 'ctx') { - return '#'; - } - return val; - }, 2); +Runnable.prototype.inspect = function() { + return JSON.stringify( + this, + function(key, val) { + if (key[0] === '_') { + return; + } + if (key === 'parent') { + return '#'; + } + if (key === 'ctx') { + return '#'; + } + return val; + }, + 2 + ); }; /** @@ -240,7 +236,7 @@ Runnable.prototype.inspect = function () { * * @api private */ -Runnable.prototype.resetTimeout = function () { +Runnable.prototype.resetTimeout = function() { var self = this; var ms = this.timeout() || 1e9; @@ -248,7 +244,7 @@ Runnable.prototype.resetTimeout = function () { return; } this.clearTimeout(); - this.timer = setTimeout(function () { + this.timer = setTimeout(function() { if (!self._enableTimeouts) { return; } @@ -263,7 +259,7 @@ Runnable.prototype.resetTimeout = function () { * @api private * @param {string[]} globals */ -Runnable.prototype.globals = function (globals) { +Runnable.prototype.globals = function(globals) { if (!arguments.length) { return this._allowedGlobals; } @@ -276,7 +272,7 @@ Runnable.prototype.globals = function (globals) { * @param {Function} fn * @api private */ -Runnable.prototype.run = function (fn) { +Runnable.prototype.run = function(fn) { var self = this; var start = new Date(); var ctx = this.ctx; @@ -289,7 +285,7 @@ Runnable.prototype.run = function (fn) { } // called multiple times - function multiple (err) { + function multiple(err) { if (emitted) { return; } @@ -304,7 +300,7 @@ Runnable.prototype.run = function (fn) { } // finished - function done (err) { + function done(err) { var ms = self.timeout(); if (self.timedOut) { return; @@ -331,7 +327,7 @@ Runnable.prototype.run = function (fn) { this.resetTimeout(); // allows skip() to be used in an explicit async context - this.skip = function asyncSkip () { + this.skip = function asyncSkip() { done(new Pending('async skip call')); // halt execution. the Runnable will be marked pending // by the previous call, and the uncaught handler will ignore @@ -372,43 +368,53 @@ Runnable.prototype.run = function (fn) { done(utils.getError(err)); } - function callFn (fn) { + function callFn(fn) { var result = fn.call(ctx); if (result && typeof result.then === 'function') { self.resetTimeout(); - result - .then(function () { + result.then( + function() { done(); // Return null so libraries like bluebird do not warn about // subsequently constructed Promises. return null; }, - function (reason) { + function(reason) { done(reason || new Error('Promise rejected with no or falsy reason')); - }); + } + ); } else { if (self.asyncOnly) { - return done(new Error('--async-only option in use without declaring `done()` or returning a promise')); + return done( + new Error( + '--async-only option in use without declaring `done()` or returning a promise' + ) + ); } done(); } } - function callFnAsync (fn) { - var result = fn.call(ctx, function (err) { + function callFnAsync(fn) { + var result = fn.call(ctx, function(err) { if (err instanceof Error || toString.call(err) === '[object Error]') { return done(err); } if (err) { if (Object.prototype.toString.call(err) === '[object Object]') { - return done(new Error('done() invoked with non-Error: ' + - JSON.stringify(err))); + return done( + new Error('done() invoked with non-Error: ' + JSON.stringify(err)) + ); } return done(new Error('done() invoked with non-Error: ' + err)); } if (result && utils.isPromise(result)) { - return done(new Error('Resolution method is overspecified. Specify a callback *or* return a Promise; not both.')); + return done( + new Error( + 'Resolution method is overspecified. Specify a callback *or* return a Promise; not both.' + ) + ); } done(); @@ -423,8 +429,11 @@ Runnable.prototype.run = function (fn) { * @returns {Error} a "timeout" error * @private */ -Runnable.prototype._timeoutError = function (ms) { - var msg = 'Timeout of ' + ms + 'ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.'; +Runnable.prototype._timeoutError = function(ms) { + var msg = + 'Timeout of ' + + ms + + 'ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.'; if (this.file) { msg += ' (' + this.file + ')'; } diff --git a/lib/runner.js b/lib/runner.js index 7a0fe84f7b..efad55adb7 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -1,9 +1,11 @@ 'use strict'; +/** + * @module Runner + */ /** * Module dependencies. */ - var EventEmitter = require('events').EventEmitter; var Pending = require('./pending'); var utils = require('./utils'); @@ -37,7 +39,7 @@ var globals = [ module.exports = Runner; /** - * Initialize a `Runner` for the given `suite`. + * Initialize a `Runner` for the given `suite`. Derived from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) * * Events: * @@ -53,12 +55,15 @@ module.exports = Runner; * - `fail` (test, err) test failed * - `pending` (test) test pending * + * @memberof Mocha + * @public + * @class * @api public - * @param {Suite} suite Root suite + * @param {Suite} [suite] Root suite * @param {boolean} [delay] Whether or not to delay execution of root suite * until ready. */ -function Runner (suite, delay) { +function Runner(suite, delay) { var self = this; this._globals = []; this._abort = false; @@ -67,10 +72,10 @@ function Runner (suite, delay) { this.started = false; this.total = suite.total(); this.failures = 0; - this.on('test end', function (test) { + this.on('test end', function(test) { self.checkGlobals(test); }); - this.on('hook end', function (hook) { + this.on('hook end', function(hook) { self.checkGlobals(hook); }); this._defaultGrep = /.*/; @@ -95,15 +100,14 @@ inherits(Runner, EventEmitter); * Run tests with full titles matching `re`. Updates runner.total * with number of tests matched. * - * @param {RegExp} re - * @param {Boolean} invert - * @return {Runner} for chaining * @api public + * @public + * @memberof Mocha.Runner * @param {RegExp} re * @param {boolean} invert * @return {Runner} Runner instance. */ -Runner.prototype.grep = function (re, invert) { +Runner.prototype.grep = function(re, invert) { debug('grep %s', re); this._grep = re; this._invert = invert; @@ -115,17 +119,17 @@ Runner.prototype.grep = function (re, invert) { * Returns the number of tests matching the grep search for the * given suite. * - * @param {Suite} suite - * @return {Number} + * @memberof Mocha.Runner * @api public + * @public * @param {Suite} suite * @return {number} */ -Runner.prototype.grepTotal = function (suite) { +Runner.prototype.grepTotal = function(suite) { var self = this; var total = 0; - suite.eachTest(function (test) { + suite.eachTest(function(test) { var match = self._grep.test(test.fullTitle()); if (self._invert) { match = !match; @@ -144,7 +148,7 @@ Runner.prototype.grepTotal = function (suite) { * @return {Array} * @api private */ -Runner.prototype.globalProps = function () { +Runner.prototype.globalProps = function() { var props = Object.keys(global); // non-enumerables @@ -161,13 +165,13 @@ Runner.prototype.globalProps = function () { /** * Allow the given `arr` of globals. * - * @param {Array} arr - * @return {Runner} for chaining * @api public + * @public + * @memberof Mocha.Runner * @param {Array} arr * @return {Runner} Runner instance. */ -Runner.prototype.globals = function (arr) { +Runner.prototype.globals = function(arr) { if (!arguments.length) { return this._globals; } @@ -181,7 +185,7 @@ Runner.prototype.globals = function (arr) { * * @api private */ -Runner.prototype.checkGlobals = function (test) { +Runner.prototype.checkGlobals = function(test) { if (this.ignoreLeaks) { return; } @@ -203,7 +207,10 @@ Runner.prototype.checkGlobals = function (test) { this._globals = this._globals.concat(leaks); if (leaks.length > 1) { - this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + '')); + this.fail( + test, + new Error('global leaks detected: ' + leaks.join(', ') + '') + ); } else if (leaks.length) { this.fail(test, new Error('global leak detected: ' + leaks[0])); } @@ -216,7 +223,7 @@ Runner.prototype.checkGlobals = function (test) { * @param {Test} test * @param {Error} err */ -Runner.prototype.fail = function (test, err) { +Runner.prototype.fail = function(test, err) { if (test.isPending()) { return; } @@ -225,18 +232,26 @@ Runner.prototype.fail = function (test, err) { test.state = 'failed'; if (!(err instanceof Error || (err && typeof err.message === 'string'))) { - err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)'); + err = new Error( + 'the ' + + type(err) + + ' ' + + stringify(err) + + ' was thrown, throw an Error :)' + ); } try { - err.stack = (this.fullStackTrace || !err.stack) - ? err.stack - : stackFilter(err.stack); - } catch (ignored) { + err.stack = + this.fullStackTrace || !err.stack ? err.stack : stackFilter(err.stack); + } catch (ignore) { // some environments do not take kindly to monkeying with the stack } this.emit('fail', test, err); + if (this.suite.bail()) { + this.emit('end'); + } }; /** @@ -259,15 +274,13 @@ Runner.prototype.fail = function (test, err) { * @param {Hook} hook * @param {Error} err */ -Runner.prototype.failHook = function (hook, err) { +Runner.prototype.failHook = function(hook, err) { if (hook.ctx && hook.ctx.currentTest) { hook.originalTitle = hook.originalTitle || hook.title; - hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; + hook.title = + hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"'; } - if (this.suite.bail()) { - this.emit('end'); - } this.fail(hook, err); }; @@ -279,12 +292,12 @@ Runner.prototype.failHook = function (hook, err) { * @param {Function} fn */ -Runner.prototype.hook = function (name, fn) { +Runner.prototype.hook = function(name, fn) { var suite = this.suite; var hooks = suite['_' + name]; var self = this; - function next (i) { + function next(i) { var hook = hooks[i]; if (!hook) { return fn(); @@ -296,12 +309,12 @@ Runner.prototype.hook = function (name, fn) { self.emit('hook', hook); if (!hook.listeners('error').length) { - hook.on('error', function (err) { + hook.on('error', function(err) { self.failHook(hook, err); }); } - hook.run(function (err) { + hook.run(function(err) { var testError = hook.error(); if (testError) { self.fail(self.test, testError); @@ -311,7 +324,7 @@ Runner.prototype.hook = function (name, fn) { if (name === 'beforeEach' || name === 'afterEach') { self.test.pending = true; } else { - suite.tests.forEach(function (test) { + suite.tests.forEach(function(test) { test.pending = true; }); // a pending hook won't be executed twice. @@ -330,7 +343,7 @@ Runner.prototype.hook = function (name, fn) { }); } - Runner.immediately(function () { + Runner.immediately(function() { next(0); }); }; @@ -344,11 +357,11 @@ Runner.prototype.hook = function (name, fn) { * @param {Array} suites * @param {Function} fn */ -Runner.prototype.hooks = function (name, suites, fn) { +Runner.prototype.hooks = function(name, suites, fn) { var self = this; var orig = this.suite; - function next (suite) { + function next(suite) { self.suite = suite; if (!suite) { @@ -356,7 +369,7 @@ Runner.prototype.hooks = function (name, suites, fn) { return fn(); } - self.hook(name, function (err) { + self.hook(name, function(err) { if (err) { var errSuite = self.suite; self.suite = orig; @@ -377,7 +390,7 @@ Runner.prototype.hooks = function (name, suites, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookUp = function (name, fn) { +Runner.prototype.hookUp = function(name, fn) { var suites = [this.suite].concat(this.parents()).reverse(); this.hooks(name, suites, fn); }; @@ -389,7 +402,7 @@ Runner.prototype.hookUp = function (name, fn) { * @param {Function} fn * @api private */ -Runner.prototype.hookDown = function (name, fn) { +Runner.prototype.hookDown = function(name, fn) { var suites = [this.suite].concat(this.parents()); this.hooks(name, suites, fn); }; @@ -401,7 +414,7 @@ Runner.prototype.hookDown = function (name, fn) { * @return {Array} * @api private */ -Runner.prototype.parents = function () { +Runner.prototype.parents = function() { var suite = this.suite; var suites = []; while (suite.parent) { @@ -417,7 +430,7 @@ Runner.prototype.parents = function () { * @param {Function} fn * @api private */ -Runner.prototype.runTest = function (fn) { +Runner.prototype.runTest = function(fn) { var self = this; var test = this.test; @@ -431,7 +444,7 @@ Runner.prototype.runTest = function (fn) { if (this.asyncOnly) { test.asyncOnly = true; } - test.on('error', function (err) { + test.on('error', function(err) { self.fail(test, err); }); if (this.allowUncaught) { @@ -452,12 +465,12 @@ Runner.prototype.runTest = function (fn) { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runTests = function (suite, fn) { +Runner.prototype.runTests = function(suite, fn) { var self = this; var tests = suite.tests.slice(); var test; - function hookErr (_, errSuite, after) { + function hookErr(_, errSuite, after) { // before/after Each hook for errSuite failed: var orig = self.suite; @@ -467,7 +480,7 @@ Runner.prototype.runTests = function (suite, fn) { if (self.suite) { // call hookUp afterEach - self.hookUp('afterEach', function (err2, errSuite2) { + self.hookUp('afterEach', function(err2, errSuite2) { self.suite = orig; // some hooks may fail even now if (err2) { @@ -483,7 +496,7 @@ Runner.prototype.runTests = function (suite, fn) { } } - function next (err, errSuite) { + function next(err, errSuite) { // if we bail after first err if (self.failures && suite._bail) { return fn(); @@ -540,8 +553,8 @@ Runner.prototype.runTests = function (suite, fn) { } // execute test and hook(s) - self.emit('test', self.test = test); - self.hookDown('beforeEach', function (err, errSuite) { + self.emit('test', (self.test = test)); + self.hookDown('beforeEach', function(err, errSuite) { if (test.isPending()) { if (self.forbidPending) { test.isPending = alwaysFalse; @@ -557,7 +570,7 @@ Runner.prototype.runTests = function (suite, fn) { return hookErr(err, errSuite, false); } self.currentRunnable = self.test; - self.runTest(function (err) { + self.runTest(function(err) { test = self.test; if (err) { var retry = test.currentRetry(); @@ -587,9 +600,17 @@ Runner.prototype.runTests = function (suite, fn) { } test.state = 'passed'; - self.emit('pass', test); - self.emit('test end', test); - self.hookUp('afterEach', next); + + // For supporting conditional fail in afterEach hook, + // run emit pass after an afterEach hook. + // See, https://github.com/mochajs/mocha/wiki/HOW-TO:-Conditionally-fail-a-test-after-completion + self.hookUp('afterEach', function(err, errSuite) { + if (test.state === 'passed') { + self.emit('pass', test); + } + self.emit('test end', test); + next(err, errSuite); + }); }); }); } @@ -599,7 +620,7 @@ Runner.prototype.runTests = function (suite, fn) { next(); }; -function alwaysFalse () { +function alwaysFalse() { return false; } @@ -610,7 +631,7 @@ function alwaysFalse () { * @param {Suite} suite * @param {Function} fn */ -Runner.prototype.runSuite = function (suite, fn) { +Runner.prototype.runSuite = function(suite, fn) { var i = 0; var self = this; var total = this.grepTotal(suite); @@ -622,9 +643,9 @@ Runner.prototype.runSuite = function (suite, fn) { return fn(); } - this.emit('suite', this.suite = suite); + this.emit('suite', (this.suite = suite)); - function next (errSuite) { + function next(errSuite) { if (errSuite) { // current suite failed on a hook from errSuite if (errSuite === suite) { @@ -650,7 +671,7 @@ Runner.prototype.runSuite = function (suite, fn) { // huge recursive loop and thus a maximum call stack error. // See comment in `this.runTests()` for more information. if (self._grep !== self._defaultGrep) { - Runner.immediately(function () { + Runner.immediately(function() { self.runSuite(curr, next); }); } else { @@ -658,7 +679,7 @@ Runner.prototype.runSuite = function (suite, fn) { } } - function done (errSuite) { + function done(errSuite) { self.suite = suite; self.nextSuite = next; @@ -672,7 +693,7 @@ Runner.prototype.runSuite = function (suite, fn) { // remove reference to test delete self.test; - self.hook('afterAll', function () { + self.hook('afterAll', function() { self.emit('suite end', suite); fn(errSuite); }); @@ -681,7 +702,7 @@ Runner.prototype.runSuite = function (suite, fn) { this.nextSuite = next; - this.hook('beforeAll', function (err) { + this.hook('beforeAll', function(err) { if (err) { return done(); } @@ -695,11 +716,17 @@ Runner.prototype.runSuite = function (suite, fn) { * @param {Error} err * @api private */ -Runner.prototype.uncaught = function (err) { +Runner.prototype.uncaught = function(err) { if (err) { - debug('uncaught exception %s', err === (function () { - return this; - }.call(err)) ? (err.message || err) : err); + debug( + 'uncaught exception %s', + err === + function() { + return this; + }.call(err) + ? err.message || err + : err + ); } else { debug('uncaught undefined exception'); err = undefinedError(); @@ -775,8 +802,8 @@ Runner.prototype.uncaught = function (err) { * * @param {Suite} suite */ -function cleanSuiteReferences (suite) { - function cleanArrReferences (arr) { +function cleanSuiteReferences(suite) { + function cleanArrReferences(arr) { for (var i = 0; i < arr.length; i++) { delete arr[i].fn; } @@ -807,30 +834,30 @@ function cleanSuiteReferences (suite) { * Run the root suite and invoke `fn(failures)` * on completion. * - * @param {Function} fn - * @return {Runner} for chaining * @api public + * @public + * @memberof Mocha.Runner * @param {Function} fn * @return {Runner} Runner instance. */ -Runner.prototype.run = function (fn) { +Runner.prototype.run = function(fn) { var self = this; var rootSuite = this.suite; - fn = fn || function () {}; + fn = fn || function() {}; - function uncaught (err) { + function uncaught(err) { self.uncaught(err); } - function start () { + function start() { // If there is an `only` filter if (hasOnly(rootSuite)) { filterOnly(rootSuite); } self.started = true; self.emit('start'); - self.runSuite(rootSuite, function () { + self.runSuite(rootSuite, function() { debug('finished running'); self.emit('end'); }); @@ -842,7 +869,7 @@ Runner.prototype.run = function (fn) { this.on('suite end', cleanSuiteReferences); // callback - this.on('end', function () { + this.on('end', function() { debug('end'); process.removeListener('uncaughtException', uncaught); fn(self.failures); @@ -866,10 +893,12 @@ Runner.prototype.run = function (fn) { /** * Cleanly abort execution. * + * @memberof Mocha.Runner + * @public * @api public * @return {Runner} Runner instance. */ -Runner.prototype.abort = function () { +Runner.prototype.abort = function() { debug('aborting'); this._abort = true; @@ -883,7 +912,7 @@ Runner.prototype.abort = function () { * @returns {Boolean} * @api private */ -function filterOnly (suite) { +function filterOnly(suite) { if (suite._onlyTests.length) { // If the suite contains `only` tests, run those and ignore any nested suites. suite.tests = suite._onlyTests; @@ -891,7 +920,7 @@ function filterOnly (suite) { } else { // Otherwise, do not run any of the tests in this suite. suite.tests = []; - suite._onlySuites.forEach(function (onlySuite) { + suite._onlySuites.forEach(function(onlySuite) { // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite. // Otherwise, all of the tests on this `only` suite should be run, so don't filter it. if (hasOnly(onlySuite)) { @@ -899,8 +928,10 @@ function filterOnly (suite) { } }); // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants. - suite.suites = suite.suites.filter(function (childSuite) { - return suite._onlySuites.indexOf(childSuite) !== -1 || filterOnly(childSuite); + suite.suites = suite.suites.filter(function(childSuite) { + return ( + suite._onlySuites.indexOf(childSuite) !== -1 || filterOnly(childSuite) + ); }); } // Keep the suite only if there is something to run @@ -914,8 +945,12 @@ function filterOnly (suite) { * @returns {Boolean} * @api private */ -function hasOnly (suite) { - return suite._onlyTests.length || suite._onlySuites.length || suite.suites.some(hasOnly); +function hasOnly(suite) { + return ( + suite._onlyTests.length || + suite._onlySuites.length || + suite.suites.some(hasOnly) + ); } /** @@ -926,8 +961,8 @@ function hasOnly (suite) { * @param {Array} globals * @return {Array} */ -function filterLeaks (ok, globals) { - return globals.filter(function (key) { +function filterLeaks(ok, globals) { + return globals.filter(function(key) { // Firefox and Chrome exposes iframes as index inside the window object if (/^\d+/.test(key)) { return false; @@ -936,13 +971,13 @@ function filterLeaks (ok, globals) { // in firefox // if runner runs in an iframe, this iframe's window.getInterface method // not init at first it is assigned in some seconds - if (global.navigator && (/^getInterface/).test(key)) { + if (global.navigator && /^getInterface/.test(key)) { return false; } // an iframe could be approached by window[iframeIndex] // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak - if (global.navigator && (/^\d+/).test(key)) { + if (global.navigator && /^\d+/.test(key)) { return false; } @@ -951,7 +986,7 @@ function filterLeaks (ok, globals) { return false; } - var matched = ok.filter(function (ok) { + var matched = ok.filter(function(ok) { if (~ok.indexOf('*')) { return key.indexOf(ok.split('*')[0]) === 0; } @@ -967,16 +1002,16 @@ function filterLeaks (ok, globals) { * @return {Array} * @api private */ -function extraGlobals () { +function extraGlobals() { if (typeof process === 'object' && typeof process.version === 'string') { var parts = process.version.split('.'); - var nodeVersion = parts.reduce(function (a, v) { - return a << 8 | v; + var nodeVersion = parts.reduce(function(a, v) { + return (a << 8) | v; }); // 'errno' was renamed to process._errno in v0.9.11. - if (nodeVersion < 0x00090B) { + if (nodeVersion < 0x00090b) { return ['errno']; } } diff --git a/lib/suite.js b/lib/suite.js index c83e33bcc3..91832ba3ad 100644 --- a/lib/suite.js +++ b/lib/suite.js @@ -1,9 +1,11 @@ 'use strict'; +/** + * @module Suite + */ /** * Module dependencies. */ - var EventEmitter = require('events').EventEmitter; var Hook = require('./hook'); var utils = require('./utils'); @@ -22,12 +24,14 @@ exports = module.exports = Suite; * with the same title is already present, that suite is returned to provide * nicer reporter and more flexible meta-testing. * + * @memberof Mocha + * @public * @api public * @param {Suite} parent * @param {string} title * @return {Suite} */ -exports.create = function (parent, title) { +exports.create = function(parent, title) { var suite = new Suite(title, parent.ctx); suite.parent = parent; title = suite.fullTitle(); @@ -36,18 +40,24 @@ exports.create = function (parent, title) { }; /** - * Initialize a new `Suite` with the given `title` and `ctx`. + * Initialize a new `Suite` with the given `title` and `ctx`. Derived from [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) * - * @api private + * @memberof Mocha + * @public + * @class * @param {string} title * @param {Context} parentContext */ -function Suite (title, parentContext) { +function Suite(title, parentContext) { if (!utils.isString(title)) { - throw new Error('Suite `title` should be a "string" but "' + typeof title + '" was given instead.'); + throw new Error( + 'Suite `title` should be a "string" but "' + + typeof title + + '" was given instead.' + ); } this.title = title; - function Context () {} + function Context() {} Context.prototype = parentContext; this.ctx = new Context(); this.suites = []; @@ -79,7 +89,7 @@ inherits(Suite, EventEmitter); * @api private * @return {Suite} */ -Suite.prototype.clone = function () { +Suite.prototype.clone = function() { var suite = new Suite(this.title); debug('clone'); suite.ctx = this.ctx; @@ -98,7 +108,7 @@ Suite.prototype.clone = function () { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.timeout = function (ms) { +Suite.prototype.timeout = function(ms) { if (!arguments.length) { return this._timeout; } @@ -120,7 +130,7 @@ Suite.prototype.timeout = function (ms) { * @param {number|string} n * @return {Suite|number} for chaining */ -Suite.prototype.retries = function (n) { +Suite.prototype.retries = function(n) { if (!arguments.length) { return this._retries; } @@ -130,13 +140,13 @@ Suite.prototype.retries = function (n) { }; /** - * Set or get timeout to `enabled`. - * - * @api private - * @param {boolean} enabled - * @return {Suite|boolean} self or enabled - */ -Suite.prototype.enableTimeouts = function (enabled) { + * Set or get timeout to `enabled`. + * + * @api private + * @param {boolean} enabled + * @return {Suite|boolean} self or enabled + */ +Suite.prototype.enableTimeouts = function(enabled) { if (!arguments.length) { return this._enableTimeouts; } @@ -152,7 +162,7 @@ Suite.prototype.enableTimeouts = function (enabled) { * @param {number|string} ms * @return {Suite|number} for chaining */ -Suite.prototype.slow = function (ms) { +Suite.prototype.slow = function(ms) { if (!arguments.length) { return this._slow; } @@ -171,7 +181,7 @@ Suite.prototype.slow = function (ms) { * @param {boolean} bail * @return {Suite|number} for chaining */ -Suite.prototype.bail = function (bail) { +Suite.prototype.bail = function(bail) { if (!arguments.length) { return this._bail; } @@ -185,7 +195,7 @@ Suite.prototype.bail = function (bail) { * * @api private */ -Suite.prototype.isPending = function () { +Suite.prototype.isPending = function() { return this.pending || (this.parent && this.parent.isPending()); }; @@ -196,7 +206,7 @@ Suite.prototype.isPending = function () { * @param {Function} fn - Hook callback * @returns {Hook} A new hook */ -Suite.prototype._createHook = function (title, fn) { +Suite.prototype._createHook = function(title, fn) { var hook = new Hook(title, fn); hook.parent = this; hook.timeout(this.timeout()); @@ -216,7 +226,7 @@ Suite.prototype._createHook = function (title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeAll = function (title, fn) { +Suite.prototype.beforeAll = function(title, fn) { if (this.isPending()) { return this; } @@ -240,7 +250,7 @@ Suite.prototype.beforeAll = function (title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterAll = function (title, fn) { +Suite.prototype.afterAll = function(title, fn) { if (this.isPending()) { return this; } @@ -264,7 +274,7 @@ Suite.prototype.afterAll = function (title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.beforeEach = function (title, fn) { +Suite.prototype.beforeEach = function(title, fn) { if (this.isPending()) { return this; } @@ -288,7 +298,7 @@ Suite.prototype.beforeEach = function (title, fn) { * @param {Function} fn * @return {Suite} for chaining */ -Suite.prototype.afterEach = function (title, fn) { +Suite.prototype.afterEach = function(title, fn) { if (this.isPending()) { return this; } @@ -311,7 +321,7 @@ Suite.prototype.afterEach = function (title, fn) { * @param {Suite} suite * @return {Suite} for chaining */ -Suite.prototype.addSuite = function (suite) { +Suite.prototype.addSuite = function(suite) { suite.parent = this; suite.timeout(this.timeout()); suite.retries(this.retries()); @@ -330,7 +340,7 @@ Suite.prototype.addSuite = function (suite) { * @param {Test} test * @return {Suite} for chaining */ -Suite.prototype.addTest = function (test) { +Suite.prototype.addTest = function(test) { test.parent = this; test.timeout(this.timeout()); test.retries(this.retries()); @@ -346,10 +356,12 @@ Suite.prototype.addTest = function (test) { * Return the full title generated by recursively concatenating the parent's * full title. * + * @memberof Mocha.Suite + * @public * @api public * @return {string} */ -Suite.prototype.fullTitle = function () { +Suite.prototype.fullTitle = function() { return this.titlePath().join(' '); }; @@ -357,10 +369,12 @@ Suite.prototype.fullTitle = function () { * Return the title path generated by recursively concatenating the parent's * title path. * + * @memberof Mocha.Suite + * @public * @api public * @return {string} */ -Suite.prototype.titlePath = function () { +Suite.prototype.titlePath = function() { var result = []; if (this.parent) { result = result.concat(this.parent.titlePath()); @@ -374,13 +388,17 @@ Suite.prototype.titlePath = function () { /** * Return the total number of tests. * + * @memberof Mocha.Suite + * @public * @api public * @return {number} */ -Suite.prototype.total = function () { - return this.suites.reduce(function (sum, suite) { - return sum + suite.total(); - }, 0) + this.tests.length; +Suite.prototype.total = function() { + return ( + this.suites.reduce(function(sum, suite) { + return sum + suite.total(); + }, 0) + this.tests.length + ); }; /** @@ -391,9 +409,9 @@ Suite.prototype.total = function () { * @param {Function} fn * @return {Suite} */ -Suite.prototype.eachTest = function (fn) { +Suite.prototype.eachTest = function(fn) { this.tests.forEach(fn); - this.suites.forEach(function (suite) { + this.suites.forEach(function(suite) { suite.eachTest(fn); }); return this; @@ -402,7 +420,7 @@ Suite.prototype.eachTest = function (fn) { /** * This will run the root suite if we happen to be running in delayed mode. */ -Suite.prototype.run = function run () { +Suite.prototype.run = function run() { if (this.root) { this.emit('run'); } diff --git a/lib/test.js b/lib/test.js index 733f1b48c3..d8233a3571 100644 --- a/lib/test.js +++ b/lib/test.js @@ -1,29 +1,25 @@ 'use strict'; - -/** - * Module dependencies. - */ - var Runnable = require('./runnable'); var utils = require('./utils'); var isString = utils.isString; -/** - * Expose `Test`. - */ - module.exports = Test; /** * Initialize a new `Test` with the given `title` and callback `fn`. * - * @api private + * @class + * @extends Runnable * @param {String} title * @param {Function} fn */ -function Test (title, fn) { +function Test(title, fn) { if (!isString(title)) { - throw new Error('Test `title` should be a "string" but "' + typeof title + '" was given instead.'); + throw new Error( + 'Test `title` should be a "string" but "' + + typeof title + + '" was given instead.' + ); } Runnable.call(this, title, fn); this.pending = !fn; @@ -35,7 +31,7 @@ function Test (title, fn) { */ utils.inherits(Test, Runnable); -Test.prototype.clone = function () { +Test.prototype.clone = function() { var test = new Test(this.title, this.fn); test.timeout(this.timeout()); test.slow(this.slow()); diff --git a/lib/utils.js b/lib/utils.js index 60151b66d4..e67bf74414 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,5 +1,9 @@ 'use strict'; +/** + * @module + */ + /** * Module dependencies. */ @@ -26,8 +30,8 @@ exports.inherits = require('util').inherits; * @param {string} html * @return {string} */ -exports.escape = function (html) { - return he.encode(String(html), { useNamedReferences: false }); +exports.escape = function(html) { + return he.encode(String(html), {useNamedReferences: false}); }; /** @@ -37,7 +41,7 @@ exports.escape = function (html) { * @param {Object} obj * @return {boolean} */ -exports.isString = function (obj) { +exports.isString = function(obj) { return typeof obj === 'string'; }; @@ -49,11 +53,11 @@ exports.isString = function (obj) { * @param {Array} files * @param {Function} fn */ -exports.watch = function (files, fn) { - var options = { interval: 100 }; - files.forEach(function (file) { +exports.watch = function(files, fn) { + var options = {interval: 100}; + files.forEach(function(file) { debug('file %s', file); - fs.watchFile(file, options, function (curr, prev) { + fs.watchFile(file, options, function(curr, prev) { if (prev.mtime < curr.mtime) { fn(file); } @@ -68,7 +72,7 @@ exports.watch = function (files, fn) { * @param {string} path * @return {boolean} */ -function ignored (path) { +function ignored(path) { return !~ignore.indexOf(path); } @@ -81,15 +85,16 @@ function ignored (path) { * @param {Array} [ret=[]] * @return {Array} */ -exports.files = function (dir, ext, ret) { +exports.files = function(dir, ext, ret) { ret = ret || []; ext = ext || ['js']; var re = new RegExp('\\.(' + ext.join('|') + ')$'); - fs.readdirSync(dir) + fs + .readdirSync(dir) .filter(ignored) - .forEach(function (path) { + .forEach(function(path) { path = join(dir, path); if (fs.lstatSync(path).isDirectory()) { exports.files(path, ext, ret); @@ -108,7 +113,7 @@ exports.files = function (dir, ext, ret) { * @param {string} str * @return {string} */ -exports.slug = function (str) { +exports.slug = function(str) { return str .toLowerCase() .replace(/ +/g, '-') @@ -121,15 +126,22 @@ exports.slug = function (str) { * @param {string} str * @return {string} */ -exports.clean = function (str) { +exports.clean = function(str) { str = str - .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '') + .replace(/\r\n?|[\n\u2028\u2029]/g, '\n') + .replace(/^\uFEFF/, '') // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content - .replace(/^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, '$1$2$3'); + .replace( + /^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, + '$1$2$3' + ); var spaces = str.match(/^\n?( *)/)[1].length; var tabs = str.match(/^\n?(\t*)/)[1].length; - var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', 'gm'); + var re = new RegExp( + '^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', + 'gm' + ); str = str.replace(re, ''); @@ -143,17 +155,20 @@ exports.clean = function (str) { * @param {string} qs * @return {Object} */ -exports.parseQuery = function (qs) { - return qs.replace('?', '').split('&').reduce(function (obj, pair) { - var i = pair.indexOf('='); - var key = pair.slice(0, i); - var val = pair.slice(++i); - - // Due to how the URLSearchParams API treats spaces - obj[key] = decodeURIComponent(val.replace(/\+/g, '%20')); - - return obj; - }, {}); +exports.parseQuery = function(qs) { + return qs + .replace('?', '') + .split('&') + .reduce(function(obj, pair) { + var i = pair.indexOf('='); + var key = pair.slice(0, i); + var val = pair.slice(++i); + + // Due to how the URLSearchParams API treats spaces + obj[key] = decodeURIComponent(val.replace(/\+/g, '%20')); + + return obj; + }, {}); }; /** @@ -163,7 +178,7 @@ exports.parseQuery = function (qs) { * @param {string} js * @return {string} */ -function highlight (js) { +function highlight(js) { return js .replace(//g, '>') @@ -171,8 +186,14 @@ function highlight (js) { .replace(/('.*?')/gm, '$1') .replace(/(\d+\.\d+)/gm, '$1') .replace(/(\d+)/gm, '$1') - .replace(/\bnew[ \t]+(\w+)/gm, 'new $1') - .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '$1'); + .replace( + /\bnew[ \t]+(\w+)/gm, + 'new $1' + ) + .replace( + /\b(function|new|throw|return|var|if|else)\b/gm, + '$1' + ); } /** @@ -181,7 +202,7 @@ function highlight (js) { * @api private * @param {string} name */ -exports.highlightTags = function (name) { +exports.highlightTags = function(name) { var code = document.getElementById('mocha').getElementsByTagName(name); for (var i = 0, len = code.length; i < len; ++i) { code[i].innerHTML = highlight(code[i].innerHTML); @@ -202,7 +223,7 @@ exports.highlightTags = function (name) { * @param {string} typeHint The type of the value * @returns {string} */ -function emptyRepresentation (value, typeHint) { +function emptyRepresentation(value, typeHint) { switch (typeHint) { case 'function': return '[Function]'; @@ -236,7 +257,7 @@ function emptyRepresentation (value, typeHint) { * type(global) // 'global' * type(new String('foo') // 'object' */ -var type = exports.type = function type (value) { +var type = (exports.type = function type(value) { if (value === undefined) { return 'undefined'; } else if (value === null) { @@ -244,10 +265,11 @@ var type = exports.type = function type (value) { } else if (Buffer.isBuffer(value)) { return 'buffer'; } - return Object.prototype.toString.call(value) + return Object.prototype.toString + .call(value) .replace(/^\[.+\s(.+?)]$/, '$1') .toLowerCase(); -}; +}); /** * Stringify `value`. Different behavior depending on type of value: @@ -264,21 +286,23 @@ var type = exports.type = function type (value) { * @param {*} value * @return {string} */ -exports.stringify = function (value) { +exports.stringify = function(value) { var typeHint = type(value); if (!~['object', 'array', 'function'].indexOf(typeHint)) { if (typeHint === 'buffer') { var json = Buffer.prototype.toJSON.call(value); // Based on the toJSON result - return jsonStringify(json.data && json.type ? json.data : json, 2) - .replace(/,(\n|$)/g, '$1'); + return jsonStringify( + json.data && json.type ? json.data : json, + 2 + ).replace(/,(\n|$)/g, '$1'); } // IE7/IE8 has a bizarre String constructor; needs to be coerced // into an array and back to obj. if (typeHint === 'string' && typeof value === 'object') { - value = value.split('').reduce(function (acc, char, idx) { + value = value.split('').reduce(function(acc, char, idx) { acc[idx] = char; return acc; }, {}); @@ -290,7 +314,10 @@ exports.stringify = function (value) { for (var prop in value) { if (Object.prototype.hasOwnProperty.call(value, prop)) { - return jsonStringify(exports.canonicalize(value, null, typeHint), 2).replace(/,(\n|$)/g, '$1'); + return jsonStringify( + exports.canonicalize(value, null, typeHint), + 2 + ).replace(/,(\n|$)/g, '$1'); } } @@ -306,7 +333,7 @@ exports.stringify = function (value) { * @param {number=} depth * @returns {*} */ -function jsonStringify (object, spaces, depth) { +function jsonStringify(object, spaces, depth) { if (typeof spaces === 'undefined') { // primitive types return _stringify(object); @@ -316,13 +343,16 @@ function jsonStringify (object, spaces, depth) { var space = spaces * depth; var str = Array.isArray(object) ? '[' : '{'; var end = Array.isArray(object) ? ']' : '}'; - var length = typeof object.length === 'number' ? object.length : Object.keys(object).length; + var length = + typeof object.length === 'number' + ? object.length + : Object.keys(object).length; // `.repeat()` polyfill - function repeat (s, n) { + function repeat(s, n) { return new Array(n).join(s); } - function _stringify (val) { + function _stringify(val) { switch (type(val)) { case 'null': case 'undefined': @@ -336,9 +366,10 @@ function jsonStringify (object, spaces, depth) { case 'regexp': case 'symbol': case 'number': - val = val === 0 && (1 / val) === -Infinity // `-0` - ? '-0' - : val.toString(); + val = + val === 0 && 1 / val === -Infinity // `-0` + ? '-0' + : val.toString(); break; case 'date': var sDate = isNaN(val.getTime()) ? val.toString() : val.toISOString(); @@ -351,9 +382,10 @@ function jsonStringify (object, spaces, depth) { val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']'; break; default: - val = (val === '[Function]' || val === '[Circular]') - ? val - : JSON.stringify(val); // string + val = + val === '[Function]' || val === '[Circular]' + ? val + : JSON.stringify(val); // string } return val; } @@ -363,15 +395,19 @@ function jsonStringify (object, spaces, depth) { continue; // not my business } --length; - str += '\n ' + repeat(' ', space) + + str += + '\n ' + + repeat(' ', space) + (Array.isArray(object) ? '' : '"' + i + '": ') + // key _stringify(object[i]) + // value (length ? ',' : ''); // comma } - return str + + return ( + str + // [], {} - (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end); + (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end) + ); } /** @@ -393,13 +429,13 @@ function jsonStringify (object, spaces, depth) { * @param {string} [typeHint] Type hint * @return {(Object|Array|Function|string|undefined)} */ -exports.canonicalize = function canonicalize (value, stack, typeHint) { +exports.canonicalize = function canonicalize(value, stack, typeHint) { var canonicalizedObj; /* eslint-disable no-unused-vars */ var prop; /* eslint-enable no-unused-vars */ typeHint = typeHint || type(value); - function withStack (value, fn) { + function withStack(value, fn) { stack.push(value); fn(); stack.pop(); @@ -418,8 +454,8 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) { canonicalizedObj = value; break; case 'array': - withStack(value, function () { - canonicalizedObj = value.map(function (item) { + withStack(value, function() { + canonicalizedObj = value.map(function(item) { return exports.canonicalize(item, stack); }); }); @@ -438,10 +474,12 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) { /* falls through */ case 'object': canonicalizedObj = canonicalizedObj || {}; - withStack(value, function () { - Object.keys(value).sort().forEach(function (key) { - canonicalizedObj[key] = exports.canonicalize(value[key], stack); - }); + withStack(value, function() { + Object.keys(value) + .sort() + .forEach(function(key) { + canonicalizedObj[key] = exports.canonicalize(value[key], stack); + }); }); break; case 'date': @@ -461,13 +499,15 @@ exports.canonicalize = function canonicalize (value, stack, typeHint) { /** * Lookup file names at the given `path`. * + * @memberof Mocha.utils + * @public * @api public * @param {string} filepath Base path to start searching from. * @param {string[]} extensions File extensions to look for. * @param {boolean} recursive Whether or not to recurse into subdirectories. * @return {string[]} An array of paths. */ -exports.lookupFiles = function lookupFiles (filepath, extensions, recursive) { +exports.lookupFiles = function lookupFiles(filepath, extensions, recursive) { var files = []; if (!fs.existsSync(filepath)) { @@ -492,7 +532,7 @@ exports.lookupFiles = function lookupFiles (filepath, extensions, recursive) { return; } - fs.readdirSync(filepath).forEach(function (file) { + fs.readdirSync(filepath).forEach(function(file) { file = path.join(filepath, file); try { var stat = fs.statSync(file); @@ -506,6 +546,11 @@ exports.lookupFiles = function lookupFiles (filepath, extensions, recursive) { // ignore error return; } + if (!extensions) { + throw new Error( + 'extensions parameter required when filepath is a directory' + ); + } var re = new RegExp('\\.(?:' + extensions.join('|') + ')$'); if (!stat.isFile() || !re.test(file) || path.basename(file)[0] === '.') { return; @@ -522,8 +567,10 @@ exports.lookupFiles = function lookupFiles (filepath, extensions, recursive) { * @return {Error} */ -exports.undefinedError = function () { - return new Error('Caught undefined error, did you throw without specifying what?'); +exports.undefinedError = function() { + return new Error( + 'Caught undefined error, did you throw without specifying what?' + ); }; /** @@ -533,7 +580,7 @@ exports.undefinedError = function () { * @return {Error} */ -exports.getError = function (err) { +exports.getError = function(err) { return err || exports.undefinedError(); }; @@ -546,9 +593,9 @@ exports.getError = function (err) { * (i.e: strip Mocha and internal node functions from stack trace). * @returns {Function} */ -exports.stackTraceFilter = function () { +exports.stackTraceFilter = function() { // TODO: Replace with `process.browser` - var is = typeof document === 'undefined' ? { node: true } : { browser: true }; + var is = typeof document === 'undefined' ? {node: true} : {browser: true}; var slash = path.sep; var cwd; if (is.node) { @@ -556,30 +603,35 @@ exports.stackTraceFilter = function () { } else { cwd = (typeof location === 'undefined' ? window.location - : location).href.replace(/\/[^/]*$/, '/'); + : location + ).href.replace(/\/[^/]*$/, '/'); slash = '/'; } - function isMochaInternal (line) { - return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) || - (~line.indexOf('node_modules' + slash + 'mocha.js')) || - (~line.indexOf('bower_components' + slash + 'mocha.js')) || - (~line.indexOf(slash + 'mocha.js')); + function isMochaInternal(line) { + return ( + ~line.indexOf('node_modules' + slash + 'mocha' + slash) || + ~line.indexOf('node_modules' + slash + 'mocha.js') || + ~line.indexOf('bower_components' + slash + 'mocha.js') || + ~line.indexOf(slash + 'mocha.js') + ); } - function isNodeInternal (line) { - return (~line.indexOf('(timers.js:')) || - (~line.indexOf('(events.js:')) || - (~line.indexOf('(node.js:')) || - (~line.indexOf('(module.js:')) || - (~line.indexOf('GeneratorFunctionPrototype.next (native)')) || - false; + function isNodeInternal(line) { + return ( + ~line.indexOf('(timers.js:') || + ~line.indexOf('(events.js:') || + ~line.indexOf('(node.js:') || + ~line.indexOf('(module.js:') || + ~line.indexOf('GeneratorFunctionPrototype.next (native)') || + false + ); } - return function (stack) { + return function(stack) { stack = stack.split('\n'); - stack = stack.reduce(function (list, line) { + stack = stack.reduce(function(list, line) { if (isMochaInternal(line)) { return list; } @@ -607,7 +659,7 @@ exports.stackTraceFilter = function () { * @param {*} value * @returns {boolean} Whether or not `value` is a Promise */ -exports.isPromise = function isPromise (value) { +exports.isPromise = function isPromise(value) { return typeof value === 'object' && typeof value.then === 'function'; }; @@ -615,4 +667,4 @@ exports.isPromise = function isPromise (value) { * It's a noop. * @api */ -exports.noop = function () {}; +exports.noop = function() {}; diff --git a/media/logo.svg b/media/logo.svg deleted file mode 100644 index 1bed0ce1d1..0000000000 --- a/media/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - -mocha - diff --git a/package-lock.json b/package-lock.json index 9ee42f0229..782bb42830 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,80 @@ { "name": "mocha", - "version": "5.0.4", + "version": "5.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.46.tgz", + "integrity": "sha512-7BKRkmYaPZm3Yff5HGZJKCz7RqZ5jUjknsXT6Gz5YKG23J3uq9hAj0epncCB0rlqmnZ8Q+UUpQB2tCR5mT37vw==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.46" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.46", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.46.tgz", + "integrity": "sha512-r4snW6Q8ICL3Y8hGzYJRvyG/+sc+kvkewXNedG9tQjoHmUFMwMSv/o45GWQUQswevGnWghiGkpRPivFfOuMsOA==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@mocha/docdash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@mocha/docdash/-/docdash-1.0.1.tgz", + "integrity": "sha512-tjLL0JNDktbXsUt1NjJFPbFiABF3BZGjyTaup9he5sQCuSfq9I2IzMI85igjv9wGhbVBEMj7mp9SgnQ0LR8XNw==", + "dev": true + }, "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "abab": { @@ -24,16 +87,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true + "dev": true }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.17", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -49,7 +111,7 @@ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.4" } }, "acorn-jsx": { @@ -58,7 +120,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -69,10 +131,35 @@ } } }, + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, + "requires": { + "acorn": "^5.4.1", + "xtend": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + } + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "dev": true, + "optional": true + }, "adm-zip": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.9.tgz", + "integrity": "sha512-eknaJ3Io/JasGGinVeqY5TsPlQgHbiNlHnK5zdFPRNs9XRggDykKz8zPesneOMEZJxWji7G3CfsUW0Ds9Dw0Bw==", "dev": true }, "after": { @@ -82,44 +169,24 @@ "dev": true }, "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "dev": true, "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } + "es6-promisify": "^5.0.0" } }, "ajv": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", - "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - }, - "dependencies": { - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -134,11 +201,48 @@ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "amqplib": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", + "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", + "dev": true, + "optional": true, + "requires": { + "bitsyntax": "~0.0.4", + "bluebird": "^3.4.6", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } + } }, "animated-gif-detector": { "version": "1.2.0", @@ -146,7 +250,7 @@ "integrity": "sha1-yy+ZEcqAJPKzTGk7f9ZFQu5BYYk=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "ansi-escapes": { @@ -191,16 +295,28 @@ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, + "any-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", + "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=", + "dev": true + }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -214,24 +330,34 @@ "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", "dev": true, "requires": { - "file-type": "3.9.0" + "file-type": "^3.1.0" } }, "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "async": "2.5.0", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.4", - "readable-stream": "2.3.3", - "tar-stream": "1.5.4", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", + "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "dev": true, + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.2.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + } } }, "archiver-utils": { @@ -240,32 +366,32 @@ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "dev": true, "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.4", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -274,7 +400,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -283,6 +409,30 @@ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-changes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-changes/-/array-changes-3.0.1.tgz", + "integrity": "sha512-UYXV+qUaTKJO3GUBVfD6b9Mu7wUzDvpfovZKtbxNJApwRUifgrJMidvE+/rbqV3wCffly5HXcbOW3/7shmmEag==", + "dev": true, + "requires": { + "arraydiff-papandreou": "0.1.1-patch1" + } + }, + "array-changes-async": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-changes-async/-/array-changes-async-3.0.1.tgz", + "integrity": "sha512-WNHLhMOTzntixkBxNm/MiWCNKuC4FMYXk6DKuzZUbkWXAe0Xomwv40SEUicfOuHHtW7Ue661Mc5AJA0AOfqApg==", + "dev": true, + "requires": { + "arraydiff-async": "0.2.0" + } + }, "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", @@ -343,7 +493,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -359,9 +509,21 @@ "dev": true }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arraydiff-async": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/arraydiff-async/-/arraydiff-async-0.2.0.tgz", + "integrity": "sha1-uwUouY6BS3AvAfSWvHO+w+V/QIY=", + "dev": true + }, + "arraydiff-papandreou": { + "version": "0.1.1-patch1", + "resolved": "https://registry.npmjs.org/arraydiff-papandreou/-/arraydiff-papandreou-0.1.1-patch1.tgz", + "integrity": "sha1-ApAnC/27Sy762LdIJjitWnIQkhA=", "dev": true }, "arrify": { @@ -377,14 +539,14 @@ "dev": true }, "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -402,159 +564,103 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assetgraph": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-3.13.2.tgz", - "integrity": "sha512-kvn2LBmTg24PNSxckmwu1rDDVN2n861fRlU8v7H2cBCPwSdylCpTUX5GHRIshSZjqshlVAtMDwf40/i/noVWHg==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/assetgraph/-/assetgraph-3.14.2.tgz", + "integrity": "sha512-NFwhjL60LYypYQ/k3aZ/wxlmLL+Hs1mjPUsL0H4bpXnQ3JqUgOqKUGdKXkiz72OhVQPoLtczDZgSe1F8NrYEpg==", "dev": true, "requires": { - "bluebird": "3.5.0", + "bluebird": "^3.5.0", "capitalize": "1.0.0", - "chalk": "1.1.3", - "createerror": "1.3.0", + "chalk": "^1.1.3", + "createerror": "^1.1.0", "css-font-parser": "0.2.1", "css-font-weight-names": "0.2.1", "css-list-helpers": "1.0.1", - "cssnano": "3.10.0", - "esanimate": "1.1.0", - "escodegen": "1.9.0", - "esprima": "3.1.3", - "espurify": "1.7.0", - "estraverse": "4.2.0", - "gettemporaryfilepath": "1.0.0", - "glob": "7.1.2", - "html-minifier": "3.5.8", + "cssnano": "^3.7.4", + "esanimate": "^1.1.0", + "escodegen": "^1.9.1", + "esprima": "^3.1.3", + "espurify": "^1.7.0", + "estraverse": "^4.2.0", + "gettemporaryfilepath": "^1.0.0", + "glob": "^7.0.5", + "html-minifier": "^3.5.8", "imageinfo": "1.0.4", "jsdom": "9.12.0", - "lodash": "4.17.4", - "memoizesync": "1.0.0", - "mkdirp": "0.5.1", - "normalizeurl": "1.0.0", - "perfectionist": "2.4.0", - "postcss": "6.0.15", - "read-pkg-up": "2.0.0", - "repeat-string": "1.6.1", - "schemes": "1.1.1", - "semver": "5.3.0", - "source-map": "0.5.7", - "sourcemap-to-ast": "0.0.2", + "lodash": "^4.11.2", + "memoizesync": "1.1.1", + "mkdirp": "^0.5.1", + "normalizeurl": "^1.0.0", + "perfectionist": "^2.4.0", + "postcss": "~6.0.1", + "read-pkg-up": "^2.0.0", + "repeat-string": "^1.5.4", + "schemes": "^1.0.1", + "semver": "^5.3.0", + "source-map": "^0.5.6", "specificity": "0.3.0", - "teepee": "2.31.1", - "uglify-js": "3.3.4", - "urltools": "0.3.5", - "xmldom": "0.1.27" + "teepee": "^2.28.0", + "uglify-js": "^3.3.4", + "urltools": "^0.4.0", + "xmldom": "^0.1.27" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "memoizesync": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/memoizesync/-/memoizesync-1.1.1.tgz", + "integrity": "sha1-AcCfDizyCmNJFj6rBeUfm9HhP+E=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "lru-cache": "=2.3.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, "urltools": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/urltools/-/urltools-0.3.5.tgz", - "integrity": "sha1-YcEssnhf6xf/tAacmXLtfgDHW5Y=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/urltools/-/urltools-0.4.1.tgz", + "integrity": "sha512-hGdweXMDjRXC0wC9RiJRRY05cAvlg6hnGBSg+6KWjJcqtvO0F6D4S2+ftp6t9x761jW8C0/lnKUOVUeA3rZlZQ==", "dev": true, "requires": { - "glob": "7.1.2", - "underscore": "1.8.3", - "urijs": "1.19.0" + "glob": "^7.0.3", + "underscore": "^1.8.3", + "urijs": "^1.18.2" } } } }, "assetgraph-builder": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-5.7.0.tgz", - "integrity": "sha512-Yhv837o8q3mbSqIR7MvcDdU6kiT+s3uIHJqXVpsWq3xa/GZKie/L28Dh4qdyKlLTMZtwrLC5EoAGRSE43k1hJA==", + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/assetgraph-builder/-/assetgraph-builder-5.9.1.tgz", + "integrity": "sha512-bbOEkIvqDzzxC4nBMKYp/3OOQPXPOxcjWSWpOwTGlPYwg7tEmYB/jPM5RoJGdgBxpAJw5JGDXn6oOO3EtYFDXg==", "dev": true, "requires": { - "assetgraph": "3.13.2", + "assetgraph": "3.14.2", "assetgraph-sprite": "2.0.0", - "bluebird": "3.5.0", + "bluebird": "^3.5.0", "browserslist": "2.1.4", - "chalk": "1.1.3", - "esanimate": "1.1.0", - "escodegen": "1.9.0", - "estraverse": "4.2.0", + "chalk": "^1.1.3", + "esanimate": "^1.1.0", + "escodegen": "^1.8.0", + "estraverse": "^4.2.0", "express-processimage": "7.4.0", - "extend": "3.0.1", - "histogram": "3.0.0", + "extend": "^3.0.0", + "histogram": "^3.0.0", "jpegtran": "1.0.5", - "lodash": "4.17.4", + "lodash": "^4.14.1", "memoizesync": "1.0.0", "node-zopfli": "2.0.2", "optimist": "0.6.1", "optipng": "1.1.0", - "passerror": "1.1.1", + "passerror": "^1.1.1", "pngcrush": "1.1.1", "pngquant": "1.3.0", "urltools": "0.3.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } } }, "assetgraph-sprite": { @@ -571,23 +677,33 @@ "seq": "0.3.5" } }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.5.tgz", + "integrity": "sha512-oJjo+5e7/vEc2FBK8gUalV0pba4L3VdBIs2EKhOLHLcOd2FgQIVQN9xb0eZ9IjEWyAL7vq6fGJxOvVvdCHNyMw==", + "dev": true, + "optional": true + }, "astw": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" } }, "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", + "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=", + "dev": true }, "async-each": { "version": "1.0.1", @@ -601,12 +717,24 @@ "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", "dev": true }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, "autolinker": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.3.tgz", @@ -619,12 +747,12 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000784", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" }, "dependencies": { "browserslist": { @@ -633,29 +761,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000784", - "electron-to-chromium": "1.3.30" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "has-flag": { @@ -670,19 +777,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -691,7 +789,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -703,62 +801,70 @@ "dev": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", "dev": true, + "optional": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "follow-redirects": "1.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ms": "2.0.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.2.0" + } } } }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -770,6 +876,73 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -777,9 +950,9 @@ "dev": true }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, "base64id": { @@ -795,7 +968,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -819,13 +992,13 @@ "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", "dev": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "download": "4.4.3", - "exec-series": "1.0.3", - "rimraf": "2.6.2", - "tempfile": "1.1.1", - "url-regex": "3.2.0" + "archive-type": "^3.0.1", + "decompress": "^3.0.0", + "download": "^4.1.2", + "exec-series": "^1.0.0", + "rimraf": "^2.2.6", + "tempfile": "^1.0.0", + "url-regex": "^3.0.0" } }, "bin-check": { @@ -834,7 +1007,7 @@ "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", "dev": true, "requires": { - "executable": "1.1.0" + "executable": "^1.0.0" } }, "bin-version": { @@ -843,7 +1016,7 @@ "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", "dev": true, "requires": { - "find-versions": "1.2.1" + "find-versions": "^1.0.0" } }, "bin-version-check": { @@ -852,10 +1025,10 @@ "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", "dev": true, "requires": { - "bin-version": "1.0.4", - "minimist": "1.2.0", - "semver": "4.3.6", - "semver-truncate": "1.1.2" + "bin-version": "^1.0.0", + "minimist": "^1.1.0", + "semver": "^4.0.3", + "semver-truncate": "^1.0.0" }, "dependencies": { "minimist": { @@ -878,27 +1051,38 @@ "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", "dev": true, "requires": { - "bin-check": "2.0.0", - "bin-version-check": "2.1.0", - "download": "4.4.3", - "each-async": "1.1.1", - "lazy-req": "1.1.0", - "os-filter-obj": "1.0.3" + "bin-check": "^2.0.0", + "bin-version-check": "^2.1.0", + "download": "^4.0.0", + "each-async": "^1.1.1", + "lazy-req": "^1.0.0", + "os-filter-obj": "^1.0.0" } }, "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "dev": true, + "optional": true, + "requires": { + "buffer-more-ints": "0.0.2" + } + }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "blob": { @@ -913,13 +1097,13 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", "dev": true }, "bn.js": { @@ -935,15 +1119,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.1", - "http-errors": "1.6.2", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.15" + "type-is": "~1.6.15" }, "dependencies": { "debug": { @@ -957,21 +1141,27 @@ } } }, + "boolify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/boolify/-/boolify-1.0.1.tgz", + "integrity": "sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs=", + "dev": true + }, "boom": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.x.x" } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -981,9 +1171,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "brorand": { @@ -993,18 +1183,25 @@ "dev": true }, "browser-pack": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "defined": "1.0.0", - "through2": "2.0.3", - "umd": "3.0.1" + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" } }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", @@ -1025,109 +1222,98 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=" + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" }, "browserify": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", - "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "assert": "1.4.1", - "browser-pack": "6.0.2", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.1.4", - "buffer": "5.0.7", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "1.0.0", - "inherits": "2.0.3", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.1.2", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.3", - "resolve": "1.4.0", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "subarg": "1.0.0", - "syntax-error": "1.3.0", - "through2": "2.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" - }, - "dependencies": { - "buffer": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.7.tgz", - "integrity": "sha512-NeeHXWh5pCbPQCt2/6rLvXqapZfVsqw/YgRgaHpT3H9Uzgs+S0lSg5SQzouIuDvcmlQRqBe8hOO2scKCu3cxrg==", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8" - } - } + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.2.tgz", + "integrity": "sha512-fMES05wq1Oukts6ksGUU2TMVHHp06LyQt0SIwbXIHm7waSrQmNBZePsU0iM/4f94zbvb/wHma+D1YrdzWYnF/A==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" } }, "browserify-aes": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", - "integrity": "sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.0.8", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -1136,8 +1322,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1146,22 +1332,22 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~1.0.5" } }, "browserslist": { @@ -1170,32 +1356,70 @@ "integrity": "sha1-zFJq9KExK30uBWU+VtDIq3DA4FM=", "dev": true, "requires": { - "caniuse-lite": "1.0.30000784", - "electron-to-chromium": "1.3.30" + "caniuse-lite": "^1.0.30000670", + "electron-to-chromium": "^1.3.11" + } + }, + "buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^0.1.0", + "buffer-fill": "^0.1.0" } }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=", + "dev": true + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==", + "dev": true + }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", "dev": true }, + "buffer-more-ints": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", + "dev": true + }, "buffer-to-vinyl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", "dev": true, "requires": { - "file-type": "3.9.0", - "readable-stream": "2.3.3", - "uuid": "2.0.3", - "vinyl": "1.2.0" + "file-type": "^3.1.0", + "readable-stream": "^2.0.2", + "uuid": "^2.0.1", + "vinyl": "^1.0.0" }, "dependencies": { "uuid": { @@ -1212,6 +1436,22 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "buildmail": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "dev": true, + "optional": true, + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + } + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -1230,6 +1470,31 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "cached-path-relative": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", @@ -1242,7 +1507,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -1263,8 +1528,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -1279,8 +1544,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caniuse-api": { @@ -1289,10 +1554,10 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-db": "1.0.30000784", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" }, "dependencies": { "browserslist": { @@ -1301,28 +1566,22 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000784", - "electron-to-chromium": "1.3.30" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true } } }, "caniuse-db": { - "version": "1.0.30000784", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000784.tgz", - "integrity": "sha1-G+lQEtlInHcZB0+BruV9vf/mNhs=", + "version": "1.0.30000849", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000849.tgz", + "integrity": "sha1-1FL1PX3PuE5/X9NMB3wwrSt7nHs=", "dev": true }, "caniuse-lite": { - "version": "1.0.30000784", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000784.tgz", - "integrity": "sha1-EpztdOmhKApEGIC2zSvOMO9Z5sA=", + "version": "1.0.30000849", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000849.tgz", + "integrity": "sha512-hlkWpyGJTDjjim2m+nvvHiEqt2PZuPdB9yYRbys5P/T179Aq7YgMF6tnM489voTfqMLtJhqmOZNfghxWjjT8jg==", "dev": true }, "canvas": { @@ -1332,9 +1591,9 @@ "dev": true, "optional": true, "requires": { - "nan": "2.7.0", - "parse-css-font": "2.0.2", - "units-css": "0.4.0" + "nan": "^2.4.0", + "parse-css-font": "^2.0.2", + "units-css": "^0.4.0" } }, "capitalize": { @@ -1355,16 +1614,25 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "~0.3.0" + } + }, "caw": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", "dev": true, "requires": { - "get-proxy": "1.1.0", - "is-obj": "1.0.1", - "object-assign": "3.0.0", - "tunnel-agent": "0.4.3" + "get-proxy": "^1.0.1", + "is-obj": "^1.0.0", + "object-assign": "^3.0.0", + "tunnel-agent": "^0.4.0" }, "dependencies": { "object-assign": { @@ -1381,6 +1649,20 @@ } } }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" + } + }, "chainsaw": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.0.9.tgz", @@ -1388,28 +1670,27 @@ "dev": true, "optional": true, "requires": { - "traverse": "0.3.9" + "traverse": ">=0.3.0 <0.4" } }, "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, @@ -1419,31 +1700,69 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, + "ci-info": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", + "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -1458,46 +1777,45 @@ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "is-descriptor": "^0.1.0" } }, - "strip-ansi": { + "isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, "clean-css": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", - "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.5.x" } }, "cli-cursor": { @@ -1506,7 +1824,31 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", + "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", + "dev": true + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + } } }, "cli-width": { @@ -1521,46 +1863,15 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -1581,7 +1892,7 @@ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "dev": true, "requires": { - "q": "1.5.0" + "q": "^1.1.2" } }, "code-point-at": { @@ -1596,26 +1907,42 @@ "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { - "clone": "1.0.3", - "color-convert": "1.9.0", - "color-string": "0.3.0" + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" } }, "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, + "color-diff": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/color-diff/-/color-diff-0.1.7.tgz", + "integrity": "sha1-bbeM2UgqjkWdQIIer0tQMoPcuOI=", + "dev": true + }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", @@ -1628,7 +1955,7 @@ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "color-support": { @@ -1643,9 +1970,9 @@ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", "dev": true, "requires": { - "color": "0.11.4", + "color": "^0.11.0", "css-color-names": "0.0.4", - "has": "1.0.1" + "has": "^1.0.1" } }, "colors": { @@ -1660,39 +1987,53 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.5.0" } }, "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + } } }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=" + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" }, "comment-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/comment-regex/-/comment-regex-1.0.0.tgz", - "integrity": "sha1-fdcCaMg2SKnEzBm/Ry1S5k9jkY0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/comment-regex/-/comment-regex-1.0.1.tgz", + "integrity": "sha512-IWlN//Yfby92tOIje7J18HkNmWRR7JESA/BK8W7wqY/akITpU5B0JQWnbTjCfdChSrDNb0DrdA9jfAxiiBXyiQ==", "dev": true }, "common-tags": { @@ -1701,7 +2042,7 @@ "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.26.0" } }, "component-bind": { @@ -1711,9 +2052,9 @@ "dev": true }, "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "component-inherit": { @@ -1723,15 +2064,15 @@ "dev": true }, "compress-commons": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", - "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "concat-map": { @@ -1740,36 +2081,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "config-chain": { @@ -1778,19 +2098,19 @@ "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "dev": true, "requires": { - "ini": "1.3.5", - "proto-list": "1.2.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, "connect": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", - "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.0.6", - "parseurl": "1.3.2", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" }, "dependencies": { @@ -1811,7 +2131,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { @@ -1851,9 +2171,9 @@ "dev": true }, "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, "cookie": { @@ -1862,10 +2182,16 @@ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", "dev": true }, "core-util-is": { @@ -1874,17 +2200,57 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, "coveralls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.0.tgz", - "integrity": "sha512-ZppXR9y5PraUOrf/DzHJY6gzNUhXYE3b9D43xEXs4QYZ7/Oe0Gy0CS+IPKWFfvQFXB3RG9QduaQUFehzSpGAFw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.1.tgz", + "integrity": "sha512-FAzXwiDOYLGDWH+zgoIA+8GbWv50hlx+kpEJyvzLKOdnIBv9uWoVl4DhqGgyUHpiRjAlF8KYZSipWXYtllWH6Q==", "dev": true, "requires": { - "js-yaml": "3.10.0", - "lcov-parse": "0.0.10", - "log-driver": "1.2.5", - "minimist": "1.2.0", - "request": "2.83.0" + "js-yaml": "^3.6.1", + "lcov-parse": "^0.0.10", + "log-driver": "^1.2.5", + "minimist": "^1.2.0", + "request": "^2.79.0" }, "dependencies": { "minimist": { @@ -1907,18 +2273,18 @@ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "dev": true, "requires": { - "crc": "3.5.0", - "readable-stream": "2.3.3" + "crc": "^3.4.4", + "readable-stream": "^2.0.0" } }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", + "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-error-class": { @@ -1927,33 +2293,34 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "createerror": { @@ -1963,14 +2330,16 @@ "dev": true }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -1979,7 +2348,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1988,27 +2357,28 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.x.x" } } } }, "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-color-names": { @@ -2023,7 +2393,7 @@ "integrity": "sha1-zNXYf98UStvNmHFTXscofdUwrlM=", "dev": true, "requires": { - "requirejs": "2.1.8" + "requirejs": "=2.1.8" } }, "css-font-size-keywords": { @@ -2073,7 +2443,7 @@ "integrity": "sha1-//VxkiAtuDJAxBaG+RnkSacCT30=", "dev": true, "requires": { - "tcomb": "2.7.0" + "tcomb": "^2.5.0" } }, "css-system-font-keywords": { @@ -2089,61 +2459,40 @@ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { - "autoprefixer": "6.7.7", - "decamelize": "1.2.0", - "defined": "1.0.0", - "has": "1.0.1", - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-calc": "5.3.1", - "postcss-colormin": "2.2.2", - "postcss-convert-values": "2.6.1", - "postcss-discard-comments": "2.0.4", - "postcss-discard-duplicates": "2.1.0", - "postcss-discard-empty": "2.1.0", - "postcss-discard-overridden": "0.1.1", - "postcss-discard-unused": "2.2.3", - "postcss-filter-plugins": "2.0.2", - "postcss-merge-idents": "2.1.7", - "postcss-merge-longhand": "2.0.2", - "postcss-merge-rules": "2.1.2", - "postcss-minify-font-values": "1.0.5", - "postcss-minify-gradients": "1.0.5", - "postcss-minify-params": "1.2.2", - "postcss-minify-selectors": "2.1.1", - "postcss-normalize-charset": "1.1.1", - "postcss-normalize-url": "3.0.8", - "postcss-ordered-values": "2.2.3", - "postcss-reduce-idents": "2.4.0", - "postcss-reduce-initial": "1.0.1", - "postcss-reduce-transforms": "1.0.4", - "postcss-svgo": "2.1.6", - "postcss-unique-selectors": "2.0.2", - "postcss-value-parser": "3.3.0", - "postcss-zindex": "2.2.0" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -2156,19 +2505,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -2177,7 +2517,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -2188,8 +2528,8 @@ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "dev": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "cssom": { @@ -2204,7 +2544,7 @@ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "currently-unhandled": { @@ -2213,7 +2553,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "custom-event": { @@ -2228,9 +2568,67 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", + "dev": true, + "optional": true + }, + "data-urls": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", + "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "whatwg-mimetype": "^2.0.0", + "whatwg-url": "^6.4.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "whatwg-url": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } } }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2246,7 +2644,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" } @@ -2257,21 +2655,27 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, "decompress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", "dev": true, "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.5.2", - "decompress-tar": "3.1.0", - "decompress-tarbz2": "3.1.0", - "decompress-targz": "3.1.0", - "decompress-unzip": "3.4.0", - "stream-combiner2": "1.1.1", - "vinyl-assign": "1.2.1", - "vinyl-fs": "2.4.4" + "buffer-to-vinyl": "^1.0.0", + "concat-stream": "^1.4.6", + "decompress-tar": "^3.0.0", + "decompress-tarbz2": "^3.0.0", + "decompress-targz": "^3.0.0", + "decompress-unzip": "^3.0.0", + "stream-combiner2": "^1.1.1", + "vinyl-assign": "^1.0.1", + "vinyl-fs": "^2.2.0" } }, "decompress-tar": { @@ -2280,12 +2684,12 @@ "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", "dev": true, "requires": { - "is-tar": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-tar": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -2312,10 +2716,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2330,8 +2734,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -2340,8 +2744,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -2352,13 +2756,13 @@ "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", "dev": true, "requires": { - "is-bzip2": "1.0.0", - "object-assign": "2.1.1", - "seek-bzip": "1.0.5", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-bzip2": "^1.0.0", + "object-assign": "^2.0.0", + "seek-bzip": "^1.0.3", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -2385,10 +2789,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2403,8 +2807,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -2413,8 +2817,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -2425,12 +2829,12 @@ "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", "dev": true, "requires": { - "is-gzip": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.4", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-gzip": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -2457,10 +2861,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2475,8 +2879,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -2485,8 +2889,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -2497,19 +2901,34 @@ "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", "dev": true, "requires": { - "is-zip": "1.0.0", - "read-all-stream": "3.1.0", - "stat-mode": "0.2.2", - "strip-dirs": "1.1.1", - "through2": "2.0.3", - "vinyl": "1.2.0", - "yauzl": "2.4.1" + "is-zip": "^1.0.0", + "read-all-stream": "^3.0.0", + "stat-mode": "^0.2.0", + "strip-dirs": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0", + "yauzl": "^2.2.1" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" } }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { @@ -2525,7 +2944,60 @@ "dev": true, "optional": true, "requires": { - "clone": "1.0.3" + "clone": "^1.0.2" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "defined": { @@ -2534,19 +3006,31 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "dev": true, + "optional": true, + "requires": { + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" + } + }, "del": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -2563,9 +3047,9 @@ "optional": true }, "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "deps-sort": { @@ -2574,10 +3058,10 @@ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.3" + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" } }, "des.js": { @@ -2586,8 +3070,36 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + } } }, "detect-libc": { @@ -2598,13 +3110,22 @@ "optional": true }, "detective": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", - "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", + "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", "dev": true, "requires": { - "acorn": "4.0.13", - "defined": "1.0.0" + "acorn-node": "^1.3.0", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "di": { @@ -2622,29 +3143,35 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=" + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, + "dlv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.1.tgz", + "integrity": "sha512-b/kUB0D6RgRGG69h5ExsLnUAwfs5Jndfk1pU2ao7/9mVdsxpUBlkFdTkNJThXw1jrLXpUbIIg+h3um5zXi6sFA==", + "dev": true + }, "dnserrors": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/dnserrors/-/dnserrors-2.1.2.tgz", "integrity": "sha1-/r/K6yJWCO0Zbs9Be67vBU+3lNA=", "dev": true, "requires": { - "createerror": "1.3.0", - "httperrors": "2.2.0", - "lodash.defaults": "4.2.0", - "lodash.omit": "4.5.0" + "createerror": "^1.2.0", + "httperrors": "^2.2.0", + "lodash.defaults": "^4.2.0", + "lodash.omit": "^4.5.0" } }, "doctrine": { @@ -2653,7 +3180,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-serialize": { @@ -2662,39 +3189,55 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "dev": true, + "optional": true + }, "download": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", "dev": true, "requires": { - "caw": "1.2.0", - "concat-stream": "1.5.2", - "each-async": "1.1.1", - "filenamify": "1.2.1", - "got": "5.7.1", - "gulp-decompress": "1.2.0", - "gulp-rename": "1.2.2", - "is-url": "1.2.2", - "object-assign": "4.1.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "stream-combiner2": "1.1.1", - "vinyl": "1.2.0", - "vinyl-fs": "2.4.4", - "ware": "1.3.0" + "caw": "^1.0.1", + "concat-stream": "^1.4.7", + "each-async": "^1.0.0", + "filenamify": "^1.0.1", + "got": "^5.0.0", + "gulp-decompress": "^1.2.0", + "gulp-rename": "^1.2.0", + "is-url": "^1.2.0", + "object-assign": "^4.0.1", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.2", + "stream-combiner2": "^1.1.1", + "vinyl": "^1.0.0", + "vinyl-fs": "^2.2.0", + "ware": "^1.2.0" } }, "duplexer": { @@ -2709,7 +3252,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "duplexer3": { @@ -2719,15 +3262,15 @@ "dev": true }, "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "dev": true, "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "each-async": { @@ -2736,16 +3279,8 @@ "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", "dev": true, "requires": { - "onetime": "1.1.0", - "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - } + "onetime": "^1.0.0", + "set-immediate-shim": "^1.0.0" } }, "ecc-jsbn": { @@ -2755,7 +3290,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -2764,20 +3299,17 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "electron-releases": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/electron-releases/-/electron-releases-2.1.0.tgz", - "integrity": "sha512-cyKFD1bTE/UgULXfaueIN1k5EPFzs+FRc/rvCY5tIynefAPqopQEgjr0EzY+U3Dqrk/G4m9tXSPuZ77v6dL/Rw==", + "electron-to-chromium": { + "version": "1.3.48", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", + "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", "dev": true }, - "electron-to-chromium": { - "version": "1.3.30", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.30.tgz", - "integrity": "sha512-zx1Prv7kYLfc4OA60FhxGbSo4qrEjgSzpo1/37i7l9ltXPYOoQBtjQxY9KmsgfHnBxHlBGXwLlsbt/gub1w5lw==", - "dev": true, - "requires": { - "electron-releases": "2.1.0" - } + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true }, "elliptic": { "version": "6.4.0", @@ -2785,116 +3317,75 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "uws": "~9.14.0", + "ws": "~3.3.1" } }, "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.6", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "has-binary2": "~1.0.2" } }, "ent": { @@ -2915,7 +3406,22 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" } }, "esanimate": { @@ -2924,8 +3430,8 @@ "integrity": "sha1-5xcSttiyuy5tXUCmOSp7+cfCCFc=", "dev": true, "requires": { - "escodegen": "1.9.0", - "esprima": "2.7.3" + "escodegen": "^1.7.0", + "esprima": "^2.6.0" }, "dependencies": { "esprima": { @@ -2948,23 +3454,24 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true } } }, @@ -2974,69 +3481,149 @@ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.1.0", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.3.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "color-convert": "^1.9.0" } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz", + "integrity": "sha512-ag8YEyBXsm3nmOv1Hz991VtNNDMRa+MNy8cY47Pl4bw6iuzqKbJajXdqUpiw13STdLLrznxgm1hj9NhxeOYq0A==", + "dev": true, + "requires": { + "get-stdin": "^5.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true } } }, @@ -3058,8 +3645,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.6.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "debug": { @@ -3070,15 +3657,6 @@ "requires": { "ms": "2.0.0" } - }, - "resolve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } } } }, @@ -3088,8 +3666,8 @@ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" }, "dependencies": { "debug": { @@ -3104,21 +3682,21 @@ } }, "eslint-plugin-import": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.10.0.tgz", - "integrity": "sha1-+gkIPVp1KI35xsfQn+EiVZhWVec=", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", + "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" }, "dependencies": { "debug": { @@ -3136,8 +3714,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } } } @@ -3148,18 +3726,20 @@ "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { - "ignore": "3.3.7", - "minimatch": "3.0.4", - "resolve": "1.4.0", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "^5.4.1" + } + }, + "eslint-plugin-prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz", + "integrity": "sha512-floiaI4F7hRkTrFe8V2ItOK97QYrX75DjmdzmVITZoAP6Cn06oEDPQRsO6MlHEP/u2SxI3xQ52Kpjw6j5WGfeQ==", + "dev": true, + "requires": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" } }, "eslint-plugin-promise": { @@ -3169,9 +3749,9 @@ "dev": true }, "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", "dev": true }, "eslint-scope": { @@ -3180,8 +3760,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -3196,8 +3776,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" }, "dependencies": { "acorn": { @@ -3209,27 +3789,27 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true }, "espurify": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.7.0.tgz", - "integrity": "sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.0.tgz", + "integrity": "sha512-jdkJG9jswjKCCDmEridNUuIQei9algr+o66ZZ19610ZoBsiWLRsQGNYS4HGez3Z/DsR0lhANGAqiwBUclPuNag==", "dev": true, "requires": { - "core-js": "2.5.1" + "core-js": "^2.0.0" } }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -3238,7 +3818,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3255,29 +3835,29 @@ }, "event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", "dev": true }, "evp_bytestokey": { @@ -3286,8 +3866,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "exec-series": { @@ -3296,23 +3876,46 @@ "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", "dev": true, "requires": { - "async-each-series": "1.1.0", - "object-assign": "4.1.1" + "async-each-series": "^1.1.0", + "object-assign": "^4.1.0" } }, "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", + "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } } }, "executable": { @@ -3321,7 +3924,7 @@ "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", "dev": true, "requires": { - "meow": "3.7.0" + "meow": "^3.1.0" } }, "exif-reader-paras20xx": { @@ -3330,15 +3933,21 @@ "integrity": "sha1-+oFNSNoyDmAq+rge8ZsRp9aMctM=", "dev": true }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-braces": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { "braces": { @@ -3347,7 +3956,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "0.1.1" + "expand-range": "^0.1.0" } }, "expand-range": { @@ -3356,8 +3965,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "is-number": { @@ -3380,7 +3989,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -3389,14 +3998,33 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, - "expect.js": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", - "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", - "dev": true + "expect": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "jest-diff": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-regex-util": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } }, "express-processimage": { "version": "7.4.0", @@ -3404,7 +4032,7 @@ "integrity": "sha1-M1Ps+6WKGQouxWPYxKq8BvnT+Ig=", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "^1.3.3", "animated-gif-detector": "1.2.0", "bluebird": "3.3.4", "createerror": "1.1.0", @@ -3515,7 +4143,7 @@ "integrity": "sha1-SGxIr23+zHp9z5xlWs8QjS3L3z0=", "dev": true, "requires": { - "is-absolute": "0.1.7" + "is-absolute": "^0.1.7" } } } @@ -3546,18 +4174,18 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -3566,7 +4194,15 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } } }, "extsprintf": { @@ -3581,15 +4217,21 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", "dev": true }, "fast-json-stable-stringify": { @@ -3605,21 +4247,22 @@ "dev": true }, "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-entry-cache": { @@ -3628,8 +4271,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "file-type": { @@ -3638,6 +4281,13 @@ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -3656,37 +4306,37 @@ "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", "dev": true, "requires": { - "filename-reserved-regex": "1.0.0", - "strip-outer": "1.0.0", - "trim-repeated": "1.0.0" + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" } }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -3697,17 +4347,28 @@ "requires": { "ms": "2.0.0" } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true } } }, + "find-parent-dir": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", + "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", + "dev": true + }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "^2.0.0" } }, "find-versions": { @@ -3716,10 +4377,10 @@ "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", "dev": true, "requires": { - "array-uniq": "1.0.3", - "get-stdin": "4.0.1", - "meow": "3.7.0", - "semver-regex": "1.0.0" + "array-uniq": "^1.0.0", + "get-stdin": "^4.0.1", + "meow": "^3.5.0", + "semver-regex": "^1.0.0" } }, "first-chunk-stream": { @@ -3734,10 +4395,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "flatten": { @@ -3746,6 +4407,15 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", "dev": true }, + "follow-redirects": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "dev": true, + "requires": { + "debug": "^3.1.0" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3758,7 +4428,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -3768,14 +4438,23 @@ "dev": true }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "map-cache": "^0.2.2" } }, "from": { @@ -3790,43 +4469,38 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "1.0.0" + "null-check": "^1.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.2.tgz", + "integrity": "sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ==", "dev": true, "optional": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" + "nan": "^2.9.2", + "node-pre-gyp": "^0.9.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -3834,9 +4508,9 @@ "dev": true }, "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, @@ -3847,106 +4521,30 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, @@ -3956,15 +4554,6 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3981,60 +4570,19 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { "ms": "2.0.0" } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -4042,77 +4590,29 @@ "dev": true, "optional": true }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", @@ -4121,33 +4621,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -4155,37 +4636,14 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -4195,35 +4653,24 @@ "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { @@ -4231,9 +4678,10 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4242,134 +4690,29 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true, - "optional": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true, "optional": true }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4378,6 +4721,26 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -4394,22 +4757,35 @@ "dev": true, "optional": true }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", + "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", "dev": true, "optional": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -4419,21 +4795,39 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4442,13 +4836,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4462,7 +4849,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4480,60 +4867,41 @@ "optional": true }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4546,70 +4914,55 @@ } }, "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, @@ -4627,171 +4980,59 @@ "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", @@ -4799,7 +5040,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -4807,6 +5048,12 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", + "dev": true } } }, @@ -4816,10 +5063,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -4829,9 +5076,49 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" + } + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "1.1.x", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "optional": true + } } }, "function-bind": { @@ -4859,62 +5146,31 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "generate-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true + "dev": true, + "optional": true }, "generate-object-property": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, + "optional": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-caller-file": { @@ -4923,13 +5179,25 @@ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-own-enumerable-property-symbols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", + "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", + "dev": true + }, "get-proxy": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", "dev": true, "requires": { - "rc": "1.2.2" + "rc": "^1.1.2" } }, "get-stdin": { @@ -4944,13 +5212,46 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "get-uri": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.2.tgz", + "integrity": "sha512-ZD325dMZOgerGqF/rF6vZXyFGTAay62svjQIT+X/oU2PtxYpFxvSkbsdi+oxIrsNxlZVd4y8wUDqkaExWTI/Cw==", + "dev": true, + "optional": true, + "requires": { + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "3", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "gettemporaryfilepath": { @@ -4962,14 +5263,14 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -4978,17 +5279,44 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, "glob-stream": { @@ -4997,14 +5325,14 @@ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" }, "dependencies": { "glob": { @@ -5013,36 +5341,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "isarray": { @@ -5057,10 +5360,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -5075,8 +5378,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -5093,21 +5396,21 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "gm-papandreou": { @@ -5116,10 +5419,10 @@ "integrity": "sha1-35cO+M+mn7r9wIl+dlOmEP4VVwk=", "dev": true, "requires": { - "array-parallel": "0.1.3", - "array-series": "0.1.5", - "cross-spawn": "4.0.2", - "debug": "2.2.0" + "array-parallel": "~0.1.3", + "array-series": "~0.1.5", + "cross-spawn": "^4.0.0", + "debug": "~2.2.0" }, "dependencies": { "cross-spawn": { @@ -5128,8 +5431,8 @@ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { @@ -5141,6 +5444,16 @@ "ms": "0.7.1" } }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "ms": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", @@ -5155,21 +5468,21 @@ "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.3", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -5190,17 +5503,41 @@ "integrity": "sha1-MELZrewqHe1qdwep7SOA+KF6Qw4=", "dev": true, "requires": { - "ansi-red": "0.1.1", - "coffee-script": "1.12.7", - "extend-shallow": "2.0.1", - "js-yaml": "3.10.0", - "toml": "2.3.3" + "ansi-red": "^0.1.1", + "coffee-script": "^1.12.4", + "extend-shallow": "^2.0.1", + "js-yaml": "^3.8.1", + "toml": "^2.3.2" + }, + "dependencies": { + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } } }, + "greedy-interval-packer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/greedy-interval-packer/-/greedy-interval-packer-1.2.0.tgz", + "integrity": "sha1-1toR82Ybt5eBLaeKHqUQZ4oqhzk=", + "dev": true + }, "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha1-GSa6kM8+3+KttJJ/WIC8IsZseQ8=" + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "gulp-decompress": { "version": "1.2.0", @@ -5208,16 +5545,16 @@ "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", "dev": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "gulp-util": "3.0.8", - "readable-stream": "2.3.3" + "archive-type": "^3.0.0", + "decompress": "^3.0.0", + "gulp-util": "^3.0.1", + "readable-stream": "^2.0.2" } }, "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.3.tgz", + "integrity": "sha512-CmdPM0BjJ105QCX1fk+j7NGhiN/1rCl9HLGss+KllBS/tdYadpjTxqdKyh/5fNV+M3yjT1MFz5z93bXdrTyzAw==", "dev": true }, "gulp-sourcemaps": { @@ -5226,11 +5563,11 @@ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" }, "dependencies": { "strip-bom": { @@ -5239,7 +5576,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -5250,39 +5587,26 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -5295,29 +5619,14 @@ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -5329,7 +5638,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.0" + "glogg": "^1.0.0" } }, "har-schema": { @@ -5344,8 +5653,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.2.3", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -5354,7 +5663,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -5363,22 +5672,22 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "has-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", "dev": true, "requires": { - "isarray": "0.0.1" + "isarray": "2.0.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } @@ -5390,9 +5699,9 @@ "dev": true }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-gulplog": { "version": "0.1.0", @@ -5400,13 +5709,13 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true }, "has-to-string-tag-x": { @@ -5415,7 +5724,7 @@ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "requires": { - "has-symbol-support-x": "1.4.1" + "has-symbol-support-x": "^1.4.1" } }, "has-unicode": { @@ -5425,13 +5734,74 @@ "dev": true, "optional": true }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -5440,8 +5810,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hashish": { @@ -5451,7 +5821,7 @@ "dev": true, "optional": true, "requires": { - "traverse": "0.3.9" + "traverse": ">=0.2.4" } }, "hat": { @@ -5466,10 +5836,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.0.2" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -5483,6 +5853,17 @@ "integrity": "sha1-RfXgybh9c7rYWPZgIb7Dd8c2uLM=", "dev": true }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.0.0", + "request": "^2.0.0" + } + }, "histogram": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/histogram/-/histogram-3.0.0.tgz", @@ -5490,17 +5871,17 @@ "dev": true, "optional": true, "requires": { - "canvas": "1.6.9" + "canvas": "^1.6.7" }, "dependencies": { "canvas": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-1.6.9.tgz", - "integrity": "sha1-4/lc7HsWvy1vP8clwC2UDTJY9ps=", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-1.6.11.tgz", + "integrity": "sha512-ElVw5Uk8PReGpzXfDg6PDa+wntnZLGWWfdSHI0Pc8GyXiFbW13drSTzWU6C4E5QylHe+FnLqI7ngMRlp3eGZIQ==", "dev": true, "optional": true, "requires": { - "nan": "2.7.0" + "nan": "^2.10.0" } } } @@ -5511,21 +5892,21 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "html-comment-regex": { @@ -5540,30 +5921,39 @@ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" } }, "html-minifier": { - "version": "3.5.8", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.8.tgz", - "integrity": "sha512-WX7D6PB9PFq05fZ1/CyxPUuyqXed6vh2fGOM80+zJT5wAO93D/cUjLs0CcbBFjQmlwmCgRvl97RurtArIpOnkw==", - "dev": true, - "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.9", - "commander": "2.12.2", - "he": "1.1.1", - "ncname": "1.0.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.4" + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", + "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.15.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.3.x" }, "dependencies": { - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "uglify-js": { + "version": "3.3.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", + "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", + "dev": true, + "requires": { + "commander": "~2.15.0", + "source-map": "~0.6.1" + } } } }, @@ -5574,25 +5964,36 @@ "dev": true }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "agent-base": "4", + "debug": "3.1.0" } }, "http-signature": { @@ -5601,9 +6002,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "httperrors": { @@ -5623,6 +6024,30 @@ } } }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "dev": true, + "requires": { + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + } + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", + "dev": true + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -5630,24 +6055,37 @@ "dev": true }, "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "husky": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", + "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", + "dev": true, + "requires": { + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true } } }, @@ -5664,15 +6102,15 @@ "dev": true }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, "imageinfo": { @@ -5693,7 +6131,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexes-of": { @@ -5708,13 +6146,20 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true, + "optional": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5734,16 +6179,8 @@ "integrity": "sha1-ov1m+tiIbSgxOm7ckaWQHfYQeJA=", "dev": true, "requires": { - "async": "0.2.9", + "async": "=0.2.9", "gettemporaryfilepath": "1.0.0" - }, - "dependencies": { - "async": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", - "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=", - "dev": true - } } }, "inline-source-map": { @@ -5752,7 +6189,7 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "~0.5.3" } }, "inquirer": { @@ -5761,36 +6198,114 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.6.tgz", + "integrity": "sha512-R3sidKJr3SsggqQQ5cEwQb3pWG8RNx0UnpyeiOSR6jorRIeAOzH2gkTWnNdMnyRiVbjrG047K7UCtlMkQ1Mo9w==", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "1.1.5", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "2.0.3", - "xtend": "4.0.1" + "JSONStream": "^1.0.3", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "lexical-scope": "^1.2.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, "invert-kv": { @@ -5799,6 +6314,12 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "ip-regex": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", @@ -5811,7 +6332,7 @@ "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", "dev": true, "requires": { - "is-relative": "0.1.3" + "is-relative": "^0.1.0" } }, "is-absolute-url": { @@ -5820,6 +6341,15 @@ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", "dev": true }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5832,13 +6362,13 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { @@ -5847,7 +6377,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-bzip2": { @@ -5856,31 +6386,74 @@ "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-ci": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", + "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "is-primitive": "2.0.0" + "ci-info": "^1.0.0" } }, - "is-extendable": { - "version": "0.1.1", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-finite": { @@ -5889,22 +6462,31 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^2.1.0" } }, "is-gzip": { @@ -5913,16 +6495,25 @@ "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", "dev": true }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true, + "optional": true + }, "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, + "optional": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-natural-number": { @@ -5937,7 +6528,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-obj": { @@ -5952,6 +6543,32 @@ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", "dev": true }, + "is-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", + "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", + "dev": true, + "requires": { + "symbol-observable": "^0.2.2" + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -5964,7 +6581,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5973,7 +6590,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -5988,7 +6605,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -6021,7 +6638,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true + "dev": true, + "optional": true }, "is-redirect": { "version": "1.0.0", @@ -6029,6 +6647,12 @@ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, "is-relative": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", @@ -6059,7 +6683,7 @@ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", "dev": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-tar": { @@ -6075,9 +6699,9 @@ "dev": true }, "is-url": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", - "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", "dev": true }, "is-utf8": { @@ -6092,6 +6716,12 @@ "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", "dev": true }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "is-zip": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", @@ -6144,412 +6774,1660 @@ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "jpegtran": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.5.tgz", - "integrity": "sha1-f6h+kAc1DQx3W4Srn9roR2U9HVM=", + "jest-config": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", + "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", "dev": true, "requires": { - "jpegtran-bin": "3.0.4", - "memoizeasync": "0.9.0", - "which": "1.1.1" + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.4.3", + "jest-environment-node": "^22.4.3", + "jest-get-type": "^22.4.3", + "jest-jasmine2": "^22.4.3", + "jest-regex-util": "^22.4.3", + "jest-resolve": "^22.4.3", + "jest-util": "^22.4.3", + "jest-validate": "^22.4.3", + "pretty-format": "^22.4.3" }, "dependencies": { - "which": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.1.1.tgz", - "integrity": "sha1-nOUSRZlGFm4SwIPwjsBzOA/Iy7s=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "is-absolute": "0.1.7" + "has-flag": "^3.0.0" } } } }, - "jpegtran-bin": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.0.4.tgz", - "integrity": "sha1-sXicfxAOEWoGWaAIqR/KyTibqZc=", + "jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", "dev": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "js-base64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz", - "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==", - "dev": true - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", "dev": true }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "jest-environment-jsdom": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3", + "jsdom": "^11.5.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "jsdom": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", + "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", + "dev": true, + "requires": { + "abab": "^1.0.4", + "acorn": "^5.3.0", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.3", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.0", + "ws": "^4.0.0", + "xml-name-validator": "^3.0.0" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "whatwg-url": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", + "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + } } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "jest-environment-node": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", "dev": true, "requires": { - "abab": "1.0.4", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "nwmatcher": "1.4.3", - "parse5": "1.5.1", - "request": "2.83.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "4.8.0", - "xml-name-validator": "2.0.1" + "jest-mock": "^22.4.3", + "jest-util": "^22.4.3" } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "jest-jasmine2": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", + "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", "dev": true, "requires": { - "jsonify": "0.0.0" + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.4.3", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "jest-message-util": "^22.4.3", + "jest-snapshot": "^22.4.3", + "jest-util": "^22.4.3", + "source-map-support": "^0.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "jest-matcher-utils": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.4.3", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "jest-message-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "jest-mock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "jest-regex-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true + "jest-resolve": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", + "dev": true, + "requires": { + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true + "jest-snapshot": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^22.4.3", + "jest-matcher-utils": "^22.4.3", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.4.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "jest-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.4.3", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", - "dev": true, - "requires": { - "bluebird": "3.5.0", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.5", - "core-js": "2.5.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.4.1", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "0.5.7", - "tmp": "0.0.31", - "useragent": "2.2.1" + "jest-validate": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", + "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-config": "^22.4.3", + "jest-get-type": "^22.4.3", + "leven": "^2.1.0", + "pretty-format": "^22.4.3" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "has-flag": "^3.0.0" } } } }, - "karma-browserify": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-5.1.1.tgz", - "integrity": "sha1-9kLXDXdtmrO3NSbFcyq8/qJAAxk=", + "jpegtran": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/jpegtran/-/jpegtran-1.0.5.tgz", + "integrity": "sha1-f6h+kAc1DQx3W4Srn9roR2U9HVM=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "hat": "0.0.3", - "js-string-escape": "1.0.1", - "lodash": "3.10.1", - "minimatch": "3.0.4", - "os-shim": "0.1.3" + "jpegtran-bin": "=3.0.4", + "memoizeasync": "0.9.0", + "which": "1.1.1" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "which": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.1.1.tgz", + "integrity": "sha1-nOUSRZlGFm4SwIPwjsBzOA/Iy7s=", + "dev": true, + "requires": { + "is-absolute": "^0.1.7" + } + } + } + }, + "jpegtran-bin": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-3.0.4.tgz", + "integrity": "sha1-sXicfxAOEWoGWaAIqR/KyTibqZc=", + "dev": true, + "requires": { + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" + } + }, + "js-base64": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", + "dev": true + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true } } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" + "xmlcreate": "^1.0.1" } }, - "karma-expect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/karma-expect/-/karma-expect-1.1.3.tgz", - "integrity": "sha1-xrClb/GJA9sRr08JjMbnzxmM4nU=", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "~3.5.0", + "catharsis": "~0.8.9", + "escape-string-regexp": "~1.0.5", + "js2xmlparser": "~3.0.0", + "klaw": "~2.0.0", + "marked": "~0.3.6", + "mkdirp": "~0.5.1", + "requizzle": "~0.2.1", + "strip-json-comments": "~2.0.1", + "taffydb": "2.6.2", + "underscore": "~1.8.3" + }, + "dependencies": { + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + } + } + }, + "jsdom": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", + "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", + "dev": true, + "requires": { + "abab": "^1.0.3", + "acorn": "^4.0.4", + "acorn-globals": "^3.1.0", + "array-equal": "^1.0.0", + "content-type-parser": "^1.0.1", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "escodegen": "^1.6.1", + "html-encoding-sniffer": "^1.0.1", + "nwmatcher": ">= 1.3.9 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.79.0", + "sax": "^1.2.1", + "symbol-tree": "^3.2.1", + "tough-cookie": "^2.3.2", + "webidl-conversions": "^4.0.0", + "whatwg-encoding": "^1.0.1", + "whatwg-url": "^4.3.0", + "xml-name-validator": "^2.0.1" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "expect.js": "0.3.1" + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "karma": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.2.tgz", + "integrity": "sha1-TS25QChQpmVR+nhLAWT7CCTtjEs=", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.4", + "log4js": "^2.3.9", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.0.4", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.2.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "karma-browserify": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/karma-browserify/-/karma-browserify-5.2.0.tgz", + "integrity": "sha512-/qjxfDGUrn74rT3FjL2X8OhQESsO3YbdjOWSC1I8fJEffDKtn9LnikKDq7kcEl60tN5Aky8OyAyIqeZUb8985A==", + "dev": true, + "requires": { + "convert-source-map": "^1.1.3", + "hat": "^0.0.3", + "js-string-escape": "^1.0.0", + "lodash": "^3.10.1", + "minimatch": "^3.0.0", + "os-shim": "^0.1.3" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "^1.0.0", + "which": "^1.2.1" + } + }, + "karma-mocha": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", + "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "karma-sauce-launcher": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz", + "integrity": "sha512-lEhtGRGS+3Yw6JSx/vJY9iQyHNtTjcojrSwNzqNUOaDceKDu9dPZqA/kr69bUO9G2T6GKbu8AZgXqy94qo31Jg==", + "dev": true, + "requires": { + "q": "^1.5.0", + "sauce-connect-launcher": "^1.2.2", + "saucelabs": "^1.4.0", + "wd": "^1.4.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "labeled-stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "isarray": "^2.0.4", + "stream-splicer": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", + "dev": true + } + } + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "^0.1.0" + } + }, + "lazy-req": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "requires": { + "astw": "^2.0.0" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", + "dev": true + }, + "libmime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "dev": true, + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", + "dev": true + }, + "linkify-it": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", + "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "lint-staged": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.1.0.tgz", + "integrity": "sha512-0l+PRD21v2zBRcfEIxjFMo2DiQ94wykRXH/aEw3aTMYUmnpTRPS1rc3DryPWf+qtK1Pjd51pLigHGopxgDMK5A==", + "dev": true, + "requires": { + "app-root-path": "^2.0.1", + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^4.0.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "execa": "^0.9.0", + "find-parent-dir": "^0.3.0", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "jest-validate": "^22.4.0", + "listr": "^0.13.0", + "lodash": "^4.17.5", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.1", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", + "list-item": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", + "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=", "dev": true, "requires": { - "minimist": "1.2.0" + "expand-range": "^1.8.1", + "extend-shallow": "^2.0.1", + "is-number": "^2.1.0", + "repeat-string": "^1.5.2" + } + }, + "listr": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", + "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-observable": "^0.2.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.4.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.4.2", + "stream-to-observable": "^0.2.0", + "strip-ansi": "^3.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } } } }, - "karma-mocha-reporter": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.4.tgz", - "integrity": "sha1-DJyyLCfYZND2aU3wzwHKq86QZNQ=", - "dev": true, - "requires": { - "chalk": "2.1.0", - "log-symbols": "2.1.0", - "strip-ansi": "4.0.0" - } - }, - "karma-sauce-launcher": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz", - "integrity": "sha512-lEhtGRGS+3Yw6JSx/vJY9iQyHNtTjcojrSwNzqNUOaDceKDu9dPZqA/kr69bUO9G2T6GKbu8AZgXqy94qo31Jg==", - "dev": true, - "requires": { - "q": "1.5.0", - "sauce-connect-launcher": "1.2.2", - "saucelabs": "1.4.0", - "wd": "1.4.1" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" + "listr-update-renderer": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", + "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } } } }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } - }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "2.2.0" - } - }, - "linkify-it": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", - "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", - "dev": true, - "requires": { - "uc.micro": "1.0.3" - } - }, - "list-item": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", - "integrity": "sha1-DGXQDih8tmPMs8s4Sad+iewmilY=", + "listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "expand-range": "1.8.2", - "extend-shallow": "2.0.1", - "is-number": "2.1.0", - "repeat-string": "1.6.1" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } } }, "load-json-file": { @@ -6558,10 +8436,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -6570,22 +8448,14 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "lodash._basecopy": { @@ -6660,19 +8530,25 @@ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, + "lodash.differencewith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz", + "integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=", + "dev": true + }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.flatten": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.3.0.tgz", - "integrity": "sha1-5exO/ofvxZzlL5F8uovxYGNkac8=", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, "lodash.isarguments": { @@ -6699,15 +8575,21 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", "dev": true }, "lodash.omit": { @@ -6722,21 +8604,27 @@ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -6745,10 +8633,16 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -6763,82 +8657,357 @@ "optional": true }, "log-driver": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "log-symbols": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", - "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "log-update": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", + "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "chalk": "2.1.0" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } } }, "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.8.0.tgz", + "integrity": "sha512-PjsaE4ElS0e2jWOY14Ef2PrC1Y+fny4AWPPT3xD6+2k2Aa5golhqJ4DSzP+5kXRL5bSw/5j1ocU5A9ceaxZeGA==", + "dev": true, + "requires": { + "amqplib": "^0.5.2", + "axios": "^0.15.3", + "circular-json": "^0.5.4", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "hipchat-notifier": "^1.1.0", + "loggly": "^1.1.0", + "mailgun-js": "^0.18.0", + "nodemailer": "^2.5.0", + "redis": "^2.7.1", + "semver": "^5.5.0", + "slack-node": "~0.2.0", + "streamroller": "0.7.0" + }, + "dependencies": { + "circular-json": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.4.tgz", + "integrity": "sha512-vnJA8KS0BfOihugYEUkLRcnmq21FbuivbxgzDLXNs3zIk4KllV4Mx4UuTzBXht9F00C7QfD1YqMXg1zP6EXpig==", + "dev": true + } + } + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "requires": { + "figures": "^1.3.5", + "squeak": "^1.0.0" + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", "dev": true, + "optional": true, "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" + "json-stringify-safe": "5.0.x", + "request": "2.75.x", + "timespan": "2.3.x" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "bl": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "~2.0.5" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.x.x" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x" + } + }, + "form-data": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "optional": true, + "requires": { + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "optional": true + }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, + "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true + "request": { + "version": "2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.x.x" + } }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true } } }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", "dev": true, "requires": { - "figures": "1.7.0", - "squeak": "1.3.0" - }, - "dependencies": { - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - } + "chalk": "^1.1.3", + "loglevel": "^1.4.1" } }, "longest": { @@ -6853,8 +9022,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -6864,9 +9033,9 @@ "dev": true }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lpad-align": { @@ -6875,27 +9044,101 @@ "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "indent-string": "2.1.0", - "longest": "1.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.1.tgz", + "integrity": "sha1-s632s9hW6VTiw5DmzvIggSRaU9Y=", + "dev": true + }, + "magicpen": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/magicpen/-/magicpen-5.12.0.tgz", + "integrity": "sha1-u+nunUI2R2rs+EE27KGDPrRwqWs=", + "dev": true, + "requires": { + "ansi-styles": "2.0.0", + "color-diff": "0.1.7", + "supports-color": "1.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.0.tgz", + "integrity": "sha1-QysmFi/qG2PIeIlqvIzFVI8lBj4=", + "dev": true + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + } + } + }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", "dev": true, + "optional": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "buildmail": "4.0.1", + "libmime": "3.0.0" } }, - "macaddress": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", - "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", - "dev": true + "mailgun-js": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.0.tgz", + "integrity": "sha512-o0P6jjZlx5CQj12tvVgDTbgjTqVN0+5h6/6P1+3c6xmozVKBwniQ6Qt3MkCSF0+ueVTbobAfWyGpWRZMJu8t1g==", + "dev": true, + "optional": true, + "requires": { + "async": "~2.6.0", + "debug": "~3.1.0", + "form-data": "~2.3.0", + "inflection": "~1.12.0", + "is-stream": "^1.1.0", + "path-proxy": "~1.0.0", + "promisify-call": "^2.0.2", + "proxy-agent": "~3.0.0", + "tsscmp": "~1.0.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "optional": true, + "requires": { + "lodash": "^4.17.10" + } + } + } + }, + "make-plural": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-4.2.0.tgz", + "integrity": "sha512-zhDAr/erfvZtE1A66DIQ7ZNdGlexVGNDP1P1kvLZprRE0meA0zmxNbp6xmXzNRuZmgW0Ui4ibbaMPYPFHVRMkQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } }, "manage-path": { "version": "2.0.0", @@ -6903,6 +9146,12 @@ "integrity": "sha1-9M+EV7km7u4qg7FzUBQUvHbrlZc=", "dev": true }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", @@ -6915,17 +9164,26 @@ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, "markdown-it": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.3.2.tgz", - "integrity": "sha512-4J92IhJq1kGoyXddwzzfjr9cEKGexBfFsZooKYMhMLLlWa4+dlSPDUUP7y+xQOCebIj61aLmKlowg//YcdPP1w==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.1.tgz", + "integrity": "sha512-CzzqSSNkFRUf9vlWvhK1awpJreMRqdCrBvZ8DIoDWTOkESMIF741UPAhuAmbyWmdiFPA6WARNhnu2M6Nrhwa+A==", "dev": true, "requires": { - "argparse": "1.0.9", - "entities": "1.1.1", - "linkify-it": "2.0.3", - "mdurl": "1.0.1", - "uc.micro": "1.0.3" + "argparse": "^1.0.7", + "entities": "~1.1.1", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" } }, "markdown-link": { @@ -6940,18 +9198,18 @@ "integrity": "sha512-eOsq7EGd3asV0oBfmyqngeEIhrbkc7XVP63OwcJBIhH2EpG2PzFcbZdhy1jutXSlRBBVMNXHvMtSr5LAxSUvUg==", "dev": true, "requires": { - "concat-stream": "1.5.2", - "diacritics-map": "0.1.0", - "gray-matter": "2.1.1", - "lazy-cache": "2.0.2", - "list-item": "1.1.1", - "markdown-link": "0.1.1", - "minimist": "1.2.0", - "mixin-deep": "1.3.0", - "object.pick": "1.3.0", - "remarkable": "1.7.1", - "repeat-string": "1.6.1", - "strip-color": "0.1.0" + "concat-stream": "^1.5.2", + "diacritics-map": "^0.1.0", + "gray-matter": "^2.1.0", + "lazy-cache": "^2.0.2", + "list-item": "^1.1.1", + "markdown-link": "^0.1.1", + "minimist": "^1.2.0", + "mixin-deep": "^1.1.3", + "object.pick": "^1.2.0", + "remarkable": "^1.7.1", + "repeat-string": "^1.6.1", + "strip-color": "^0.1.0" }, "dependencies": { "minimist": { @@ -6963,27 +9221,28 @@ } }, "markdownlint": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.6.4.tgz", - "integrity": "sha512-gcojwPjnWIE6qJh16veEN2k62rkJdXEznAaupbNiBpwHlMqFqh5SMA5/YPJO6/uEpwn2NJjSYkYk2OcIWvgkeQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.9.0.tgz", + "integrity": "sha512-oktat4knTTEV9adbw+PgCtUuNkHW66QYOqzmVnaOwgRyqUFseX278QYY+peinHM3qe8rgQfSQUOemFXtnoXZ1w==", "dev": true, "requires": { - "markdown-it": "8.3.2" + "markdown-it": "8.4.1" } }, "markdownlint-cli": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.6.0.tgz", - "integrity": "sha512-gRkrvv2WrUTp/jbY+GZxyKPc10Bad5AmX0pnJWHX2eoaRDzFcrTGKTHzSXkyyy0fhBoXF7kgR/7FLvlz+agi3A==", - "dev": true, - "requires": { - "commander": "2.9.0", - "deep-extend": "0.4.2", - "glob": "7.0.6", - "lodash.flatten": "4.3.0", - "lodash.values": "4.2.0", - "markdownlint": "0.6.4", - "rc": "1.1.7" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.9.0.tgz", + "integrity": "sha512-Ftvv0HlngfsLXMZ6uVR8csGK7J0RdLZnSTuPFik00sFLI67hMwUm9SpmzAX3N7zJw8XIE6GrxGSletqv7A+S4Q==", + "dev": true, + "requires": { + "commander": "~2.9.0", + "deep-extend": "~0.5.1", + "get-stdin": "~5.0.1", + "glob": "~7.0.3", + "lodash.differencewith": "~4.5.0", + "lodash.flatten": "~4.4.0", + "markdownlint": "~0.9.0", + "rc": "~1.2.7" }, "dependencies": { "commander": { @@ -6992,75 +9251,63 @@ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" - } - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "graceful-readlink": ">= 1.0.0" } }, - "lodash.values": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.2.0.tgz", - "integrity": "sha1-kyYl99LJVLY9uJUlVUjztJ8SDpo=", + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", "dev": true }, - "rc": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz", - "integrity": "sha1-xepWS7B6/5/TpbMukGwdOmWUD+o=", + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "dev": true + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", "dev": true }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "mdurl": { @@ -7081,7 +9328,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "memoizeasync": { @@ -7108,15 +9355,7 @@ "integrity": "sha1-WtU3zTA5NC2SiBAdoeuJdbJgyeU=", "dev": true, "requires": { - "lru-cache": "2.3.1" - }, - "dependencies": { - "lru-cache": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.1.tgz", - "integrity": "sha1-s632s9hW6VTiw5DmzvIggSRaU9Y=", - "dev": true - } + "lru-cache": "=2.3.1" } }, "meow": { @@ -7125,29 +9364,39 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "minimist": { @@ -7156,15 +9405,24 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "read-pkg": { @@ -7173,9 +9431,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -7184,29 +9442,73 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "messageformat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.1.1.tgz", + "integrity": "sha512-Q0uXcDtF5pEZsVSyhzDOGgZZK6ykN79VY9CwU3Nv0gsqx62BjdJW0MT+63UkHQ4exe3HE33ZlxR2/YwoJarRTg==", + "dev": true, + "requires": { + "glob": "~7.0.6", + "make-plural": "^4.1.1", + "messageformat-parser": "^1.1.0", + "nopt": "~3.0.6", + "reserved-words": "^0.1.2" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "abbrev": "1" } } } }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } + "messageformat-parser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz", + "integrity": "sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==", + "dev": true }, "micromatch": { "version": "2.3.11", @@ -7214,19 +9516,36 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "miller-rabin": { @@ -7235,41 +9554,41 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "dev": true }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -7281,9 +9600,9 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -7292,13 +9611,13 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mixin-deep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -7307,7 +9626,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -7321,26 +9640,26 @@ } }, "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "1.3.1", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.5.0", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.3", - "resolve": "1.4.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.2.tgz", + "integrity": "sha512-KWBI3009iRnHjRlxRhe8nJ6kdeBTg4sMi5N6AZgg5f1/v5S7EBCRBOY854I4P5Anl4kx6AJH+4bBBC2Gi3nkvg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.0.2", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, "ms": { @@ -7363,7 +9682,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" } }, "isarray": { @@ -7378,10 +9697,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -7399,10 +9718,69 @@ "dev": true }, "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } }, "natural-compare": { "version": "1.4.0", @@ -7410,28 +9788,32 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", - "dev": true, - "requires": { - "xml-char-classes": "1.0.0" - } - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "dev": true, + "optional": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-pre-gyp": { @@ -7441,17 +9823,17 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", + "detect-libc": "^1.0.2", "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.1" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" }, "dependencies": { "ajv": { @@ -7461,8 +9843,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "assert-plus": { @@ -7485,7 +9867,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "cryptiles": { @@ -7494,7 +9876,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "form-data": { @@ -7504,9 +9886,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "har-schema": { @@ -7523,8 +9905,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "hawk": { @@ -7533,10 +9915,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -7552,19 +9934,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "performance-now": { @@ -7588,28 +9960,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "sntp": { @@ -7618,7 +9990,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } } } @@ -7636,12 +10008,97 @@ "dev": true, "optional": true, "requires": { - "commander": "2.11.0", - "defaults": "1.0.3", - "nan": "2.7.0", - "node-pre-gyp": "0.6.39" + "commander": "^2.8.1", + "defaults": "^1.0.2", + "nan": "^2.0.0", + "node-pre-gyp": "^0.6.4" + } + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "dev": true, + "optional": true, + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + }, + "dependencies": { + "socks": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "dev": true, + "optional": true, + "requires": { + "ip": "^1.1.2", + "smart-buffer": "^1.0.4" + } + } + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", + "dev": true + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "dev": true, + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" } }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", + "dev": true + }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -7649,8 +10106,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -7659,10 +10116,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -7671,7 +10128,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -7686,10 +10143,10 @@ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", "dev": true, "requires": { - "object-assign": "4.1.1", - "prepend-http": "1.0.4", - "query-string": "4.3.4", - "sort-keys": "1.1.2" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "normalizeurl": { @@ -7704,8 +10161,8 @@ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", "dev": true, "requires": { - "config-chain": "1.1.11", - "pify": "3.0.0" + "config-chain": "^1.1.11", + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -7716,13 +10173,33 @@ } } }, + "npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "requires": { + "which": "^1.2.10" + } + }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" + } + }, + "npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", + "dev": true, + "requires": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" } }, "npmlog": { @@ -7732,39 +10209,81 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "nps": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/nps/-/nps-5.7.1.tgz", - "integrity": "sha512-pWfkK+mydy/MrXDp8MtVJ9GV7NQYTA+Yb6BGXqE66b57WhCI2eROq3IfKzUTDapgXJNjfAPxqiTTGlnXu36cww==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "chalk": "2.1.0", - "common-tags": "1.7.2", - "find-up": "2.1.0", - "js-yaml": "3.10.0", - "lodash": "4.17.4", - "manage-path": "2.0.0", - "prefix-matches": "1.0.1", - "readline-sync": "1.4.7", - "spawn-command-with-kill": "1.0.0", - "type-detect": "4.0.6", - "yargs": "8.0.2" + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/nps/-/nps-5.9.0.tgz", + "integrity": "sha512-bBqov3hZMhcZ2/XAEftF/ulj7IzTedZmRYGGlw5xLU/E+Ep9tmPpu0cUj9B/Hai6uZNp5xXlcWl/3WK62+roUQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "chalk": "^2.0.1", + "common-tags": "^1.4.0", + "find-up": "^2.1.0", + "js-yaml": "^3.9.0", + "lodash": "^4.17.4", + "manage-path": "^2.0.0", + "prefix-matches": "^1.0.1", + "readline-sync": "^1.4.7", + "spawn-command-with-kill": "^1.0.0", + "type-detect": "^4.0.3", + "yargs": "^8.0.2" }, "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "locate-path": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -7788,44 +10307,44 @@ "dev": true }, "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", "dev": true }, "nyc": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.2.1.tgz", - "integrity": "sha1-rYUK/p261/SXByi0suR/7Rw4chw=", - "dev": true, - "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "1.0.1", - "convert-source-map": "1.5.0", - "debug-log": "1.0.1", - "default-require-extensions": "1.0.0", - "find-cache-dir": "0.1.1", - "find-up": "2.1.0", - "foreground-child": "1.5.6", - "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-report": "1.1.1", - "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.2", - "md5-hex": "1.3.0", - "merge-source-map": "1.0.4", - "micromatch": "2.3.11", - "mkdirp": "0.5.1", - "resolve-from": "2.0.0", - "rimraf": "2.6.1", - "signal-exit": "3.0.2", - "spawn-wrap": "1.3.8", - "test-exclude": "4.1.1", - "yargs": "8.0.2", - "yargs-parser": "5.0.0" + "version": "11.7.3", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.7.3.tgz", + "integrity": "sha512-40EtXYqklVP8nFtXtw6tziHV/FBfP2e0HENZc2kivMyzmOdkrp7ljKqpdjS8ubYWdzUMWlMnPDkbNMQeVd2Q5A==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^1.0.0", + "convert-source-map": "^1.5.1", + "debug-log": "^1.0.1", + "default-require-extensions": "^1.0.0", + "find-cache-dir": "^0.1.1", + "find-up": "^2.1.0", + "foreground-child": "^1.5.3", + "glob": "^7.0.6", + "istanbul-lib-coverage": "^1.1.2", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.10.0", + "istanbul-lib-report": "^1.1.3", + "istanbul-lib-source-maps": "^1.2.3", + "istanbul-reports": "^1.4.0", + "md5-hex": "^1.2.0", + "merge-source-map": "^1.1.0", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.0", + "resolve-from": "^2.0.0", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.1", + "spawn-wrap": "^1.4.2", + "test-exclude": "^4.2.0", + "yargs": "11.1.0", + "yargs-parser": "^8.0.0" }, "dependencies": { "align-text": { @@ -7834,9 +10353,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -7863,7 +10382,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "archy": { @@ -7873,24 +10392,27 @@ "dev": true }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arrify": { @@ -7899,37 +10421,49 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-messages": { @@ -7938,7 +10472,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { @@ -7947,8 +10481,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -7957,11 +10491,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -7970,15 +10504,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -7987,16 +10521,16 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "balanced-match": { @@ -8005,25 +10539,110 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "builtin-modules": { @@ -8032,15 +10651,40 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "caching-transform": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", "dev": true, "requires": { - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "write-file-atomic": "1.3.4" + "md5-hex": "^1.2.0", + "mkdirp": "^0.5.1", + "write-file-atomic": "^1.1.4" } }, "camelcase": { @@ -8057,8 +10701,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -8067,11 +10711,40 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "cliui": { @@ -8081,8 +10754,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -8101,12 +10774,28 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8114,15 +10803,21 @@ "dev": true }, "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true }, "cross-spawn": { @@ -8131,14 +10826,14 @@ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -8156,13 +10851,72 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, "default-require-extensions": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "detect-indent": { @@ -8171,7 +10925,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "error-ex": { @@ -8180,7 +10934,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { @@ -8201,13 +10955,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -8216,57 +10970,161 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "fill-range": "2.2.3" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-cache-dir": { @@ -8275,9 +11133,9 @@ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, "find-up": { @@ -8286,7 +11144,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "for-in": { @@ -8295,23 +11153,23 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" } }, "fs.realpath": { @@ -8332,43 +11190,30 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "is-glob": "2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "graceful-fs": { @@ -8378,15 +11223,15 @@ "dev": true }, "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -8395,7 +11240,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -8406,7 +11251,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -8415,10 +11260,70 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "imurmurhash": { @@ -8433,8 +11338,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -8444,12 +11349,12 @@ "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -8458,6 +11363,15 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8465,9 +11379,9 @@ "dev": true }, "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { @@ -8476,22 +11390,35 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "is-extendable": { @@ -8500,60 +11427,64 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "kind-of": "^3.0.2" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "kind-of": "3.2.2" + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -8566,6 +11497,12 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -8579,54 +11516,51 @@ "dev": true }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha1-3WYH8DB2V4/n1vKmMM8UO0m6zdw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", - "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha1-8OVfVmVf+jQiIIC3oM1HYOFAX8k=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", + "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "supports-color": { @@ -8635,31 +11569,42 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", - "integrity": "sha1-pv4ay6jOCO68Y45XLilNJnAIqgw=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", "dev": true, "requires": { - "debug": "2.6.8", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.1", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.4.0.tgz", + "integrity": "sha512-OPzVo1fPZ2H+owr8q/LYKLD+vquv9Pj4F+dj808MdHbuQLD7S4ACRjcX+0Tne5Vxt2lxXvdZaL7v+FOOAV281w==", "dev": true, "requires": { - "handlebars": "4.0.10" + "handlebars": "^4.0.3" } }, "js-tokens": { @@ -8680,7 +11625,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -8696,7 +11641,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "load-json-file": { @@ -8705,11 +11650,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "locate-path": { @@ -8718,8 +11663,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -8731,9 +11676,9 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "longest": { @@ -8748,17 +11693,32 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "object-visit": "^1.0.0" } }, "md5-hex": { @@ -8767,7 +11727,7 @@ "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", "dev": true, "requires": { - "md5-o-matic": "0.1.1" + "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { @@ -8782,52 +11742,68 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -8836,6 +11812,27 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -8851,25 +11848,56 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-run-path": { @@ -8878,7 +11906,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -8893,14 +11921,60 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "once": { @@ -8909,7 +11983,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { @@ -8918,8 +11992,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "os-homedir": { @@ -8931,12 +12005,12 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "p-finally": { @@ -8946,10 +12020,13 @@ "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } }, "p-locate": { "version": "2.0.0", @@ -8957,20 +12034,14 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "parse-json": { "version": "2.2.0", @@ -8978,16 +12049,22 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -9014,9 +12091,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -9037,7 +12114,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -9046,7 +12123,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" }, "dependencies": { "find-up": { @@ -9055,16 +12132,16 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "pseudomap": { @@ -9073,56 +12150,15 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -9131,8 +12167,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -9141,33 +12177,28 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha1-flT+W1zNXWYk6mJVw0c74JC4AuE=", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -9186,7 +12217,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { @@ -9207,6 +12238,18 @@ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", "dev": true }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -9214,106 +12257,306 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "glob": "7.1.2" + "kind-of": "^3.2.0" } }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, "spawn-wrap": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.3.8.tgz", - "integrity": "sha1-+ip5uZDLsLsAGNymdI2INnsZ7DE=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", "dev": true, "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.1", - "signal-exit": "3.0.2", - "which": "1.3.0" + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -9322,19 +12565,13 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -9345,7 +12582,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -9354,7 +12591,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -9370,16 +12607,292 @@ "dev": true }, "test-exclude": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", - "integrity": "sha1-TYSWSwlmsAh+zDNKLOAC09k0HiY=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } } }, "to-fast-properties": { @@ -9388,6 +12901,48 @@ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -9401,9 +12956,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -9413,9 +12968,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -9428,23 +12983,127 @@ "dev": true, "optional": true }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -9472,19 +13131,28 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -9501,9 +13169,9 @@ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } }, "y18n": { @@ -9519,26 +13187,31 @@ "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -9546,101 +13219,49 @@ "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "ansi-regex": "^3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true } } @@ -9665,14 +13286,53 @@ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", "dev": true }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -9681,7 +13341,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -9706,17 +13366,14 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true }, "optimist": { "version": "0.6.1", @@ -9724,8 +13381,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "wordwrap": { @@ -9742,20 +13399,14 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, "optipng": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/optipng/-/optipng-1.1.0.tgz", @@ -9790,9 +13441,9 @@ "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", "dev": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, "which": { @@ -9801,7 +13452,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -9812,9 +13463,42 @@ "integrity": "sha1-Mj2U7KSMV4j1HJ5RV321k7sAfBI=", "dev": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" + } + }, + "ora": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + } } }, "ordered-read-streams": { @@ -9823,14 +13507,14 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "dev": true, "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" } }, "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "os-filter-obj": { @@ -9852,9 +13536,49 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } } }, "os-shim": { @@ -9870,14 +13594,14 @@ "dev": true }, "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "outpipe": { @@ -9886,7 +13610,7 @@ "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", "dev": true, "requires": { - "shell-quote": "1.6.1" + "shell-quote": "^1.4.2" } }, "p-finally": { @@ -9896,10 +13620,13 @@ "dev": true }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } }, "p-locate": { "version": "2.0.0", @@ -9907,13 +13634,56 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pac-proxy-agent": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz", + "integrity": "sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^3.0.0" + } + }, + "pac-resolver": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", + "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", + "dev": true, + "optional": true, + "requires": { + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" } }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, "param-case": { @@ -9922,7 +13692,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parents": { @@ -9931,20 +13701,20 @@ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "0.11.15" + "path-platform": "~0.11.15" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.8", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-css-font": { @@ -9954,15 +13724,15 @@ "dev": true, "optional": true, "requires": { - "css-font-size-keywords": "1.0.0", - "css-font-stretch-keywords": "1.0.1", - "css-font-style-keywords": "1.0.1", - "css-font-weight-keywords": "1.0.0", - "css-global-keywords": "1.0.1", - "css-list-helpers": "1.0.1", - "css-system-font-keywords": "1.0.0", - "tcomb": "2.7.0", - "unquote": "1.1.1" + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-global-keywords": "^1.0.1", + "css-list-helpers": "^1.0.1", + "css-system-font-keywords": "^1.0.0", + "tcomb": "^2.5.0", + "unquote": "^1.1.0" } }, "parse-glob": { @@ -9971,10 +13741,27 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "parse-json": { @@ -9983,7 +13770,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse5": { @@ -9992,22 +13779,13 @@ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", "dev": true }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, "parseqs": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -10016,7 +13794,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -10025,6 +13803,12 @@ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", "dev": true }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, "passerror": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/passerror/-/passerror-1.1.1.tgz", @@ -10044,13 +13828,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -10081,35 +13862,60 @@ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, + "path-proxy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "dev": true, + "optional": true, + "requires": { + "inflection": "~1.3.0" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "dev": true, + "optional": true + } + } + }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pend": { @@ -10124,39 +13930,18 @@ "integrity": "sha1-wUetNxThJkZ/F2QSnuct+GHUfqA=", "dev": true, "requires": { - "comment-regex": "1.0.0", - "defined": "1.0.0", - "minimist": "1.2.0", - "postcss": "5.2.18", - "postcss-scss": "0.3.1", - "postcss-value-parser": "3.3.0", - "read-file-stdin": "0.2.1", - "string.prototype.repeat": "0.2.0", - "vendors": "1.0.1", + "comment-regex": "^1.0.0", + "defined": "^1.0.0", + "minimist": "^1.2.0", + "postcss": "^5.0.8", + "postcss-scss": "^0.3.0", + "postcss-value-parser": "^3.3.0", + "read-file-stdin": "^0.2.0", + "string.prototype.repeat": "^0.2.0", + "vendors": "^1.0.0", "write-file-stdout": "0.0.2" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10175,19 +13960,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10196,7 +13972,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10225,7 +14001,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -10234,7 +14010,37 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "please-upgrade-node": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.2.tgz", + "integrity": "sha512-bslfSeW+ksUbB/sYZeEdKFyTG4YWU9YKRvqfSRvZKE675khAuBUPqV5RUwJZaGuWmVQLweK45Q+lPHFVnSlSug==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" } }, "pluralize": { @@ -10243,16 +14049,22 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "pngcrush": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pngcrush/-/pngcrush-1.1.1.tgz", "integrity": "sha1-k9ZzGAPdLd+hU++UmML2/1Ietss=", "dev": true, "requires": { - "gettemporaryfilepath": "0.0.1", - "memoizeasync": "0.9.0", + "gettemporaryfilepath": "^0.0.1", + "memoizeasync": "^0.9.0", "pngcrush-bin": "3.0.0", - "which": "1.3.0" + "which": "^1.2.10" }, "dependencies": { "gettemporaryfilepath": { @@ -10269,9 +14081,9 @@ "integrity": "sha1-tOWWgTnOVjJv7FXurxsU8nMowhM=", "dev": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, "pngquant": { @@ -10307,7 +14119,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -10319,51 +14131,46 @@ "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, "postcss": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.15.tgz", - "integrity": "sha512-v/SpyMzLbtkmh45zUdaqLAaqXqzPdSrw8p4cQVO0/w6YiYfpj4k+Wkzhn68qk9br+H+0qfddhdPEVnbmBPfXVQ==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.3.0", - "source-map": "0.6.1", - "supports-color": "5.1.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.0" + "color-convert": "^1.9.0" } }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "source-map": { @@ -10371,15 +14178,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } } } }, @@ -10389,32 +14187,11 @@ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-message-helpers": "2.0.0", - "reduce-css-calc": "1.3.0" + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10427,19 +14204,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10448,7 +14216,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10459,32 +14227,11 @@ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", "dev": true, "requires": { - "colormin": "1.1.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10497,19 +14244,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10518,7 +14256,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10529,31 +14267,10 @@ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10566,19 +14283,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10587,7 +14295,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10598,30 +14306,9 @@ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10634,19 +14321,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10655,7 +14333,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10666,30 +14344,9 @@ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10702,19 +14359,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10723,7 +14371,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10734,30 +14382,9 @@ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.14" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10770,19 +14397,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10791,7 +14409,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10802,30 +14420,9 @@ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.16" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10838,19 +14435,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10859,7 +14447,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -10870,31 +14458,10 @@ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqs": "2.0.0" + "postcss": "^5.0.14", + "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10907,19 +14474,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10928,42 +14486,20 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "dev": true, "requires": { - "postcss": "5.2.18", - "uniqid": "4.1.1" + "postcss": "^5.0.4" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -10976,19 +14512,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -10997,7 +14524,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11008,32 +14535,11 @@ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11046,19 +14552,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11067,7 +14564,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11078,55 +14575,25 @@ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11135,7 +14602,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11146,11 +14613,11 @@ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", "dev": true, "requires": { - "browserslist": "1.7.7", - "caniuse-api": "1.6.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" }, "dependencies": { "browserslist": { @@ -11159,29 +14626,8 @@ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "dev": true, "requires": { - "caniuse-db": "1.0.30000784", - "electron-to-chromium": "1.3.30" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } }, "has-flag": { @@ -11196,19 +14642,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11217,7 +14654,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11234,32 +14671,11 @@ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { - "object-assign": "4.1.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11272,19 +14688,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11293,7 +14700,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11304,31 +14711,10 @@ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11341,19 +14727,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11362,7 +14739,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11373,33 +14750,12 @@ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11412,19 +14768,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11433,7 +14780,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11444,33 +14791,12 @@ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-selector-parser": "2.2.3" + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11483,19 +14809,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11504,7 +14821,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11515,30 +14832,9 @@ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.5" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11551,19 +14847,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11572,7 +14859,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11583,33 +14870,12 @@ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "1.9.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11622,19 +14888,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11643,7 +14900,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11654,31 +14911,10 @@ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11691,19 +14927,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11712,7 +14939,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11723,31 +14950,10 @@ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11760,19 +14966,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11781,7 +14978,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11792,30 +14989,9 @@ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { - "postcss": "5.2.18" + "postcss": "^5.0.4" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11828,19 +15004,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11849,7 +15016,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11860,32 +15027,11 @@ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0" + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11898,19 +15044,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11919,41 +15056,20 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, "postcss-scss": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.3.1.tgz", - "integrity": "sha1-ZcYQ2OKn7g5isYNbcbiHBzSBbks=", - "dev": true, - "requires": { - "postcss": "5.2.18" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-0.3.1.tgz", + "integrity": "sha1-ZcYQ2OKn7g5isYNbcbiHBzSBbks=", + "dev": true, + "requires": { + "postcss": "^5.2.4" + }, + "dependencies": { "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -11966,19 +15082,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -11987,7 +15094,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -11998,9 +15105,9 @@ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", "dev": true, "requires": { - "flatten": "1.0.2", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -12009,33 +15116,12 @@ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { - "is-svg": "2.1.0", - "postcss": "5.2.18", - "postcss-value-parser": "3.3.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -12048,19 +15134,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -12069,7 +15146,22 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } } } @@ -12080,32 +15172,11 @@ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -12118,19 +15189,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -12139,7 +15201,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -12156,32 +15218,11 @@ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { - "has": "1.0.1", - "postcss": "5.2.18", - "uniqs": "2.0.0" + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", @@ -12194,19 +15235,10 @@ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "dev": true, "requires": { - "chalk": "1.1.3", - "js-base64": "2.4.0", - "source-map": "0.5.7", - "supports-color": "3.2.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" } }, "supports-color": { @@ -12215,7 +15247,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -12226,8 +15258,8 @@ "integrity": "sha1-AuNM4n8zr0jmi7/OKqwqAEvCt2w=", "dev": true, "requires": { - "is-object": "1.0.1", - "starts-with": "1.0.2" + "is-object": "^1.0.1", + "starts-with": "^1.0.2" } }, "prelude-ls": { @@ -12248,6 +15280,227 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", + "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=", + "dev": true + }, + "prettier-eslint": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.8.1.tgz", + "integrity": "sha512-8YMkJZnA+XVfEW6fPet05jpNmSQbD+Htbh/QyOxQcVf2GIUEZsnGP7ZScaM9Mq2Ra2261eCu60E7/TRIy9coXQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^4.0.0", + "indent-string": "^3.2.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^1.7.0", + "pretty-format": "^22.0.3", + "require-relative": "^0.8.7", + "typescript": "^2.5.1", + "typescript-eslint-parser": "^11.0.0" + }, + "dependencies": { + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + } + } + }, + "prettier-eslint-cli": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/prettier-eslint-cli/-/prettier-eslint-cli-4.7.1.tgz", + "integrity": "sha512-hQbsGaEVz97oBBcKdsJ46khv0kOGkMyWrXzcFOXW6X8UuetZ/j0yDJkNJgUTVc6PVFbbzBXk+qgd5vos9qzXPQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "babel-runtime": "^6.23.0", + "boolify": "^1.0.0", + "camelcase-keys": "^4.1.0", + "chalk": "2.3.0", + "common-tags": "^1.4.0", + "eslint": "^4.5.0", + "find-up": "^2.1.0", + "get-stdin": "^5.0.1", + "glob": "^7.1.1", + "ignore": "^3.2.7", + "indent-string": "^3.1.0", + "lodash.memoize": "^4.1.2", + "loglevel-colored-level-prefix": "^1.0.0", + "messageformat": "^1.0.2", + "prettier-eslint": "^8.5.0", + "rxjs": "^5.3.0", + "yargs": "10.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz", + "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==", + "dev": true, + "requires": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.0.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -12255,9 +15508,9 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { @@ -12266,19 +15519,66 @@ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "dev": true }, + "promisify-call": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", + "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", + "dev": true, + "optional": true, + "requires": { + "with-callback": "^1.0.2" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, + "proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.0.tgz", + "integrity": "sha512-g6n6vnk8fRf705ShN+FEXFG/SDJaW++lSs0d9KaJh4uBWW/wi7en4Cpo5VYQW3SZzAE121lhB/KLQrbURoubZw==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "pac-proxy-agent": "^2.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^3.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "optional": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", + "dev": true, + "optional": true + }, "ps-tree": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true, "requires": { - "event-stream": "3.3.4" + "event-stream": "~3.3.0" } }, "pseudomap": { @@ -12288,16 +15588,16 @@ "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "punycode": { @@ -12307,15 +15607,15 @@ "dev": true }, "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qs": { @@ -12330,8 +15630,8 @@ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", "dev": true, "requires": { - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -12346,54 +15646,54 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "quick-lru": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", + "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", + "dev": true + }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true }, "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -12412,18 +15712,44 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } } }, "rc": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", - "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -12440,8 +15766,8 @@ "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "dev": true, "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.3" + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" } }, "read-file-stdin": { @@ -12450,7 +15776,7 @@ "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", "dev": true, "requires": { - "gather-stream": "1.0.0" + "gather-stream": "^1.0.0" } }, "read-only-stream": { @@ -12459,7 +15785,7 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.2" } }, "read-pkg": { @@ -12468,9 +15794,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -12479,34 +15805,23 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - } + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -12515,16 +15830,16 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "readline-sync": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.7.tgz", - "integrity": "sha1-ABv91MBhEMPAhMY798alYCIhPzA=", + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.9.tgz", + "integrity": "sha1-PtqOZfI80qF+YTAbHwADOWr17No=", "dev": true }, "redent": { @@ -12533,19 +15848,45 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "dev": true, + "optional": true, + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" + } + }, + "redis-commands": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", + "dev": true, + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "dev": true, + "optional": true + }, "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "math-expression-evaluator": "1.2.17", - "reduce-function-call": "1.0.2" + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" }, "dependencies": { "balanced-match": { @@ -12562,7 +15903,7 @@ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", "dev": true, "requires": { - "balanced-match": "0.4.2" + "balanced-match": "^0.4.2" }, "dependencies": { "balanced-match": { @@ -12585,7 +15926,38 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexpp": { @@ -12606,8 +15978,8 @@ "integrity": "sha1-qspJchALZqZCpjoQIcpLrBvjv/Y=", "dev": true, "requires": { - "argparse": "0.1.16", - "autolinker": "0.15.3" + "argparse": "~0.1.15", + "autolinker": "~0.15.0" }, "dependencies": { "argparse": { @@ -12616,10 +15988,16 @@ "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", "dev": true, "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" } }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, "underscore.string": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", @@ -12652,7 +16030,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -12662,33 +16040,66 @@ "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "requestretry": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", + "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", + "dev": true, + "optional": true, + "requires": { + "extend": "^3.0.0", + "lodash": "^4.15.0", + "request": "^2.74.0", + "when": "^3.7.7" } }, "require-directory": { @@ -12697,20 +16108,32 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", + "dev": true + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requirejs": { @@ -12725,13 +16148,36 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "~1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -12740,33 +16186,56 @@ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -12775,7 +16244,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx-lite": { @@ -12790,35 +16259,72 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" + } + }, + "rxjs": { + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", + "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" + }, + "dependencies": { + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", + "dev": true + } } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, "sauce-connect-launcher": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.2.tgz", - "integrity": "sha1-c0bMj73EQxkTI0ObBzNFH181IfI=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz", + "integrity": "sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA==", "dev": true, "requires": { - "adm-zip": "0.4.7", - "async": "2.5.0", - "https-proxy-agent": "1.0.0", - "lodash": "4.17.4", - "rimraf": "2.6.2" + "adm-zip": "~0.4.3", + "async": "^2.1.2", + "https-proxy-agent": "^2.2.1", + "lodash": "^4.16.6", + "rimraf": "^2.5.4" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + } } }, "saucelabs": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", - "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { - "https-proxy-agent": "1.0.0" + "https-proxy-agent": "^2.2.1" } }, "sax": { @@ -12833,7 +16339,7 @@ "integrity": "sha1-QayBM15Ca0KYSCYiOTNPqLXE7Vc=", "dev": true, "requires": { - "extend": "3.0.1" + "extend": "^3.0.0" } }, "seek-bzip": { @@ -12842,7 +16348,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "2.8.1" + "commander": "~2.8.1" }, "dependencies": { "commander": { @@ -12851,15 +16357,21 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } } } }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, "semver-regex": { @@ -12874,7 +16386,7 @@ "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", "dev": true, "requires": { - "semver": "5.3.0" + "semver": "^5.3.0" } }, "seq": { @@ -12884,8 +16396,8 @@ "dev": true, "optional": true, "requires": { - "chainsaw": "0.0.9", - "hashish": "0.0.4" + "chainsaw": ">=0.0.7 <0.1", + "hashish": ">=0.0.2 <0.1" } }, "set-blocking": { @@ -12900,7 +16412,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "0.3.0" + "to-object-path": "^0.3.0" } }, "set-immediate-shim": { @@ -12909,20 +16421,32 @@ "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "sharp": { @@ -12931,12 +16455,12 @@ "integrity": "sha1-SEzSpwyQA3CUjcxD4WX3gwa/9Io=", "dev": true, "requires": { - "caw": "2.0.1", - "color": "1.0.3", - "got": "6.7.1", - "nan": "2.7.0", - "semver": "5.3.0", - "tar": "2.2.1" + "caw": "^2.0.0", + "color": "^1.0.3", + "got": "^6.7.1", + "nan": "^2.5.1", + "semver": "^5.3.0", + "tar": "^2.2.1" }, "dependencies": { "caw": { @@ -12945,10 +16469,10 @@ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", "dev": true, "requires": { - "get-proxy": "2.1.0", - "isurl": "1.0.0", - "tunnel-agent": "0.6.0", - "url-to-options": "1.0.1" + "get-proxy": "^2.0.0", + "isurl": "^1.0.0-alpha5", + "tunnel-agent": "^0.6.0", + "url-to-options": "^1.0.1" } }, "color": { @@ -12957,8 +16481,8 @@ "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "dev": true, "requires": { - "color-convert": "1.9.0", - "color-string": "1.5.2" + "color-convert": "^1.8.2", + "color-string": "^1.4.0" } }, "color-string": { @@ -12967,8 +16491,8 @@ "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", "dev": true, "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "get-proxy": { @@ -12977,7 +16501,7 @@ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", "dev": true, "requires": { - "npm-conf": "1.1.3" + "npm-conf": "^1.1.0" } }, "got": { @@ -12986,17 +16510,17 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "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" } }, "timed-out": { @@ -13019,8 +16543,19 @@ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.9" + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + }, + "dependencies": { + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + } } }, "shebang-command": { @@ -13029,7 +16564,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -13044,10 +16579,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, "signal-exit": { @@ -13062,7 +16597,7 @@ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { - "is-arrayish": "0.3.1" + "is-arrayish": "^0.3.1" }, "dependencies": { "is-arrayish": { @@ -13073,162 +16608,250 @@ } } }, + "slack-node": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "dev": true, + "optional": true, + "requires": { + "requestretry": "^1.2.2" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } } }, - "sntp": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", - "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", "dev": true, "requires": { - "hoek": "4.2.0" + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" } }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "ms": "0.7.2" + "is-descriptor": "^1.0.0" } }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.x.x" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", "dev": true, "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" + "debug": "~2.6.6", + "engine.io": "~3.1.0", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.0.4", + "socket.io-parser": "~3.1.1" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.1.1", "to-array": "0.1.4" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } @@ -13251,13 +16874,33 @@ } } }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", + "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", + "dev": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-map": { @@ -13266,37 +16909,47 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "sourcemap-to-ast": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/sourcemap-to-ast/-/sourcemap-to-ast-0.0.2.tgz", - "integrity": "sha1-a+dQispBUvwIwbMvMrDyW8iJ/Uk=", + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "estraverse": "1.3.2", - "source-map": "0.1.43" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", + "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { - "estraverse": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz", - "integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI=", - "dev": true - }, "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true }, "spawn-command": { @@ -13311,29 +16964,40 @@ "integrity": "sha1-gDrXny9W5E3ZJhg3aKrC+ux9DOY=", "dev": true, "requires": { - "ps-tree": "1.1.0", - "spawn-command": "0.0.2-1" + "ps-tree": "^1.1.0", + "spawn-command": "^0.0.2-1" } }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "specificity": { @@ -13348,72 +17012,84 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "chalk": "1.1.3", - "console-stream": "0.1.1", - "lpad-align": "1.1.2" + "extend-shallow": "^3.0.0" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "is-plain-object": "^2.0.4" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" + } + }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, + "staged-git-files": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.1.tgz", + "integrity": "sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A==", + "dev": true + }, "starts-with": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/starts-with/-/starts-with-1.0.2.tgz", @@ -13426,10 +17102,37 @@ "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", "dev": true }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, "stream-browserify": { @@ -13438,8 +17141,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-combiner": { @@ -13448,7 +17151,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-combiner2": { @@ -13457,21 +17160,21 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.3" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" } }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", + "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -13486,8 +17189,29 @@ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-to-observable": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", + "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", + "dev": true, + "requires": { + "any-observable": "^0.2.0" + } + }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" } }, "strict-uri-encode": { @@ -13496,14 +17220,21 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, + "string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=", + "dev": true + }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string.prototype.repeat": { @@ -13513,35 +17244,38 @@ "dev": true }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-object": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz", + "integrity": "sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "get-own-enumerable-property-symbols": "^2.0.1", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" } }, "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -13556,8 +17290,8 @@ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -13566,7 +17300,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -13583,47 +17317,19 @@ "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", "dev": true, "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "is-absolute": "0.1.7", - "is-natural-number": "2.1.1", - "minimist": "1.2.0", - "sum-up": "1.0.3" + "chalk": "^1.0.0", + "get-stdin": "^4.0.1", + "is-absolute": "^0.1.5", + "is-natural-number": "^2.0.0", + "minimist": "^1.1.0", + "sum-up": "^1.0.1" }, "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, @@ -13639,7 +17345,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -13649,12 +17355,12 @@ "dev": true }, "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.2" } }, "subarg": { @@ -13663,7 +17369,7 @@ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "1.2.0" + "minimist": "^1.1.0" }, "dependencies": { "minimist": { @@ -13675,50 +17381,20 @@ } }, "sum-up": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", - "dev": true, - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "^1.0.0" } }, "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -13727,33 +17403,21 @@ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "dev": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "2.7.3" - } - } + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" } }, + "symbol-observable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", + "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=", + "dev": true + }, "symbol-tree": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", @@ -13761,12 +17425,12 @@ "dev": true }, "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn-node": "^1.2.0" } }, "table": { @@ -13775,23 +17439,97 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.2.3", - "ajv-keywords": "2.1.1", - "chalk": "2.1.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, "tar": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -13801,14 +17539,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.3", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" }, "dependencies": { "debug": { @@ -13824,15 +17562,18 @@ } }, "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.7.tgz", + "integrity": "sha512-euyxmyeJpl6wjWGnzPfZRQ1IGLNbqEDJWuYyue9sixDY2vfqVBRiIqZLWYhWG5da031WF4qEN9D9Ek9lZHiH1Q==", "dev": true, "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.0.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" } }, "tcomb": { @@ -13853,11 +17594,11 @@ "form-data": "2.1.4", "httperrors": "2.2.0", "is-stream": "1.1.0", - "lodash.assign": "4.2.0", - "lodash.clone": "4.5.0", - "lodash.defaults": "4.2.0", - "lodash.omit": "4.5.0", - "lodash.uniq": "4.5.0", + "lodash.assign": "^4.2.0", + "lodash.clone": "^4.5.0", + "lodash.defaults": "^4.2.0", + "lodash.omit": "^4.5.0", + "lodash.uniq": "^4.5.0", "passerror": "1.1.1", "socketerrors-papandreou": "0.2.0-patch3" }, @@ -13880,9 +17621,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } } } @@ -13893,8 +17634,8 @@ "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" + "os-tmpdir": "^1.0.0", + "uuid": "^2.0.1" }, "dependencies": { "uuid": { @@ -13923,8 +17664,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "through2-filter": { @@ -13933,10 +17674,17 @@ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "dev": true, + "optional": true + }, "time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -13955,16 +17703,23 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "0.11.10" + "process": "~0.11.0" } }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "dev": true, + "optional": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-absolute-glob": { @@ -13973,7 +17728,7 @@ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^2.0.1" } }, "to-array": { @@ -13988,13 +17743,73 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } } }, "toml": { @@ -14004,12 +17819,12 @@ "dev": true }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { @@ -14036,13 +17851,20 @@ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.2" } }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "dev": true, + "optional": true + }, "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel-agent": { @@ -14051,7 +17873,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -14067,23 +17889,23 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.6.tgz", - "integrity": "sha512-qZ3bAurt2IXGPR3c57PyaSYEnQiLRwPeS60G9TahElBZsdOABo+iKYch/PhRjSTZJ5/DF08x43XMt9qec2g3ig==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -14092,28 +17914,46 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", + "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-11.0.0.tgz", + "integrity": "sha512-/fBHTBRBSorWQGKWOOjeMPkzd3o8cOPtFjTRwU5JLNGgVtmMa3KDkiw0R2n+H6ovo9y3OX30/5usm6YTqY44PQ==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + } + } + }, "uc.micro": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz", - "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.5.tgz", + "integrity": "sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==", "dev": true }, "uglify-js": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.4.tgz", - "integrity": "sha512-hfIwuAQI5dlXP30UtdmWoYF9k+ypVqBXIdmd6ZKBiaNHHvA8ty7ZloMe3+7S5AEKVkxHbjByl4DfRHQ7QpZquw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.0.tgz", + "integrity": "sha512-Jcf5naPkX3rVPSQpRn9Vm6Rr572I1gTtR9LnqKgXjmOgfYQ/QS0V2WRStFR53Bdj520M66aCZqt9uzYXgtGrJQ==", "dev": true, "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" + "commander": "~2.15.0", + "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14130,48 +17970,113 @@ "optional": true }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", "dev": true }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, "underscore.string": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "dev": true, "requires": { - "sprintf-js": "1.0.3", - "util-deprecate": "1.0.2" + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "unexpected": { + "version": "10.37.7", + "resolved": "https://registry.npmjs.org/unexpected/-/unexpected-10.37.7.tgz", + "integrity": "sha512-LDLB4FsH81C9U5pblJslHDjInVlmfj601nIqs7mzRrYiQjliV5ySpW16/qqw+14qG+xhygUbG4XenPdcX35wLg==", + "dev": true, + "requires": { + "array-changes": "3.0.1", + "array-changes-async": "3.0.1", + "babel-runtime": "6.26.0", + "detect-indent": "3.0.1", + "diff": "1.1.0", + "greedy-interval-packer": "1.2.0", + "leven": "2.1.0", + "magicpen": "5.12.0", + "unexpected-bluebird": "2.9.34-longstack2" + }, + "dependencies": { + "diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.1.0.tgz", + "integrity": "sha1-eYpJOBqkZBUem08Ob/Kwmooa0j8=", + "dev": true + } + } + }, + "unexpected-bluebird": { + "version": "2.9.34-longstack2", + "resolved": "https://registry.npmjs.org/unexpected-bluebird/-/unexpected-bluebird-2.9.34-longstack2.tgz", + "integrity": "sha1-SaysdTsFVt7WAlIQ7pYYIwfSssk=", "dev": true }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "macaddress": "0.2.8" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } } }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -14184,19 +18089,8 @@ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - }, - "dependencies": { - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "units-css": { @@ -14206,8 +18100,8 @@ "dev": true, "optional": true, "requires": { - "isnumeric": "0.2.0", - "viewport-dimensions": "0.2.0" + "isnumeric": "^0.2.0", + "viewport-dimensions": "^0.2.0" } }, "unpipe": { @@ -14223,6 +18117,52 @@ "dev": true, "optional": true }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "unzip-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", @@ -14236,9 +18176,15 @@ "dev": true }, "urijs": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.0.tgz", - "integrity": "sha512-Qs2odXn0hST5VSPVjpi73CMqtbAoanahaqWBujGU+IyMrMqpWcIhDewxQRhCkmqYxuyvICDcSuLdv2O7ncWBGw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, "url": { @@ -14265,7 +18211,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "url-regex": { @@ -14274,7 +18220,7 @@ "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", "dev": true, "requires": { - "ip-regex": "1.0.3" + "ip-regex": "^1.0.1" } }, "url-to-options": { @@ -14289,15 +18235,24 @@ "integrity": "sha1-E7DVtz4uz1/APIgVV0vpxLVQ/20=", "dev": true, "requires": { - "glob": "7.1.2", - "underscore": "1.8.3", - "urijs": "1.19.0" + "glob": "^7.0.3", + "underscore": "^1.8.3", + "urijs": "^1.18.2" + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" }, "dependencies": { - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -14308,8 +18263,8 @@ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.33" + "lru-cache": "2.2.x", + "tmp": "0.0.x" }, "dependencies": { "lru-cache": { @@ -14350,11 +18305,18 @@ "dev": true }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, + "uws": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", + "dev": true, + "optional": true + }, "vali-date": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", @@ -14362,13 +18324,13 @@ "dev": true }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vargs": { @@ -14378,9 +18340,9 @@ "dev": true }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", "dev": true }, "verror": { @@ -14389,9 +18351,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "viewport-dimensions": { @@ -14407,8 +18369,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -14418,8 +18380,8 @@ "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", "dev": true, "requires": { - "object-assign": "4.1.1", - "readable-stream": "2.3.3" + "object-assign": "^4.0.1", + "readable-stream": "^2.0.0" } }, "vinyl-fs": { @@ -14428,23 +18390,23 @@ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "dev": true, "requires": { - "duplexify": "3.5.1", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" }, "dependencies": { "strip-bom": { @@ -14453,19 +18415,16 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.0.1.tgz", + "integrity": "sha512-EqzLchIMYLBjRPoqVsEkZOa/4Vr2RfOWbd58F+I/Gj79AYTrsseMunxbbSkbYfrqZaXSuPBBXNSOhtJgg0PpmA==", + "dev": true }, "void-elements": { "version": "2.0.1", @@ -14473,11 +18432,14 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } }, "ware": { "version": "1.3.0", @@ -14485,225 +18447,170 @@ "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", "dev": true, "requires": { - "wrap-fn": "0.1.5" + "wrap-fn": "^0.1.0" } }, "watchify": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", - "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "browserify": "14.4.0", - "chokidar": "1.7.0", - "defined": "1.0.0", - "outpipe": "1.1.1", - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "wd": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.4.1.tgz", - "integrity": "sha512-C0wWd2X4SWWcyx5qxaixiZE4Vb07sl0yDfWHPeml8lDHSbmI9erE9BmTHIqOGoDxGgJ3/hkFmODQ7ZLKiF8+8Q==", - "dev": true, - "requires": { - "archiver": "1.3.0", - "async": "2.0.1", - "lodash": "4.16.2", - "mkdirp": "0.5.1", - "q": "1.4.1", - "request": "2.79.0", - "underscore.string": "3.3.4", - "vargs": "0.1.0" + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.11.0.tgz", + "integrity": "sha512-7jWG0c3cKKm2hKScnSAMUEUjRJKXUShwMPk0ASVhICycQhwND3IMAdhJYmc1mxxKzBUJTSF5HZizfrKrS6BzkA==", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "browserify": "^16.1.0", + "chokidar": "^1.0.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" }, "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "async": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", - "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "browserify": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.0.tgz", + "integrity": "sha512-yotdAkp/ZbgDesHQBYU37zjc29JDH4iXT8hjzM1fdUVWogjARX0S1cKeX24Ci6zZ+jG+ADmCTRt6xvtmJnI+BQ==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "detective": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz", + "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==", "dev": true, "requires": { - "lodash": "4.16.2" + "acorn-node": "^1.3.0", + "defined": "^1.0.0", + "minimist": "^1.1.1" } }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "events": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz", + "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" - } + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "module-deps": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.2.tgz", + "integrity": "sha512-KWBI3009iRnHjRlxRhe8nJ6kdeBTg4sMi5N6AZgg5f1/v5S7EBCRBOY854I4P5Anl4kx6AJH+4bBBC2Gi3nkvg==", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.0.2", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "vm-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.0.1.tgz", + "integrity": "sha512-EqzLchIMYLBjRPoqVsEkZOa/4Vr2RfOWbd58F+I/Gj79AYTrsseMunxbbSkbYfrqZaXSuPBBXNSOhtJgg0PpmA==", "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + } + } + }, + "wd": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.9.0.tgz", + "integrity": "sha512-etqaVS5YFPuwaBRXNFnG0UIoCJHIPoWbVgdbK0v8MQRPQx2sNJc/wu0cRzLEuQjhGt/b0NGxcO1CvA5IAqoWrg==", + "dev": true, + "requires": { + "archiver": "2.1.1", + "async": "2.0.1", + "lodash": "4.17.10", + "mkdirp": "^0.5.1", + "q": "1.4.1", + "request": "2.85.0", + "underscore.string": "3.3.4", + "vargs": "0.1.0" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "lodash": "^4.8.0" } }, - "lodash": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz", - "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=", - "dev": true - }, "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true } } }, @@ -14722,14 +18629,20 @@ "iconv-lite": "0.4.19" } }, + "whatwg-mimetype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz", + "integrity": "sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew==", + "dev": true + }, "whatwg-url": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", "dev": true, "requires": { - "tr46": "0.0.3", - "webidl-conversions": "3.0.1" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" }, "dependencies": { "webidl-conversions": { @@ -14740,6 +18653,13 @@ } } }, + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "dev": true, + "optional": true + }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", @@ -14752,7 +18672,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -14762,49 +18682,22 @@ "dev": true }, "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "optional": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "2.1.1" - } - } + "string-width": "^1.0.2 || 2" } }, + "with-callback": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", + "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=", + "dev": true, + "optional": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -14817,39 +18710,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - } + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrap-fn": { @@ -14880,7 +18742,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-stdout": { @@ -14890,33 +18752,28 @@ "dev": true }, "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", - "dev": true - }, "xml-name-validator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", "dev": true }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true + }, "xmldom": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", @@ -14924,11 +18781,18 @@ "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true, + "optional": true + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", @@ -14953,26 +18817,57 @@ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, @@ -14982,7 +18877,7 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -14994,12 +18889,13 @@ } }, "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha1-T7G8euH8L1cDe1SvasyP4QMcW3c=", "dev": true, "requires": { - "fd-slicer": "1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, "yeast": { @@ -15014,10 +18910,10 @@ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", "dev": true, "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.0", - "lodash": "4.17.4", - "readable-stream": "2.3.3" + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" } } } diff --git a/package-scripts.js b/package-scripts.js index e9e4cabd31..3824e7d373 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -9,10 +9,12 @@ const path = require('path'); * @param {string} mochaParams Parameters for the mocha CLI to execute the desired test. * @returns {string} Command string to be executed by nps. */ -function test (testName, mochaParams) { +function test(testName, mochaParams) { const coverageCommand = `nyc --no-clean --report-dir coverage/reports/${testName}`; const mochaCommand = `node ${path.join('bin', 'mocha')}`; // Include 'node' and path.join for Windows compatibility - return `${process.env.COVERAGE ? coverageCommand : ''} ${mochaCommand} ${mochaParams}`.trim(); + return `${ + process.env.COVERAGE ? coverageCommand : '' + } ${mochaCommand} ${mochaParams}`.trim(); } module.exports = { @@ -35,6 +37,11 @@ module.exports = { description: 'Run markdownlint linter' } }, + reformat: { + script: + 'prettier-eslint --write "*.js" "lib/**/*.js" "test/**/*.js" "bin/*" "scripts/*"', + description: 'Reformat codebase with Prettier' + }, clean: { script: 'rimraf mocha.js', description: 'Clean browser bundle' @@ -82,11 +89,17 @@ module.exports = { hiddenFromHelp: true }, unit: { - script: test('unit', '"test/unit/*.spec.js" "test/node-unit/*.spec.js" --growl'), + script: test( + 'unit', + '"test/unit/*.spec.js" "test/node-unit/*.spec.js" --growl' + ), description: 'Run Node.js unit tests' }, integration: { - script: test('integration', '--timeout 5000 --slow 500 "test/integration/*.spec.js"'), + script: test( + 'integration', + '--timeout 5000 --slow 500 "test/integration/*.spec.js"' + ), description: 'Run Node.js integration tests', hiddenFromHelp: true }, @@ -97,38 +110,56 @@ module.exports = { }, compilers: { default: { - script: 'nps test.node.compilers.coffee test.node.compilers.custom test.node.compilers.multiple', + script: + 'nps test.node.compilers.coffee test.node.compilers.custom test.node.compilers.multiple', description: 'Run Node.js --compilers flag tests (deprecated)', hiddenFromHelp: true }, coffee: { - script: test('compilers-coffee', '--compilers coffee:coffee-script/register test/compiler'), - description: 'Run Node.js coffeescript compiler tests using --compilers flag (deprecated)', + script: test( + 'compilers-coffee', + '--compilers coffee:coffee-script/register test/compiler' + ), + description: + 'Run Node.js coffeescript compiler tests using --compilers flag (deprecated)', hiddenFromHelp: true }, custom: { - script: test('compilers-custom', '--compilers foo:./test/compiler-fixtures/foo.fixture test/compiler'), - description: 'Run Node.js custom compiler tests using --compilers flag (deprecated)', + script: test( + 'compilers-custom', + '--compilers foo:./test/compiler-fixtures/foo.fixture test/compiler' + ), + description: + 'Run Node.js custom compiler tests using --compilers flag (deprecated)', hiddenFromHelp: true }, multiple: { - script: test('compilers-multiple', '--compilers coffee:coffee-script/register,foo:./test/compiler-fixtures/foo.fixture test/compiler'), - description: 'Run Node.js multiple compiler tests using--compilers flag (deprecated)', + script: test( + 'compilers-multiple', + '--compilers coffee:coffee-script/register,foo:./test/compiler-fixtures/foo.fixture test/compiler' + ), + description: + 'Run Node.js multiple compiler tests using--compilers flag (deprecated)', hiddenFromHelp: true } }, requires: { - script: test('requires', ['--require coffee-script/register', - '--require test/require/a.js', - '--require test/require/b.coffee', - '--require test/require/c.js', - '--require test/require/d.coffee', - 'test/require/require.spec.js'].join(' ')), + script: test( + 'requires', + [ + '--require coffee-script/register', + '--require test/require/a.js', + '--require test/require/b.coffee', + '--require test/require/c.js', + '--require test/require/d.coffee', + 'test/require/require.spec.js' + ].join(' ') + ), description: 'Run Node.js --require flag tests', hiddenFromHelp: true }, reporters: { - script: test('reporters', '"test/reporters/*.spec.js"'), + script: test('reporters', '--timeout 500 "test/reporters/*.spec.js"'), description: 'Run Node.js reporter tests', hiddenFromHelp: true }, @@ -156,22 +187,34 @@ module.exports = { hiddenFromHelp: true }, bddRequire: { - script: test('only-bdd-require', '--ui qunit test/only/bdd-require.spec'), + script: test( + 'only-bdd-require', + '--ui qunit test/only/bdd-require.spec' + ), description: 'Run Node.js "only" w/ QUnit interface tests', hiddenFromHelp: true }, globalBdd: { - script: test('global-only-bdd', '--ui bdd test/only/global/bdd.spec'), + script: test( + 'global-only-bdd', + '--ui bdd test/only/global/bdd.spec' + ), description: 'Run Node.js "global only" w/ BDD interface tests', hiddenFromHelp: true }, globalTdd: { - script: test('global-only-tdd', '--ui tdd test/only/global/tdd.spec'), + script: test( + 'global-only-tdd', + '--ui tdd test/only/global/tdd.spec' + ), description: 'Run Node.js "global only" w/ TDD interface tests', hiddenFromHelp: true }, globalQunit: { - script: test('global-only-qunit', '--ui qunit test/only/global/qunit.spec'), + script: test( + 'global-only-qunit', + '--ui qunit test/only/global/qunit.spec' + ), description: 'Run Node.js "global only" w/ QUnit interface tests', hiddenFromHelp: true } @@ -179,7 +222,8 @@ module.exports = { }, browser: { default: { - script: 'nps clean build test.browser.unit test.browser.bdd test.browser.tdd test.browser.qunit test.browser.esm', + script: + 'nps clean build test.browser.unit test.browser.bdd test.browser.tdd test.browser.qunit test.browser.esm', description: 'Run browser tests' }, unit: { @@ -226,16 +270,19 @@ module.exports = { }, docs: { default: { - script: 'nps docs.prebuild && bundle exec jekyll build --source ./docs --destination ./docs/_site --config ./docs/_config.yml --safe --drafts && nps docs.postbuild', + script: + 'nps docs.prebuild && bundle exec jekyll build --source ./docs --destination ./docs/_site --config ./docs/_config.yml --safe --drafts && nps docs.postbuild', description: 'Build documentation' }, prebuild: { - script: 'rimraf docs/_dist && node scripts/docs-update-toc.js', + script: + 'rimraf docs/_dist docs/api && node scripts/docs-update-toc.js && nps docs.api', description: 'Prepare system for doc building', hiddenFromHelp: true }, postbuild: { - script: 'buildProduction docs/_site/index.html --outroot docs/_dist --canonicalroot https://mochajs.org/ --optimizeimages --svgo --inlinehtmlimage 9400 --inlinehtmlscript 0 --asyncscripts && cp docs/_headers docs/_dist/_headers && node scripts/netlify-headers.js >> docs/_dist/_headers', + script: + 'buildProduction docs/_site/index.html --outroot docs/_dist --canonicalroot https://mochajs.org/ --optimizeimages --svgo --inlinehtmlimage 9400 --inlinehtmlscript 0 --asyncscripts && cp docs/_headers docs/_dist/_headers && node scripts/netlify-headers.js >> docs/_dist/_headers', description: 'Post-process docs after build', hiddenFromHelp: true }, @@ -245,8 +292,14 @@ module.exports = { hiddenFromHelp: true }, watch: { - script: 'nps docs.prewatch && bundle exec jekyll serve --source ./docs --destination ./docs/_site --config ./docs/_config.yml --safe --drafts --watch', + script: + 'nps docs.prewatch && bundle exec jekyll serve --source ./docs --destination ./docs/_site --config ./docs/_config.yml --safe --drafts --watch', description: 'Watch docs for changes & build' + }, + api: { + script: + 'mkdirp docs/api && jsdoc -c jsdoc.conf.json && cp LICENSE docs/api', + description: 'build api docs' } }, updateContributors: { diff --git a/package.json b/package.json index 09864cc69a..002b55e32b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mocha", - "version": "5.0.5", + "version": "5.2.0", "description": "simple, flexible, fun test framework", "keywords": [ "mocha", @@ -107,8 +107,10 @@ "David Henderson ", "David M. Lee ", "David Neubauer ", + "DavNej ", "Denis Bardadym ", "Devin Weaver ", + "dfberry ", "Di Wu ", "Dina Berry ", "Diogo Monteiro ", @@ -299,6 +301,7 @@ "Nathan Rajlich ", "nexdrew ", "Nick Fitzgerald ", + "Nicolas Girault ", "Nicolo Taddei ", "Nik Nyby ", "Nikolaos Georgiou ", @@ -311,11 +314,13 @@ "Oscar Godson ", "Outsider ", "oveddan ", + "P. Roebuck ", "Panu Horsmalahti ", "Parker Moore ", "Pat Finnigan ", "Paul Armstrong ", "Paul Miller ", + "Paul Roebuck ", "Pavel Zubkou ", "Pete Hawkins ", "Peter Müller ", @@ -446,55 +451,62 @@ "_mocha": "./bin/_mocha" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 6.0.0" }, "scripts": { "prepublishOnly": "nps test clean build", "start": "nps", - "test": "nps test" + "test": "nps test", + "precommit": "lint-staged" }, "dependencies": { "browser-stdout": "1.3.1", - "commander": "2.11.0", + "commander": "2.15.1", "debug": "3.1.0", "diff": "3.5.0", "escape-string-regexp": "1.0.5", "glob": "7.1.2", - "growl": "1.10.3", + "growl": "1.10.5", "he": "1.1.1", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "4.4.0" + "supports-color": "5.4.0" }, "devDependencies": { - "assert": "^1.4.1", - "assetgraph-builder": "^5.6.4", - "browserify": "^14.4.0", + "@mocha/docdash": "^1.0.1", + "assetgraph-builder": "^5.9.1", + "browserify": "^16.2.2", + "chai": "^4.1.2", "coffee-script": "^1.10.0", - "coveralls": "^3.0.0", - "cross-spawn": "^5.1.0", + "coveralls": "^3.0.1", + "cross-spawn": "^6.0.5", "eslint": "^4.19.1", + "eslint-config-prettier": "^2.9.0", "eslint-config-semistandard": "^12.0.1", "eslint-config-standard": "^11.0.0", - "eslint-plugin-import": "^2.10.0", + "eslint-plugin-import": "^2.11.0", "eslint-plugin-node": "^6.0.1", + "eslint-plugin-prettier": "^2.6.0", "eslint-plugin-promise": "^3.7.0", "eslint-plugin-standard": "^3.0.1", - "expect.js": "^0.3.1", - "karma": "^1.7.1", + "husky": "^0.14.3", + "jsdoc": "^3.5.5", + "karma": "^2.0.2", "karma-browserify": "^5.0.5", "karma-chrome-launcher": "^2.0.0", - "karma-expect": "^1.1.2", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.4", "karma-sauce-launcher": "^1.2.0", + "lint-staged": "^7.1.0", "markdown-toc": "^1.2.0", - "markdownlint-cli": "^0.6.0", + "markdownlint-cli": "^0.9.0", "nps": "^5.7.1", - "nyc": "^11.2.1", + "nyc": "^11.7.3", + "prettier-eslint-cli": "^4.7.1", "rimraf": "^2.5.2", "svgo": "^0.7.2", "through2": "^2.0.1", + "unexpected": "^10.37.7", "watchify": "^3.7.0" }, "files": [ @@ -516,5 +528,9 @@ "supports-color": false }, "homepage": "https://mochajs.org", - "logo": "https://cldup.com/S9uQ-cOLYz.svg" + "logo": "https://cldup.com/S9uQ-cOLYz.svg", + "prettier": { + "singleQuote": true, + "bracketSpacing": false + } } diff --git a/scripts/.eslintrc.yml b/scripts/.eslintrc.yml deleted file mode 100644 index 36e0a779be..0000000000 --- a/scripts/.eslintrc.yml +++ /dev/null @@ -1,3 +0,0 @@ -env: - es6: true - browser: false diff --git a/scripts/dedefine.js b/scripts/dedefine.js index cd21b623c1..e563c629bf 100644 --- a/scripts/dedefine.js +++ b/scripts/dedefine.js @@ -7,10 +7,9 @@ const through = require('through2'); const defineRx = /typeof\s+define\s*===?\s*['"]function['"]\s*&&\s*(?:define\.amd|typeof\s+define\.amd\s*===?\s*['"]object['"]\s*&&\s*define\.amd)/g; -function createStream () { - return through.obj(function (chunk, enc, next) { - this.push(String(chunk) - .replace(defineRx, 'false')); +function createStream() { + return through.obj(function(chunk, enc, next) { + this.push(String(chunk).replace(defineRx, 'false')); next(); }); } diff --git a/scripts/docs-update-toc.js b/scripts/docs-update-toc.js index 93da9aadca..5deef94c19 100755 --- a/scripts/docs-update-toc.js +++ b/scripts/docs-update-toc.js @@ -16,7 +16,8 @@ const docsFilepath = path.join(__dirname, '..', 'docs', 'index.md'); console.log('Updating TOC...'); -fs.createReadStream(docsFilepath) +fs + .createReadStream(docsFilepath) .on('error', err => { console.log(err); process.exit(1); @@ -24,10 +25,14 @@ fs.createReadStream(docsFilepath) .on('close', () => { console.log('Done.'); }) - .pipe(utils.concat(input => { - const output = toc.insert(String(input), { - bullets: '-', - maxdepth: 2 - }).replace(/\n\n$/, '\n'); - return fs.writeFileSync(docsFilepath, output); - })); + .pipe( + utils.concat(input => { + const output = toc + .insert(String(input), { + bullets: '-', + maxdepth: 2 + }) + .replace(/\n\n$/, '\n'); + return fs.writeFileSync(docsFilepath, output); + }) + ); diff --git a/scripts/netlify-headers.js b/scripts/netlify-headers.js index d551b6374c..c99c868bc1 100644 --- a/scripts/netlify-headers.js +++ b/scripts/netlify-headers.js @@ -2,9 +2,7 @@ const AssetGraph = require('assetgraph'); -const headers = [ - 'Content-Security-Policy' -]; +const headers = ['Content-Security-Policy']; const resourceHintTypeMap = { HtmlPreloadLink: 'preload', @@ -13,8 +11,10 @@ const resourceHintTypeMap = { HtmlDnsPrefetchLink: 'dns-prefetch' }; -function getHeaderForRelation (rel) { - let header = `Link: <${rel.href}>; rel=${resourceHintTypeMap[rel.type]}; as=${rel.as}; type=${rel.to.contentType}`; +function getHeaderForRelation(rel) { + let header = `Link: <${rel.href}>; rel=${resourceHintTypeMap[rel.type]}; as=${ + rel.as + }; type=${rel.to.contentType}`; if (rel.as === 'font') { header = `${header}; crossorigin=anonymous`; @@ -23,24 +23,31 @@ function getHeaderForRelation (rel) { return header; } -new AssetGraph({ root: 'docs/_dist' }) +new AssetGraph({root: 'docs/_dist'}) .loadAssets('*.html') .populate({ - followRelations: { type: 'HtmlAnchor', crossorigin: false } + followRelations: {type: 'HtmlAnchor', crossorigin: false} }) - .queue(function (assetGraph) { - const assets = assetGraph.findAssets({ type: 'Html', isInline: false }); + .queue(function(assetGraph) { + const assets = assetGraph.findAssets({type: 'Html', isInline: false}); const headerMap = {}; - assets.forEach(function (asset) { - const url = '/' + asset.url.replace(assetGraph.root, '').replace(/#.*/, '').replace('index.html', ''); + assets.forEach(function(asset) { + const url = + '/' + + asset.url + .replace(assetGraph.root, '') + .replace(/#.*/, '') + .replace('index.html', ''); if (!headerMap[url]) { headerMap[url] = []; } - headers.forEach(function (header) { - const node = asset.parseTree.querySelector('meta[http-equiv=' + header + ']'); + headers.forEach(function(header) { + const node = asset.parseTree.querySelector( + 'meta[http-equiv=' + header + ']' + ); if (node) { headerMap[url].push(`${header}: ${node.getAttribute('content')}`); @@ -51,9 +58,11 @@ new AssetGraph({ root: 'docs/_dist' }) }); const firstCssRel = asset.outgoingRelations.filter(r => { - return r.type === 'HtmlStyle' && - r.crossorigin === false && - r.href !== undefined; + return ( + r.type === 'HtmlStyle' && + r.crossorigin === false && + r.href !== undefined + ); })[0]; if (firstCssRel) { @@ -62,7 +71,9 @@ new AssetGraph({ root: 'docs/_dist' }) headerMap[url].push(header); } - const resourceHintRelations = asset.outgoingRelations.filter(r => ['HtmlPreloadLink', 'HtmlPrefetchLink'].includes(r.type)); + const resourceHintRelations = asset.outgoingRelations.filter(r => + ['HtmlPreloadLink', 'HtmlPrefetchLink'].includes(r.type) + ); resourceHintRelations.forEach(rel => { headerMap[url].push(getHeaderForRelation(rel)); @@ -70,7 +81,9 @@ new AssetGraph({ root: 'docs/_dist' }) rel.detach(); }); - const preconnectRelations = asset.outgoingRelations.filter(r => ['HtmlPreconnectLink'].includes(r.type)); + const preconnectRelations = asset.outgoingRelations.filter(r => + ['HtmlPreconnectLink'].includes(r.type) + ); preconnectRelations.forEach(rel => { let header = `Link: <${rel.href}>; rel=preconnect`; @@ -83,17 +96,17 @@ new AssetGraph({ root: 'docs/_dist' }) console.log('\n## Autogenerated headers:\n'); - Object.keys(headerMap).forEach(function (url) { + Object.keys(headerMap).forEach(function(url) { console.log(url); const httpHeaders = headerMap[url]; - httpHeaders.forEach(function (header) { + httpHeaders.forEach(function(header) { console.log(` ${header}`); }); console.log(''); }); }) - .writeAssetsToDisc({ isLoaded: true }) + .writeAssetsToDisc({isLoaded: true}) .run(); diff --git a/test/.eslintrc.yml b/test/.eslintrc.yml deleted file mode 100644 index 92622be761..0000000000 --- a/test/.eslintrc.yml +++ /dev/null @@ -1,7 +0,0 @@ -env: - mocha: true -globals: - expect: false - assert: false -rules: - no-unused-expressions: off diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000000..2d1b8e1c3f --- /dev/null +++ b/test/README.md @@ -0,0 +1,15 @@ +# About Mocha's Tests + +- **All assertions should be made using [unexpected](http://unexpected.js.org)**, unless there's a good reason not to. Exceptions include: + - Testing diff output. Mocha generates diff output unless the assertion library decides to do this itself. Since `unexpected` generates its *own* diff output, we need to use an assertion library that does not; we use the built-in `assert` module. + - `test/unit/runnable.spec.js` must avoid 3rd-party code; read source for more info + - Tests asserting interop with other specific assertion libraries. +- All tests have extension `.spec.js`. +- All test fixtures have extension `.fixture.js`. +- All test fixtures are *ignored* by ESLint. +- `mocha.opts` will require `test/setup.js`, which is the main harness. +- `test/assertions.js` contains Mocha-specific types and assertions for `unexpected` +- `test/node-unit/` only runs in Node.js; `test/browser-specific/` only runs in the browser. + - See `../karma.conf.js` for more information on which tests run in the browser. +- We can't run all of the Node.js tests in one `mocha` command, because we need to use different command-line options to test the various reporters and interfaces. + - See `../package-scripts.js` for more info about how things are split up. diff --git a/test/assertions.js b/test/assertions.js new file mode 100644 index 0000000000..4395c0bb90 --- /dev/null +++ b/test/assertions.js @@ -0,0 +1,285 @@ +'use strict'; + +exports.mixinMochaAssertions = function(expect) { + return expect + .addType({ + name: 'JSONResult', + base: 'object', + identify: function(v) { + return ( + Object.prototype.toString.call(v) === '[object Object]' && + Object.prototype.toString.call(v.stats) === '[object Object]' && + Array.isArray(v.failures) && + typeof v.code === 'number' + ); + } + }) + .addType({ + name: 'RawResult', + base: 'object', + identify: function(v) { + return ( + Object.prototype.toString.call(v) === '[object Object]' && + typeof v.passing === 'number' && + typeof v.failing === 'number' && + typeof v.pending === 'number' && + typeof v.output === 'string' && + typeof v.code === 'number' + ); + } + }) + .addAssertion(' [not] to have passed', function( + expect, + result + ) { + expect(result, 'to satisfy', { + code: expect.it('[not] to be', 0), + stats: { + failures: expect.it('[not] to be', 0) + }, + failures: expect.it('[not] to be empty') + }); + }) + .addAssertion(' [not] to have passed', function(expect, result) { + expect(result.code, '[not] to be', 0); + }) + .addAssertion( + ' [not] to have completed with [exit] code ', + function(expect, result, code) { + expect(result.code, '[not] to be', code); + } + ) + .addAssertion( + ' [not] to have passed (with|having) count ', + function(expect, result, count) { + expect(result, '[not] to pass').and('[not] to satisfy', { + stats: {passes: expect.it('to be', count)} + }); + } + ) + .addAssertion( + ' [not] to have failed (with|having) count ', + function(expect, result, count) { + expect(result, '[not] to have failed').and('[not] to satisfy', { + stats: {failures: expect.it('to be', count)} + }); + } + ) + .addAssertion(' [not] to have failed', function( + expect, + result + ) { + expect(result, '[not] to satisfy', { + code: expect.it('to be greater than', 0), + stats: { + failures: expect.it('to be greater than', 0) + }, + failures: expect.it('to be non-empty') + }); + }) + .addAssertion(' [not] to have failed', function(expect, result) { + expect(result.code, '[not] to be greater than', 0); + }) + .addAssertion(' [not] to have test count ', function( + expect, + result, + count + ) { + expect(result.stats.tests, '[not] to be', count); + }) + .addAssertion( + ' [not] to have failed [test] count ', + function(expect, result, count) { + expect(result.stats.failures, '[not] to be', count); + } + ) + .addAssertion( + ' [not] to have passed [test] count ', + function(expect, result, count) { + expect(result.stats.passes, '[not] to be', count); + } + ) + .addAssertion( + ' [not] to have pending [test] count ', + function(expect, result, count) { + expect(result.stats.pending, '[not] to be', count); + } + ) + .addAssertion( + ' [not] to have run (test|tests) ', + function(expect, result, titles) { + Array.prototype.slice.call(arguments, 2).forEach(function(title) { + expect( + result, + '[not] to have a value satisfying', + expect.it('to have an item satisfying', {title: title}) + ); + }); + } + ) + .addAssertion( + ' [not] to have failed (test|tests) ', + function(expect, result, titles) { + Array.prototype.slice.call(arguments, 2).forEach(function(title) { + expect(result.failures, '[not] to have an item satisfying', { + title: title + }); + }); + } + ) + .addAssertion( + ' [not] to have failed with (error|errors) ', + function(expect, result, errors) { + Array.prototype.slice.call(arguments, 2).forEach(function(error) { + expect(result, '[not] to have failed').and('[not] to satisfy', { + failures: expect.it('to have an item satisfying', { + err: expect + .it('to satisfy', error) + .or('to satisfy', {message: error}) + }) + }); + }); + } + ) + .addAssertion(' [not] to have (error|errors) ', function( + expect, + result, + errors + ) { + Array.prototype.slice.call(arguments, 2).forEach(function(error) { + expect(result, '[not] to satisfy', { + failures: expect.it('to have an item satisfying', { + err: expect + .it('to satisfy', error) + .or('to satisfy', {message: error}) + }) + }); + }); + }) + .addAssertion( + ' [not] to have passed (test|tests) ', + function(expect, result, titles) { + Array.prototype.slice.call(arguments, 2).forEach(function(title) { + expect(result.passes, '[not] to have an item satisfying', { + title: title + }); + }); + } + ) + .addAssertion( + ' [not] to have test order ', + function(expect, result, state, titles) { + expect( + result[state].slice(0, titles.length), + '[not] to satisfy', + titles.map(function(title) { + return typeof title === 'string' ? {title: title} : title; + }) + ); + } + ) + .addAssertion( + ' [not] to have passed test order ', + function(expect, result, titles) { + expect(result, '[not] to have test order', 'passes', titles); + } + ) + .addAssertion( + ' [not] to have passed test order ', + function(expect, result, titles) { + expect( + result, + '[not] to have test order', + 'passes', + Array.prototype.slice.call(arguments, 2) + ); + } + ) + .addAssertion( + ' [not] to have failed test order ', + function(expect, result, titles) { + expect(result, '[not] to have test order', 'failures', titles); + } + ) + .addAssertion( + ' [not] to have failed test order ', + function(expect, result, titles) { + expect( + result, + '[not] to have test order', + 'failures', + Array.prototype.slice.call(arguments, 2) + ); + } + ) + .addAssertion( + ' [not] to have pending test order ', + function(expect, result, titles) { + expect(result, '[not] to have test order', 'pending', titles); + } + ) + .addAssertion( + ' [not] to have pending test order ', + function(expect, result, titles) { + expect( + result, + '[not] to have test order', + 'pending', + Array.prototype.slice.call(arguments, 2) + ); + } + ) + .addAssertion(' [not] to have pending tests', function( + expect, + result + ) { + expect(result.stats.pending, '[not] to be greater than', 0); + }) + .addAssertion(' [not] to have passed tests', function( + expect, + result + ) { + expect(result.stats.passes, '[not] to be greater than', 0); + }) + .addAssertion(' [not] to have failed tests', function( + expect, + result + ) { + expect(result.stats.failed, '[not] to be greater than', 0); + }) + .addAssertion(' [not] to have tests', function(expect, result) { + expect(result.stats.tests, '[not] to be greater than', 0); + }) + .addAssertion(' [not] to have retried test ', function( + expect, + result, + title + ) { + expect(result.tests, '[not] to have an item satisfying', { + title: title, + currentRetry: expect.it('to be positive') + }); + }) + .addAssertion( + ' [not] to have retried test ', + function(expect, result, title, count) { + expect(result.tests, '[not] to have an item satisfying', { + title: title, + currentRetry: count + }); + } + ) + .addAssertion(' [not] to contain output ', function( + expect, + result, + output + ) { + expect(result.output, '[not] to satisfy', output); + }) + .addAssertion( + ' to have [exit] code ', + function(expect, result, code) { + expect(result.code, 'to be', code); + } + ); +}; diff --git a/test/browser-specific/esm.spec.js b/test/browser-specific/esm.spec.js index d7460f8090..974699d72f 100644 --- a/test/browser-specific/esm.spec.js +++ b/test/browser-specific/esm.spec.js @@ -1,5 +1,5 @@ 'use strict'; -it('should register a global if it did not fail', function () { - expect(window.MOCHA_IS_OK).to.be.ok(); +it('should register a global if it did not fail', function() { + expect(window.MOCHA_IS_OK, 'to be ok'); }); diff --git a/test/browser-specific/setup.js b/test/browser-specific/setup.js new file mode 100644 index 0000000000..1e0dd7bd4e --- /dev/null +++ b/test/browser-specific/setup.js @@ -0,0 +1,2 @@ +/* eslint strict:off */ +window.expect = window.weknowhow.expect; diff --git a/test/browser/README.md b/test/browser/README.md deleted file mode 100644 index 15e4178b3e..0000000000 --- a/test/browser/README.md +++ /dev/null @@ -1,3 +0,0 @@ -These files need to be run manually by loading the `.html` file(s) in a browser. - -It would be awesome if we could automate that! diff --git a/test/browser/array.spec.js b/test/browser/array.spec.js deleted file mode 100644 index b831f61717..0000000000 --- a/test/browser/array.spec.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -describe('Array', function () { - describe('#push()', function () { - it('should append a value', function () { - var arr = []; - arr.push('foo'); - arr.push('bar'); - arr.push('baz'); - assert(arr[0] === 'foo'); // to test indentation - assert(arr[1] === 'bar'); - assert(arr[2] === 'baz'); - }); - - it('should return the length', function () { - var arr = []; - assert(arr.push('foo') === 1); - assert(arr.push('bar') === 2); - assert(arr.push('baz') === 3); - }); - }); -}); - -describe('Array', function () { - describe('#pop()', function () { - it('should remove and return the last value with expected error', function () { - var arr = [1, 2, 3]; - assert(arr.pop() === 3); - assert(arr.pop() === 2); - assert(arr.pop() === -1); - }); - - it('should adjust .length', function () { - var arr = [1, 2, 3]; - arr.pop(); - assert(arr.length === 2); - }); - }); -}); diff --git a/test/browser/grep.html b/test/browser/grep.html deleted file mode 100644 index 44bff517df..0000000000 --- a/test/browser/grep.html +++ /dev/null @@ -1,51 +0,0 @@ - - - Mocha - - - - - - - - - -
      - - - diff --git a/test/browser/grep.spec.js b/test/browser/grep.spec.js deleted file mode 100644 index 6c5a83aeb5..0000000000 --- a/test/browser/grep.spec.js +++ /dev/null @@ -1,110 +0,0 @@ -'use strict'; - -// numbers -describe('21', function () { - it('1', function () { - assert(true); - }); - it('2', function () { - assert(true); - }); -}); -// symbols -describe('@Array', function () { - it('.pop()', function () { - assert(true); - }); - it('.push()', function () { - assert(true); - }); - it('.length', function () { - assert(true); - }); -}); - -describe('@Function', function () { - it('.call()', function () { - assert(true); - }); - it('.apply()', function () { - assert(true); - }); - it('.length', function () { - assert(true); - }); - it('.name', function () { - assert(true); - }); - it('.prototype', function () { - assert(true); - }); -}); - -// url with hashtags -describe('#Services', function () { - describe('#http', function () { - it('.createClient()', function () { - assert(true); - }); - it('.Server()', function () { - assert(true); - }); - }); - describe('#crypto', function () { - it('.randomBytes()', function () { - assert(true); - }); - it('.Hmac()', function () { - assert(true); - }); - }); -}); - -// Uppercase -describe('CONSTANTS', function () { - it('.STATUS_CODES', function () { - assert(true); - }); -}); - -// Dates -describe('Date:', function () { - it('01/02/2015', function () { - assert(true); - }); - it('01/03/2015', function () { - assert(true); - }); - it('01/06/2015', function () { - assert(true); - }); -}); - -// etc.. -describe('booking/summary', function () { - it('should be run last', function () { - assert(true); - }); -}); - -describe('component/booking/summary', function () { - it('should be run second', function () { - assert(true); - }); -}); - -describe('component/booking/intro', function () { - it('should be run first', function () { - assert(true); - }); -}); - -describe('contains numbers', function () { - it('should run if the number 92 matching', function () { - assert(true); - }); - - it('should run if the number 8 matching', function () { - assert(true); - }); -}); diff --git a/test/browser/index.html b/test/browser/index.html deleted file mode 100644 index 26dc8722a2..0000000000 --- a/test/browser/index.html +++ /dev/null @@ -1,33 +0,0 @@ - - - Mocha - - - - - - - - - - - - - -
      - - diff --git a/test/browser/large.html b/test/browser/large.html deleted file mode 100644 index 14be6e40c6..0000000000 --- a/test/browser/large.html +++ /dev/null @@ -1,24 +0,0 @@ - - - Mocha - - - - - - - - - - -
      - - diff --git a/test/browser/large.spec.js b/test/browser/large.spec.js deleted file mode 100644 index 7dfa62f2a2..0000000000 --- a/test/browser/large.spec.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -var n = 30; -while (n--) { - describe('Array ' + n, function () { - var arr; - - beforeEach(function () { - arr = [1, 2, 3]; - }); - - describe('#indexOf()', function () { - it('should return -1 when the value is not present', function () { - assert(arr.indexOf(5) === -1); - }); - - it('should return the correct index when the value is present', function (done) { - assert(arr.indexOf(1) === 0); - assert(arr.indexOf(2) === 1); - done(); - }); - }); - }); -} - -describe('something', function () { - it('should provide a useful error', function (done) { - setTimeout(function () { - throw new Error('boom'); - }, 1); - }); - - it('should provide an even better error on phantomjs', function (done) { - setTimeout(function () { - var AssertionError = function (message, actual, expected) { - this.message = message; - this.actual = actual; - this.expected = expected; - this.showDiff = true; - }; - AssertionError.prototype = Object.create(Error.prototype); - AssertionError.prototype.name = 'AssertionError'; - AssertionError.prototype.constructor = AssertionError; - - mocha.throwError(new AssertionError('kabooom', 'text with a typo', 'text without a typo')); - done(); - }, 1); - }); -}); diff --git a/test/browser/multiple-done.spec.js b/test/browser/multiple-done.spec.js deleted file mode 100644 index ddb536735e..0000000000 --- a/test/browser/multiple-done.spec.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -describe('Multiple Done calls', function () { - it('should report an error if done was called more than once', function (done) { - done(); - done(); - }); - - it('should report an error if an exception happened async after done was called', function (done) { - done(); - setTimeout(done, 50); - }); - - it('should report an error if an exception happened after done was called', function (done) { - done(); - throw new Error('thrown error'); - }); -}); diff --git a/test/browser/opts.html b/test/browser/opts.html deleted file mode 100644 index b646e8610b..0000000000 --- a/test/browser/opts.html +++ /dev/null @@ -1,30 +0,0 @@ - - - Mocha - - - - - - - - - - - -
      - - diff --git a/test/browser/opts.spec.js b/test/browser/opts.spec.js deleted file mode 100644 index 7b93f22615..0000000000 --- a/test/browser/opts.spec.js +++ /dev/null @@ -1,7 +0,0 @@ -'use strict'; - -describe('Options', function () { - it('should set timeout value', function () { - assert(this.test._timeout === 1500); - }); -}); diff --git a/test/browser/stack-trace.html b/test/browser/stack-trace.html deleted file mode 100644 index b490bedfa5..0000000000 --- a/test/browser/stack-trace.html +++ /dev/null @@ -1,24 +0,0 @@ - - - Mocha - - - - - - - - - - -
      - - diff --git a/test/browser/stack-trace.spec.js b/test/browser/stack-trace.spec.js deleted file mode 100644 index a4801bf32f..0000000000 --- a/test/browser/stack-trace.spec.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; -describe('Stack trace', function () { - it('should prettify the stack-trace', function () { - var err = new Error(); - // We do this fake stack-trace because we under development, - // and our root isn't `node_modules`, `bower` or `components` - err.stack = [ - 'Error: failed', - 'at assert (stack-trace.html:11:30)', - 'at Context. (stack-trace.js:5:5)', - 'at callFn (http://localhost:63342/node_modules/mocha.js:4546:21)', - 'at Test.require.register.Runnable.run (http://localhost:63342/node_modules/mocha.js:4539:7)', - 'at Runner.require.register.Runner.runTest (http://localhost:63342/node_modules/mocha.js:4958:10)', - 'at http://localhost:63342/bower_components/mocha.js:5041:12', - 'at next (http://localhost:63342/bower_components/mocha.js:4883:14)', - 'at http://localhost:63342/bower_components/mocha.js:4893:7', - 'at next (http://localhost:63342/bower_components/mocha.js:4828:23)', - 'at http://localhost:63342/bower_components/mocha.js:4860:5' - ].join('\n'); - assert(false, err); - }); -}); diff --git a/test/browser/ui.html b/test/browser/ui.html deleted file mode 100644 index 0ad9301e0d..0000000000 --- a/test/browser/ui.html +++ /dev/null @@ -1,46 +0,0 @@ - - - Mocha - - - - - - - - - -
      - - - diff --git a/test/browser/ui.spec.js b/test/browser/ui.spec.js deleted file mode 100644 index 9b2addc92a..0000000000 --- a/test/browser/ui.spec.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -// test titles containing regex-conflicting characters - -// leading $ -describe('$.jQuery', function () { - // parens - describe('.on()', function () { - it('should set an event', function () { - assert(true); - }); - }); - - describe('.off()', function () { - it('should remove an event', function () { - - }); - }); -}); - -// another generic describe block to verify it is absent -// when grepping on $.jQuery -describe('@Array', function () { - it('.pop()', function () { - assert(true); - }); - it('.push()', function () { - assert(true); - }); - it('.length', function () { - assert(true); - }); -}); diff --git a/test/bundle/amd.spec.js b/test/bundle/amd.spec.js index e42d3dab0b..bc6e93aa4e 100644 --- a/test/bundle/amd.spec.js +++ b/test/bundle/amd.spec.js @@ -3,12 +3,14 @@ var path = require('path'); var fs = require('fs'); -it('should build a non-broken bundle for AMD', function (done) { +it('should build a non-broken bundle for AMD', function(done) { var bundle = path.join(process.cwd(), 'mocha.js'); - fs.readFile(bundle, 'utf8', function (err, content) { - if (err) { return done(err); } + fs.readFile(bundle, 'utf8', function(err, content) { + if (err) { + return done(err); + } - expect(content).not.to.match(/define.amd/); + expect(content, 'not to match', /define.amd/); done(); }); }); diff --git a/test/compiler-fixtures/foo.fixture.js b/test/compiler-fixtures/foo.fixture.js index 22c0eec948..01338701a7 100644 --- a/test/compiler-fixtures/foo.fixture.js +++ b/test/compiler-fixtures/foo.fixture.js @@ -6,6 +6,6 @@ require.extensions['.foo'] = function (module, filename) { var content; content = fs.readFileSync(filename, 'utf8'); var test = 'describe("custom compiler",function(){ it("should work",function() { ' + - 'expect(' + content + ').to.eql(1); }); });'; + 'expect(' + content + ', "to be", 1); }); });'; return module._compile(test, filename); }; diff --git a/test/compiler/test.coffee b/test/compiler/test.coffee index b8e309f515..5783da4f4a 100644 --- a/test/compiler/test.coffee +++ b/test/compiler/test.coffee @@ -3,4 +3,4 @@ obj = foo: 'bar' describe 'coffeescript', -> it 'should work', -> - expect(obj).to.eql foo: 'bar' + expect(obj, 'to equal', foo: 'bar') diff --git a/test/integration/compiler-globbing.spec.js b/test/integration/compiler-globbing.spec.js index ee0a7237a5..20ea050e4d 100644 --- a/test/integration/compiler-globbing.spec.js +++ b/test/integration/compiler-globbing.spec.js @@ -1,24 +1,36 @@ 'use strict'; -var expect = require('expect.js'); var exec = require('child_process').exec; var path = require('path'); -describe('globbing like --compilers', function () { - it('should find a file of each type', function (done) { - exec('"' + process.execPath + '" "' + path.join('bin', 'mocha') + '" -R json --require coffee-script/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', { cwd: path.join(__dirname, '..', '..') }, function (error, stdout) { - if (error && !stdout) { return done(error); } - var results = JSON.parse(stdout); - expect(results).to.have.property('tests'); - var titles = []; - for (var index = 0; index < results.tests.length; index += 1) { - expect(results.tests[index]).to.have.property('fullTitle'); - titles.push(results.tests[index].fullTitle); +describe('globbing like --compilers', function() { + it('should find a file of each type', function(done) { + exec( + '"' + + process.execPath + + '" "' + + path.join('bin', 'mocha') + + '" -R json --require coffee-script/register --require test/compiler-fixtures/foo.fixture "test/compiler/*.@(coffee|foo)"', + {cwd: path.join(__dirname, '..', '..')}, + function(error, stdout) { + if (error && !stdout) { + return done(error); + } + var results = JSON.parse(stdout); + expect(results, 'to have property', 'tests'); + var titles = []; + for (var index = 0; index < results.tests.length; index += 1) { + expect(results.tests[index], 'to have property', 'fullTitle'); + titles.push(results.tests[index].fullTitle); + } + expect( + titles, + 'to contain', + 'coffeescript should work', + 'custom compiler should work' + ).and('to have length', 2); + done(); } - expect(titles).to.contain('coffeescript should work'); - expect(titles).to.contain('custom compiler should work'); - expect(titles).to.have.length(2); - done(); - }); + ); }); }); diff --git a/test/integration/diffs.spec.js b/test/integration/diffs.spec.js index 88b6f69e0d..44b30de1ae 100644 --- a/test/integration/diffs.spec.js +++ b/test/integration/diffs.spec.js @@ -1,28 +1,85 @@ 'use strict'; -var assert = require('assert'); var helpers = require('./helpers'); var run = helpers.runMocha; var fs = require('fs'); -var getDiffs = helpers.getDiffs; +var path = require('path'); -function getExpectedOutput () { - var output = fs.readFileSync('test/integration/fixtures/diffs/output', 'UTF8').replace(/\r\n/g, '\n'); +/** + * Returns an array of diffs corresponding to exceptions thrown from specs, + * given the plaintext output (-C) of a mocha run. + * + * @param {string} output + * returns {string[]} + */ +function getDiffs(output) { + var diffs, i, inDiff, inStackTrace; - // Diffs are delimited in file by "// DIFF" - return output.split(/\s*\/\/ DIFF/).slice(1).map(function (diff) { - return diff.split('\n').filter(Boolean).join('\n'); + diffs = []; + output.split('\n').forEach(function(line) { + if (line.match(/^\s{2}\d+\)/)) { + // New spec, e.g. "1) spec title" + diffs.push([]); + i = diffs.length - 1; + inStackTrace = false; + inDiff = false; + } else if (!diffs.length || inStackTrace) { + // Haven't encountered a spec yet + // or we're in the middle of a stack trace + } else if (line.indexOf('+ expected - actual') !== -1) { + inDiff = true; + } else if (line.match(/at Context/)) { + // At the start of a stack trace + inStackTrace = true; + inDiff = false; + } else if (inDiff) { + diffs[i].push(line); + } + }); + + return diffs.map(function(diff) { + return diff + .filter(function(line) { + return line.trim().length; + }) + .join('\n'); }); } -describe('diffs', function () { +/** + * Returns content of test/integration/fixtures/diffs/output, + * post-processed for consumption by tests. + * @returns {string[]} Array of diff lines + */ +function getExpectedOutput() { + var output = fs + .readFileSync(path.join(__dirname, 'fixtures', 'diffs', 'output'), 'UTF8') + .replace(/\r\n/g, '\n'); + + // Diffs are delimited in file by "// DIFF" + return output + .split(/\s*\/\/ DIFF/) + .slice(1) + .map(function(diff) { + return diff + .split('\n') + .filter(Boolean) + .join('\n'); + }); +} + +describe('diffs', function() { var diffs, expected; - before(function (done) { - run('diffs/diffs.fixture.js', ['-C'], function (err, res) { + before(function(done) { + run('diffs/diffs.fixture.js', ['-C'], function(err, res) { + if (err) { + done(err); + return; + } expected = getExpectedOutput(); diffs = getDiffs(res.output.replace(/\r\n/g, '\n')); - done(err); + done(); }); }); @@ -38,9 +95,9 @@ describe('diffs', function () { 'should work with objects', 'should show value diffs and not be affected by commas', 'should display diff by data and not like an objects' - ].forEach(function (title, i) { - it(title, function () { - assert.equal(diffs[i], expected[i]); + ].forEach(function(title, i) { + it(title, function() { + expect(diffs[i], 'to be', expected[i]); }); }); }); diff --git a/test/integration/fixtures/diffs/diffs.fixture.js b/test/integration/fixtures/diffs/diffs.fixture.js index c47df5b74e..e9b01d351e 100644 --- a/test/integration/fixtures/diffs/diffs.fixture.js +++ b/test/integration/fixtures/diffs/diffs.fixture.js @@ -1,5 +1,7 @@ 'use strict'; +// assert is used because unexpected doesn't use mocha's diffs. +var assert = require('assert'); var fs = require('fs'); var cssin = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.in', 'ascii'); var cssout = fs.readFileSync('test/integration/fixtures/diffs/diffs.css.out', 'ascii'); @@ -10,19 +12,19 @@ describe('diffs', function () { it('should display a diff for small strings', function () { actual = 'foo rar baz'; expected = 'foo bar baz'; - expect(actual).to.eql(expected); + assert.equal(actual, expected); }); it('should display a diff of canonicalized objects', function () { actual = { name: 'travis j', age: 23 }; expected = { age: 23, name: 'travis' }; - expect(actual).to.eql(expected); + assert.deepEqual(actual, expected); }); it('should display a diff for medium strings', function () { actual = 'foo bar baz\nfoo rar baz\nfoo bar raz'; expected = 'foo bar baz\nfoo bar baz\nfoo bar baz'; - expect(actual).to.eql(expected); + assert.equal(actual, expected); }); it('should display a diff for entire object dumps', function () { @@ -42,13 +44,13 @@ describe('diffs', function () { country: 'us' } }; - expect(actual).to.eql(expected); + assert.deepEqual(actual, expected); }); it('should display a diff for multi-line strings', function () { actual = 'one two three\nfour zzzz six\nseven eight nine'; expected = 'one two three\nfour five six\nseven eight nine'; - expect(actual).to.eql(expected); + assert.equal(actual, expected); }); it('should display a diff for entire object dumps', function () { @@ -68,17 +70,17 @@ describe('diffs', function () { country: 'us' } }; - expect(actual).to.eql(expected); + assert.deepEqual(actual, expected); }); it('should display a full-comparison with escaped special characters', function () { actual = 'one\ttab\ntwo\t\t\ttabs'; expected = 'one\ttab\ntwo\t\ttabs'; - expect(actual).to.eql(expected); + assert.equal(actual, expected); }); it('should display a word diff for large strings', function () { - expect(cssin).to.eql(cssout); + assert.equal(cssin, cssout); }); it('should work with objects', function () { @@ -96,18 +98,18 @@ describe('diffs', function () { age: 2 }; - expect(actual).to.eql(expected); + assert.deepEqual(actual, expected); }); it('should show value diffs and not be affected by commas', function () { actual = { a: 123 }; expected = { a: 123, b: 456 }; - expect(actual).to.eql(expected); + assert.deepEqual(actual, expected); }); it('should display diff by data and not like an objects', function () { - actual = new Buffer([0x01]); - expected = new Buffer([0x02]); - expect(actual).to.eql(expected); + actual = Buffer.from([0x01]); + expected = Buffer.from([0x02]); + assert.deepEqual(actual, expected); }); }); diff --git a/test/integration/fixtures/diffs/output b/test/integration/fixtures/diffs/output index bf56a96397..19a04f6777 100644 --- a/test/integration/fixtures/diffs/output +++ b/test/integration/fixtures/diffs/output @@ -58,7 +58,6 @@ - color: white; + color: #fff; } - a { - color: blue + color: blue; diff --git a/test/integration/fixtures/glob/glob.spec.js b/test/integration/fixtures/glob/glob.spec.js index 235c2f8417..c6c3d26a69 100644 --- a/test/integration/fixtures/glob/glob.spec.js +++ b/test/integration/fixtures/glob/glob.spec.js @@ -1,7 +1,7 @@ 'use strict'; -describe('globbing test', function () { - it('should find this test', function () { +describe('globbing test', function() { + it('should find this test', function() { // see test/integration/glob.spec.js for details }); }); diff --git a/test/integration/fixtures/glob/nested/glob.spec.js b/test/integration/fixtures/glob/nested/glob.spec.js index 235c2f8417..c6c3d26a69 100644 --- a/test/integration/fixtures/glob/nested/glob.spec.js +++ b/test/integration/fixtures/glob/nested/glob.spec.js @@ -1,7 +1,7 @@ 'use strict'; -describe('globbing test', function () { - it('should find this test', function () { +describe('globbing test', function() { + it('should find this test', function() { // see test/integration/glob.spec.js for details }); }); diff --git a/test/integration/fixtures/hooks/afterEach-hook-conditionally-fail.fixture.js b/test/integration/fixtures/hooks/afterEach-hook-conditionally-fail.fixture.js new file mode 100644 index 0000000000..c127886efd --- /dev/null +++ b/test/integration/fixtures/hooks/afterEach-hook-conditionally-fail.fixture.js @@ -0,0 +1,21 @@ +'use strict'; + +describe('something', function() { + it('should one', function() { + this.ok = true; + }); + + it('should two', function() { + this.ok = false; + }); + + it('should three', function() { + this.ok = true; + }); + + afterEach(function() { + if (!this.ok) { + this.test.error(new Error('something went wrong')); + } + }); +}); diff --git a/test/integration/fixtures/multiple-done.fixture.js b/test/integration/fixtures/multiple-done.fixture.js index f1b471c678..900192b0b9 100644 --- a/test/integration/fixtures/multiple-done.fixture.js +++ b/test/integration/fixtures/multiple-done.fixture.js @@ -1,16 +1,13 @@ 'use strict'; -// The suite below should result in an additional error, but does -// not. Uncomment once this bug is resolved. - -// describe('suite', function() { -// beforeEach(function(done) { -// done(); -// done(); -// }); +describe('suite', function() { + beforeEach(function(done) { + done(); + done(); + }); -// it('test', function() {}); -// }); + it('test', function() {}); +}); it('should fail in a test-case', function (done) { process.nextTick(function () { diff --git a/test/integration/fixtures/options/bail-with-before.fixture.js b/test/integration/fixtures/options/bail-with-before.fixture.js new file mode 100644 index 0000000000..dfc0f8d939 --- /dev/null +++ b/test/integration/fixtures/options/bail-with-before.fixture.js @@ -0,0 +1,11 @@ +'use strict'; + +describe('suite1', function () { + before(function () { + throw new Error('this hook should be only displayed'); + }); + + it('should not display this error', function () { + throw new Error('this should not be displayed'); + }); +}); diff --git a/test/integration/fixtures/options/forbid-only/only-suite.js b/test/integration/fixtures/options/forbid-only/only-suite.js index ba15a5a2df..372cefbd9f 100644 --- a/test/integration/fixtures/options/forbid-only/only-suite.js +++ b/test/integration/fixtures/options/forbid-only/only-suite.js @@ -1,5 +1,5 @@ 'use strict'; -describe.only('forbid only - suite marked with only', function () { - it('test1', function () {}); +describe.only('forbid only - suite marked with only', function() { + it('test1', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-only/only.js b/test/integration/fixtures/options/forbid-only/only.js index c09e804126..1019808760 100644 --- a/test/integration/fixtures/options/forbid-only/only.js +++ b/test/integration/fixtures/options/forbid-only/only.js @@ -1,7 +1,7 @@ 'use strict'; -describe('forbid only - test marked with only', function () { - it('test1', function () {}); - it.only('test2', function () {}); - it('test3', function () {}); +describe('forbid only - test marked with only', function() { + it('test1', function() {}); + it.only('test2', function() {}); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-only/passed.js b/test/integration/fixtures/options/forbid-only/passed.js index 6c4d4ac1d4..afa8de7b53 100644 --- a/test/integration/fixtures/options/forbid-only/passed.js +++ b/test/integration/fixtures/options/forbid-only/passed.js @@ -1,7 +1,7 @@ 'use strict'; -describe('forbid only - `.only` is not used', function () { - it('test1', function () {}); - it('test2', function () {}); - it('test3', function () {}); +describe('forbid only - `.only` is not used', function() { + it('test1', function() {}); + it('test2', function() {}); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-pending/before-this.skip.js b/test/integration/fixtures/options/forbid-pending/before-this.skip.js index 7c329dff4a..2147afb77e 100644 --- a/test/integration/fixtures/options/forbid-pending/before-this.skip.js +++ b/test/integration/fixtures/options/forbid-pending/before-this.skip.js @@ -1,6 +1,8 @@ 'use strict'; -describe('forbid pending - before calls `skip()`', function () { - it('test', function () {}); - before(function () { this.skip(); }); +describe('forbid pending - before calls `skip()`', function() { + it('test', function() {}); + before(function() { + this.skip(); + }); }); diff --git a/test/integration/fixtures/options/forbid-pending/beforeEach-this.skip.js b/test/integration/fixtures/options/forbid-pending/beforeEach-this.skip.js index 58fa1fe8a3..d9051f8b17 100644 --- a/test/integration/fixtures/options/forbid-pending/beforeEach-this.skip.js +++ b/test/integration/fixtures/options/forbid-pending/beforeEach-this.skip.js @@ -1,6 +1,8 @@ 'use strict'; -describe('forbid pending - beforeEach calls `skip()`', function () { - it('test', function () {}); - beforeEach(function () { this.skip(); }); +describe('forbid pending - beforeEach calls `skip()`', function() { + it('test', function() {}); + beforeEach(function() { + this.skip(); + }); }); diff --git a/test/integration/fixtures/options/forbid-pending/passed.js b/test/integration/fixtures/options/forbid-pending/passed.js index cd12668f4d..27291cce17 100644 --- a/test/integration/fixtures/options/forbid-pending/passed.js +++ b/test/integration/fixtures/options/forbid-pending/passed.js @@ -1,7 +1,7 @@ 'use strict'; -describe('forbid pending - all test pass', function () { - it('test1', function () {}); - it('test2', function () {}); - it('test3', function () {}); +describe('forbid pending - all test pass', function() { + it('test1', function() {}); + it('test2', function() {}); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-pending/pending.js b/test/integration/fixtures/options/forbid-pending/pending.js index 96abd0bf47..81f6544831 100644 --- a/test/integration/fixtures/options/forbid-pending/pending.js +++ b/test/integration/fixtures/options/forbid-pending/pending.js @@ -1,7 +1,7 @@ 'use strict'; -describe('forbid pending - test without function', function () { - it('test1', function () {}); +describe('forbid pending - test without function', function() { + it('test1', function() {}); it('test2'); - it('test3', function () {}); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-pending/skip-suite.js b/test/integration/fixtures/options/forbid-pending/skip-suite.js index fe0a4578f0..628dc3a853 100644 --- a/test/integration/fixtures/options/forbid-pending/skip-suite.js +++ b/test/integration/fixtures/options/forbid-pending/skip-suite.js @@ -1,5 +1,5 @@ 'use strict'; -describe.skip('forbid pending - suite marked with skip', function () { - it('test1', function () {}); +describe.skip('forbid pending - suite marked with skip', function() { + it('test1', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-pending/skip.js b/test/integration/fixtures/options/forbid-pending/skip.js index c6fd31d303..8b4fcd91c4 100644 --- a/test/integration/fixtures/options/forbid-pending/skip.js +++ b/test/integration/fixtures/options/forbid-pending/skip.js @@ -1,7 +1,7 @@ 'use strict'; -describe('forbid pending - test marked with skip', function () { - it('test1', function () {}); - it.skip('test2', function () {}); - it('test3', function () {}); +describe('forbid pending - test marked with skip', function() { + it('test1', function() {}); + it.skip('test2', function() {}); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/options/forbid-pending/this.skip.js b/test/integration/fixtures/options/forbid-pending/this.skip.js index a920813250..2f76a6fdad 100644 --- a/test/integration/fixtures/options/forbid-pending/this.skip.js +++ b/test/integration/fixtures/options/forbid-pending/this.skip.js @@ -1,7 +1,9 @@ 'use strict'; -describe('forbid pending - test calls `skip()`', function () { - it('test1', function () {}); - it('test2', function () { this.skip(); }); - it('test3', function () {}); +describe('forbid pending - test calls `skip()`', function() { + it('test1', function() {}); + it('test2', function() { + this.skip(); + }); + it('test3', function() {}); }); diff --git a/test/integration/fixtures/regression/1794/simple-ui.js b/test/integration/fixtures/regression/1794/simple-ui.js index 5cfde0465f..b27c623003 100644 --- a/test/integration/fixtures/regression/1794/simple-ui.js +++ b/test/integration/fixtures/regression/1794/simple-ui.js @@ -7,8 +7,8 @@ var Test = require(path + 'test'); /** * A simple UI that only exposes a single function: test */ -module.exports = Mocha.interfaces['simple-ui'] = function (suite) { - suite.on('pre-require', function (context, file, mocha) { +module.exports = Mocha.interfaces['simple-ui'] = function(suite) { + suite.on('pre-require', function(context, file, mocha) { var common = require(path + 'interfaces/common')([suite], context); context.run = mocha.options.delay && common.runWithSuite(suite); @@ -17,7 +17,7 @@ module.exports = Mocha.interfaces['simple-ui'] = function (suite) { * Describes a specification or test-case with the given `title` * and callback `fn` acting as a thunk. */ - context.test = function (title, fn) { + context.test = function(title, fn) { var test = new Test(title, fn); test.file = file; suite.addTest(test); diff --git a/test/integration/fixtures/regression/issue-1417.fixture.js b/test/integration/fixtures/regression/issue-1417.fixture.js index 13ce053784..2f9b6074af 100644 --- a/test/integration/fixtures/regression/issue-1417.fixture.js +++ b/test/integration/fixtures/regression/issue-1417.fixture.js @@ -10,7 +10,7 @@ it('fails exactly once when a global error is thrown synchronously and done erro done(new Error('test error')); }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition - throw new Error('sync error'); + throw new Error('sync error a'); }); it('fails exactly once when a global error is thrown synchronously and done completes', function (done) { @@ -18,5 +18,5 @@ it('fails exactly once when a global error is thrown synchronously and done comp done(); }, 1); // Not 0 - it will 'succeed', but won't test the breaking condition - throw new Error('sync error'); + throw new Error('sync error b'); }); diff --git a/test/integration/fixtures/simple-reporter.js b/test/integration/fixtures/simple-reporter.js index d172b2ae66..d066a84304 100644 --- a/test/integration/fixtures/simple-reporter.js +++ b/test/integration/fixtures/simple-reporter.js @@ -3,26 +3,26 @@ var baseReporter = require('../../../lib/reporters/base'); module.exports = simplereporter; -function simplereporter (runner) { +function simplereporter(runner) { baseReporter.call(this, runner); - runner.on('suite', function (suite) { - console.log('on(\'suite\') called'); + runner.on('suite', function(suite) { + console.log("on('suite') called"); }); - runner.on('fail', function (test, err) { - console.log('on(\'fail\') called'); + runner.on('fail', function(test, err) { + console.log("on('fail') called"); }); - runner.on('pass', function (test) { - console.log('on(\'pass\') called'); + runner.on('pass', function(test) { + console.log("on('pass') called"); }); - runner.on('test end', function (test, err) { - console.log('on(\'test end\') called'); + runner.on('test end', function(test, err) { + console.log("on('test end') called"); }); - runner.on('end', function () { - console.log('on(\'end\') called'); + runner.on('end', function() { + console.log("on('end') called"); }); } diff --git a/test/integration/glob.spec.js b/test/integration/glob.spec.js index 4d1c5a52f4..1867cda1f7 100644 --- a/test/integration/glob.spec.js +++ b/test/integration/glob.spec.js @@ -1,101 +1,200 @@ 'use strict'; -var expect = require('expect.js'); var exec = require('child_process').exec; var path = require('path'); var node = '"' + process.execPath + '"'; -describe('globbing', function () { - describe('by the shell', function () { - it('should find the first level test', function (done) { - testGlob.shouldSucceed('./*.js', function (results) { - expect(results.stdout).to.contain('["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'); - }, done); +describe('globbing', function() { + describe('by the shell', function() { + it('should find the first level test', function(done) { + testGlob.shouldSucceed( + './*.js', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,' + ); + }, + done + ); }); - it('should not find a non-matching pattern', function (done) { - testGlob.shouldFail('./*-none.js', function (results) { - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should not find a non-matching pattern', function(done) { + testGlob.shouldFail( + './*-none.js', + function(results) { + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); - it('should handle both matching and non-matching patterns in the same command', function (done) { - testGlob.shouldSucceed('./*.js ./*-none.js', function (results) { - expect(results.stdout).to.contain('["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'); - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should handle both matching and non-matching patterns in the same command', function(done) { + testGlob.shouldSucceed( + './*.js ./*-none.js', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,' + ); + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); }); - describe('by Mocha', function () { - it('should find the first level test', function (done) { - testGlob.shouldSucceed('"./*.js"', function (results) { - expect(results.stdout).to.contain('["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'); - }, done); + describe('by Mocha', function() { + it('should find the first level test', function(done) { + testGlob.shouldSucceed( + '"./*.js"', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,' + ); + }, + done + ); }); - it('should not find a non-matching pattern', function (done) { - testGlob.shouldFail('"./*-none.js"', function (results) { - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should not find a non-matching pattern', function(done) { + testGlob.shouldFail( + '"./*-none.js"', + function(results) { + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); - it('should handle both matching and non-matching patterns in the same command', function (done) { - testGlob.shouldSucceed('"./*.js" "./*-none.js"', function (results) { - expect(results.stdout).to.contain('["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,'); - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should handle both matching and non-matching patterns in the same command', function(done) { + testGlob.shouldSucceed( + '"./*.js" "./*-none.js"', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":1,"tests":1,"passes":1,"pending":0,"failures":0,' + ); + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); - describe('double-starred', function () { - it('should find the tests on multiple levels', function (done) { - testGlob.shouldSucceed('"./**/*.js"', function (results) { - expect(results.stdout).to.contain('["end",{"suites":2,"tests":2,"passes":2,"pending":0,"failures":0,'); - }, done); + describe('double-starred', function() { + it('should find the tests on multiple levels', function(done) { + testGlob.shouldSucceed( + '"./**/*.js"', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":2,"tests":2,"passes":2,"pending":0,"failures":0,' + ); + }, + done + ); }); - it('should not find a non-matching pattern', function (done) { - testGlob.shouldFail('"./**/*-none.js"', function (results) { - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should not find a non-matching pattern', function(done) { + testGlob.shouldFail( + '"./**/*-none.js"', + function(results) { + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); - it('should handle both matching and non-matching patterns in the same command', function (done) { - testGlob.shouldSucceed('"./**/*.js" "./**/*-none.js"', function (results) { - expect(results.stdout).to.contain('["end",{"suites":2,"tests":2,"passes":2,"pending":0,"failures":0,'); - expect(results.stderr).to.contain('Could not find any test files matching pattern'); - }, done); + it('should handle both matching and non-matching patterns in the same command', function(done) { + testGlob.shouldSucceed( + '"./**/*.js" "./**/*-none.js"', + function(results) { + expect( + results.stdout, + 'to contain', + '["end",{"suites":2,"tests":2,"passes":2,"pending":0,"failures":0,' + ); + expect( + results.stderr, + 'to contain', + 'Could not find any test files matching pattern' + ); + }, + done + ); }); }); }); }); var testGlob = { - shouldSucceed: execMochaWith(function shouldNotError (error) { if (error) { throw error; } }), + shouldSucceed: execMochaWith(function shouldNotError(error) { + if (error) { + throw error; + } + }), - shouldFail: execMochaWith(function shouldFailWithStderr (error, stderr) { expect(error && error.message).to.contain(stderr); }) + shouldFail: execMochaWith(function shouldFailWithStderr(error, stderr) { + expect(error && error.message, 'to contain', stderr); + }) }; -var isFlakeyNode = (function () { +var isFlakeyNode = (function() { var version = process.versions.node.split('.'); - return version[0] === '0' && version[1] === '10' && process.platform === 'win32'; -}()); + return ( + version[0] === '0' && version[1] === '10' && process.platform === 'win32' + ); +})(); -function execMochaWith (validate) { - return function execMocha (glob, assertOn, done) { - exec(node + ' "' + path.join('..', '..', '..', '..', 'bin', 'mocha') + '" -R json-stream ' + glob, { cwd: path.join(__dirname, 'fixtures', 'glob') }, function (error, stdout, stderr) { - try { - validate(error, stderr); - if (isFlakeyNode && error && (stderr === '')) { - execMocha(glob, assertOn, done); - } else { - assertOn({ stdout: stdout, stderr: stderr }); - done(); +function execMochaWith(validate) { + return function execMocha(glob, assertOn, done) { + exec( + node + + ' "' + + path.join('..', '..', '..', '..', 'bin', 'mocha') + + '" -R json-stream ' + + glob, + {cwd: path.join(__dirname, 'fixtures', 'glob')}, + function(error, stdout, stderr) { + try { + validate(error, stderr); + if (isFlakeyNode && error && stderr === '') { + execMocha(glob, assertOn, done); + } else { + assertOn({stdout: stdout, stderr: stderr}); + done(); + } + } catch (assertion) { + done(assertion); } - } catch (assertion) { - done(assertion); } - }); + ); }; } diff --git a/test/integration/helpers.js b/test/integration/helpers.js index 09ca5deac9..ea8182b235 100644 --- a/test/integration/helpers.js +++ b/test/integration/helpers.js @@ -25,13 +25,13 @@ module.exports = { * @param {Array} args - Extra args to mocha executable * @param {Function} done - Callback */ - runMocha: function (fixturePath, args, done) { + runMocha: function(fixturePath, args, done) { var path; path = resolveFixturePath(fixturePath); args = args || []; - invokeMocha(args.concat(['-C', path]), function (err, res) { + invokeMocha(args.concat(['-C', path]), function(err, res) { if (err) { return done(err); } @@ -48,13 +48,16 @@ module.exports = { * @param {string[]} args - Array of args * @param {Function} fn - Callback */ - runMochaJSON: function (fixturePath, args, fn) { + runMochaJSON: function(fixturePath, args, fn) { var path; path = resolveFixturePath(fixturePath); args = args || []; - return invokeMocha(args.concat(['--reporter', 'json', path]), function (err, res) { + return invokeMocha(args.concat(['--reporter', 'json', path]), function( + err, + res + ) { if (err) return fn(err); try { @@ -67,43 +70,19 @@ module.exports = { fn(null, result); }); }, + runMochaJSONRaw: function(fixturePath, args, fn) { + var path; - /** - * Returns an array of diffs corresponding to exceptions thrown from specs, - * given the plaintext output (-C) of a mocha run. - * - * @param {string} output - * returns {string[]} - */ - getDiffs: function (output) { - var diffs, i, inDiff, inStackTrace; - - diffs = []; - output.split('\n').forEach(function (line) { - if (line.match(/^\s{2}\d+\)/)) { - // New spec, e.g. "1) spec title" - diffs.push([]); - i = diffs.length - 1; - inStackTrace = false; - inDiff = false; - } else if (!diffs.length || inStackTrace) { - // Haven't encountered a spec yet - // or we're in the middle of a stack trace - - } else if (line.indexOf('+ expected - actual') !== -1) { - inDiff = true; - } else if (line.match(/at Context/)) { - // At the start of a stack trace - inStackTrace = true; - inDiff = false; - } else if (inDiff) { - diffs[i].push(line); - } - }); + path = resolveFixturePath(fixturePath); + args = args || []; - // Ignore empty lines before/after diff - return diffs.map(function (diff) { - return diff.slice(1, -3).join('\n'); + return invokeSubMocha(args.concat(['--reporter', 'json', path]), function( + err, + resRaw + ) { + if (err) return fn(err); + + fn(null, resRaw); }); }, @@ -137,14 +116,22 @@ module.exports = { resolveFixturePath: resolveFixturePath }; -function invokeMocha (args, fn, cwd) { - var output, mocha, listener; - - output = ''; +function invokeMocha(args, fn, cwd) { args = [path.join(__dirname, '..', '..', 'bin', 'mocha')].concat(args); - mocha = spawn(process.execPath, args, { cwd: cwd }); - listener = function (data) { + return _spawnMochaWithListeners(args, fn, cwd); +} + +function invokeSubMocha(args, fn, cwd) { + args = [path.join(__dirname, '..', '..', 'bin', '_mocha')].concat(args); + + return _spawnMochaWithListeners(args, fn, cwd); +} + +function _spawnMochaWithListeners(args, fn, cwd) { + var output = ''; + var mocha = spawn(process.execPath, args, {cwd: cwd}); + var listener = function(data) { output += data; }; @@ -152,7 +139,7 @@ function invokeMocha (args, fn, cwd) { mocha.stderr.on('data', listener); mocha.on('error', fn); - mocha.on('close', function (code) { + mocha.on('close', function(code) { fn(null, { output: output.split('\n').join('\n'), code: code @@ -162,17 +149,17 @@ function invokeMocha (args, fn, cwd) { return mocha; } -function resolveFixturePath (fixture) { +function resolveFixturePath(fixture) { return path.join('./test/integration/fixtures', fixture); } -function getSummary (res) { - return ['passing', 'pending', 'failing'].reduce(function (summary, type) { +function getSummary(res) { + return ['passing', 'pending', 'failing'].reduce(function(summary, type) { var pattern, match; pattern = new RegExp(' (\\d+) ' + type + '\\s'); match = pattern.exec(res.output); - summary[type] = (match) ? parseInt(match, 10) : 0; + summary[type] = match ? parseInt(match, 10) : 0; return summary; }, res); diff --git a/test/integration/hook-err.spec.js b/test/integration/hook-err.spec.js index 10d0e97c4a..0602166318 100644 --- a/test/integration/hook-err.spec.js +++ b/test/integration/hook-err.spec.js @@ -5,193 +5,160 @@ var runMocha = require('./helpers').runMocha; var splitRegExp = require('./helpers').splitRegExp; var bang = require('../../lib/reporters/base').symbols.bang; -describe('hook error handling', function () { +describe('hook error handling', function() { var lines; - describe('before hook error', function () { + describe('before hook error', function() { before(run('hooks/before-hook-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['before', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['before', bang + 'test 3']); }); }); - describe('before hook error tip', function () { + describe('before hook error tip', function() { before(run('hooks/before-hook-error-tip.fixture.js', onlyErrorTitle())); - it('should verify results', function () { - assert.deepEqual( - lines, - ['1) spec 2', '"before all" hook:'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['1) spec 2', '"before all" hook:']); }); }); - describe('before each hook error', function () { + describe('before each hook error', function() { before(run('hooks/beforeEach-hook-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['before', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['before', bang + 'test 3']); }); }); - describe('after hook error', function () { + describe('after hook error', function() { before(run('hooks/after-hook-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['test 1', 'test 2', 'after', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['test 1', 'test 2', 'after', bang + 'test 3']); }); }); - describe('after each hook error', function () { + describe('after each hook error', function() { before(run('hooks/afterEach-hook-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['test 1', 'after', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['test 1', 'after', bang, 'test 3']); }); }); - describe('multiple hook errors', function () { + describe('multiple hook errors', function() { before(run('hooks/multiple-hook-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - [ - 'root before', - '1-1 before', - 'root before each', - '1 before each', - '1-1 before each', - bang + '1-1 after each', - '1 after each', - 'root after each', - '1-1 after', - bang + '1-2 before', - 'root before each', - '1 before each', - '1-2 before each', - '1-2 test 1', - '1-2 after each', - bang + '1 after each', - 'root after each', - '1-2 after', - '1 after', - '2-1 before', - 'root before each', - '2 before each', - bang + '2 after each', - bang + 'root after each', - '2-1 after', - '2 after', - 'root after' - ] - ); + it('should verify results', function() { + assert.deepEqual(lines, [ + 'root before', + '1-1 before', + 'root before each', + '1 before each', + '1-1 before each', + bang + '1-1 after each', + '1 after each', + 'root after each', + '1-1 after', + bang + '1-2 before', + 'root before each', + '1 before each', + '1-2 before each', + '1-2 test 1', + '1-2 after each', + bang, + '1 after each', + 'root after each', + '1-2 after', + '1 after', + '2-1 before', + 'root before each', + '2 before each', + bang + '2 after each', + bang + 'root after each', + '2-1 after', + '2 after', + 'root after' + ]); }); }); - describe('async - before hook error', function () { + describe('async - before hook error', function() { before(run('hooks/before-hook-async-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['before', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['before', bang + 'test 3']); }); }); - describe('async - before hook error tip', function () { - before(run('hooks/before-hook-async-error-tip.fixture.js', onlyErrorTitle())); - it('should verify results', function () { - assert.deepEqual( - lines, - ['1) spec 2', '"before all" hook:'] - ); + describe('async - before hook error tip', function() { + before( + run('hooks/before-hook-async-error-tip.fixture.js', onlyErrorTitle()) + ); + it('should verify results', function() { + assert.deepEqual(lines, ['1) spec 2', '"before all" hook:']); }); }); - describe('async - before each hook error', function () { + describe('async - before each hook error', function() { before(run('hooks/beforeEach-hook-async-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['before', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['before', bang + 'test 3']); }); }); - describe('async - after hook error', function () { + describe('async - after hook error', function() { before(run('hooks/after-hook-async-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['test 1', 'test 2', 'after', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['test 1', 'test 2', 'after', bang + 'test 3']); }); }); - describe('async - after each hook error', function () { + describe('async - after each hook error', function() { before(run('hooks/afterEach-hook-async-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - ['test 1', 'after', bang + 'test 3'] - ); + it('should verify results', function() { + assert.deepEqual(lines, ['test 1', 'after', bang + 'test 3']); }); }); - describe('async - multiple hook errors', function () { + describe('async - multiple hook errors', function() { before(run('hooks/multiple-hook-async-error.fixture.js')); - it('should verify results', function () { - assert.deepEqual( - lines, - [ - 'root before', - '1-1 before', - 'root before each', - '1 before each', - '1-1 before each', - bang + '1-1 after each', - '1 after each', - 'root after each', - '1-1 after', - bang + '1-2 before', - 'root before each', - '1 before each', - '1-2 before each', - '1-2 test 1', - '1-2 after each', - bang + '1 after each', - 'root after each', - '1-2 after', - '1 after', - '2-1 before', - 'root before each', - '2 before each', - bang + '2 after each', - bang + 'root after each', - '2-1 after', - '2 after', - 'root after' - ] - ); + it('should verify results', function() { + assert.deepEqual(lines, [ + 'root before', + '1-1 before', + 'root before each', + '1 before each', + '1-1 before each', + bang + '1-1 after each', + '1 after each', + 'root after each', + '1-1 after', + bang + '1-2 before', + 'root before each', + '1 before each', + '1-2 before each', + '1-2 test 1', + '1-2 after each', + bang + '1 after each', + 'root after each', + '1-2 after', + '1 after', + '2-1 before', + 'root before each', + '2 before each', + bang + '2 after each', + bang + 'root after each', + '2-1 after', + '2 after', + 'root after' + ]); }); }); - function run (fnPath, outputFilter) { - return function (done) { - runMocha(fnPath, ['--reporter', 'dot'], function (err, res) { + function run(fnPath, outputFilter) { + return function(done) { + runMocha(fnPath, ['--reporter', 'dot'], function(err, res) { assert.ifError(err); lines = res.output .split(splitRegExp) - .map(function (line) { + .map(function(line) { return line.trim(); }) .filter(outputFilter || onlyConsoleOutput()); @@ -202,25 +169,25 @@ describe('hook error handling', function () { } }); -function onlyConsoleOutput () { +function onlyConsoleOutput() { var foundSummary = false; - return function (line) { + return function(line) { if (!foundSummary) { - foundSummary = !!(/\(\d+ms\)/).exec(line); + foundSummary = !!/\(\d+ms\)/.exec(line); } return !foundSummary && line.length > 0; }; } -function onlyErrorTitle (line) { +function onlyErrorTitle(line) { var foundErrorTitle = false; var foundError = false; - return function (line) { + return function(line) { if (!foundErrorTitle) { - foundErrorTitle = !!(/^1\)/).exec(line); + foundErrorTitle = !!/^1\)/.exec(line); } if (!foundError) { - foundError = (/Error:/).exec(line); + foundError = /Error:/.exec(line); } return foundErrorTitle && !foundError; }; diff --git a/test/integration/hooks.spec.js b/test/integration/hooks.spec.js index e68aa66b64..bfc1596f13 100644 --- a/test/integration/hooks.spec.js +++ b/test/integration/hooks.spec.js @@ -1,13 +1,13 @@ 'use strict'; var assert = require('assert'); -var runMocha = require('./helpers').runMocha; +var helpers = require('./helpers'); var splitRegExp = require('./helpers').splitRegExp; var args = ['--reporter', 'dot']; -describe('hooks', function () { - it('are ran in correct order', function (done) { - runMocha('cascade.fixture.js', args, function (err, res) { +describe('hooks', function() { + it('are ran in correct order', function(done) { + helpers.runMocha('cascade.fixture.js', args, function(err, res) { var lines, expected; if (err) { @@ -15,11 +15,15 @@ describe('hooks', function () { return; } - lines = res.output.split(splitRegExp).map(function (line) { - return line.trim(); - }).filter(function (line) { - return line.length; - }).slice(0, -1); + lines = res.output + .split(splitRegExp) + .map(function(line) { + return line.trim(); + }) + .filter(function(line) { + return line.length; + }) + .slice(0, -1); expected = [ 'before one', @@ -37,7 +41,7 @@ describe('hooks', function () { 'after one' ]; - expected.forEach(function (line, i) { + expected.forEach(function(line, i) { assert.equal(lines[i], line); }); @@ -45,4 +49,20 @@ describe('hooks', function () { done(); }); }); + + it('can fail a test in an afterEach hook', function(done) { + helpers.runMochaJSON( + 'hooks/afterEach-hook-conditionally-fail.fixture.js', + args, + function(err, res) { + if (err) { + done(err); + return; + } + assert.equal(res.stats.passes, 2); + assert.equal(res.stats.failures, 1); + done(); + } + ); + }); }); diff --git a/test/integration/multiple-done.spec.js b/test/integration/multiple-done.spec.js index 3ac216e457..a97e3528f4 100644 --- a/test/integration/multiple-done.spec.js +++ b/test/integration/multiple-done.spec.js @@ -4,42 +4,42 @@ var assert = require('assert'); var run = require('./helpers').runMochaJSON; var args = []; -describe('multiple calls to done()', function () { +describe('multiple calls to done()', function() { var res; - describe('from a spec', function () { - before(function (done) { - run('multiple-done.fixture.js', args, function (err, result) { + describe('from a spec', function() { + before(function(done) { + run('multiple-done.fixture.js', args, function(err, result) { res = result; done(err); }); }); - it('results in failures', function () { + it('results in failures', function() { assert.equal(res.stats.pending, 0, 'wrong "pending" count'); assert.equal(res.stats.passes, 1, 'wrong "passes" count'); - assert.equal(res.stats.failures, 1, 'wrong "failures" count'); + assert.equal(res.stats.failures, 2, 'wrong "failures" count'); }); - it('throws a descriptive error', function () { + it('throws a descriptive error', function() { assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('with error passed on second call', function () { - before(function (done) { - run('multiple-done-with-error.fixture.js', args, function (err, result) { + describe('with error passed on second call', function() { + before(function(done) { + run('multiple-done-with-error.fixture.js', args, function(err, result) { res = result; done(err); }); }); - it('results in failures', function () { + it('results in failures', function() { assert.equal(res.stats.pending, 0, 'wrong "pending" count'); - assert.equal(res.stats.passes, 1, 'wrong "passes" count'); + assert.equal(res.stats.passes, 0, 'wrong "passes" count'); assert.equal(res.stats.failures, 1, 'wrong "failures" count'); }); - it('should throw a descriptive error', function () { + it('should throw a descriptive error', function() { assert.equal( res.failures[0].err.message, "second error (and Mocha's done() called multiple times)" @@ -47,66 +47,66 @@ describe('multiple calls to done()', function () { }); }); - describe('with multiple specs', function () { - before(function (done) { - run('multiple-done-specs.fixture.js', args, function (err, result) { + describe('with multiple specs', function() { + before(function(done) { + run('multiple-done-specs.fixture.js', args, function(err, result) { res = result; done(err); }); }); - it('results in a failure', function () { + it('results in a failure', function() { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); assert.equal(res.stats.failures, 1); assert.equal(res.code, 1); }); - it('correctly attributes the error', function () { + it('correctly attributes the error', function() { assert.equal(res.failures[0].fullTitle, 'suite test1'); assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('from a before hook', function () { - before(function (done) { - run('multiple-done-before.fixture.js', args, function (err, result) { + describe('from a before hook', function() { + before(function(done) { + run('multiple-done-before.fixture.js', args, function(err, result) { res = result; done(err); }); }); - it('results in a failure', function () { + it('results in a failure', function() { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 1); assert.equal(res.stats.failures, 1); assert.equal(res.code, 1); }); - it('correctly attributes the error', function () { + it('correctly attributes the error', function() { assert.equal(res.failures[0].fullTitle, 'suite "before all" hook'); assert.equal(res.failures[0].err.message, 'done() called multiple times'); }); }); - describe('from a beforeEach hook', function () { - before(function (done) { - run('multiple-done-beforeEach.fixture.js', args, function (err, result) { + describe('from a beforeEach hook', function() { + before(function(done) { + run('multiple-done-beforeEach.fixture.js', args, function(err, result) { res = result; done(err); }); }); - it('results in a failure', function () { + it('results in a failure', function() { assert.equal(res.stats.pending, 0); assert.equal(res.stats.passes, 2); assert.equal(res.stats.failures, 2); assert.equal(res.code, 2); }); - it('correctly attributes the errors', function () { + it('correctly attributes the errors', function() { assert.equal(res.failures.length, 2); - res.failures.forEach(function (failure) { + res.failures.forEach(function(failure) { assert.equal(failure.fullTitle, 'suite "before each" hook'); assert.equal(failure.err.message, 'done() called multiple times'); }); diff --git a/test/integration/no-diff.spec.js b/test/integration/no-diff.spec.js index 10bb53c2d7..cc26fc24c3 100644 --- a/test/integration/no-diff.spec.js +++ b/test/integration/no-diff.spec.js @@ -3,30 +3,30 @@ var helpers = require('./helpers'); var run = helpers.runMocha; -describe('no-diff', function () { - describe('when enabled', function () { - it('should not display a diff', function (done) { - run('no-diff.fixture.js', ['--no-diff'], function (err, res) { +describe('no-diff', function() { + describe('when enabled', function() { + it('should not display a diff', function(done) { + run('no-diff.fixture.js', ['--no-diff'], function(err, res) { if (err) { done(err); return; } - expect(res.output).not.to.match(/\+ expected/); - expect(res.output).not.to.match(/- actual/); + expect(res.output, 'not to match', /\+ expected/); + expect(res.output, 'not to match', /- actual/); done(); }); }); }); - describe('when disabled', function () { - it('should display a diff', function (done) { - run('no-diff.fixture.js', ['--diff'], function (err, res) { + describe('when disabled', function() { + it('should display a diff', function(done) { + run('no-diff.fixture.js', ['--diff'], function(err, res) { if (err) { done(err); return; } - expect(res.output).to.match(/\+ expected/); - expect(res.output).to.match(/- actual/); + expect(res.output, 'to match', /\+ expected/); + expect(res.output, 'to match', /- actual/); done(); }); }); diff --git a/test/integration/only.spec.js b/test/integration/only.spec.js index 098af6786c..f3bbbd1eab 100644 --- a/test/integration/only.spec.js +++ b/test/integration/only.spec.js @@ -3,10 +3,10 @@ var run = require('./helpers').runMochaJSON; var assert = require('assert'); -describe('.only()', function () { - describe('bdd', function () { - it('should run only tests that marked as `only`', function (done) { - run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function (err, res) { +describe('.only()', function() { + describe('bdd', function() { + it('should run only tests that marked as `only`', function(done) { + run('options/only/bdd.fixture.js', ['--ui', 'bdd'], function(err, res) { if (err) { done(err); return; @@ -20,9 +20,9 @@ describe('.only()', function () { }); }); - describe('tdd', function () { - it('should run only tests that marked as `only`', function (done) { - run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function (err, res) { + describe('tdd', function() { + it('should run only tests that marked as `only`', function(done) { + run('options/only/tdd.fixture.js', ['--ui', 'tdd'], function(err, res) { if (err) { done(err); return; @@ -36,9 +36,12 @@ describe('.only()', function () { }); }); - describe('qunit', function () { - it('should run only tests that marked as `only`', function (done) { - run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function (err, res) { + describe('qunit', function() { + it('should run only tests that marked as `only`', function(done) { + run('options/only/qunit.fixture.js', ['--ui', 'qunit'], function( + err, + res + ) { if (err) { done(err); return; diff --git a/test/integration/options.spec.js b/test/integration/options.spec.js index 5cc63b42d5..14035e054b 100644 --- a/test/integration/options.spec.js +++ b/test/integration/options.spec.js @@ -1,359 +1,334 @@ 'use strict'; var path = require('path'); -var assert = require('assert'); var helpers = require('./helpers'); var run = helpers.runMochaJSON; +var runRaw = helpers.runMochaJSONRaw; var directInvoke = helpers.invokeMocha; var resolvePath = helpers.resolveFixturePath; var args = []; -describe('options', function () { - describe('--async-only', function () { - before(function () { +describe('options', function() { + describe('--async-only', function() { + before(function() { args = ['--async-only']; }); - it('should fail synchronous specs', function (done) { - run('options/async-only-sync.fixture.js', args, function (err, res) { + it('should fail synchronous specs', function(done) { + run('options/async-only-sync.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.failures, 1); - - assert.equal(res.failures[0].title, 'throws an error'); - assert.equal(res.code, 1); + expect(res, 'to have failed'); done(); }); }); - it('should allow asynchronous specs', function (done) { - run('options/async-only-async.fixture.js', args, function (err, res) { + it('should allow asynchronous specs', function(done) { + run('options/async-only-async.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 1); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].title, 'should pass'); - assert.equal(res.code, 0); + expect(res, 'to have passed'); done(); }); }); }); - describe('--bail', function () { - before(function () { + describe('--bail', function() { + before(function() { args = ['--bail']; }); - it('should stop after the first error', function (done) { - run('options/bail.fixture.js', args, function (err, res) { + it('should stop after the first error', function(done) { + run('options/bail.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 1); - assert.equal(res.stats.failures, 1); - assert.equal(res.passes[0].title, 'should display this spec'); - assert.equal(res.failures[0].title, 'should only display this error'); - assert.equal(res.code, 1); + expect(res, 'to have failed') + .and('to have passed test', 'should display this spec') + .and('to have failed test', 'should only display this error') + .and('to have passed test count', 1); done(); }); }); - it('should stop all hooks after the first error', function (done) { - run('options/bail-with-after.fixture.js', args, function (err, res) { + it('should stop all tests after the first error in before hook', function(done) { + run('options/bail-with-before.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.failures, 1); + expect(res, 'to have failed') + .and('to have failed test count', 1) + .and('to have failed test', '"before all" hook'); + done(); + }); + }); - assert.equal(res.failures[0].title, 'should only display this error'); - assert.equal(res.code, 1); + it('should stop all hooks after the first error', function(done) { + run('options/bail-with-after.fixture.js', args, function(err, res) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed') + .and('to have failed test count', 1) + .and('to have run test', 'should only display this error'); done(); }); }); }); - describe('--sort', function () { - before(function () { + describe('--sort', function() { + before(function() { args = ['--sort']; }); - it('should sort tests in alphabetical order', function (done) { - run('options/sort*', args, function (err, res) { + it('should sort tests in alphabetical order', function(done) { + run('options/sort*', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].fullTitle, - 'alpha should be executed first'); - assert.equal(res.code, 0); + expect(res, 'to have passed test count', 2).and( + 'to have passed test order', + 'should be executed first' + ); done(); }); }); }); - describe('--file', function () { - it('should run tests passed via file first', function (done) { + describe('--file', function() { + it('should run tests passed via file first', function(done) { args = ['--file', resolvePath('options/file-alpha.fixture.js')]; - run('options/file-beta.fixture.js', args, function (err, res) { + run('options/file-beta.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].fullTitle, - 'alpha should be executed first'); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 2) + .and('to have passed test order', 'should be executed first'); done(); }); }); - it('should run multiple tests passed via file first', function (done) { + it('should run multiple tests passed via file first', function(done) { args = [ - '--file', resolvePath('options/file-alpha.fixture.js'), - '--file', resolvePath('options/file-beta.fixture.js') + '--file', + resolvePath('options/file-alpha.fixture.js'), + '--file', + resolvePath('options/file-beta.fixture.js') ]; - run('options/file-theta.fixture.js', args, function (err, res) { + run('options/file-theta.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 3); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].fullTitle, - 'alpha should be executed first'); - assert.equal(res.passes[1].fullTitle, - 'beta should be executed second'); - assert.equal(res.passes[2].fullTitle, - 'theta should be executed third'); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 3) + .and( + 'to have passed test order', + 'should be executed first', + 'should be executed second', + 'should be executed third' + ); done(); }); }); }); - describe('--delay', function () { - before(function () { + describe('--delay', function() { + before(function() { args = ['--delay']; }); - it('should run the generated test suite', function (done) { - run('options/delay.fixture.js', args, function (err, res) { + it('should run the generated test suite', function(done) { + run('options/delay.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 1); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].title, - 'should have no effect if attempted twice in the same suite'); - assert.equal(res.code, 0); + expect(res, 'to have passed').and('to have passed test count', 1); done(); }); }); - it('should execute exclusive tests only', function (done) { - run('options/delay-only.fixture.js', args, function (err, res) { + it('should execute exclusive tests only', function(done) { + run('options/delay-only.fixture.js', args, function(err, res) { if (err) { done(err); return; } - - assert.equal(res.stats.tests, 2); - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - - assert.equal(res.passes[0].title, 'should run this'); - assert.equal(res.passes[1].title, 'should run this, too'); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 2) + .and( + 'to have passed test order', + 'should run this', + 'should run this, too' + ); done(); }); }); - it('should throw an error if the test suite failed to run', function (done) { - run('options/delay-fail.fixture.js', args, function (err, res) { + it('should throw an error if the test suite failed to run', function(done) { + run('options/delay-fail.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.failures, 1); - - assert.equal(res.failures[0].title, - 'Uncaught error outside test suite'); - assert.equal(res.code, 1); + expect(res, 'to have failed').and( + 'to have failed test', + 'Uncaught error outside test suite' + ); done(); }); }); }); - describe('--grep', function () { - it('runs specs matching a string', function (done) { + describe('--grep', function() { + it('runs specs matching a string', function(done) { args = ['--grep', 'match']; - run('options/grep.fixture.js', args, function (err, res) { + run('options/grep.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 2) + .and('not to have pending tests'); done(); }); }); - describe('runs specs matching a RegExp', function () { - it('with RegExp like strings(pattern follow by flag)', function (done) { + describe('runs specs matching a RegExp', function() { + it('with RegExp like strings(pattern follow by flag)', function(done) { args = ['--grep', '/match/i']; - run('options/grep.fixture.js', args, function (err, res) { + run('options/grep.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 4); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 4) + .and('not to have pending tests'); done(); }); }); - it('string as pattern', function (done) { + it('string as pattern', function(done) { args = ['--grep', '.*']; - run('options/grep.fixture.js', args, function (err, res) { + run('options/grep.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 4); - assert.equal(res.stats.failures, 1); - assert.equal(res.code, 1); + expect(res, 'to have failed') + .and('to have passed test count', 4) + .and('to have failed test count', 1) + .and('not to have pending tests'); done(); }); }); }); - describe('with --invert', function () { - it('runs specs that do not match the pattern', function (done) { + describe('with --invert', function() { + it('runs specs that do not match the pattern', function(done) { args = ['--grep', 'fail', '--invert']; - run('options/grep.fixture.js', args, function (err, res) { + run('options/grep.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 4); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('to have passed test count', 4) + .and('not to have pending tests'); done(); }); }); }); }); - describe('--retries', function () { - it('retries after a certain threshold', function (done) { + describe('--retries', function() { + it('retries after a certain threshold', function(done) { args = ['--retries', '3']; - run('options/retries.fixture.js', args, function (err, res) { + run('options/retries.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.tests, 1); - assert.equal(res.tests[0].currentRetry, 3); - assert.equal(res.stats.failures, 1); - assert.equal(res.code, 1); + expect(res, 'to have failed') + .and('not to have pending tests') + .and('not to have passed tests') + .and('to have retried test', 'should fail', 3); done(); }); }); }); - describe('--forbid-only', function () { + describe('--forbid-only', function() { var onlyErrorMessage = '`.only` forbidden'; - before(function () { + before(function() { args = ['--forbid-only']; }); - it('succeeds if there are only passed tests', function (done) { - run('options/forbid-only/passed.js', args, function (err, res) { + it('succeeds if there are only passed tests', function(done) { + run('options/forbid-only/passed.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.code, 0); + expect(res, 'to have passed'); done(); }); }); - it('fails if there are tests marked only', function (done) { - run('options/forbid-only/only.js', args, function (err, res) { + it('fails if there are tests marked only', function(done) { + run('options/forbid-only/only.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.code, 1); - assert.equal(res.failures[0].err.message, onlyErrorMessage); + expect(res, 'to have failed with error', onlyErrorMessage); done(); }); }); - it('fails if there are tests in suites marked only', function (done) { - run('options/forbid-only/only-suite.js', args, function (err, res) { - assert(!err); - assert.equal(res.code, 1); - assert.equal(res.failures[0].err.message, onlyErrorMessage); + it('fails if there are tests in suites marked only', function(done) { + run('options/forbid-only/only-suite.js', args, function(err, res) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed with error', onlyErrorMessage); done(); }); }); }); - describe('--forbid-pending', function () { + describe('--forbid-pending', function() { var pendingErrorMessage = 'Pending test forbidden'; - before(function () { + before(function() { args = ['--forbid-pending']; }); - it('succeeds if there are only passed tests', function (done) { - run('options/forbid-pending/passed.js', args, function (err, res) { + it('succeeds if there are only passed tests', function(done) { + run('options/forbid-pending/passed.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.code, 0); + expect(res, 'to have passed'); done(); }); }); @@ -367,24 +342,29 @@ describe('options', function () { 'fails if there are tests in suites marked skip': 'skip-suite.js' }; - Object.keys(forbidPendingFailureTests).forEach(function (title) { - it(title, function (done) { - run(path.join('options', 'forbid-pending', forbidPendingFailureTests[title]), + Object.keys(forbidPendingFailureTests).forEach(function(title) { + it(title, function(done) { + run( + path.join( + 'options', + 'forbid-pending', + forbidPendingFailureTests[title] + ), args, - function (err, res) { + function(err, res) { if (err) { done(err); return; } - assert.equal(res.code, 1); - assert.equal(res.failures[0].err.message, pendingErrorMessage); + expect(res, 'to have failed with error', pendingErrorMessage); done(); - }); + } + ); }); }); }); - describe('--exit', function () { + describe('--exit', function() { var behaviors = { enabled: '--exit', disabled: '--no-exit' @@ -398,26 +378,26 @@ describe('options', function () { * @param {string} [behavior] - 'enabled' or 'disabled' * @returns {Function} */ - var runExit = function (shouldExit, behavior) { - return function (done) { + var runExit = function(shouldExit, behavior) { + return function(done) { this.timeout(0); this.slow(3000); var didExit = true; var t; var args = behaviors[behavior] ? [behaviors[behavior]] : []; - var mocha = run('exit.fixture.js', args, function (err) { + var mocha = run('exit.fixture.js', args, function(err) { clearTimeout(t); if (err) { done(err); return; } - expect(didExit).to.equal(shouldExit); + expect(didExit, 'to be', shouldExit); done(); }); // if this callback happens, then Mocha didn't automatically exit. - t = setTimeout(function () { + t = setTimeout(function() { didExit = false; // this is the only way to kill the child, afaik. // after the process ends, the callback to `run()` above is handled. @@ -426,38 +406,48 @@ describe('options', function () { }; }; - describe('default behavior', function () { + describe('default behavior', function() { it('should force exit after root suite completion', runExit(false)); }); - describe('with exit enabled', function () { - it('should force exit after root suite completion', runExit(true, 'enabled')); + describe('with exit enabled', function() { + it( + 'should force exit after root suite completion', + runExit(true, 'enabled') + ); }); - describe('with exit disabled', function () { - it('should not force exit after root suite completion', runExit(false, 'disabled')); + describe('with exit disabled', function() { + it( + 'should not force exit after root suite completion', + runExit(false, 'disabled') + ); }); }); - describe('--help', function () { - it('works despite the presence of mocha.opts', function (done) { - directInvoke(['-h'], function (error, result) { - if (error) { - return done(error); - } - expect(result.output).to.contain('Usage:'); - done(); - }, path.join(__dirname, 'fixtures', 'options', 'help')); + describe('--help', function() { + it('works despite the presence of mocha.opts', function(done) { + directInvoke( + ['-h'], + function(error, result) { + if (error) { + return done(error); + } + expect(result.output, 'to contain', 'Usage:'); + done(); + }, + path.join(__dirname, 'fixtures', 'options', 'help') + ); }); }); - describe('--exclude', function () { + describe('--exclude', function() { /* * Runs mocha in {path} with the given args. * Calls handleResult with the result. */ - function runMochaTest (fixture, args, handleResult, done) { - run(fixture, args, function (err, res) { + function runMochaTest(fixture, args, handleResult, done) { + run(fixture, args, function(err, res) { if (err) { done(err); return; @@ -467,40 +457,85 @@ describe('options', function () { }); } - it('should exclude specific files', function (done) { - runMochaTest('options/exclude/*.fixture.js', [ - '--exclude', - 'test/integration/fixtures/options/exclude/fail.fixture.js' - ], function (res) { - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 1); - assert.equal(res.stats.failures, 0); - assert.equal(res.passes[0].title, 'should find this test'); - assert.equal(res.code, 0); - }, done); - }); - - it('should exclude globbed files', function (done) { - runMochaTest('options/exclude/**/*.fixture.js', ['--exclude', '**/fail.fixture.js'], function (res) { - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); - }, done); - }); - - it('should exclude multiple patterns', function (done) { - runMochaTest('options/exclude/**/*.fixture.js', [ - '--exclude', - 'test/integration/fixtures/options/exclude/fail.fixture.js', - '--exclude', - 'test/integration/fixtures/options/exclude/nested/fail.fixture.js' - ], function (res) { - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); - }, done); + it('should exclude specific files', function(done) { + runMochaTest( + 'options/exclude/*.fixture.js', + [ + '--exclude', + 'test/integration/fixtures/options/exclude/fail.fixture.js' + ], + function(res) { + expect(res, 'to have passed') + .and('to have run test', 'should find this test') + .and('not to have pending tests'); + }, + done + ); + }); + + it('should exclude globbed files', function(done) { + runMochaTest( + 'options/exclude/**/*.fixture.js', + ['--exclude', '**/fail.fixture.js'], + function(res) { + expect(res, 'to have passed') + .and('not to have pending tests') + .and('to have passed test count', 2); + }, + done + ); + }); + + it('should exclude multiple patterns', function(done) { + runMochaTest( + 'options/exclude/**/*.fixture.js', + [ + '--exclude', + 'test/integration/fixtures/options/exclude/fail.fixture.js', + '--exclude', + 'test/integration/fixtures/options/exclude/nested/fail.fixture.js' + ], + function(res) { + expect(res, 'to have passed') + .and('not to have pending tests') + .and('to have passed test count', 2); + }, + done + ); }); }); + + if (process.platform !== 'win32') { + // Windows: Feature works but SIMULATING the signal (ctr+c), via child process, does not work + // due to lack of *nix signal compliance. + describe('--watch', function() { + describe('with watch enabled', function() { + it('should show the cursor and signal correct exit code, when watch process is terminated', function(done) { + this.timeout(0); + this.slow(3000); + // executes Mocha in a subprocess + var mocha = runRaw('exit.fixture.js', ['--watch'], function( + err, + data + ) { + // After the process ends, this callback is ran + clearTimeout(t); + if (err) { + done(err); + return; + } + + var expectedCloseCursor = '\u001b[?25h'; + expect(data.output, 'to contain', expectedCloseCursor); + expect(data.code, 'to be', 130); + done(); + }); + var t = setTimeout(function() { + // kill the child process + mocha.kill('SIGINT'); + }, 500); + }); + }); + }); + } }); diff --git a/test/integration/pending.spec.js b/test/integration/pending.spec.js index af665accf6..27601b7a0e 100644 --- a/test/integration/pending.spec.js +++ b/test/integration/pending.spec.js @@ -4,10 +4,10 @@ var assert = require('assert'); var run = require('./helpers').runMochaJSON; var args = []; -describe('pending', function () { - describe('pending specs', function () { - it('should be created by omitting a function', function (done) { - run('pending/spec.fixture.js', args, function (err, res) { +describe('pending', function() { + describe('pending specs', function() { + it('should be created by omitting a function', function(done) { + run('pending/spec.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -19,8 +19,8 @@ describe('pending', function () { done(); }); }); - it('should return the test object when used via shorthand methods', function (done) { - run('pending/skip-shorthand.fixture.js', args, function (err, res) { + it('should return the test object when used via shorthand methods', function(done) { + run('pending/skip-shorthand.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -32,8 +32,8 @@ describe('pending', function () { done(); }); }); - it('should keep hierarchies of suites', function (done) { - run('pending/skip-hierarchy.fixture.js', args, function (err, res) { + it('should keep hierarchies of suites', function(done) { + run('pending/skip-hierarchy.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -49,10 +49,10 @@ describe('pending', function () { }); }); - describe('synchronous skip()', function () { - describe('in spec', function () { - it('should immediately skip the spec and run all others', function (done) { - run('pending/skip-sync-spec.fixture.js', args, function (err, res) { + describe('synchronous skip()', function() { + describe('in spec', function() { + it('should immediately skip the spec and run all others', function(done) { + run('pending/skip-sync-spec.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -66,9 +66,9 @@ describe('pending', function () { }); }); - describe('in before', function () { - it('should skip all suite specs', function (done) { - run('pending/skip-sync-before.fixture.js', args, function (err, res) { + describe('in before', function() { + it('should skip all suite specs', function(done) { + run('pending/skip-sync-before.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -82,9 +82,12 @@ describe('pending', function () { }); }); - describe('in beforeEach', function () { - it('should skip all suite specs', function (done) { - run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) { + describe('in beforeEach', function() { + it('should skip all suite specs', function(done) { + run('pending/skip-sync-beforeEach.fixture.js', args, function( + err, + res + ) { if (err) { done(err); return; @@ -99,10 +102,10 @@ describe('pending', function () { }); }); - describe('asynchronous skip()', function () { - describe('in spec', function () { - it('should immediately skip the spec and run all others', function (done) { - run('pending/skip-async-spec.fixture.js', args, function (err, res) { + describe('asynchronous skip()', function() { + describe('in spec', function() { + it('should immediately skip the spec and run all others', function(done) { + run('pending/skip-async-spec.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -116,9 +119,9 @@ describe('pending', function () { }); }); - describe('in before', function () { - it('should skip all suite specs', function (done) { - run('pending/skip-async-before.fixture.js', args, function (err, res) { + describe('in before', function() { + it('should skip all suite specs', function(done) { + run('pending/skip-async-before.fixture.js', args, function(err, res) { if (err) { done(err); return; @@ -132,9 +135,12 @@ describe('pending', function () { }); }); - describe('in beforeEach', function () { - it('should skip all suite specs', function (done) { - run('pending/skip-sync-beforeEach.fixture.js', args, function (err, res) { + describe('in beforeEach', function() { + it('should skip all suite specs', function(done) { + run('pending/skip-sync-beforeEach.fixture.js', args, function( + err, + res + ) { if (err) { done(err); return; diff --git a/test/integration/regression.spec.js b/test/integration/regression.spec.js index 1c0466b180..af763e2021 100644 --- a/test/integration/regression.spec.js +++ b/test/integration/regression.spec.js @@ -1,16 +1,15 @@ 'use strict'; -var assert = require('assert'); var fs = require('fs'); var path = require('path'); var run = require('./helpers').runMocha; var runJSON = require('./helpers').runMochaJSON; -describe('regressions', function () { - it('issue-1327: should run all 3 specs exactly once', function (done) { +describe('regressions', function() { + it('issue-1327: should run all 3 specs exactly once', function(done) { var args = []; - run('regression/issue-1327.fixture.js', args, function (err, res) { - var occurences = function (str) { + run('regression/issue-1327.fixture.js', args, function(err, res) { + var occurences = function(str) { var pattern = new RegExp(str, 'g'); return (res.output.match(pattern) || []).length; }; @@ -19,123 +18,133 @@ describe('regressions', function () { done(err); return; } - assert.equal(occurences('testbody1'), 1); - assert.equal(occurences('testbody2'), 1); - assert.equal(occurences('testbody3'), 1); - - assert.equal(res.code, 1); + expect(res, 'to have failed'); + expect(occurences('testbody1'), 'to be', 1); + expect(occurences('testbody2'), 'to be', 1); + expect(occurences('testbody3'), 'to be', 1); done(); }); }); - it('should not duplicate mocha.opts args in process.argv', function () { + it('should not duplicate mocha.opts args in process.argv', function() { var processArgv = process.argv.join(''); - var mochaOpts = fs.readFileSync(path.join(__dirname, '..', 'mocha.opts'), 'utf-8').split(/[\s]+/).join(''); - assert.notEqual(processArgv.indexOf(mochaOpts), -1, 'process.argv missing mocha.opts'); - assert.equal(processArgv.indexOf(mochaOpts), processArgv.lastIndexOf(mochaOpts), 'process.argv contains duplicated mocha.opts'); + var mochaOpts = fs + .readFileSync(path.join(__dirname, '..', 'mocha.opts'), 'utf-8') + .replace(/^#.*$/gm, '') + .split(/[\s]+/) + .join(''); + expect(processArgv.indexOf(mochaOpts), 'not to be', -1).and( + 'to be', + processArgv.lastIndexOf(mochaOpts) + ); }); - it('issue-1794: Can\'t --require custom UI and use it', function (done) { - var simpleUiPath = path.join(__dirname, 'fixtures', 'regression', '1794', 'simple-ui.js'); + it("issue-1794: Can't --require custom UI and use it", function(done) { + var simpleUiPath = path.join( + __dirname, + 'fixtures', + 'regression', + '1794', + 'simple-ui.js' + ); var args = ['--require', simpleUiPath, '--ui', 'simple-ui']; - run('regression/1794/issue-1794.fixture.js', args, function (err, res) { + run('regression/1794/issue-1794.fixture.js', args, function(err, res) { if (err) { done(err); return; } - assert.equal(res.code, 0, 'Custom UI should be loaded'); + expect(res, 'to have passed'); done(); }); }); - it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function (done) { + it('issue-1991: Declarations do not get cleaned up unless you set them to `null` - Memory Leak', function(done) { // on a modern MBP takes ±5 seconds on node 4.0, but on older laptops with node 0.12 ±40 seconds. // Could easily take longer on even weaker machines (Travis-CI containers for example). this.timeout(120000); this.slow(12000); - run('regression/issue-1991.fixture.js', [], function (err, res) { + run('regression/issue-1991.fixture.js', [], function(err, res) { if (err) { done(err); return; } - assert.equal(/process out of memory/.test(res.output), false, 'fixture\'s process out of memory!'); - assert.equal(res.code, 0, 'Runnable fn (it/before[Each]/after[Each]) references should be deleted to avoid memory leaks'); + expect(res, 'not to contain output', 'process out of memory').and( + 'to have passed' + ); done(); }); }); - describe('issue-2286: after doesn\'t execute if test was skipped in beforeEach', function () { + describe("issue-2286: after doesn't execute if test was skipped in beforeEach", function() { var afterWasRun = false; - describe('suite with skipped test for meta test', function () { - beforeEach(function () { this.skip(); }); - after(function () { afterWasRun = true; }); - it('should be pending', function () {}); + describe('suite with skipped test for meta test', function() { + beforeEach(function() { + this.skip(); + }); + after(function() { + afterWasRun = true; + }); + it('should be pending', function() {}); }); - after('meta test', function () { - expect(afterWasRun).to.be.ok(); + after('meta test', function() { + expect(afterWasRun, 'to be', true); }); }); - it('issue-2315: cannot read property currentRetry of undefined', function (done) { - runJSON('regression/issue-2315.fixture.js', [], function (err, res) { + it('issue-2315: cannot read property currentRetry of undefined', function(done) { + runJSON('regression/issue-2315.fixture.js', [], function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.failures, 1); - assert.equal(res.code, 1); + expect(res, 'to have failed') + .and('not to have pending tests') + .and('to have failed test count', 1); done(); }); }); - it('issue-2406: should run nested describe.only suites', function (done) { + it('issue-2406: should run nested describe.only suites', function(done) { this.timeout(2000); - runJSON('regression/issue-2406.fixture.js', [], function (err, res) { + runJSON('regression/issue-2406.fixture.js', [], function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 2); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('not to have pending tests') + .and('to have passed test count', 2); done(); }); }); - it('issue-2417: should not recurse infinitely with .only suites nested within each other', function (done) { - runJSON('regression/issue-2417.fixture.js', [], function (err, res) { + it('issue-2417: should not recurse infinitely with .only suites nested within each other', function(done) { + runJSON('regression/issue-2417.fixture.js', [], function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 1); - assert.equal(res.stats.failures, 0); - assert.equal(res.code, 0); + expect(res, 'to have passed') + .and('not to have pending tests') + .and('to have passed test count', 1); done(); }); }); - it('issue-1417 uncaught exceptions from async specs', function (done) { - runJSON('regression/issue-1417.fixture.js', [], function (err, res) { + it('issue-1417 uncaught exceptions from async specs', function(done) { + runJSON('regression/issue-1417.fixture.js', [], function(err, res) { if (err) { done(err); return; } - assert.equal(res.stats.pending, 0); - assert.equal(res.stats.passes, 0); - assert.equal(res.stats.failures, 2); - - assert.equal(res.failures[0].title, - 'fails exactly once when a global error is thrown synchronously and done errors'); - assert.equal(res.failures[0].err.message, 'sync error'); - assert.equal(res.failures[1].title, - 'fails exactly once when a global error is thrown synchronously and done completes'); - assert.equal(res.failures[1].err.message, 'sync error'); - assert.equal(res.code, 2); + expect(res, 'to have failed with errors', 'sync error a', 'sync error b') + .and('to have exit code', 2) + .and('not to have passed tests') + .and('not to have pending tests') + .and('to have failed test order', [ + 'fails exactly once when a global error is thrown synchronously and done errors', + 'fails exactly once when a global error is thrown synchronously and done completes' + ]); done(); }); }); diff --git a/test/integration/reporters.spec.js b/test/integration/reporters.spec.js index 9bf8df289c..4e95622dee 100644 --- a/test/integration/reporters.spec.js +++ b/test/integration/reporters.spec.js @@ -1,59 +1,61 @@ 'use strict'; -var assert = require('assert'); var os = require('os'); var fs = require('fs'); var crypto = require('crypto'); var path = require('path'); var run = require('./helpers').runMocha; -describe('reporters', function () { - describe('markdown', function () { +describe('reporters', function() { + describe('markdown', function() { var res; - before(function (done) { - run('passing.fixture.js', ['--reporter', 'markdown'], function (err, result) { + before(function(done) { + run('passing.fixture.js', ['--reporter', 'markdown'], function( + err, + result + ) { res = result; done(err); }); }); - it('does not exceed maximum callstack (issue: 1875)', function () { - assert(res.output.indexOf('RangeError') === -1, 'Threw RangeError'); + it('does not exceed maximum callstack (issue: 1875)', function() { + expect(res.output, 'not to contain', 'RangeError'); }); - it('contains spec src', function () { - var src = [ - '```js', - 'assert(true);', - '```' - ].join('\n'); + it('contains spec src', function() { + var src = ['```js', 'assert(true);', '```'].join('\n'); - assert(res.output.indexOf(src) !== -1, 'No assert found'); + expect(res.output, 'to contain', src); }); }); - describe('xunit', function () { - it('prints test cases with --reporter-options output (issue: 1864)', function (done) { + describe('xunit', function() { + it('prints test cases with --reporter-options output (issue: 1864)', function(done) { var randomStr = crypto.randomBytes(8).toString('hex'); var tmpDir = os.tmpdir().replace(new RegExp(path.sep + '$'), ''); var tmpFile = tmpDir + path.sep + 'test-issue-1864-' + randomStr + '.xml'; - var args = ['--reporter=xunit', '--reporter-options', 'output=' + tmpFile]; + var args = [ + '--reporter=xunit', + '--reporter-options', + 'output=' + tmpFile + ]; var expectedOutput = [ ' (/usr/local/dev/test.js:16:12)', @@ -28,9 +28,7 @@ describe('stackTraceFilter()', function () { 'Immediate._onImmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:276:5)', 'at processImmediate [as _immediateCallback] (timers.js:321:17)' ]; - expect(filter(stack.join('\n'))) - .to.equal(stack.slice(0, 3) - .join('\n')); + expect(filter(stack.join('\n')), 'to be', stack.slice(0, 3).join('\n')); stack = [ 'AssertionError: bar baz', @@ -46,12 +44,10 @@ describe('stackTraceFilter()', function () { 'at processImmediate [as _immediateCallback] (timers.js:321:17)' ]; - expect(filter(stack.join('\n'))) - .to.equal(stack.slice(0, 7) - .join('\n')); + expect(filter(stack.join('\n')), 'to be', stack.slice(0, 7).join('\n')); }); - it('does not ignore other bower_components and components', function () { + it('does not ignore other bower_components and components', function() { var stack = [ 'Error: failed', 'at assert (index.html:11:26)', @@ -67,12 +63,10 @@ describe('stackTraceFilter()', function () { 'at file:///.../components/mochajs/mocha/2.1.0/mocha.js:4970:12', 'at next (file:///.../components/mochajs/mocha/2.1.0/mocha.js:4817:14)' ]; - expect(filter(stack.join('\n'))) - .to.equal(stack.slice(0, 7) - .join('\n')); + expect(filter(stack.join('\n')), 'to be', stack.slice(0, 7).join('\n')); }); - it('should replace absolute with relative paths', function () { + it('should replace absolute with relative paths', function() { var stack = [ 'Error: ' + process.cwd() + '/bla.js has a problem', 'at foo (' + process.cwd() + '/foo/index.js:13:226)', @@ -85,11 +79,10 @@ describe('stackTraceFilter()', function () { 'at bar (/usr/local/dev/own/tmp/node_modules/bluebird/js/main/promise.js:11:26)' ]; - expect(filter(stack.join('\n'))) - .to.equal(expected.join('\n')); + expect(filter(stack.join('\n')), 'to be', expected.join('\n')); }); - it('should not replace absolute path which has cwd as infix', function () { + it('should not replace absolute path which has cwd as infix', function() { var stack = [ 'Error: /www' + process.cwd() + '/bla.js has a problem', 'at foo (/www' + process.cwd() + '/foo/index.js:13:226)', @@ -102,19 +95,18 @@ describe('stackTraceFilter()', function () { 'at bar (/usr/local/dev/own/tmp/node_modules/bluebird/js/main/promise.js:11:26)' ]; - expect(filter(stack.join('\n'))) - .to.equal(expected.join('\n')); + expect(filter(stack.join('\n')), 'to be', expected.join('\n')); }); }); - describe('on Windows', function () { - before(function () { + describe('on Windows', function() { + before(function() { if (path.sep === '/') { this.skip(); } }); - it('should work on Windows', function () { + it('should work on Windows', function() { var stack = [ 'Error: failed', 'at Context. (C:\\Users\\ishida\\src\\test\\test\\mytest.js:5:9)', @@ -127,21 +119,19 @@ describe('stackTraceFilter()', function () { 'at next (C:\\Users\\ishida\\src\\test\\node_modules\\mocha\\lib\\runner.js:284:14)', 'at Immediate._onImmediate (C:\\Users\\ishida\\src\\test\\node_modules\\mocha\\lib\\runner.js:320:5)' ]; - expect(filter(stack.join('\n'))) - .to.equal(stack.slice(0, 2) - .join('\n')); + expect(filter(stack.join('\n')), 'to be', stack.slice(0, 2).join('\n')); }); }); }); - describe('on browser', function () { + describe('on browser', function() { var filter; - before(function () { + before(function() { global.document = true; global.location = {href: 'localhost:3000/foo/bar/index.html'}; filter = utils.stackTraceFilter(); }); - it('does not strip out other bower_components', function () { + it('does not strip out other bower_components', function() { var stack = [ 'Error: failed', 'at assert (index.html:11:26)', @@ -154,12 +144,10 @@ describe('stackTraceFilter()', function () { 'at localhost:3000/foo/bar/node_modules/mocha.js:4970:12', 'at next (node_modules/mocha.js:4817:14)' ]; - expect(filter(stack.join('\n'))) - .to.equal(stack.slice(0, 7) - .join('\n')); + expect(filter(stack.join('\n')), 'to be', stack.slice(0, 7).join('\n')); }); - after(function () { + after(function() { delete global.document; delete global.location; }); diff --git a/test/only/bdd-require.spec.js b/test/only/bdd-require.spec.js index 9b85052c23..8f1b239642 100644 --- a/test/only/bdd-require.spec.js +++ b/test/only/bdd-require.spec.js @@ -6,12 +6,12 @@ var beforeEach = mocha.beforeEach; var it = mocha.it; var describe = mocha.describe; -describe('it.only via require("mocha")', function () { - beforeEach(function () { +describe('it.only via require("mocha")', function() { + beforeEach(function() { this.didRunBeforeEach = true; }); - describe('nested within a describe/context', function () { - it.only('should run all enclosing beforeEach hooks', function () { + describe('nested within a describe/context', function() { + it.only('should run all enclosing beforeEach hooks', function() { require('assert').equal(this.didRunBeforeEach, true); }); }); diff --git a/test/only/bdd.spec.js b/test/only/bdd.spec.js index ac9f92a0d4..8f38a9b7b9 100644 --- a/test/only/bdd.spec.js +++ b/test/only/bdd.spec.js @@ -1,127 +1,127 @@ 'use strict'; -describe('should only run .only test in this bdd suite', function () { - it('should not run this test', function () { - expect(0).to.equal(1, 'this test should have been skipped'); +describe('should only run .only test in this bdd suite', function() { + it('should not run this test', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); - it.only('should run this test', function () { - expect(0).to.equal(0, 'this .only test should run'); + it.only('should run this test', function() { + expect(0, 'to be', 0, 'this .only test should run'); }); - it('should run this test, not (includes the title of the .only test)', function () { - expect(0).to.equal(1, 'this test should have been skipped'); + it('should run this test, not (includes the title of the .only test)', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); }); -describe('should not run this suite', function () { - it('should not run this test', function () { - expect(true).to.equal(false); +describe('should not run this suite', function() { + it('should not run this test', function() { + expect(true, 'to be', false); }); - it('should not run this test', function () { - expect(true).to.equal(false); + it('should not run this test', function() { + expect(true, 'to be', false); }); - it('should not run this test', function () { - expect(true).to.equal(false); + it('should not run this test', function() { + expect(true, 'to be', false); }); }); -describe.only('should run all tests in this bdd suite', function () { - it('should run this test #1', function () { - expect(true).to.equal(true); +describe.only('should run all tests in this bdd suite', function() { + it('should run this test #1', function() { + expect(true, 'to be', true); }); - it('should run this test #2', function () { - expect(1).to.equal(1); + it('should run this test #2', function() { + expect(1, 'to be', 1); }); - it('should run this test #3', function () { - expect('foo').to.equal('foo'); + it('should run this test #3', function() { + expect('foo', 'to be', 'foo'); }); }); -describe('should run only suites that marked as `only`', function () { - describe.only('should run all this tdd suite', function () { - it('should run this test #1', function () { - expect(true).to.equal(true); +describe('should run only suites that marked as `only`', function() { + describe.only('should run all this tdd suite', function() { + it('should run this test #1', function() { + expect(true, 'to be', true); }); - it('should run this test #2', function () { - expect(true).to.equal(true); + it('should run this test #2', function() { + expect(true, 'to be', true); }); }); - describe('should not run this suite', function () { - it('should run this test', function () { - expect(true).to.equal(false); + describe('should not run this suite', function() { + it('should run this test', function() { + expect(true, 'to be', false); }); }); }); // Nested situation -describe('should not run parent tests', function () { - it('should not run this test', function () { - expect(true).to.equal(false); +describe('should not run parent tests', function() { + it('should not run this test', function() { + expect(true, 'to be', false); }); - describe('and not the child tests too', function () { - it('should not run this test', function () { - expect(true).to.equal(false); + describe('and not the child tests too', function() { + it('should not run this test', function() { + expect(true, 'to be', false); }); - describe.only('but run all the tests in this suite', function () { - it('should run this test #1', function () { - expect(true).to.equal(true); + describe.only('but run all the tests in this suite', function() { + it('should run this test #1', function() { + expect(true, 'to be', true); }); - it('should run this test #2', function () { - expect(true).to.equal(true); + it('should run this test #2', function() { + expect(true, 'to be', true); }); }); }); }); // mark test as `only` override the suite behavior -describe.only('should run only tests that marked as `only`', function () { - it('should not run this test #1', function () { - expect(false).to.equal(true); +describe.only('should run only tests that marked as `only`', function() { + it('should not run this test #1', function() { + expect(false, 'to be', true); }); - it.only('should run this test #2', function () { - expect(true).to.equal(true); + it.only('should run this test #2', function() { + expect(true, 'to be', true); }); - it('should not run this test #3', function () { - expect(false).to.equal(true); + it('should not run this test #3', function() { + expect(false, 'to be', true); }); - it.only('should run this test #4', function () { - expect(true).to.equal(true); + it.only('should run this test #4', function() { + expect(true, 'to be', true); }); }); -describe.only('Should run only test cases that mark as only', function () { - it.only('should runt his test', function () { - expect(true).to.equal(true); +describe.only('Should run only test cases that mark as only', function() { + it.only('should runt his test', function() { + expect(true, 'to be', true); }); - it('should not run this test', function () { - expect(false).to.equal(true); + it('should not run this test', function() { + expect(false, 'to be', true); }); - describe('should not run this suite', function () { - it('should not run this test', function () { - expect(false).to.equal(true); + describe('should not run this suite', function() { + it('should not run this test', function() { + expect(false, 'to be', true); }); }); }); // Root Suite -it.only('#Root-Suite, should run this test-case #1', function () { - expect(true).to.equal(true); +it.only('#Root-Suite, should run this test-case #1', function() { + expect(true, 'to be', true); }); -it.only('#Root-Suite, should run this test-case #2', function () { - expect(true).to.equal(true); +it.only('#Root-Suite, should run this test-case #2', function() { + expect(true, 'to be', true); }); -it('#Root-Suite, should not run this test', function () { - expect(false).to.equal(true); +it('#Root-Suite, should not run this test', function() { + expect(false, 'to be', true); }); diff --git a/test/only/global/bdd.spec.js b/test/only/global/bdd.spec.js index 5e5e271350..39f68dfd97 100644 --- a/test/only/global/bdd.spec.js +++ b/test/only/global/bdd.spec.js @@ -1,14 +1,14 @@ 'use strict'; // Root-only test cases -it.only('#Root-Suite, should run this bdd test-case #1', function () { - expect(true).to.equal(true); +it.only('#Root-Suite, should run this bdd test-case #1', function() { + expect(true, 'to be', true); }); -it('#Root-Suite, should not run this bdd test-case #2', function () { - expect(false).to.equal(true); +it('#Root-Suite, should not run this bdd test-case #2', function() { + expect(false, 'to be', true); }); -it('#Root-Suite, should not run this bdd test-case #3', function () { - expect(false).to.equal(true); +it('#Root-Suite, should not run this bdd test-case #3', function() { + expect(false, 'to be', true); }); diff --git a/test/only/global/qunit.spec.js b/test/only/global/qunit.spec.js index 20a16ddced..f60603ce8f 100644 --- a/test/only/global/qunit.spec.js +++ b/test/only/global/qunit.spec.js @@ -1,14 +1,14 @@ 'use strict'; // Root-only test cases -test.only('#Root-Suite, should run this qunit test-case #1', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this qunit test-case #1', function() { + expect(true, 'to be', true); }); -test('#Root-Suite, should not run this qunit test-case #2', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this qunit test-case #2', function() { + expect(false, 'to be', true); }); -test('#Root-Suite, should not run this qunit test-case #3', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this qunit test-case #3', function() { + expect(false, 'to be', true); }); diff --git a/test/only/global/tdd.spec.js b/test/only/global/tdd.spec.js index f140de29b3..4c2290698b 100644 --- a/test/only/global/tdd.spec.js +++ b/test/only/global/tdd.spec.js @@ -1,14 +1,14 @@ 'use strict'; // Root-only test cases -test.only('#Root-Suite, should run this tdd test-case #1', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this tdd test-case #1', function() { + expect(true, 'to be', true); }); -test('#Root-Suite, should not run this tdd test-case #2', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this tdd test-case #2', function() { + expect(false, 'to be', true); }); -test('#Root-Suite, should not run this tdd test-case #3', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this tdd test-case #3', function() { + expect(false, 'to be', true); }); diff --git a/test/only/qunit.spec.js b/test/only/qunit.spec.js index 1e1c84c532..04a4a04c8f 100644 --- a/test/only/qunit.spec.js +++ b/test/only/qunit.spec.js @@ -1,75 +1,75 @@ 'use strict'; // Root Suite -test.only('#Root-Suite, should run this test-case #1', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this test-case #1', function() { + expect(true, 'to be', true); }); -test.only('#Root-Suite, should run this test-case #2', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this test-case #2', function() { + expect(true, 'to be', true); }); -test('#Root-Suite, should not run this test', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this test', function() { + expect(false, 'to be', true); }); suite('should only run .only test in this qunit suite'); -test('should not run this test', function () { - expect(0).to.equal(1, 'this test should have been skipped'); +test('should not run this test', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); -test.only('should run this test', function () { - expect(0).to.equal(0, 'this .only test should run'); +test.only('should run this test', function() { + expect(0, 'to be', 0, 'this .only test should run'); }); -test('should run this test, not (includes the title of the .only test)', function () { - expect(0).to.equal(1, 'this test should have been skipped'); +test('should run this test, not (includes the title of the .only test)', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); // Mark suite suite.only('should run all tests in this suite'); -test('should run this test #1', function () { - expect(true).to.equal(true); +test('should run this test #1', function() { + expect(true, 'to be', true); }); -test('should run this test #2', function () { - expect(true).to.equal(true); +test('should run this test #2', function() { + expect(true, 'to be', true); }); -test('should run this test #3', function () { - expect(true).to.equal(true); +test('should run this test #3', function() { + expect(true, 'to be', true); }); // Unmark this suite -suite('should not run any of this suite\'s tests'); +suite("should not run any of this suite's tests"); -test('should not run this test', function () { - expect(false).to.equal(true); +test('should not run this test', function() { + expect(false, 'to be', true); }); -test('should not run this test', function () { - expect(false).to.equal(true); +test('should not run this test', function() { + expect(false, 'to be', true); }); -test('should not run this test', function () { - expect(false).to.equal(true); +test('should not run this test', function() { + expect(false, 'to be', true); }); // Mark test as `only` override the suite behavior suite.only('should run only tests that marked as `only`'); -test('should not run this test #1', function () { - expect(false).to.equal(true); +test('should not run this test #1', function() { + expect(false, 'to be', true); }); -test.only('should not run this test #2', function () { - expect(true).to.equal(true); +test.only('should not run this test #2', function() { + expect(true, 'to be', true); }); -test('should not run this test #3', function () { - expect(false).to.equal(true); +test('should not run this test #3', function() { + expect(false, 'to be', true); }); -test.only('should not run this test #4', function () { - expect(true).to.equal(true); +test.only('should not run this test #4', function() { + expect(true, 'to be', true); }); diff --git a/test/only/tdd.spec.js b/test/only/tdd.spec.js index 425828f8b1..eed4e27eda 100644 --- a/test/only/tdd.spec.js +++ b/test/only/tdd.spec.js @@ -1,127 +1,127 @@ 'use strict'; -suite('should only run .only test in this tdd suite', function () { - test('should not run this test', function () { - expect(0).to.equal(1, 'this test should have been skipped'); +suite('should only run .only test in this tdd suite', function() { + test('should not run this test', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); - test.only('should run this test', function () { - expect(0).to.equal(0, 'this .only test should run'); + test.only('should run this test', function() { + expect(0, 'to be', 0, 'this .only test should run'); }); - test('should run this test, not (includes the title of the .only test)', function () { - expect(0).to.equal(1, 'this test should have been skipped'); + test('should run this test, not (includes the title of the .only test)', function() { + expect(0, 'to be', 1, 'this test should have been skipped'); }); }); -suite('should not run this suite', function () { - test('should not run this test', function () { - expect(true).to.equal(false); +suite('should not run this suite', function() { + test('should not run this test', function() { + expect(true, 'to be', false); }); - test('should not run this test', function () { - expect(true).to.equal(false); + test('should not run this test', function() { + expect(true, 'to be', false); }); - test('should not run this test', function () { - expect(true).to.equal(false); + test('should not run this test', function() { + expect(true, 'to be', false); }); }); -suite.only('should run all tests in this tdd suite', function () { - test('should run this test #1', function () { - expect(true).to.equal(true); +suite.only('should run all tests in this tdd suite', function() { + test('should run this test #1', function() { + expect(true, 'to be', true); }); - test('should run this test #2', function () { - expect(1).to.equal(1); + test('should run this test #2', function() { + expect(1, 'to be', 1); }); - test('should run this test #3', function () { - expect('foo').to.equal('foo'); + test('should run this test #3', function() { + expect('foo', 'to be', 'foo'); }); }); -suite('should run only suites that marked as `only`', function () { - suite.only('should run all this tdd suite', function () { - test('should run this test #1', function () { - expect(true).to.equal(true); +suite('should run only suites that marked as `only`', function() { + suite.only('should run all this tdd suite', function() { + test('should run this test #1', function() { + expect(true, 'to be', true); }); - test('should run this test #2', function () { - expect(true).to.equal(true); + test('should run this test #2', function() { + expect(true, 'to be', true); }); }); - suite('should not run this suite', function () { - test('should not run this test', function () { - expect(true).to.equal(false); + suite('should not run this suite', function() { + test('should not run this test', function() { + expect(true, 'to be', false); }); }); }); // Nested situation -suite('should not run parent tests', function () { - test('should not run this test', function () { - expect(true).to.equal(false); +suite('should not run parent tests', function() { + test('should not run this test', function() { + expect(true, 'to be', false); }); - suite('and not the child tests too', function () { - test('should not run this test', function () { - expect(true).to.equal(false); + suite('and not the child tests too', function() { + test('should not run this test', function() { + expect(true, 'to be', false); }); - suite.only('but run all the tests in this suite', function () { - test('should run this test #1', function () { - expect(true).to.equal(true); + suite.only('but run all the tests in this suite', function() { + test('should run this test #1', function() { + expect(true, 'to be', true); }); - test('should run this test #2', function () { - expect(true).to.equal(true); + test('should run this test #2', function() { + expect(true, 'to be', true); }); }); }); }); // mark test as `only` override the suite behavior -suite.only('should run only tests that marked as `only`', function () { - test('should not run this test #1', function () { - expect(false).to.equal(true); +suite.only('should run only tests that marked as `only`', function() { + test('should not run this test #1', function() { + expect(false, 'to be', true); }); - test.only('should run this test #2', function () { - expect(true).to.equal(true); + test.only('should run this test #2', function() { + expect(true, 'to be', true); }); - test('should not run this test #3', function () { - expect(false).to.equal(true); + test('should not run this test #3', function() { + expect(false, 'to be', true); }); - test.only('should run this test #4', function () { - expect(true).to.equal(true); + test.only('should run this test #4', function() { + expect(true, 'to be', true); }); }); -suite.only('Should run only test cases that mark as only', function () { - test.only('should runt his test', function () { - expect(true).to.equal(true); +suite.only('Should run only test cases that mark as only', function() { + test.only('should runt his test', function() { + expect(true, 'to be', true); }); - test('should not run this test', function () { - expect(false).to.equal(true); + test('should not run this test', function() { + expect(false, 'to be', true); }); - suite('should not run this suite', function () { - test('should not run this test', function () { - expect(false).to.equal(true); + suite('should not run this suite', function() { + test('should not run this test', function() { + expect(false, 'to be', true); }); }); }); // Root Suite -test.only('#Root-Suite, should run this test-case #1', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this test-case #1', function() { + expect(true, 'to be', true); }); -test.only('#Root-Suite, should run this test-case #2', function () { - expect(true).to.equal(true); +test.only('#Root-Suite, should run this test-case #2', function() { + expect(true, 'to be', true); }); -test('#Root-Suite, should not run this test', function () { - expect(false).to.equal(true); +test('#Root-Suite, should not run this test', function() { + expect(false, 'to be', true); }); diff --git a/test/reporters/base.spec.js b/test/reporters/base.spec.js index ce815264ea..8ff2195f70 100644 --- a/test/reporters/base.spec.js +++ b/test/reporters/base.spec.js @@ -3,12 +3,11 @@ var assert = require('assert'); var Base = require('../../lib/reporters/base'); -var Assert = require('assert').AssertionError; - +var AssertionError = assert.AssertionError; var makeTest = require('./helpers').makeTest; var createElements = require('./helpers').createElements; -describe('Base reporter', function () { +describe('Base reporter', function() { var stdout; var stdoutWrite; var useColors; @@ -16,86 +15,99 @@ describe('Base reporter', function () { var errOut; var test; - beforeEach(function () { + function list(tests) { + Base.useColors = false; + var retval = Base.list(tests); + Base.useColors = useColors; + return retval; + } + + function generateDiff(actual, expected) { + Base.useColors = false; + var retval = Base.generateDiff(actual, expected); + Base.useColors = useColors; + return retval; + } + + beforeEach(function() { + useColors = Base.useColors; stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; - useColors = Base.useColors; - Base.useColors = false; }); - afterEach(function () { + afterEach(function() { process.stdout.write = stdoutWrite; - Base.useColors = useColors; }); - describe('showDiff', function () { - beforeEach(function () { - err = new Assert({ actual: 'foo', expected: 'bar' }); + describe('showDiff', function() { + beforeEach(function() { + err = new AssertionError({actual: 'foo', expected: 'bar'}); }); - it('should show diffs by default', function () { + it('should show diffs by default', function() { test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); }); - it('should show diffs if property set to `true`', function () { + it('should show diffs if property set to `true`', function() { err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); }); - it('should not show diffs when showDiff property set to `false`', function () { + it('should not show diffs when showDiff property set to `false`', function() { err.showDiff = false; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.not.match(/- actual/); - expect(errOut).to.not.match(/\+ expected/); + expect(errOut, 'not to match', /- actual/); + expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when expected is not defined', function () { + it('should not show diffs when expected is not defined', function() { err = new Error('ouch'); test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.not.match(/- actual/); - expect(errOut).to.not.match(/\+ expected/); + expect(errOut, 'not to match', /- actual/); + expect(errOut, 'not to match', /\+ expected/); }); - it('should not show diffs when hideDiff is set', function () { + it('should not show diffs when hideDiff is set', function() { test = makeTest(err); Base.hideDiff = true; - Base.list([test]); + list([test]); Base.hideDiff = false; // Revert to original value errOut = stdout.join('\n'); - expect(errOut).to.not.match(/- actual/); - expect(errOut).to.not.match(/\+ expected/); + expect(errOut, 'not to match', /- actual/); + expect(errOut, 'not to match', /\+ expected/); }); }); - describe('Getting two strings', function () { + describe('Getting two strings', function() { // Fix regression V1.2.1(see: issue #1241) - it('should show strings diff as is', function () { + it('should show strings diff as is', function() { err = new Error('test'); err.actual = 'foo\nbar'; @@ -103,55 +115,63 @@ describe('Base reporter', function () { err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.not.match(/"foo\\nbar"/); - expect(errOut).to.match(/foo/).and.match(/bar/); - expect(errOut).to.match(/test/); - expect(errOut).to.match(/actual/); - expect(errOut).to.match(/expected/); + expect(errOut, 'not to match', /"foo\\nbar"/); + expect(errOut, 'to match', /foo/).and('to match', /bar/); + expect(errOut, 'to match', /test/); + expect(errOut, 'to match', /actual/); + expect(errOut, 'to match', /expected/); }); }); - describe('Diff generation', function () { + describe('Diff generation', function() { var oldInlineDiffs; var actual; var expected; var output; - beforeEach(function () { + beforeEach(function() { oldInlineDiffs = Base.inlineDiffs; }); - afterEach(function () { + afterEach(function() { Base.inlineDiffs = oldInlineDiffs; }); - it('should generate unified diffs if `inlineDiff === false`', function () { + it('should generate unified diffs if `inlineDiff === false`', function() { actual = 'a foo unified diff'; expected = 'a bar unified diff'; Base.inlineDiffs = false; - output = Base.generateDiff(actual, expected); + output = generateDiff(actual, expected); - expect(output).to.equal('\n + expected - actual\n\n -a foo unified diff\n +a bar unified diff\n '); + expect( + output, + 'to be', + '\n + expected - actual\n\n -a foo unified diff\n +a bar unified diff\n ' + ); }); - it('should generate inline diffs if `inlineDiffs === true`', function () { + it('should generate inline diffs if `inlineDiffs === true`', function() { actual = 'a foo inline diff'; expected = 'a bar inline diff'; Base.inlineDiffs = true; - output = Base.generateDiff(actual, expected); + output = generateDiff(actual, expected); - expect(output).to.equal(' \n actual expected\n \n a foobar inline diff\n '); + expect( + output, + 'to be', + ' \n actual expected\n \n a foobar inline diff\n ' + ); }); }); - describe('Inline strings diff', function () { - it('should show single line diff if property set to `true`', function () { + describe('Inline strings diff', function() { + it('should show single line diff if property set to `true`', function() { err = new Error('test'); err.actual = 'a foo inline diff'; @@ -160,17 +180,17 @@ describe('Base reporter', function () { test = makeTest(err); Base.inlineDiffs = true; - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/a foobar inline diff/); - expect(errOut).to.match(/test/); - expect(errOut).to.match(/actual/); - expect(errOut).to.match(/expected/); + expect(errOut, 'to match', /a foobar inline diff/); + expect(errOut, 'to match', /test/); + expect(errOut, 'to match', /actual/); + expect(errOut, 'to match', /expected/); }); - it('should split lines when string has more than 4 line breaks', function () { + it('should split lines when string has more than 4 line breaks', function() { err = new Error('test'); err.actual = 'a\nfoo\ninline\ndiff\nwith\nmultiple lines'; @@ -179,35 +199,35 @@ describe('Base reporter', function () { test = makeTest(err); Base.inlineDiffs = true; - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/1 \| a/); - expect(errOut).to.match(/2 \| foobar/); - expect(errOut).to.match(/3 \| inline/); - expect(errOut).to.match(/4 \| diff/); - expect(errOut).to.match(/5 \| with/); - expect(errOut).to.match(/6 \| multiple lines/); - expect(errOut).to.match(/test/); - expect(errOut).to.match(/actual/); - expect(errOut).to.match(/expected/); + expect(errOut, 'to match', /1 \| a/); + expect(errOut, 'to match', /2 \| foobar/); + expect(errOut, 'to match', /3 \| inline/); + expect(errOut, 'to match', /4 \| diff/); + expect(errOut, 'to match', /5 \| with/); + expect(errOut, 'to match', /6 \| multiple lines/); + expect(errOut, 'to match', /test/); + expect(errOut, 'to match', /actual/); + expect(errOut, 'to match', /expected/); }); }); - describe('unified diff reporter', function () { - beforeEach(function () { + describe('unified diff reporter', function() { + beforeEach(function() { err = new Error('test'); }); - it('should separate diff hunks by two dashes', function () { - err.actual = createElements({ from: 2, to: 11 }); - err.expected = createElements({ from: 1, to: 10 }); + it('should separate diff hunks by two dashes', function() { + err.actual = createElements({from: 2, to: 11}); + err.expected = createElements({from: 1, to: 10}); err.showDiff = true; test = makeTest(err); Base.inlineDiffs = false; - Base.list([test]); + list([test]); errOut = stdout.join('\n'); @@ -230,13 +250,13 @@ describe('Base reporter', function () { /actual/ ]; - regexesToMatch.forEach(function (aRegex) { - expect(errOut).to.match(aRegex); + regexesToMatch.forEach(function(aRegex) { + expect(errOut, 'to match', aRegex); }); }); }); - it('should stringify objects', function () { + it('should stringify objects', function() { err = new Error('test'); err.actual = {key: 'a1'}; @@ -244,16 +264,16 @@ describe('Base reporter', function () { err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/"key"/); - expect(errOut).to.match(/test/); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /"key"/); + expect(errOut, 'to match', /test/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); }); - it('should stringify Object.create(null)', function () { + it('should stringify Object.create(null)', function() { err = new Error('test'); err.actual = Object.create(null); @@ -263,16 +283,16 @@ describe('Base reporter', function () { err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/"hasOwnProperty"/); - expect(errOut).to.match(/test/); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /"hasOwnProperty"/); + expect(errOut, 'to match', /test/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); }); - it('should handle error messages that are not strings', function () { + it('should handle error messages that are not strings', function() { try { assert(false, true); } catch (err) { @@ -281,39 +301,60 @@ describe('Base reporter', function () { err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); + + errOut = stdout.join('\n'); + expect(errOut, 'to match', /\+true/); + expect(errOut, 'to match', /-false/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); + } + }); + + it('should interpret Chai custom error messages', function() { + var chaiExpect = require('chai').expect; + try { + chaiExpect(43, 'custom error message').to.equal(42); + } catch (err) { + err.actual = 43; + err.expected = 42; + err.showDiff = true; + test = makeTest(err); + + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/\+true/); - expect(errOut).to.match(/-false/); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /custom error message\n/) + .and('to match', /\+42/) + .and('to match', /-43/) + .and('to match', /- actual/) + .and('to match', /\+ expected/); } }); - it('should interpret chaijs custom error messages', function () { + it('should interpret assert module custom error messages', function() { try { - // expect(43, 'custom error message').to.equal(42); + assert.equal(43, 42, 'custom error message'); // AssertionError: custom error message: expected 43 to equal 42. - assert.equal(43, 42, 'custom error message: expected 43 to equal 42.'); + // assert.equal(43, 42, 'custom error message: expected 43 to equal 42.'); } catch (err) { err.actual = 43; err.expected = 42; err.showDiff = true; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n'); - expect(errOut).to.match(/custom error message\n/); - expect(errOut).to.match(/\+42/); - expect(errOut).to.match(/-43/); - expect(errOut).to.match(/- actual/); - expect(errOut).to.match(/\+ expected/); + expect(errOut, 'to match', /custom error message\n/); + expect(errOut, 'to match', /\+42/); + expect(errOut, 'to match', /-43/); + expect(errOut, 'to match', /- actual/); + expect(errOut, 'to match', /\+ expected/); } }); - it('should remove message from stack', function () { + it('should remove message from stack', function() { err = { message: 'Error', stack: 'Error\nfoo\nbar', @@ -321,34 +362,36 @@ describe('Base reporter', function () { }; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n').trim(); - expect(errOut).to.equal('1) test title:\n Error\n foo\n bar'); + expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); - it('should use the inspect() property if `message` is not set', function () { + it('should use the inspect() property if `message` is not set', function() { err = { showDiff: false, - inspect: function () { return 'an error happened'; } + inspect: function() { + return 'an error happened'; + } }; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n').trim(); - expect(errOut).to.equal('1) test title:\n an error happened'); + expect(errOut, 'to be', '1) test title:\n an error happened'); }); - it('should set an empty message if `message` and `inspect()` are not set', function () { + it('should set an empty message if `message` and `inspect()` are not set', function() { err = { showDiff: false }; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n').trim(); - expect(errOut).to.equal('1) test title:'); + expect(errOut, 'to be', '1) test title:'); }); - it('should not modify stack if it does not contain message', function () { + it('should not modify stack if it does not contain message', function() { err = { message: 'Error', stack: 'foo\nbar', @@ -356,9 +399,9 @@ describe('Base reporter', function () { }; test = makeTest(err); - Base.list([test]); + list([test]); errOut = stdout.join('\n').trim(); - expect(errOut).to.equal('1) test title:\n Error\n foo\n bar'); + expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar'); }); }); diff --git a/test/reporters/doc.spec.js b/test/reporters/doc.spec.js index 4f3b48868a..e3de653528 100644 --- a/test/reporters/doc.spec.js +++ b/test/reporters/doc.spec.js @@ -5,27 +5,32 @@ var Doc = reporters.Doc; var createMockRunner = require('./helpers.js').createMockRunner; -describe('Doc reporter', function () { +describe('Doc reporter', function() { var stdout; var stdoutWrite; var runner; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on suite', function () { - describe('if suite root does not exist', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on suite', function() { + describe('if suite root does not exist', function() { var expectedTitle = 'expectedTitle'; var unescapedTitle = '
      ' + expectedTitle + '
      '; var suite = { root: false, title: expectedTitle }; - it('should log html with indents and expected title', function () { + it('should log html with indents and expected title', function() { runner = createMockRunner('suite', 'suite', null, null, suite); Doc.call(this, runner); process.stdout.write = stdoutWrite; @@ -34,9 +39,9 @@ describe('Doc reporter', function () { '

      ' + expectedTitle + '

      \n', '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); - it('should escape title where necessary', function () { + it('should escape title where necessary', function() { var suite = { root: false, title: unescapedTitle @@ -50,61 +55,59 @@ describe('Doc reporter', function () { '

      ' + expectedTitle + '

      \n', '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if suite root does exist', function () { + describe('if suite root does exist', function() { var suite = { root: true }; - it('should not log any html', function () { + it('should not log any html', function() { runner = createMockRunner('suite', 'suite', null, null, suite); Doc.call(this, runner); process.stdout.write = stdoutWrite; - expect(stdout).to.be.empty(); + expect(stdout, 'to be empty'); }); }); }); - describe('on suite end', function () { - describe('if suite root does not exist', function () { + describe('on suite end', function() { + describe('if suite root does not exist', function() { var suite = { root: false }; - it('should log expected html with indents', function () { + it('should log expected html with indents', function() { runner = createMockRunner('suite end', 'suite end', null, null, suite); Doc.call(this, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '
      \n', '\n' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['
      \n', '\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if suite root does exist', function () { + describe('if suite root does exist', function() { var suite = { root: true }; - it('should not log any html', function () { + it('should not log any html', function() { runner = createMockRunner('suite end', 'suite end', null, null, suite); Doc.call(this, runner); process.stdout.write = stdoutWrite; - expect(stdout).to.be.empty(); + expect(stdout, 'to be empty'); }); }); }); - describe('on pass', function () { + describe('on pass', function() { var expectedTitle = 'some tite'; var expectedBody = 'some body'; var test = { title: expectedTitle, body: expectedBody, - slow: function () { + slow: function() { return ''; } }; - it('should log html with indents and expected title and body', function () { + it('should log html with indents and expected title and body', function() { runner = createMockRunner('pass', 'pass', null, null, test); Doc.call(this, runner); process.stdout.write = stdoutWrite; @@ -112,16 +115,18 @@ describe('Doc reporter', function () { '
      ' + expectedTitle + '
      \n', '
      ' + expectedBody + '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); - it('should escape title and body where necessary', function () { + it('should escape title and body where necessary', function() { var unescapedTitle = '
      ' + expectedTitle + '
      '; var unescapedBody = '
      ' + expectedBody + '
      '; test.title = unescapedTitle; test.body = unescapedBody; - var expectedEscapedTitle = '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = '<div>' + expectedBody + '</div>'; + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; runner = createMockRunner('pass', 'pass', null, null, test); Doc.call(this, runner); process.stdout.write = stdoutWrite; @@ -129,51 +134,72 @@ describe('Doc reporter', function () { '
      ' + expectedEscapedTitle + '
      \n', '
      ' + expectedEscapedBody + '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('on fail', function () { + describe('on fail', function() { var expectedTitle = 'some tite'; var expectedBody = 'some body'; var expectedError = 'some error'; var test = { title: expectedTitle, body: expectedBody, - slow: function () { + slow: function() { return ''; } }; - it('should log html with indents and expected title, body and error', function () { - runner = createMockRunner('fail two args', 'fail', null, null, test, expectedError); + it('should log html with indents and expected title, body and error', function() { + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + test, + expectedError + ); Doc.call(this, runner); process.stdout.write = stdoutWrite; var expectedArray = [ '
      ' + expectedTitle + '
      \n', - '
      ' + expectedBody + '
      \n', + '
      ' +
      +          expectedBody +
      +          '
      \n', '
      ' + expectedError + '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); - it('should escape title, body and error where necessary', function () { + it('should escape title, body and error where necessary', function() { var unescapedTitle = '
      ' + expectedTitle + '
      '; var unescapedBody = '
      ' + expectedBody + '
      '; var unescapedError = '
      ' + expectedError + '
      '; test.title = unescapedTitle; test.body = unescapedBody; - var expectedEscapedTitle = '<div>' + expectedTitle + '</div>'; - var expectedEscapedBody = '<div>' + expectedBody + '</div>'; - var expectedEscapedError = '<div>' + expectedError + '</div>'; - runner = createMockRunner('fail two args', 'fail', null, null, test, unescapedError); + var expectedEscapedTitle = + '<div>' + expectedTitle + '</div>'; + var expectedEscapedBody = + '<div>' + expectedBody + '</div>'; + var expectedEscapedError = + '<div>' + expectedError + '</div>'; + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + test, + unescapedError + ); Doc.call(this, runner); process.stdout.write = stdoutWrite; var expectedArray = [ '
      ' + expectedEscapedTitle + '
      \n', - '
      ' + expectedEscapedBody + '
      \n', + '
      ' +
      +          expectedEscapedBody +
      +          '
      \n', '
      ' + expectedEscapedError + '
      \n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); diff --git a/test/reporters/dot.spec.js b/test/reporters/dot.spec.js index 228487ff0d..d1232f5560 100644 --- a/test/reporters/dot.spec.js +++ b/test/reporters/dot.spec.js @@ -6,18 +6,19 @@ var Base = reporters.Base; var createMockRunner = require('./helpers.js').createMockRunner; -describe('Dot reporter', function () { +describe('Dot reporter', function() { var stdout; var stdoutWrite; var runner; var useColors; var windowWidth; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; useColors = Base.useColors; windowWidth = Base.window.width; @@ -25,141 +26,125 @@ describe('Dot reporter', function () { Base.window.width = 0; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; Base.window.width = windowWidth; + process.stdout.write = stdoutWrite; }); - describe('on start', function () { - it('should return a new line', function () { + describe('on start', function() { + it('should return a new line', function() { runner = createMockRunner('start', 'start'); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\n' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('on pending', function () { - describe('if window width is greater than 1', function () { - beforeEach(function () { + describe('on pending', function() { + describe('if window width is greater than 1', function() { + beforeEach(function() { Base.window.width = 2; }); - it('should return a new line and then a coma', function () { + it('should return a new line and then a coma', function() { runner = createMockRunner('pending', 'pending'); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\n ', - Base.symbols.comma - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\n ', Base.symbols.comma]; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if window width is equal to or less than 1', function () { - it('should return a coma', function () { + describe('if window width is equal to or less than 1', function() { + it('should return a coma', function() { runner = createMockRunner('pending', 'pending'); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - Base.symbols.comma - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [Base.symbols.comma]; + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on pass', function () { + describe('on pass', function() { var test = { duration: 1, - slow: function () { return 2; } + slow: function() { + return 2; + } }; - describe('if window width is greater than 1', function () { - beforeEach(function () { + describe('if window width is greater than 1', function() { + beforeEach(function() { Base.window.width = 2; }); - describe('if test speed is fast', function () { - it('should return a new line and then a dot', function () { + describe('if test speed is fast', function() { + it('should return a new line and then a dot', function() { runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\n ', - Base.symbols.dot - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\n ', Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('if window width is equal to or less than 1', function () { - describe('if test speed is fast', function () { - it('should return a dot', function () { + describe('if window width is equal to or less than 1', function() { + describe('if test speed is fast', function() { + it('should return a dot', function() { runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - Base.symbols.dot - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if test speed is slow', function () { - it('should return a dot', function () { + describe('if test speed is slow', function() { + it('should return a dot', function() { test.duration = 2; runner = createMockRunner('pass', 'pass', null, null, test); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - Base.symbols.dot - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [Base.symbols.dot]; + expect(stdout, 'to equal', expectedArray); }); }); }); }); - describe('on fail', function () { + describe('on fail', function() { var test = { test: { err: 'some error' } }; - describe('if window width is greater than 1', function () { - beforeEach(function () { + describe('if window width is greater than 1', function() { + beforeEach(function() { Base.window.width = 2; }); - it('should return a new line and then an exclamation mark', function () { + it('should return a new line and then an exclamation mark', function() { runner = createMockRunner('fail', 'fail', null, null, test); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\n ', - Base.symbols.bang - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\n ', Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); }); }); - describe('if window width is equal to or less than 1', function () { - it('should return an exclamation mark', function () { + describe('if window width is equal to or less than 1', function() { + it('should return an exclamation mark', function() { runner = createMockRunner('fail', 'fail', null, null, test); - Dot.call({epilogue: function () {}}, runner); + Dot.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - Base.symbols.bang - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [Base.symbols.bang]; + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on end', function () { - it('should call the epilogue', function () { + describe('on end', function() { + it('should call the epilogue', function() { runner = createMockRunner('end', 'end'); var epilogueCalled = false; - var epilogue = function () { + var epilogue = function() { epilogueCalled = true; }; Dot.call({epilogue: epilogue}, runner); process.stdout.write = stdoutWrite; - expect(epilogueCalled).to.be(true); + expect(epilogueCalled, 'to be', true); }); }); }); diff --git a/test/reporters/helpers.js b/test/reporters/helpers.js index 08c96ae165..e0c6604216 100644 --- a/test/reporters/helpers.js +++ b/test/reporters/helpers.js @@ -8,21 +8,28 @@ scope of this function for the tests to run properly. */ -function createMockRunner (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { - var runnerFunction = createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2); +function createMockRunner(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { + var runnerFunction = createRunnerFunction( + runStr, + ifStr1, + ifStr2, + ifStr3, + arg1, + arg2 + ); return { on: runnerFunction, once: runnerFunction }; } -function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { +function createRunnerFunction(runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { var test = null; switch (runStr) { case 'start': case 'pending': case 'end': - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(); } @@ -34,7 +41,7 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { case 'suite end': case 'test end': test = arg1; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(test); } @@ -42,14 +49,14 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { case 'fail two args': test = arg1; var expectedError = arg2; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(test, expectedError); } }; case 'start test': test = arg1; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(); } @@ -59,7 +66,7 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { }; case 'suite suite end': var expectedSuite = arg1; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(expectedSuite); } @@ -72,7 +79,7 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { }; case 'pass end': test = arg1; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(test); } @@ -83,7 +90,7 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { case 'test end fail': test = arg1; var error = arg2; - return function (event, callback) { + return function(event, callback) { if (event === ifStr1) { callback(); } @@ -92,7 +99,7 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { } }; case 'fail end pass': - return function (event, callback) { + return function(event, callback) { test = arg1; if (event === ifStr1) { callback(test, {}); @@ -111,16 +118,16 @@ function createRunnerFunction (runStr, ifStr1, ifStr2, ifStr3, arg1, arg2) { } } -function makeTest (err) { +function makeTest(err) { return { err: err, - titlePath: function () { + titlePath: function() { return ['test title']; } }; } -function createElements (argObj) { +function createElements(argObj) { var res = []; for (var i = argObj.from; i <= argObj.to; i++) { res.push('element ' + i); @@ -128,7 +135,7 @@ function createElements (argObj) { return res; } -function makeExpectedTest ( +function makeExpectedTest( expectedTitle, expectedFullTitle, expectedDuration, @@ -137,20 +144,20 @@ function makeExpectedTest ( ) { return { title: expectedTitle, - fullTitle: function () { + fullTitle: function() { return expectedFullTitle; }, duration: expectedDuration, - currentRetry: function () { + currentRetry: function() { return currentRetry; }, - slow: function () {} + slow: function() {} }; } module.exports = { - createMockRunner, - makeTest, - createElements, - makeExpectedTest + createMockRunner: createMockRunner, + makeTest: makeTest, + createElements: createElements, + makeExpectedTest: makeExpectedTest }; diff --git a/test/reporters/json-stream.spec.js b/test/reporters/json-stream.spec.js index 0d11597038..3c5e1831f2 100644 --- a/test/reporters/json-stream.spec.js +++ b/test/reporters/json-stream.spec.js @@ -6,7 +6,7 @@ var JSONStream = reporters.JSONStream; var createMockRunner = require('./helpers').createMockRunner; var makeExpectedTest = require('./helpers').makeExpectedTest; -describe('Json Stream reporter', function () { +describe('Json Stream reporter', function() { var runner; var stdout; var stdoutWrite; @@ -15,23 +15,33 @@ describe('Json Stream reporter', function () { var expectedFullTitle = 'full title'; var expectedDuration = 1000; var currentRetry = 1; - var expectedTest = makeExpectedTest(expectedTitle, expectedFullTitle, expectedDuration, currentRetry); + var expectedTest = makeExpectedTest( + expectedTitle, + expectedFullTitle, + expectedDuration, + currentRetry + ); var expectedErrorMessage = 'error message'; var expectedErrorStack = 'error stack'; var expectedError = { message: expectedErrorMessage }; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on start', function () { - it('should write stringified start with expected total', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on start', function() { + it('should write stringified start with expected total', function() { runner = createMockRunner('start', 'start'); var expectedTotal = 12; runner.total = expectedTotal; @@ -39,54 +49,114 @@ describe('Json Stream reporter', function () { process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql('["start",{"total":' + expectedTotal + '}]\n'); + expect( + stdout[0], + 'to equal', + '["start",{"total":' + expectedTotal + '}]\n' + ); }); }); - describe('on pass', function () { - it('should write stringified test data', function () { + describe('on pass', function() { + it('should write stringified test data', function() { runner = createMockRunner('pass', 'pass', null, null, expectedTest); JSONStream.call({}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql('["pass",{"title":"' + expectedTitle + '","fullTitle":"' + expectedFullTitle + '","duration":' + expectedDuration + ',"currentRetry":' + currentRetry + '}]\n'); + expect( + stdout[0], + 'to equal', + '["pass",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + '}]\n' + ); }); }); - describe('on fail', function () { - describe('if error stack exists', function () { - it('should write stringified test data with error data', function () { + describe('on fail', function() { + describe('if error stack exists', function() { + it('should write stringified test data with error data', function() { expectedError.stack = expectedErrorStack; - runner = createMockRunner('fail two args', 'fail', null, null, expectedTest, expectedError); + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + expectedTest, + expectedError + ); JSONStream.call({}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql('["fail",{"title":"' + expectedTitle + '","fullTitle":"' + expectedFullTitle + '","duration":' + expectedDuration + ',"currentRetry":' + currentRetry + ',"err":"' + expectedErrorMessage + '","stack":"' + expectedErrorStack + '"}]\n'); + expect( + stdout[0], + 'to equal', + '["fail",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":"' + + expectedErrorMessage + + '","stack":"' + + expectedErrorStack + + '"}]\n' + ); }); }); - describe('if error stack does not exist', function () { - it('should write stringified test data with error data', function () { + describe('if error stack does not exist', function() { + it('should write stringified test data with error data', function() { expectedError.stack = null; - runner = createMockRunner('fail two args', 'fail', null, null, expectedTest, expectedError); + runner = createMockRunner( + 'fail two args', + 'fail', + null, + null, + expectedTest, + expectedError + ); JSONStream.call({}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql('["fail",{"title":"' + expectedTitle + '","fullTitle":"' + expectedFullTitle + '","duration":' + expectedDuration + ',"currentRetry":' + currentRetry + ',"err":"' + expectedErrorMessage + '","stack":null}]\n'); + expect( + stdout[0], + 'to equal', + '["fail",{"title":"' + + expectedTitle + + '","fullTitle":"' + + expectedFullTitle + + '","duration":' + + expectedDuration + + ',"currentRetry":' + + currentRetry + + ',"err":"' + + expectedErrorMessage + + '","stack":null}]\n' + ); }); }); }); - describe('on end', function () { - it('should write end details', function () { + describe('on end', function() { + it('should write end details', function() { runner = createMockRunner('end', 'end'); JSONStream.call({}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.match(/end/); + expect(stdout[0], 'to match', /end/); }); }); }); diff --git a/test/reporters/json.spec.js b/test/reporters/json.spec.js index a40eead75f..bc7406c199 100644 --- a/test/reporters/json.spec.js +++ b/test/reporters/json.spec.js @@ -5,11 +5,11 @@ var Suite = Mocha.Suite; var Runner = Mocha.Runner; var Test = Mocha.Test; -describe('json reporter', function () { +describe('json reporter', function() { var suite, runner; var testTitle = 'json test 1'; - beforeEach(function () { + beforeEach(function() { var mocha = new Mocha({ reporter: 'json' }); @@ -19,69 +19,79 @@ describe('json reporter', function () { var mochaReporter = new mocha._reporter(runner); }); - it('should have 1 test failure', function (done) { - var error = { message: 'oh shit' }; - - suite.addTest(new Test(testTitle, function (done) { - done(new Error(error.message)); - })); - - runner.run(function (failureCount) { - expect(failureCount).to.be(1); - expect(runner).to.have.property('testResults'); - expect(runner.testResults).to.have.property('failures'); - expect(runner.testResults.failures).to.be.an('array'); - expect(runner.testResults.failures).to.have.length(1); - - var failure = runner.testResults.failures[0]; - expect(failure).to.have.property('title', testTitle); - expect(failure.err.message).to.equal(error.message); - expect(failure).to.have.property('err'); - + it('should have 1 test failure', function(done) { + var error = {message: 'oh shit'}; + + suite.addTest( + new Test(testTitle, function(done) { + done(new Error(error.message)); + }) + ); + + runner.run(function(failureCount) { + expect(runner, 'to satisfy', { + testResults: { + failures: [ + { + title: testTitle, + err: { + message: error.message + } + } + ] + } + }); + expect(failureCount, 'to be', 1); done(); }); }); - it('should have 1 test pending', function (done) { + it('should have 1 test pending', function(done) { suite.addTest(new Test(testTitle)); - runner.run(function (failureCount) { - expect(failureCount).to.be(0); - expect(runner).to.have.property('testResults'); - expect(runner.testResults).to.have.property('pending'); - expect(runner.testResults.pending).to.be.an('array'); - expect(runner.testResults.pending).to.have.length(1); - - var pending = runner.testResults.pending[0]; - expect(pending).to.have.property('title', testTitle); - + runner.run(function(failureCount) { + expect(runner, 'to satisfy', { + testResults: { + pending: [ + { + title: testTitle + } + ] + } + }); + expect(failureCount, 'to be', 0); done(); }); }); - it('should handle circular objects in errors', function (done) { + it('should handle circular objects in errors', function(done) { var testTitle = 'json test 1'; - function CircleError () { + function CircleError() { this.message = 'oh shit'; this.circular = this; } var error = new CircleError(); - suite.addTest(new Test(testTitle, function (done) { - throw error; - })); - - runner.run(function (failureCount) { - expect(failureCount).to.equal(1); - expect(runner).to.have.property('testResults'); - expect(runner.testResults).to.have.property('failures'); - expect(runner.testResults.failures).to.be.an(Array); - expect(runner.testResults.failures).to.have.length(1); - - var failure = runner.testResults.failures[0]; - expect(failure).to.have.property('title', testTitle); - expect(failure).to.have.property('err'); - + suite.addTest( + new Test(testTitle, function(done) { + throw error; + }) + ); + + runner.run(function(failureCount) { + expect(runner, 'to satisfy', { + testResults: { + failures: [ + { + title: testTitle, + err: { + message: error.message + } + } + ] + } + }); + expect(failureCount, 'to be', 1); done(); }); }); diff --git a/test/reporters/landing.spec.js b/test/reporters/landing.spec.js index 633c29e823..da4134ce70 100644 --- a/test/reporters/landing.spec.js +++ b/test/reporters/landing.spec.js @@ -6,7 +6,7 @@ var Base = reporters.Base; var createMockRunner = require('./helpers').createMockRunner; -describe('Landing reporter', function () { +describe('Landing reporter', function() { var stdout; var stdoutWrite; var runner; @@ -24,11 +24,12 @@ describe('Landing reporter', function () { resetCode ]; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; useColors = Base.useColors; Base.useColors = false; @@ -36,43 +37,44 @@ describe('Landing reporter', function () { Base.window.width = 1; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; Base.window.width = windowWidth; + process.stdout.write = stdoutWrite; }); - describe('on start', function () { - it('should write new lines', function () { + describe('on start', function() { + it('should write new lines', function() { var cachedCursor = Base.cursor; - Base.cursor.hide = function () {}; + Base.cursor.hide = function() {}; runner = createMockRunner('start', 'start'); Landing.call({}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql('\n\n\n '); + expect(stdout[0], 'to equal', '\n\n\n '); Base.cursor = cachedCursor; }); - it('should call cursor hide', function () { + it('should call cursor hide', function() { var cachedCursor = Base.cursor; var calledCursorHide = false; - Base.cursor.hide = function () { + Base.cursor.hide = function() { calledCursorHide = true; }; runner = createMockRunner('start', 'start'); Landing.call({}, runner); process.stdout.write = stdoutWrite; - expect(calledCursorHide).to.be(true); + expect(calledCursorHide, 'to be', true); Base.cursor = cachedCursor; }); }); - describe('on test end', function () { - describe('if test has failed', function () { - it('should write expected landing strip', function () { + describe('on test end', function() { + describe('if test has failed', function() { + it('should write expected landing strip', function() { var test = { state: 'failed' }; @@ -82,11 +84,11 @@ describe('Landing reporter', function () { process.stdout.write = stdoutWrite; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if test has not failed', function () { - it('should write expected landing strip', function () { + describe('if test has not failed', function() { + it('should write expected landing strip', function() { var test = { state: 'success' }; @@ -96,29 +98,32 @@ describe('Landing reporter', function () { process.stdout.write = stdoutWrite; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on end', function () { - it('should call cursor show and epilogue', function () { + describe('on end', function() { + it('should call cursor show and epilogue', function() { var cachedCursor = Base.cursor; var calledCursorShow = false; - Base.cursor.show = function () { + Base.cursor.show = function() { calledCursorShow = true; }; runner = createMockRunner('end', 'end'); var calledEpilogue = false; - Landing.call({ - epilogue: function () { - calledEpilogue = true; - } - }, runner); + Landing.call( + { + epilogue: function() { + calledEpilogue = true; + } + }, + runner + ); process.stdout.write = stdoutWrite; - expect(calledEpilogue).to.be(true); - expect(calledCursorShow).to.be(true); + expect(calledEpilogue, 'to be', true); + expect(calledCursorShow, 'to be', true); Base.cursor = cachedCursor; }); diff --git a/test/reporters/list.spec.js b/test/reporters/list.spec.js index 7871caf82e..7b9c74fb43 100644 --- a/test/reporters/list.spec.js +++ b/test/reporters/list.spec.js @@ -6,7 +6,7 @@ var Base = reporters.Base; var createMockRunner = require('./helpers').createMockRunner; -describe('List reporter', function () { +describe('List reporter', function() { var stdout; var stdoutWrite; var runner; @@ -14,120 +14,133 @@ describe('List reporter', function () { var expectedTitle = 'some title'; var expectedDuration = 100; var test = { - fullTitle: function () { + fullTitle: function() { return expectedTitle; }, duration: expectedDuration, - slow: function () {} + slow: function() {} }; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; useColors = Base.useColors; Base.useColors = false; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; + process.stdout.write = stdoutWrite; }); - describe('on start and test', function () { - it('should write expected new line and title to the console', function () { + describe('on start and test', function() { + it('should write expected new line and title to the console', function() { runner = createMockRunner('start test', 'start', 'test', null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; var startString = '\n'; var testString = ' ' + expectedTitle + ': '; - var expectedArray = [ - startString, - testString - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [startString, testString]; + expect(stdout, 'to equal', expectedArray); }); }); - describe('on pending', function () { - it('should write expected title to the console', function () { + describe('on pending', function() { + it('should write expected title to the console', function() { runner = createMockRunner('pending test', 'pending', null, null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.eql(' - ' + expectedTitle + '\n'); + expect(stdout[0], 'to equal', ' - ' + expectedTitle + '\n'); }); }); - describe('on pass', function () { - it('should call cursor CR', function () { + describe('on pass', function() { + it('should call cursor CR', function() { var calledCursorCR = false; var cachedCursor = Base.cursor; - Base.cursor.CR = function () { + Base.cursor.CR = function() { calledCursorCR = true; }; runner = createMockRunner('pass', 'pass', null, null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(calledCursorCR).to.be(true); + expect(calledCursorCR, 'to be', true); Base.cursor = cachedCursor; }); - it('should write expected symbol, title and duration to the console', function () { + it('should write expected symbol, title and duration to the console', function() { var cachedSymbols = Base.symbols; var expectedOkSymbol = 'OK'; Base.symbols.ok = expectedOkSymbol; var cachedCursor = Base.cursor; - Base.cursor.CR = function () {}; + Base.cursor.CR = function() {}; runner = createMockRunner('pass', 'pass', null, null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.equal(' ' + expectedOkSymbol + ' ' + expectedTitle + ': ' + expectedDuration + 'ms\n'); + expect( + stdout[0], + 'to be', + ' ' + + expectedOkSymbol + + ' ' + + expectedTitle + + ': ' + + expectedDuration + + 'ms\n' + ); Base.cursor = cachedCursor; Base.symbols = cachedSymbols; }); }); - describe('on fail', function () { - it('should call cursor CR', function () { + describe('on fail', function() { + it('should call cursor CR', function() { var calledCursorCR = false; var cachedCursor = Base.cursor; - Base.cursor.CR = function () { + Base.cursor.CR = function() { calledCursorCR = true; }; runner = createMockRunner('fail', 'fail', null, null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(calledCursorCR).to.be(true); + expect(calledCursorCR, 'to be', true); Base.cursor = cachedCursor; }); - it('should write expected error number and title', function () { + it('should write expected error number and title', function() { var cachedCursor = Base.cursor; var expectedErrorCount = 1; - Base.cursor.CR = function () {}; + Base.cursor.CR = function() {}; runner = createMockRunner('fail', 'fail', null, null, test); - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.equal(' ' + expectedErrorCount + ') ' + expectedTitle + '\n'); + expect( + stdout[0], + 'to be', + ' ' + expectedErrorCount + ') ' + expectedTitle + '\n' + ); Base.cursor = cachedCursor; }); - it('should immediately construct fail strings', function () { - var actual = { a: 'actual' }; - var expected = { a: 'expected' }; + it('should immediately construct fail strings', function() { + var actual = {a: 'actual'}; + var expected = {a: 'expected'}; var checked = false; var err; test = {}; - runner.on = runner.once = function (event, callback) { + runner.on = runner.once = function(event, callback) { if (!checked && event === 'fail') { err = new Error('fake failure object with actual/expected'); err.actual = actual; @@ -137,26 +150,29 @@ describe('List reporter', function () { checked = true; } }; - List.call({epilogue: function () {}}, runner); + List.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - expect(typeof err.actual).to.equal('string'); - expect(typeof err.expected).to.equal('string'); + expect(typeof err.actual, 'to be', 'string'); + expect(typeof err.expected, 'to be', 'string'); }); }); - describe('on end', function () { - it('should call epilogue', function () { + describe('on end', function() { + it('should call epilogue', function() { var calledEpilogue = false; runner = createMockRunner('end', 'end'); - List.call({ - epilogue: function () { - calledEpilogue = true; - } - }, runner); + List.call( + { + epilogue: function() { + calledEpilogue = true; + } + }, + runner + ); process.stdout.write = stdoutWrite; - expect(calledEpilogue).to.be(true); + expect(calledEpilogue, 'to be', true); }); }); }); diff --git a/test/reporters/markdown.spec.js b/test/reporters/markdown.spec.js index f6fcf095e0..f6fc63f119 100644 --- a/test/reporters/markdown.spec.js +++ b/test/reporters/markdown.spec.js @@ -5,7 +5,7 @@ var Markdown = reporters.Markdown; var createMockRunner = require('./helpers').createMockRunner; -describe('Markdown reporter', function () { +describe('Markdown reporter', function() { var stdout; var stdoutWrite; var runner; @@ -13,44 +13,71 @@ describe('Markdown reporter', function () { var expectedFullTitle = 'full title'; var sluggedFullTitle = 'full-title'; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on \'suite\'', function () { - it('should write expected slugged titles on \'end\' event', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe("on 'suite'", function() { + it("should write expected slugged titles on 'end' event", function() { var expectedSuite = { title: expectedTitle, - fullTitle: function () { return expectedFullTitle; }, - suites: [{ - title: expectedTitle, - fullTitle: function () { return expectedFullTitle; }, - suites: [] - }] + fullTitle: function() { + return expectedFullTitle; + }, + suites: [ + { + title: expectedTitle, + fullTitle: function() { + return expectedFullTitle; + }, + suites: [] + } + ] }; - runner = createMockRunner('suite suite end', 'suite', 'suite end', 'end', expectedSuite); + runner = createMockRunner( + 'suite suite end', + 'suite', + 'suite end', + 'end', + expectedSuite + ); runner.suite = expectedSuite; Markdown.call({}, runner); process.stdout.write = stdoutWrite; var expectedArray = [ '# TOC\n', - ' - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n - [' + expectedTitle + '](#' + sluggedFullTitle + ')\n', + ' - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n - [' + + expectedTitle + + '](#' + + sluggedFullTitle + + ')\n', '\n ' + expectedTitle + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('on \'pass\'', function () { - it('should write test code inside js code block, on \'end\' event', function () { + describe("on 'pass'", function() { + it("should write test code inside js code block, on 'end' event", function() { var expectedSuite = { title: expectedTitle, - fullTitle: function () { return expectedFullTitle; }, + fullTitle: function() { + return expectedFullTitle; + }, suites: [] }; var expectedDuration = 1000; @@ -58,10 +85,14 @@ describe('Markdown reporter', function () { var expectedBody = 'some body'; var expectedTest = { title: expectedTitle, - fullTitle: function () { return expectedFullTitle; }, + fullTitle: function() { + return expectedFullTitle; + }, duration: expectedDuration, - currentRetry: function () { return currentRetry; }, - slow: function () {}, + currentRetry: function() { + return currentRetry; + }, + slow: function() {}, body: expectedBody }; runner = createMockRunner('pass end', 'pass', 'end', null, expectedTest); @@ -75,7 +106,7 @@ describe('Markdown reporter', function () { expectedTitle + '.\n\n```js\n' + expectedBody + '\n```\n\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); diff --git a/test/reporters/min.spec.js b/test/reporters/min.spec.js index 1312e21ea8..30b05126ec 100644 --- a/test/reporters/min.spec.js +++ b/test/reporters/min.spec.js @@ -5,45 +5,50 @@ var Min = reporters.Min; var createMockRunner = require('./helpers').createMockRunner; -describe('Min reporter', function () { +describe('Min reporter', function() { var stdout; var stdoutWrite; var runner; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on start', function () { - it('should clear screen then set cursor position', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on start', function() { + it('should clear screen then set cursor position', function() { runner = createMockRunner('start', 'start'); - Min.call({epilogue: function () {}}, runner); + Min.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\u001b[2J', - '\u001b[1;3H' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\u001b[2J', '\u001b[1;3H']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('on end', function () { - it('should call epilogue', function () { + describe('on end', function() { + it('should call epilogue', function() { var calledEpilogue = false; runner = createMockRunner('end', 'end'); - Min.call({ - epilogue: function () { - calledEpilogue = true; - } - }, runner); + Min.call( + { + epilogue: function() { + calledEpilogue = true; + } + }, + runner + ); process.stdout.write = stdoutWrite; - expect(calledEpilogue).to.be(true); + expect(calledEpilogue, 'to be', true); }); }); }); diff --git a/test/reporters/nyan.spec.js b/test/reporters/nyan.spec.js index 43e8c778e1..1296ab1195 100644 --- a/test/reporters/nyan.spec.js +++ b/test/reporters/nyan.spec.js @@ -6,165 +6,197 @@ var Base = reporters.Base; var createMockRunner = require('./helpers').createMockRunner; -describe('Nyan reporter', function () { - describe('events', function () { +describe('Nyan reporter', function() { + describe('events', function() { var runner; var stdout; var stdoutWrite; var calledDraw; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on start', function () { - it('should call draw', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on start', function() { + it('should call draw', function() { calledDraw = false; runner = createMockRunner('start', 'start'); - NyanCat.call({ - draw: function () { - calledDraw = true; + NyanCat.call( + { + draw: function() { + calledDraw = true; + }, + generateColors: function() {} }, - generateColors: function () {} - }, runner); + runner + ); process.stdout.write = stdoutWrite; - expect(calledDraw).to.be(true); + expect(calledDraw, 'to be', true); }); }); - describe('on pending', function () { - it('should call draw', function () { + describe('on pending', function() { + it('should call draw', function() { calledDraw = false; runner = createMockRunner('pending', 'pending'); - NyanCat.call({ - draw: function () { - calledDraw = true; + NyanCat.call( + { + draw: function() { + calledDraw = true; + }, + generateColors: function() {} }, - generateColors: function () {} - }, runner); + runner + ); process.stdout.write = stdoutWrite; - expect(calledDraw).to.be(true); + expect(calledDraw, 'to be', true); }); }); - describe('on pass', function () { - it('should call draw', function () { + describe('on pass', function() { + it('should call draw', function() { calledDraw = false; var test = { duration: '', - slow: function () {} + slow: function() {} }; runner = createMockRunner('pass', 'pass', null, null, test); - NyanCat.call({ - draw: function () { - calledDraw = true; + NyanCat.call( + { + draw: function() { + calledDraw = true; + }, + generateColors: function() {} }, - generateColors: function () {} - }, runner); + runner + ); process.stdout.write = stdoutWrite; - expect(calledDraw).to.be(true); + expect(calledDraw, 'to be', true); }); }); - describe('on fail', function () { - it('should call draw', function () { + describe('on fail', function() { + it('should call draw', function() { calledDraw = false; var test = { err: '' }; runner = createMockRunner('fail', 'fail', null, null, test); - NyanCat.call({ - draw: function () { - calledDraw = true; + NyanCat.call( + { + draw: function() { + calledDraw = true; + }, + generateColors: function() {} }, - generateColors: function () {} - }, runner); + runner + ); process.stdout.write = stdoutWrite; - expect(calledDraw).to.be(true); + expect(calledDraw, 'to be', true); }); }); - describe('on end', function () { - it('should call epilogue', function () { + describe('on end', function() { + it('should call epilogue', function() { var calledEpilogue = false; runner = createMockRunner('end', 'end'); - NyanCat.call({ - draw: function () {}, - generateColors: function () {}, - epilogue: function () { - calledEpilogue = true; - } - }, runner); + NyanCat.call( + { + draw: function() {}, + generateColors: function() {}, + epilogue: function() { + calledEpilogue = true; + } + }, + runner + ); process.stdout.write = stdoutWrite; - expect(calledEpilogue).to.be(true); + expect(calledEpilogue, 'to be', true); }); - it('should write numberOfLines amount of new lines', function () { + it('should write numberOfLines amount of new lines', function() { var expectedNumberOfLines = 4; runner = createMockRunner('end', 'end'); - NyanCat.call({ - draw: function () {}, - generateColors: function () {}, - epilogue: function () {} - }, runner); + NyanCat.call( + { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} + }, + runner + ); - var arrayOfNewlines = stdout.filter(function (value) { return value === '\n'; }); + var arrayOfNewlines = stdout.filter(function(value) { + return value === '\n'; + }); process.stdout.write = stdoutWrite; - expect(arrayOfNewlines).to.have.length(expectedNumberOfLines); + expect(arrayOfNewlines, 'to have length', expectedNumberOfLines); }); - it('should call Base show', function () { + it('should call Base show', function() { var showCalled = false; var cachedShow = Base.cursor.show; - Base.cursor.show = function () { + Base.cursor.show = function() { showCalled = true; }; runner = createMockRunner('end', 'end'); - NyanCat.call({ - draw: function () {}, - generateColors: function () {}, - epilogue: function () {} - }, runner); + NyanCat.call( + { + draw: function() {}, + generateColors: function() {}, + epilogue: function() {} + }, + runner + ); process.stdout.write = stdoutWrite; - expect(showCalled).to.be(true); + expect(showCalled, 'to be', true); Base.cursor.show = cachedShow; }); }); }); - describe('draw', function () { + describe('draw', function() { var stdout; var stdoutWrite; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); }; }); - describe('if tick is false', function () { - it('should draw face with expected spaces, _ and ^', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 2, pending: 1, failures: 0 }; + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('if tick is false', function() { + it('should draw face with expected spaces, _ and ^', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 2, pending: 1, failures: 0}; nyanCat.draw.call({ tick: false, - appendRainbow: function () {}, - rainbowify: function () {}, - drawScoreboard: function () {}, - drawRainbow: function () {}, + appendRainbow: function() {}, + rainbowify: function() {}, + drawScoreboard: function() {}, + drawRainbow: function() {}, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function () {}, - cursorUp: function () {} + face: function() {}, + cursorUp: function() {} }); process.stdout.write = stdoutWrite; @@ -182,28 +214,28 @@ describe('Nyan reporter', function () { ' "" "" ', '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if tick is true', function () { - it('should draw face with expected spaces, _ and ~', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 2, pending: 1, failures: 0 }; + describe('if tick is true', function() { + it('should draw face with expected spaces, _ and ~', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 2, pending: 1, failures: 0}; nyanCat.draw.call({ tick: true, - appendRainbow: function () {}, - rainbowify: function () {}, - drawScoreboard: function () {}, - drawRainbow: function () {}, + appendRainbow: function() {}, + rainbowify: function() {}, + drawScoreboard: function() {}, + drawRainbow: function() {}, drawNyanCat: NyanCat.prototype.drawNyanCat, scoreboardWidth: 0, trajectories: [[]], - face: function () {}, - cursorUp: function () {} + face: function() {}, + cursorUp: function() {} }); - process.stdout.write = stdoutWrite; + // process.stdout.write = stdoutWrite; var expectedArray = [ '\u001b[0C', '_,------,', @@ -218,122 +250,128 @@ describe('Nyan reporter', function () { ' "" "" ', '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('cursorDown', function () { + describe('cursorDown', function() { var stdout; var stdoutWrite; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string) { stdout.push(string); }; }); - it('should write cursor down interaction with expected number', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + it('should write cursor down interaction with expected number', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedNumber = 25; nyanCat.cursorDown(expectedNumber); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\u001b[' + expectedNumber + 'B' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\u001b[' + expectedNumber + 'B']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('cursorUp', function () { + describe('cursorUp', function() { var stdout; var stdoutWrite; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); }; }); - it('should write cursor up interaction with expected number', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + it('should write cursor up interaction with expected number', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedNumber = 25; nyanCat.cursorUp(expectedNumber); process.stdout.write = stdoutWrite; - var expectedArray = [ - '\u001b[' + expectedNumber + 'A' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = ['\u001b[' + expectedNumber + 'A']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('rainbowify', function () { - describe('useColors is false', function () { + describe('rainbowify', function() { + describe('useColors is false', function() { var useColors; - beforeEach(function () { + beforeEach(function() { useColors = Base.useColors; Base.useColors = false; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; }); - it('should return argument string', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + it('should return argument string', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedString = 'hello'; var outputString = nyanCat.rainbowify(expectedString); - expect(outputString).to.equal(expectedString); + expect(outputString, 'to be', expectedString); }); }); - describe('useColors is true', function () { + describe('useColors is true', function() { var useColors; - beforeEach(function () { + beforeEach(function() { useColors = Base.useColors; Base.useColors = true; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; }); - it('should return rainbowified string from the given string and predefined codes', function () { + it('should return rainbowified string from the given string and predefined codes', function() { var startCode = '\u001b[38;5;'; var endCode = '\u001b[0m'; - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedString = 'hello'; var colorCode = 'somecode'; - var expectedRainbowifyString = startCode + colorCode + 'm' + expectedString + endCode; + var expectedRainbowifyString = + startCode + colorCode + 'm' + expectedString + endCode; var outputString = nyanCat.rainbowify.call( { rainbowColors: [colorCode], colorIndex: 0 }, - expectedString); + expectedString + ); - expect(outputString).to.equal(expectedRainbowifyString); + expect(outputString, 'to be', expectedRainbowifyString); }); }); }); - describe('appendRainbow', function () { - describe('if tick is true', function () { - it('should set an _ segment', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + describe('appendRainbow', function() { + describe('if tick is true', function() { + it('should set an _ segment', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; nyanCat.appendRainbow.call({ tick: true, - rainbowify: function (segment) { + rainbowify: function(segment) { expectedSegment = segment; }, numberOfLines: 4, @@ -341,36 +379,43 @@ describe('Nyan reporter', function () { trajectories: trajectories }); - expect(expectedSegment).to.equal('_'); + expect(expectedSegment, 'to be', '_'); }); - it('should shift each trajectory item, if its length is greater of equal to its max width', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + it('should shift each trajectory item, if its length is greater of equal to its max width', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var rainbowifyResult = 'rainbowify'; var inputArray = ['itemToShify']; var trajectories = [inputArray, inputArray, inputArray, inputArray]; var expectedArray = [rainbowifyResult]; - var expectedTrajectories = [expectedArray, expectedArray, expectedArray, expectedArray]; + var expectedTrajectories = [ + expectedArray, + expectedArray, + expectedArray, + expectedArray + ]; nyanCat.appendRainbow.call({ tick: true, - rainbowify: function () { return rainbowifyResult; }, + rainbowify: function() { + return rainbowifyResult; + }, numberOfLines: 4, trajectoryWidthMax: 0, trajectories: trajectories }); - expect(trajectories).to.eql(expectedTrajectories); + expect(trajectories, 'to equal', expectedTrajectories); }); }); - describe('if tick is false', function () { - it('should set an - segment', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + describe('if tick is false', function() { + it('should set an - segment', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); var expectedSegment; var inputArray = []; var trajectories = [inputArray, inputArray, inputArray, inputArray]; nyanCat.appendRainbow.call({ tick: false, - rainbowify: function (segment) { + rainbowify: function(segment) { expectedSegment = segment; }, numberOfLines: 4, @@ -378,30 +423,42 @@ describe('Nyan reporter', function () { trajectories: trajectories }); - expect(expectedSegment).to.eql('-'); + expect(expectedSegment, 'to equal', '-'); }); }); }); - describe('drawScoreboard', function () { - it('should write scoreboard with color set with each stat', function () { - var cachedColor = Base.color; - Base.color = function (type, n) { - return type + n; - }; - var stdout = []; - var stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + describe('drawScoreboard', function() { + var stdoutWrite; + var stdout; + var cachedColor; + + beforeEach(function() { + stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); + }; + cachedColor = Base.color; + Base.color = function(type, n) { + return type + n; }; + }); + afterEach(function() { + process.stdout.write = stdoutWrite; + Base.color = cachedColor; + }); + + it('should write scoreboard with color set with each stat', function() { var passes = 2; var pending = 1; var failures = 1; - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.drawScoreboard.call({ - cursorUp: function () {}, - stats: { passes: passes, pending: pending, failures: failures }, + cursorUp: function() {}, + stats: {passes: passes, pending: pending, failures: failures}, numberOfLines: 4 }); var expectedArray = [ @@ -416,48 +473,52 @@ describe('Nyan reporter', function () { '\n', '\n' ]; - expect(stdout).to.eql(expectedArray); - process.stdout.write = stdoutWrite; - Base.color = cachedColor; + expect(stdout, 'to equal', expectedArray); }); - it('should call cursorUp with given numberOfLines', function () { - var stdout = []; - var stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { - stdout.push(string); - }; + + it('should call cursorUp with given numberOfLines', function() { var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.drawScoreboard.call({ - cursorUp: function (lines) { + cursorUp: function(lines) { expectedCursorArgument = lines; }, - stats: { passes: 0, pending: 0, failures: 0 }, + stats: {passes: 0, pending: 0, failures: 0}, numberOfLines: expectedNumberOfLines }); - expect(expectedCursorArgument).to.equal(expectedNumberOfLines); - process.stdout.write = stdoutWrite; + expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - describe('drawRainbow', function () { - it('should write width, contents and newline for each trajectory', function () { - var stdout = []; - var stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + describe('drawRainbow', function() { + var stdoutWrite; + var stdout; + + beforeEach(function() { + stdout = []; + stdoutWrite = process.stdout.write; + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; + }); + + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + it('should write width, contents and newline for each trajectory', function() { var expectedWidth = 444; var expectedContents = 'input'; var inputArray = [expectedContents]; var trajectories = [inputArray]; - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.drawRainbow.call({ - cursorUp: function () {}, + cursorUp: function() {}, trajectories: trajectories, scoreboardWidth: expectedWidth, numberOfLines: 1 @@ -469,21 +530,16 @@ describe('Nyan reporter', function () { expectedContents, '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); - it('should call cursorUp with given numberOfLines', function () { - var stdout = []; - var stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { - stdout.push(string); - }; + it('should call cursorUp with given numberOfLines', function() { var expectedCursorArgument = null; var expectedNumberOfLines = 1000; - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); nyanCat.drawRainbow.call({ - cursorUp: function (lines) { + cursorUp: function(lines) { expectedCursorArgument = lines; }, trajectories: [['input']], @@ -491,33 +547,32 @@ describe('Nyan reporter', function () { numberOfLines: expectedNumberOfLines }); - expect(expectedCursorArgument).to.equal(expectedNumberOfLines); - process.stdout.write = stdoutWrite; + expect(expectedCursorArgument, 'to be', expectedNumberOfLines); }); }); - describe('face', function () { - it('expected face:(x .x) when "failures" at least one', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 2, pending: 1, failures: 1 }; - expect(nyanCat.face()).to.equal('( x .x)'); + describe('face', function() { + it('expected face:(x .x) when "failures" at least one', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 2, pending: 1, failures: 1}; + expect(nyanCat.face(), 'to be', '( x .x)'); }); - it('expected face:(x .x) when "pending" at least one and no failing', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 2, pending: 1, failures: 0 }; - expect(nyanCat.face()).to.equal('( o .o)'); + it('expected face:(x .x) when "pending" at least one and no failing', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 2, pending: 1, failures: 0}; + expect(nyanCat.face(), 'to be', '( o .o)'); }); - it('expected face:(^ .^) when "passing" only', function () { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 1, pending: 0, failures: 0 }; - expect(nyanCat.face()).to.equal('( ^ .^)'); + it('expected face:(^ .^) when "passing" only', function() { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 1, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( ^ .^)'); }); - it('expected face:(- .-) when otherwise', function (done) { - var nyanCat = new NyanCat({on: function () {}, once: function () {}}); - nyanCat.stats = { passes: 0, pending: 0, failures: 0 }; - expect(nyanCat.face()).to.equal('( - .-)'); + it('expected face:(- .-) when otherwise', function(done) { + var nyanCat = new NyanCat({on: function() {}, once: function() {}}); + nyanCat.stats = {passes: 0, pending: 0, failures: 0}; + expect(nyanCat.face(), 'to be', '( - .-)'); done(); }); }); diff --git a/test/reporters/progress.spec.js b/test/reporters/progress.spec.js index 47818f841d..ef08ea5582 100644 --- a/test/reporters/progress.spec.js +++ b/test/reporters/progress.spec.js @@ -6,43 +6,48 @@ var Base = reporters.Base; var createMockRunner = require('./helpers').createMockRunner; -describe('Progress reporter', function () { +describe('Progress reporter', function() { var stdout; var stdoutWrite; var runner; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; }); - describe('on start', function () { - it('should call cursor hide', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on start', function() { + it('should call cursor hide', function() { var cachedCursor = Base.cursor; var calledCursorHide = false; - Base.cursor.hide = function () { + Base.cursor.hide = function() { calledCursorHide = true; }; runner = createMockRunner('start', 'start'); Progress.call({}, runner); process.stdout.write = stdoutWrite; - expect(calledCursorHide).to.be(true); + expect(calledCursorHide, 'to be', true); Base.cursor = cachedCursor; }); }); - describe('on test end', function () { - describe('if line has not changed', function () { - it('should return and not write anything', function () { + describe('on test end', function() { + describe('if line has not changed', function() { + it('should return and not write anything', function() { var cachedCursor = Base.cursor; var useColors = Base.useColors; Base.useColors = false; - Base.cursor.CR = function () {}; + Base.cursor.CR = function() {}; var windowWidth = Base.window.width; Base.window.width = -3; @@ -54,20 +59,20 @@ describe('Progress reporter', function () { process.stdout.write = stdoutWrite; - expect(stdout).to.eql([]); + expect(stdout, 'to equal', []); Base.cursor = cachedCursor; Base.useColors = useColors; Base.window.width = windowWidth; }); }); - describe('if line has changed', function () { - it('should write expected progress of open and close options', function () { + describe('if line has changed', function() { + it('should write expected progress of open and close options', function() { var calledCursorCR = false; var cachedCursor = Base.cursor; var useColors = Base.useColors; Base.useColors = false; - Base.cursor.CR = function () { + Base.cursor.CR = function() { calledCursorCR = true; }; var windowWidth = Base.window.width; @@ -98,8 +103,8 @@ describe('Progress reporter', function () { expectedIncomplete, expectedClose ]; - expect(calledCursorCR).to.be(true); - expect(stdout).to.eql(expectedArray); + expect(calledCursorCR, 'to be', true); + expect(stdout, 'to equal', expectedArray); Base.cursor = cachedCursor; Base.useColors = useColors; @@ -108,24 +113,27 @@ describe('Progress reporter', function () { }); }); - describe('on end', function () { - it('should call cursor show and epilogue', function () { + describe('on end', function() { + it('should call cursor show and epilogue', function() { var cachedCursor = Base.cursor; var calledCursorShow = false; - Base.cursor.show = function () { + Base.cursor.show = function() { calledCursorShow = true; }; runner = createMockRunner('end', 'end'); var calledEpilogue = false; - Progress.call({ - epilogue: function () { - calledEpilogue = true; - } - }, runner); + Progress.call( + { + epilogue: function() { + calledEpilogue = true; + } + }, + runner + ); process.stdout.write = stdoutWrite; - expect(calledEpilogue).to.be(true); - expect(calledCursorShow).to.be(true); + expect(calledEpilogue, 'to be', true); + expect(calledCursorShow, 'to be', true); Base.cursor = cachedCursor; }); diff --git a/test/reporters/spec.spec.js b/test/reporters/spec.spec.js index cb662e4530..2f4eee33e5 100644 --- a/test/reporters/spec.spec.js +++ b/test/reporters/spec.spec.js @@ -6,100 +6,109 @@ var Base = reporters.Base; var createMockRunner = require('./helpers').createMockRunner; -describe('Spec reporter', function () { +describe('Spec reporter', function() { var stdout; var stdoutWrite; var runner; var useColors; var expectedTitle = 'expectedTitle'; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; useColors = Base.useColors; Base.useColors = false; }); - afterEach(function () { + afterEach(function() { Base.useColors = useColors; + process.stdout.write = stdoutWrite; }); - describe('on suite', function () { - it('should return title', function () { + describe('on suite', function() { + it('should return title', function() { var suite = { title: expectedTitle }; runner = createMockRunner('suite', 'suite', null, null, suite); - Spec.call({epilogue: function () {}}, runner); + Spec.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - expectedTitle + '\n' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('on pending', function () { - it('should return title', function () { + describe('on pending', function() { + it('should return title', function() { var suite = { title: expectedTitle }; runner = createMockRunner('pending test', 'pending', null, null, suite); - Spec.call({epilogue: function () {}}, runner); + Spec.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - ' - ' + expectedTitle + '\n' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [' - ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); }); - describe('on pass', function () { - describe('if test speed is slow', function () { - it('should return expected tick, title and duration', function () { + describe('on pass', function() { + describe('if test speed is slow', function() { + it('should return expected tick, title and duration', function() { var expectedDuration = 2; var test = { title: expectedTitle, duration: expectedDuration, - slow: function () { return 1; } + slow: function() { + return 1; + } }; runner = createMockRunner('pass', 'pass', null, null, test); - Spec.call({epilogue: function () {}}, runner); + Spec.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedString = ' ' + Base.symbols.ok + ' ' + expectedTitle + ' (' + expectedDuration + 'ms)' + '\n'; - expect(stdout[0]).to.equal(expectedString); + var expectedString = + ' ' + + Base.symbols.ok + + ' ' + + expectedTitle + + ' (' + + expectedDuration + + 'ms)' + + '\n'; + expect(stdout[0], 'to be', expectedString); }); }); - describe('if test speed is fast', function () { - it('should return expected tick, title and without a duration', function () { + describe('if test speed is fast', function() { + it('should return expected tick, title and without a duration', function() { var expectedDuration = 1; var test = { title: expectedTitle, duration: expectedDuration, - slow: function () { return 2; } + slow: function() { + return 2; + } }; runner = createMockRunner('pass', 'pass', null, null, test); - Spec.call({epilogue: function () {}}, runner); + Spec.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedString = ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; - expect(stdout[0]).to.equal(expectedString); + var expectedString = + ' ' + Base.symbols.ok + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to be', expectedString); }); }); }); - describe('on fail', function () { - it('should return title and function count', function () { + describe('on fail', function() { + it('should return title and function count', function() { var functionCount = 1; var test = { title: expectedTitle }; runner = createMockRunner('fail', 'fail', null, null, test); - Spec.call({epilogue: function () {}}, runner); + Spec.call({epilogue: function() {}}, runner); process.stdout.write = stdoutWrite; - var expectedArray = [ - ' ' + functionCount + ') ' + expectedTitle + '\n' - ]; - expect(stdout).to.eql(expectedArray); + var expectedArray = [' ' + functionCount + ') ' + expectedTitle + '\n']; + expect(stdout, 'to equal', expectedArray); }); }); }); diff --git a/test/reporters/tap.spec.js b/test/reporters/tap.spec.js index 9b7eac9491..5030cbde5c 100644 --- a/test/reporters/tap.spec.js +++ b/test/reporters/tap.spec.js @@ -5,7 +5,7 @@ var TAP = reporters.TAP; var createMockRunner = require('./helpers').createMockRunner; -describe('TAP reporter', function () { +describe('TAP reporter', function() { var stdout; var stdoutWrite; var runner; @@ -13,88 +13,99 @@ describe('TAP reporter', function () { var countAfterTestEnd = 2; var test; - beforeEach(function () { + beforeEach(function() { stdout = []; stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string, enc, callback) { stdout.push(string); + stdoutWrite.call(process.stdout, string, enc, callback); }; test = { - fullTitle: function () { + fullTitle: function() { return expectedTitle; }, - slow: function () {} + slow: function() {} }; }); - describe('on start', function () { - it('should hand runners suite into grepTotal and log the total', function () { + afterEach(function() { + process.stdout.write = stdoutWrite; + }); + + describe('on start', function() { + it('should hand runners suite into grepTotal and log the total', function() { var expectedSuite = 'some suite'; var expectedTotal = 10; var expectedString; runner = createMockRunner('start', 'start'); runner.suite = expectedSuite; - runner.grepTotal = function (string) { + runner.grepTotal = function(string) { expectedString = string; return expectedTotal; }; TAP.call({}, runner); - var expectedArray = [ - '1..' + expectedTotal + '\n' - ]; + var expectedArray = ['1..' + expectedTotal + '\n']; process.stdout.write = stdoutWrite; - expect(stdout).to.eql(expectedArray); - expect(expectedString).to.equal(expectedSuite); + expect(stdout, 'to equal', expectedArray); + expect(expectedString, 'to be', expectedSuite); }); }); - describe('on pending', function () { - it('should write expected message including count and title', function () { - runner = createMockRunner('start test', 'test end', 'pending', null, test); + describe('on pending', function() { + it('should write expected message including count and title', function() { + runner = createMockRunner( + 'start test', + 'test end', + 'pending', + null, + test + ); runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; - var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; - expect(stdout[0]).to.eql(expectedMessage); + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + ' # SKIP -\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('on pass', function () { - it('should write expected message including count and title', function () { + describe('on pass', function() { + it('should write expected message including count and title', function() { runner = createMockRunner('start test', 'test end', 'pass', null, test); runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; - var expectedMessage = 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; - expect(stdout[0]).to.eql(expectedMessage); + var expectedMessage = + 'ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n'; + expect(stdout[0], 'to equal', expectedMessage); }); }); - describe('on fail', function () { - describe('if there is an error message', function () { - it('should write expected message and error message', function () { + describe('on fail', function() { + describe('if there is an error message', function() { + it('should write expected message and error message', function() { var expectedTitle = 'some title'; var countAfterTestEnd = 2; var expectedErrorMessage = 'some error'; var test = { - fullTitle: function () { + fullTitle: function() { return expectedTitle; }, - slow: function () {} + slow: function() {} }; var error = { message: expectedErrorMessage }; - runner.on = function (event, callback) { + runner.on = function(event, callback) { if (event === 'test end') { callback(); } @@ -103,7 +114,7 @@ describe('TAP reporter', function () { } }; runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; @@ -112,18 +123,25 @@ describe('TAP reporter', function () { 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', ' ' + expectedErrorMessage + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if there is an error stack', function () { - it('should write expected message and stack', function () { + describe('if there is an error stack', function() { + it('should write expected message and stack', function() { var expectedStack = 'some stack'; var error = { stack: expectedStack }; - runner = createMockRunner('test end fail', 'test end', 'fail', null, test, error); + runner = createMockRunner( + 'test end fail', + 'test end', + 'fail', + null, + test, + error + ); runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; @@ -132,26 +150,26 @@ describe('TAP reporter', function () { 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n', ' ' + expectedStack + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if there is an error stack and error message', function () { - it('should write expected message and stack', function () { + describe('if there is an error stack and error message', function() { + it('should write expected message and stack', function() { var expectedTitle = 'some title'; var countAfterTestEnd = 2; var expectedStack = 'some stack'; var expectedErrorMessage = 'some error'; var test = { - fullTitle: function () { + fullTitle: function() { return expectedTitle; }, - slow: function () {} + slow: function() {} }; var error = { stack: expectedStack, message: expectedErrorMessage }; - runner.on = function (event, callback) { + runner.on = function(event, callback) { if (event === 'test end') { callback(); } @@ -160,7 +178,7 @@ describe('TAP reporter', function () { } }; runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; @@ -170,13 +188,13 @@ describe('TAP reporter', function () { ' ' + expectedErrorMessage + '\n', ' ' + expectedStack + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); - describe('if there is no error stack or error message', function () { - it('should write expected message only', function () { + describe('if there is no error stack or error message', function() { + it('should write expected message only', function() { var error = {}; - runner.on = runner.once = function (event, callback) { + runner.on = runner.once = function(event, callback) { if (event === 'test end') { callback(); } @@ -185,7 +203,7 @@ describe('TAP reporter', function () { } }; runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; @@ -193,18 +211,18 @@ describe('TAP reporter', function () { var expectedArray = [ 'not ok ' + countAfterTestEnd + ' ' + expectedTitle + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); - describe('on end', function () { - it('should write total tests, passes and failures', function () { + describe('on end', function() { + it('should write total tests, passes and failures', function() { var numberOfPasses = 1; var numberOfFails = 1; runner = createMockRunner('fail end pass', 'fail', 'end', 'pass', test); runner.suite = ''; - runner.grepTotal = function () { }; + runner.grepTotal = function() {}; TAP.call({}, runner); process.stdout.write = stdoutWrite; @@ -217,7 +235,7 @@ describe('TAP reporter', function () { '# pass ' + numberOfPasses + '\n', '# fail ' + numberOfFails + '\n' ]; - expect(stdout).to.eql(expectedArray); + expect(stdout, 'to equal', expectedArray); }); }); }); diff --git a/test/reporters/xunit.spec.js b/test/reporters/xunit.spec.js index c0c066d60b..8108c50b78 100644 --- a/test/reporters/xunit.spec.js +++ b/test/reporters/xunit.spec.js @@ -7,7 +7,7 @@ var assert = require('assert'); var reporters = require('../../').reporters; var XUnit = reporters.XUnit; -describe('XUnit reporter', function () { +describe('XUnit reporter', function() { var stdout; var stdoutWrite; var runner; @@ -21,45 +21,51 @@ describe('XUnit reporter', function () { var expectedStack = 'some-stack'; var expectedWrite = null; - beforeEach(function () { + beforeEach(function() { stdout = []; - runner = {on: function () {}, once: function () {}}; + runner = {on: function() {}, once: function() {}}; }); - describe('if reporter options output is given', function () { + describe('if reporter options output is given', function() { var expectedOutput = 'some-output'; var options = { reporterOptions: { output: expectedOutput } }; - describe('but it cant create a write stream', function () { - it('should throw expected error', function () { + describe('but it cant create a write stream', function() { + it('should throw expected error', function() { var fsCreateWriteStream = fs.createWriteStream; fs.createWriteStream = false; var boundXUnit = XUnit.bind({}, runner, options); - expect(boundXUnit).to.throwException('file output not supported in browser'); + expect(boundXUnit, 'to throw', 'file output not supported in browser'); fs.createWriteStream = fsCreateWriteStream; }); }); - describe('and it can create a write stream', function () { - it('should locate the output dir, create it, then assign as fileStream', function () { + describe('and it can create a write stream', function() { + it('should locate the output dir, create it, then assign as fileStream', function() { var expectedDirectory; var mkdirpSync = mkdirp.sync; var pathDirname = path.dirname; var fsCreateWriteStream = fs.createWriteStream; - mkdirp.sync = function (directory) { expectedDirectory = directory; }; - path.dirname = function (location) { return location; }; - fs.createWriteStream = function (streamDetails) { return streamDetails; }; + mkdirp.sync = function(directory) { + expectedDirectory = directory; + }; + path.dirname = function(location) { + return location; + }; + fs.createWriteStream = function(streamDetails) { + return streamDetails; + }; var contextVariables = { fileStream: null }; XUnit.call(contextVariables, runner, options); - expect(expectedDirectory).to.equal(expectedOutput); - expect(contextVariables.fileStream).to.equal(expectedOutput); + expect(expectedDirectory, 'to be', expectedOutput); + expect(contextVariables.fileStream, 'to be', expectedOutput); fs.createWriteStream = fsCreateWriteStream; mkdirp.sync = mkdirpSync; @@ -68,21 +74,21 @@ describe('XUnit reporter', function () { }); }); - describe('on \'pending\', \'pass\' and \'fail\' events', function () { - it('should add test to tests called on \'end\' event', function () { + describe("on 'pending', 'pass' and 'fail' events", function() { + it("should add test to tests called on 'end' event", function() { var pendingTest = { name: 'pending', - slow: function () {} + slow: function() {} }; var failTest = { name: 'fail', - slow: function () {} + slow: function() {} }; var passTest = { name: 'pass', - slow: function () {} + slow: function() {} }; - runner.on = runner.once = function (event, callback) { + runner.on = runner.once = function(event, callback) { if (event === 'pending') { callback(pendingTest); } @@ -98,129 +104,111 @@ describe('XUnit reporter', function () { }; var calledTests = []; - XUnit.call({ - write: function () {}, - test: function (test) { - calledTests.push(test); - } - }, runner); - - var expectedCalledTests = [ - pendingTest, - passTest, - failTest - ]; - expect(calledTests).to.eql(expectedCalledTests); + XUnit.call( + { + write: function() {}, + test: function(test) { + calledTests.push(test); + } + }, + runner + ); + + var expectedCalledTests = [pendingTest, passTest, failTest]; + expect(calledTests, 'to equal', expectedCalledTests); }); }); - describe('done', function () { - describe('if fileStream is truthly', function () { - it('should run callback with failure inside streams end', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); - var callback = function (failures) { + describe('done', function() { + describe('if fileStream is truthly', function() { + it('should run callback with failure inside streams end', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); + var callback = function(failures) { callbackArgument = failures; }; var calledEnd = false; var fileStream = { - end: function (callback) { + end: function(callback) { calledEnd = true; callback(); } }; - xunit.done.call( - { fileStream: fileStream }, - expectedFailure, - callback - ); + xunit.done.call({fileStream: fileStream}, expectedFailure, callback); - expect(calledEnd).to.be(true); - expect(callbackArgument).to.equal(expectedFailure); + expect(calledEnd, 'to be', true); + expect(callbackArgument, 'to be', expectedFailure); }); }); - describe('if fileStream is falsy', function () { - it('should run callback with failure', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); - var callback = function (failures) { + describe('if fileStream is falsy', function() { + it('should run callback with failure', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); + var callback = function(failures) { callbackArgument = failures; }; - xunit.done.call( - { fileStream: false }, - expectedFailure, - callback - ); + xunit.done.call({fileStream: false}, expectedFailure, callback); - expect(callbackArgument).to.equal(expectedFailure); + expect(callbackArgument, 'to be', expectedFailure); }); }); }); - describe('write', function () { - describe('if fileStream is truthly', function () { - it('should call fileStream write with line and new line', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); + describe('write', function() { + describe('if fileStream is truthly', function() { + it('should call fileStream write with line and new line', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); var fileStream = { - write: function (write) { + write: function(write) { expectedWrite = write; } }; - xunit.write.call( - { fileStream: fileStream }, - expectedLine - ); + xunit.write.call({fileStream: fileStream}, expectedLine); - expect(expectedWrite).to.equal(expectedLine + '\n'); + expect(expectedWrite, 'to be', expectedLine + '\n'); }); }); - describe('if fileStream is falsy and stdout exists', function () { - it('should call write with line and new line', function () { + describe('if fileStream is falsy and stdout exists', function() { + it('should call write with line and new line', function() { stdoutWrite = process.stdout.write; - process.stdout.write = function (string) { + process.stdout.write = function(string) { stdout.push(string); }; - var xunit = new XUnit({on: function () {}, once: function () {}}); - xunit.write.call( - { fileStream: false }, - expectedLine - ); + var xunit = new XUnit({on: function() {}, once: function() {}}); + xunit.write.call({fileStream: false}, expectedLine); process.stdout.write = stdoutWrite; - expect(stdout[0]).to.equal(expectedLine + '\n'); + expect(stdout[0], 'to be', expectedLine + '\n'); }); }); - describe('if fileStream is falsy and stdout does not exist', function () { - it('should call write with line', function () { + describe('if fileStream is falsy and stdout does not exist', function() { + it('should call write with line', function() { stdoutWrite = process; process = false; // eslint-disable-line no-native-reassign, no-global-assign var cachedConsoleLog = console.log; - console.log = function (string) { + console.log = function(string) { stdout.push(string); }; - var xunit = new XUnit({on: function () {}, once: function () {}}); - xunit.write.call( - { fileStream: false }, - expectedLine - ); + var xunit = new XUnit({on: function() {}, once: function() {}}); + xunit.write.call({fileStream: false}, expectedLine); console.log = cachedConsoleLog; process = stdoutWrite; // eslint-disable-line no-native-reassign, no-global-assign - expect(stdout[0]).to.equal(expectedLine); + expect(stdout[0], 'to be', expectedLine); }); }); }); - describe('test', function () { - describe('on test failure', function () { - it('should write expected tag with error details', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); + describe('test', function() { + describe('on test failure', function() { + it('should write expected tag with error details', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); var expectedTest = { state: 'failed', title: expectedTitle, parent: { - fullTitle: function () { + fullTitle: function() { return expectedClassName; } }, @@ -232,27 +220,38 @@ describe('XUnit reporter', function () { }; xunit.test.call( { - write: function (string) { + write: function(string) { expectedWrite = string; } }, expectedTest ); - var expectedTag = '' + expectedMessage + '\n' + expectedStack + ''; - - expect(expectedWrite).to.equal(expectedTag); + var expectedTag = + '' + + expectedMessage + + '\n' + + expectedStack + + ''; + + expect(expectedWrite, 'to be', expectedTag); }); }); - describe('on test pending', function () { - it('should write expected tag', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); + describe('on test pending', function() { + it('should write expected tag', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); var expectedTest = { - isPending: function () { return true; }, + isPending: function() { + return true; + }, title: expectedTitle, parent: { - fullTitle: function () { + fullTitle: function() { return expectedClassName; } }, @@ -260,27 +259,34 @@ describe('XUnit reporter', function () { }; xunit.test.call( { - write: function (string) { + write: function(string) { expectedWrite = string; } }, expectedTest ); - var expectedTag = ''; + var expectedTag = + ''; - expect(expectedWrite).to.equal(expectedTag); + expect(expectedWrite, 'to be', expectedTag); }); }); - describe('on test in any other state', function () { - it('should write expected tag', function () { - var xunit = new XUnit({on: function () {}, once: function () {}}); + describe('on test in any other state', function() { + it('should write expected tag', function() { + var xunit = new XUnit({on: function() {}, once: function() {}}); var expectedTest = { - isPending: function () { return false; }, + isPending: function() { + return false; + }, title: expectedTitle, parent: { - fullTitle: function () { + fullTitle: function() { return expectedClassName; } }, @@ -288,21 +294,26 @@ describe('XUnit reporter', function () { }; xunit.test.call( { - write: function (string) { + write: function(string) { expectedWrite = string; } }, expectedTest ); - var expectedTag = ''; + var expectedTag = + ''; - expect(expectedWrite).to.equal(expectedTag); + expect(expectedWrite, 'to be', expectedTag); }); }); }); - describe('custom suite name', function () { + describe('custom suite name', function() { // capture the events that the reporter subscribes to var events; // the runner parameter of the reporter @@ -312,11 +323,11 @@ describe('XUnit reporter', function () { // the file stream into which the xunit reporter will write into var fileStream; - beforeEach(function () { + beforeEach(function() { events = {}; runner = { - on: function (eventName, eventHandler) { + on: function(eventName, eventHandler) { // capture the event handler events[eventName] = eventHandler; } @@ -325,14 +336,14 @@ describe('XUnit reporter', function () { lines = []; fileStream = { - write: function (line) { + write: function(line) { // capture the output lines lines.push(line); } }; }); - it('should use "Mocha Tests" as the suite name if no custom name is provided', function () { + it('should use "Mocha Tests" as the suite name if no custom name is provided', function() { // arrange var xunit = new XUnit(runner); xunit.fileStream = fileStream; @@ -341,10 +352,13 @@ describe('XUnit reporter', function () { events['end'](); // assert - assert(lines[0].indexOf('Mocha Tests') >= 0, 'it should contain the text "Mocha Tests"'); + assert( + lines[0].indexOf('Mocha Tests') >= 0, + 'it should contain the text "Mocha Tests"' + ); }); - it('should use the custom suite name as the suite name when provided in the reporter options', function () { + it('should use the custom suite name as the suite name when provided in the reporter options', function() { // arrange var options = { reporterOptions: { @@ -360,7 +374,10 @@ describe('XUnit reporter', function () { events['end'](); // assert - assert(lines[0].indexOf('2^31', function () { - it('should set disabled', function () { + describe('#timeout(ms) when ms>2^31', function() { + it('should set disabled', function() { var run = new Runnable(); run.timeout(1e10); - expect(run.enableTimeouts()).to.equal(false); + assert(run.enableTimeouts() === false); }); }); - describe('#enableTimeouts(enabled)', function () { - it('should set enabled', function () { + describe('#enableTimeouts(enabled)', function() { + it('should set enabled', function() { var run = new Runnable(); run.enableTimeouts(false); - expect(run.enableTimeouts()).to.equal(false); + assert(run.enableTimeouts() === false); }); }); - describe('#slow(ms)', function () { + describe('#slow(ms)', function() { var run; - beforeEach(function () { + beforeEach(function() { run = new Runnable(); }); - it('should set the slow threshold', function () { + it('should set the slow threshold', function() { run.slow(100); - expect(run.slow()).to.equal(100); + assert(run.slow() === 100); }); - it('should not set the slow threshold if the parameter is not passed', function () { + it('should not set the slow threshold if the parameter is not passed', function() { run.slow(); - expect(run.slow()).to.equal(75); + assert(run.slow() === 75); }); - it('should not set the slow threshold if the parameter is undefined', function () { + it('should not set the slow threshold if the parameter is undefined', function() { run.slow(undefined); - expect(run.slow()).to.equal(75); + assert(run.slow() === 75); }); }); - describe('.title', function () { - it('should be present', function () { - expect(new Runnable('foo').title).to.equal('foo'); + describe('.title', function() { + it('should be present', function() { + assert(new Runnable('foo').title === 'foo'); }); }); - describe('.titlePath()', function () { - it('returns the concatenation of the parent\'s title path and runnable\'s title', function () { + describe('.titlePath()', function() { + it("returns the concatenation of the parent's title path and runnable's title", function() { var runnable = new Runnable('bar'); runnable.parent = new Suite('foo'); - expect(runnable.titlePath()).to.eql(['foo', 'bar']); + assert( + JSON.stringify(runnable.titlePath()) === JSON.stringify(['foo', 'bar']) + ); }); }); - describe('when arity >= 1', function () { - it('should be .async', function () { - var run = new Runnable('foo', function (done) {}); - expect(run.async).to.equal(1); - expect(run.sync).to.be(false); + describe('when arity >= 1', function() { + it('should be .async', function() { + var run = new Runnable('foo', function(done) {}); + assert(run.async === 1); + assert(run.sync === false); }); }); - describe('when arity == 0', function () { - it('should be .sync', function () { - var run = new Runnable('foo', function () {}); - expect(run.async).to.be.equal(0); - expect(run.sync).to.be(true); + describe('when arity == 0', function() { + it('should be .sync', function() { + var run = new Runnable('foo', function() {}); + assert(run.async === 0); + assert(run.sync === true); }); }); - describe('#globals', function () { - it('should allow for whitelisting globals', function (done) { - var test = new Runnable('foo', function () {}); - expect(test.async).to.be.equal(0); - expect(test.sync).to.be(true); + describe('#globals', function() { + it('should allow for whitelisting globals', function(done) { + var test = new Runnable('foo', function() {}); + assert(test.async === 0); + assert(test.sync === true); test.globals(['foobar']); test.run(done); }); }); - describe('#retries(n)', function () { - it('should set the number of retries', function () { + describe('#retries(n)', function() { + it('should set the number of retries', function() { var run = new Runnable(); run.retries(1); - expect(run.retries()).to.equal(1); + assert(run.retries() === 1); }); }); - describe('.run(fn)', function () { - describe('when .pending', function () { - it('should not invoke the callback', function (done) { - var test = new Runnable('foo', function () { + describe('.run(fn)', function() { + describe('when .pending', function() { + it('should not invoke the callback', function(done) { + var test = new Runnable('foo', function() { throw new Error('should not be called'); }); @@ -142,28 +154,23 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when sync', function () { - describe('without error', function () { - it('should invoke the callback', function (done) { + describe('when sync', function() { + describe('without error', function() { + it('should invoke the callback', function(done) { var calls = 0; - var test = new Runnable('foo', function () { + var test = new Runnable('foo', function() { ++calls; }); - test.run(function (err) { + test.run(function(err) { if (err) { done(err); return; } try { - expect(calls) - .to - .equal(1); - expect(test.duration) - .to - .be - .a('number'); + assert(calls === 1); + assert(typeof test.duration === 'number'); } catch (err) { done(err); return; @@ -173,41 +180,46 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when an exception is thrown', function () { - it('should invoke the callback', function (done) { + describe('when an exception is thrown', function() { + it('should invoke the callback', function(done) { var calls = 0; - var test = new Runnable('foo', function () { + var test = new Runnable('foo', function() { ++calls; throw new Error('fail'); }); - test.run(function (err) { - expect(calls).to.equal(1); - expect(err.message).to.equal('fail'); + test.run(function(err) { + assert(calls === 1); + assert(err.message === 'fail'); done(); }); }); }); - describe('when an exception is thrown and is allowed to remain uncaught', function () { - it('throws an error when it is allowed', function (done) { - var test = new Runnable('foo', function () { + describe('when an exception is thrown and is allowed to remain uncaught', function() { + it('throws an error when it is allowed', function(done) { + var test = new Runnable('foo', function() { throw new Error('fail'); }); test.allowUncaught = true; - function fail () { - test.run(function () {}); + function fail() { + test.run(function() {}); + } + try { + fail(); + done(new Error('failed to throw')); + } catch (e) { + assert(e.message === 'fail'); + done(); } - expect(fail).to.throwError('fail'); - done(); }); }); }); - describe('when timeouts are disabled', function () { - it('should not error with timeout', function (done) { - var test = new Runnable('foo', function (done) { - setTimeout(function () { + describe('when timeouts are disabled', function() { + it('should not error with timeout', function(done) { + var test = new Runnable('foo', function(done) { + setTimeout(function() { setTimeout(done); }, 2); }); @@ -217,10 +229,10 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when async', function () { - describe('without error', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function (done) { + describe('when async', function() { + describe('without error', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function(done) { setTimeout(done); }); @@ -228,39 +240,39 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when the callback is invoked several times', function () { - describe('without an error', function () { - it('should emit a single "error" event', function (done) { + describe('when the callback is invoked several times', function() { + describe('without an error', function() { + it('should emit a single "error" event', function(done) { var calls = 0; var errCalls = 0; - var test = new Runnable('foo', function (done) { + var test = new Runnable('foo', function(done) { process.nextTick(done); setTimeout(done); setTimeout(done); setTimeout(done); }); - test.on('error', function (err) { + test.on('error', function(err) { ++errCalls; - expect(err.message).to.equal('done() called multiple times'); - expect(calls).to.equal(1); - expect(errCalls).to.equal(1); + assert(err.message === 'done() called multiple times'); + assert(calls === 1); + assert(errCalls === 1); done(); }); - test.run(function () { + test.run(function() { ++calls; }); }); }); - describe('with an error', function () { - it('should emit a single "error" event', function (done) { + describe('with an error', function() { + it('should emit a single "error" event', function(done) { var calls = 0; var errCalls = 0; - var test = new Runnable('foo', function (done) { + var test = new Runnable('foo', function(done) { done(new Error('fail')); setTimeout(done); done(new Error('fail')); @@ -268,113 +280,123 @@ describe('Runnable(title, fn)', function () { setTimeout(done); }); - test.on('error', function (err) { + test.on('error', function(err) { ++errCalls; - expect(err.message).to.equal( - "fail (and Mocha's done() called multiple times)"); - expect(calls).to.equal(1); - expect(errCalls).to.equal(1); + assert( + err.message === + "fail (and Mocha's done() called multiple times)" + ); + assert(calls === 1); + assert(errCalls === 1); done(); }); - test.run(function () { + test.run(function() { ++calls; }); }); }); }); - describe('when an exception is thrown', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function (done) { + describe('when an exception is thrown', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function(done) { throw new Error('fail'); }); - test.run(function (err) { - expect(err.message).to.equal('fail'); + test.run(function(err) { + assert(err.message === 'fail'); done(); }); }); - it('should not throw its own exception if passed a non-object', function (done) { - var test = new Runnable('foo', function (done) { + it('should not throw its own exception if passed a non-object', function(done) { + var test = new Runnable('foo', function(done) { /* eslint no-throw-literal: off */ throw null; }); - test.run(function (err) { - expect(err.message).to.equal(utils.undefinedError().message); + test.run(function(err) { + assert(err.message === utils.undefinedError().message); done(); }); }); }); - describe('when an exception is thrown and is allowed to remain uncaught', function () { - it('throws an error when it is allowed', function (done) { - var test = new Runnable('foo', function (done) { + describe('when an exception is thrown and is allowed to remain uncaught', function() { + it('throws an error when it is allowed', function(done) { + var test = new Runnable('foo', function(done) { throw new Error('fail'); }); test.allowUncaught = true; - function fail () { - test.run(function () {}); + function fail() { + test.run(function() {}); + } + try { + fail(); + done(new Error('failed to throw')); + } catch (e) { + assert(e.message === 'fail'); } - expect(fail).to.throwError('fail'); done(); }); }); - describe('when an error is passed', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function (done) { + describe('when an error is passed', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function(done) { done(new Error('fail')); }); - test.run(function (err) { - expect(err.message).to.equal('fail'); + test.run(function(err) { + assert(err.message === 'fail'); done(); }); }); }); - describe('when done() is invoked with a non-Error object', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function (done) { - done({ error: 'Test error' }); + describe('when done() is invoked with a non-Error object', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function(done) { + done({error: 'Test error'}); }); - test.run(function (err) { - expect(err.message).to.equal('done() invoked with non-Error: {"error":"Test error"}'); + test.run(function(err) { + assert( + err.message === + 'done() invoked with non-Error: {"error":"Test error"}' + ); done(); }); }); }); - describe('when done() is invoked with a string', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function (done) { + describe('when done() is invoked with a string', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function(done) { done('Test error'); }); - test.run(function (err) { - expect(err.message).to.equal('done() invoked with non-Error: Test error'); + test.run(function(err) { + assert(err.message === 'done() invoked with non-Error: Test error'); done(); }); }); }); - it('should allow updating the timeout', function (done) { + it('should allow updating the timeout', function(done) { var callCount = 0; - var increment = function () { + var increment = function() { callCount++; }; - var test = new Runnable('foo', function (done) { + var test = new Runnable('foo', function(done) { setTimeout(increment, 1); setTimeout(increment, 100); }); test.timeout(50); - test.run(function (err) { - expect(err).to.be.ok(); - expect(callCount).to.equal(1); + test.run(function(err) { + assert(err); + assert(callCount === 1); done(); }); }); @@ -382,16 +404,16 @@ describe('Runnable(title, fn)', function () { it('should allow a timeout of 0'); }); - describe('when fn returns a promise', function () { - describe('when the promise is fulfilled with no value', function () { + describe('when fn returns a promise', function() { + describe('when the promise is fulfilled with no value', function() { var fulfilledPromise = { - then: function (fulfilled, rejected) { + then: function(fulfilled, rejected) { setTimeout(fulfilled); } }; - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function () { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function() { return fulfilledPromise; }); @@ -399,17 +421,17 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when the promise is fulfilled with a value', function () { + describe('when the promise is fulfilled with a value', function() { var fulfilledPromise = { - then: function (fulfilled, rejected) { - setTimeout(function () { + then: function(fulfilled, rejected) { + setTimeout(function() { fulfilled({}); }); } }; - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function () { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function() { return fulfilledPromise; }); @@ -417,74 +439,76 @@ describe('Runnable(title, fn)', function () { }); }); - describe('when the promise is rejected', function () { + describe('when the promise is rejected', function() { var expectedErr = new Error('fail'); var rejectedPromise = { - then: function (fulfilled, rejected) { - setTimeout(function () { + then: function(fulfilled, rejected) { + setTimeout(function() { rejected(expectedErr); }); } }; - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function () { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function() { return rejectedPromise; }); - test.run(function (err) { - expect(err).to.equal(expectedErr); + test.run(function(err) { + assert(err === expectedErr); done(); }); }); }); - describe('when the promise is rejected without a reason', function () { + describe('when the promise is rejected without a reason', function() { var expectedErr = new Error('Promise rejected with no or falsy reason'); var rejectedPromise = { - then: function (fulfilled, rejected) { - setTimeout(function () { + then: function(fulfilled, rejected) { + setTimeout(function() { rejected(); }); } }; - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function () { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function() { return rejectedPromise; }); - test.run(function (err) { - expect(err.message).to.equal(expectedErr.message); + test.run(function(err) { + assert(err.message === expectedErr.message); done(); }); }); }); - describe('when the promise takes too long to settle', function () { + describe('when the promise takes too long to settle', function() { var foreverPendingPromise = { - then: function () { } + then: function() {} }; - it('should throw the timeout error', function (done) { - var test = new Runnable('foo', function () { + it('should throw the timeout error', function(done) { + var test = new Runnable('foo', function() { return foreverPendingPromise; }); test.file = '/some/path'; test.timeout(10); - test.run(function (err) { - expect(err.message).to.match(/Timeout of 10ms exceeded.*\(\/some\/path\)$/); + test.run(function(err) { + assert( + /Timeout of 10ms exceeded.*\(\/some\/path\)$/.test(err.message) + ); done(); }); }); }); }); - describe('when fn returns a non-promise', function () { - it('should invoke the callback', function (done) { - var test = new Runnable('foo', function () { - return { then: 'i ran my tests' }; + describe('when fn returns a non-promise', function() { + it('should invoke the callback', function(done) { + var test = new Runnable('foo', function() { + return {then: 'i ran my tests'}; }); test.run(done); @@ -492,35 +516,32 @@ describe('Runnable(title, fn)', function () { }); }); - describe('#isFailed()', function () { - it('should return `true` if test has not failed', function () { - var test = new Runnable('foo', function () { - }); + describe('#isFailed()', function() { + it('should return `true` if test has not failed', function() { + var test = new Runnable('foo', function() {}); // runner sets the state - test.run(function () { - expect(test.isFailed()).not.to.be.ok(); + test.run(function() { + assert(!test.isFailed()); }); }); - it('should return `true` if test has failed', function () { - var test = new Runnable('foo', function () { - }); + it('should return `true` if test has failed', function() { + var test = new Runnable('foo', function() {}); // runner sets the state test.state = 'failed'; - test.run(function () { - expect(test.isFailed()).to.be.ok(); + test.run(function() { + assert(!test.isFailed()); }); }); - it('should return `false` if test is pending', function () { - var test = new Runnable('foo', function () { - }); + it('should return `false` if test is pending', function() { + var test = new Runnable('foo', function() {}); // runner sets the state - test.isPending = function () { + test.isPending = function() { return true; }; - test.run(function () { - expect(test.isFailed()).not.to.be.ok(); + test.run(function() { + assert(!test.isFailed()); }); }); }); diff --git a/test/unit/runner.spec.js b/test/unit/runner.spec.js index 718a9b7cf6..ab002ce0b6 100644 --- a/test/unit/runner.spec.js +++ b/test/unit/runner.spec.js @@ -8,85 +8,88 @@ var Hook = mocha.Hook; var path = require('path'); var noop = mocha.utils.noop; -describe('Runner', function () { +describe('Runner', function() { var suite; var runner; - beforeEach(function () { + beforeEach(function() { suite = new Suite('Suite', 'root'); runner = new Runner(suite); }); - describe('.grep()', function () { - it('should update the runner.total with number of matched tests', function () { + describe('.grep()', function() { + it('should update the runner.total with number of matched tests', function() { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); var newRunner = new Runner(suite); newRunner.grep(/lions/); - expect(newRunner.total).to.equal(2); + expect(newRunner.total, 'to be', 2); }); - it('should update the runner.total with number of matched tests when inverted', function () { + it('should update the runner.total with number of matched tests when inverted', function() { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); var newRunner = new Runner(suite); newRunner.grep(/lions/, true); - expect(newRunner.total).to.equal(1); + expect(newRunner.total, 'to be', 1); }); }); - describe('.grepTotal()', function () { - it('should return the total number of matched tests', function () { + describe('.grepTotal()', function() { + it('should return the total number of matched tests', function() { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); runner.grep(/lions/); - expect(runner.grepTotal(suite)).to.equal(2); + expect(runner.grepTotal(suite), 'to be', 2); }); - it('should return the total number of matched tests when inverted', function () { + it('should return the total number of matched tests when inverted', function() { suite.addTest(new Test('im a test about lions', noop)); suite.addTest(new Test('im another test about lions', noop)); suite.addTest(new Test('im a test about bears', noop)); runner.grep(/lions/, true); - expect(runner.grepTotal(suite)).to.equal(1); + expect(runner.grepTotal(suite), 'to be', 1); }); }); - describe('.globalProps()', function () { - it('should include common non enumerable globals', function () { + describe('.globalProps()', function() { + it('should include common non enumerable globals', function() { var props = runner.globalProps(); - expect(props).to.contain('setTimeout'); - expect(props).to.contain('clearTimeout'); - expect(props).to.contain('setInterval'); - expect(props).to.contain('clearInterval'); - expect(props).to.contain('Date'); - expect(props).to.contain('XMLHttpRequest'); + expect( + props, + 'to contain', + 'setTimeout', + 'clearTimeout', + 'setInterval', + 'clearInterval', + 'Date', + 'XMLHttpRequest' + ); }); }); - describe('.globals()', function () { - it('should default to the known globals', function () { - expect(runner.globals().length).to.be.above(16); + describe('.globals()', function() { + it('should default to the known globals', function() { + expect(runner.globals().length, 'to be greater than', 16); }); - it('should white-list globals', function () { + it('should white-list globals', function() { runner.globals(['foo', 'bar']); - expect(runner.globals()).to.contain('foo'); - expect(runner.globals()).to.contain('bar'); + expect(runner.globals(), 'to contain', 'foo', 'bar'); }); }); - describe('.checkGlobals(test)', function () { - before(function () { + describe('.checkGlobals(test)', function() { + before(function() { if (!Object.create) { this.skip(); } }); - it('should allow variables that match a wildcard', function (done) { + it('should allow variables that match a wildcard', function(done) { runner.globals(['foo*', 'giz*']); global.foo = 'baz'; global.gizmo = 'quux'; @@ -96,24 +99,24 @@ describe('Runner', function () { done(); }); - it('should emit "fail" when a new global is introduced', function (done) { + it('should emit "fail" when a new global is introduced', function(done) { var test = new Test('im a test', noop); runner.checkGlobals(); global.foo = 'bar'; - runner.on('fail', function (_test, err) { - expect(_test).to.equal(test); - expect(err.message).to.equal('global leak detected: foo'); + runner.on('fail', function(_test, err) { + expect(_test, 'to be', test); + expect(err.message, 'to be', 'global leak detected: foo'); delete global.foo; done(); }); runner.checkGlobals(test); }); - it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function (done) { + it('should emit "fail" when a single new disallowed global is introduced after a single extra global is allowed', function(done) { var doneCalled = false; runner.globals('good'); global.bad = 1; - runner.on('fail', function () { + runner.on('fail', function() { delete global.bad; done(); doneCalled = true; @@ -124,13 +127,13 @@ describe('Runner', function () { } }); - it('should not fail when a new common global is introduced', function () { + it('should not fail when a new common global is introduced', function() { if (process.browser) { this.skip(); return; } // verify that the prop isn't enumerable - expect(global.propertyIsEnumerable('XMLHttpRequest')).to.not.be.ok(); + expect(global.propertyIsEnumerable('XMLHttpRequest'), 'to be', false); // create a new runner and keep a reference to the test. var test = new Test('im a test about bears', noop); @@ -138,25 +141,25 @@ describe('Runner', function () { var newRunner = new Runner(suite); // make the prop enumerable again. - global.XMLHttpRequest = function () {}; - expect(global.propertyIsEnumerable('XMLHttpRequest')).to.be.ok(); + global.XMLHttpRequest = function() {}; + expect(global.propertyIsEnumerable('XMLHttpRequest'), 'to be', true); // verify the test hasn't failed. newRunner.checkGlobals(test); - expect(test).to.not.have.key('state'); + expect(test, 'not to have key', 'state'); // clean up our global space. delete global.XMLHttpRequest; }); - it('should pluralize the error message when several are introduced', function (done) { + it('should pluralize the error message when several are introduced', function(done) { var test = new Test('im a test', noop); runner.checkGlobals(); global.foo = 'bar'; global.bar = 'baz'; - runner.on('fail', function (_test, err) { - expect(_test).to.equal(test); - expect(err.message).to.equal('global leaks detected: foo, bar'); + runner.on('fail', function(_test, err) { + expect(_test, 'to be', test); + expect(err.message, 'to be', 'global leaks detected: foo, bar'); delete global.foo; delete global.bar; done(); @@ -164,7 +167,7 @@ describe('Runner', function () { runner.checkGlobals(test); }); - it('should respect per test whitelisted globals', function () { + it('should respect per test whitelisted globals', function() { var test = new Test('im a test about lions', noop); test.globals(['foo']); @@ -175,12 +178,12 @@ describe('Runner', function () { // verify the test hasn't failed. runner.checkGlobals(test); - expect(test).to.not.have.key('state'); + expect(test, 'not to have key', 'state'); delete global.foo; }); - it('should respect per test whitelisted globals but still detect other leaks', function (done) { + it('should respect per test whitelisted globals but still detect other leaks', function(done) { var test = new Test('im a test about lions', noop); test.globals(['foo']); @@ -188,119 +191,128 @@ describe('Runner', function () { global.foo = 'bar'; global.bar = 'baz'; - runner.on('fail', function (test, err) { - expect(test.title).to.equal('im a test about lions'); - expect(err.message).to.equal('global leak detected: bar'); + runner.on('fail', function(test, err) { + expect(test.title, 'to be', 'im a test about lions'); + expect(err.message, 'to be', 'global leak detected: bar'); delete global.foo; done(); }); runner.checkGlobals(test); }); - it('should emit "fail" when a global beginning with d is introduced', function (done) { + it('should emit "fail" when a global beginning with d is introduced', function(done) { global.derp = 'bar'; - runner.on('fail', function () { + runner.on('fail', function() { delete global.derp; done(); }); - runner.checkGlobals(new Test('herp', function () {})); + runner.checkGlobals(new Test('herp', function() {})); }); }); - describe('.hook(name, fn)', function () { - it('should execute hooks after failed test if suite bail is true', function (done) { + describe('.hook(name, fn)', function() { + it('should execute hooks after failed test if suite bail is true', function(done) { runner.fail(new Test('failed test', noop)); suite.bail(true); - suite.afterEach(function () { - suite.afterAll(function () { + suite.afterEach(function() { + suite.afterAll(function() { done(); }); }); - runner.hook('afterEach', function () {}); - runner.hook('afterAll', function () {}); + runner.hook('afterEach', function() {}); + runner.hook('afterAll', function() {}); }); }); - describe('.fail(test, err)', function () { - it('should increment .failures', function () { - expect(runner.failures).to.equal(0); + describe('.fail(test, err)', function() { + it('should increment .failures', function() { + expect(runner.failures, 'to be', 0); runner.fail(new Test('one', noop), {}); - expect(runner.failures).to.equal(1); + expect(runner.failures, 'to be', 1); runner.fail(new Test('two', noop), {}); - expect(runner.failures).to.equal(2); + expect(runner.failures, 'to be', 2); }); - it('should set test.state to "failed"', function () { + it('should set test.state to "failed"', function() { var test = new Test('some test', noop); runner.fail(test, 'some error'); - expect(test.state).to.equal('failed'); + expect(test.state, 'to be', 'failed'); }); - it('should emit "fail"', function (done) { + it('should emit "fail"', function(done) { var test = new Test('some other test', noop); var err = {}; - runner.on('fail', function (test, err) { - expect(test).to.equal(test); - expect(err).to.equal(err); + runner.on('fail', function(test, err) { + expect(test, 'to be', test); + expect(err, 'to be', err); done(); }); runner.fail(test, err); }); - it('should emit a helpful message when failed with a string', function (done) { + it('should emit a helpful message when failed with a string', function(done) { var test = new Test('helpful test', noop); var err = 'string'; - runner.on('fail', function (test, err) { - expect(err.message).to.equal('the string "string" was thrown, throw an Error :)'); + runner.on('fail', function(test, err) { + expect( + err.message, + 'to be', + 'the string "string" was thrown, throw an Error :)' + ); done(); }); runner.fail(test, err); }); - it('should emit a the error when failed with an Error instance', function (done) { + it('should emit a the error when failed with an Error instance', function(done) { var test = new Test('a test', noop); var err = new Error('an error message'); - runner.on('fail', function (test, err) { - expect(err.message).to.equal('an error message'); + runner.on('fail', function(test, err) { + expect(err.message, 'to be', 'an error message'); done(); }); runner.fail(test, err); }); - it('should emit the error when failed with an Error-like object', function (done) { + it('should emit the error when failed with an Error-like object', function(done) { var test = new Test('a test', noop); - var err = { message: 'an error message' }; - runner.on('fail', function (test, err) { - expect(err.message).to.equal('an error message'); + var err = {message: 'an error message'}; + runner.on('fail', function(test, err) { + expect(err.message, 'to be', 'an error message'); done(); }); runner.fail(test, err); }); - it('should emit a helpful message when failed with an Object', function (done) { + it('should emit a helpful message when failed with an Object', function(done) { var test = new Test('a test', noop); - var err = { x: 1 }; - runner.on('fail', function (test, err) { - expect(err.message).to.equal('the object {\n "x": 1\n} was thrown, throw an Error :)'); + var err = {x: 1}; + runner.on('fail', function(test, err) { + expect( + err.message, + 'to be', + 'the object {\n "x": 1\n} was thrown, throw an Error :)' + ); done(); }); runner.fail(test, err); }); - it('should emit a helpful message when failed with an Array', function (done) { + it('should emit a helpful message when failed with an Array', function(done) { var test = new Test('a test', noop); - var err = [ - 1, - 2 - ]; - runner.on('fail', function (test, err) { - expect(err.message).to.equal('the array [\n 1\n 2\n] was thrown, throw an Error :)'); + var err = [1, 2]; + runner.on('fail', function(test, err) { + expect( + err.message, + 'to be', + 'the array [\n 1\n 2\n] was thrown, throw an Error :)' + ); done(); }); runner.fail(test, err); }); - it('should recover if the error stack is not writable', function (done) { + it('should recover if the error stack is not writable', function(done) { if (!Object.create) { this.skip(); return; @@ -312,8 +324,8 @@ describe('Runner', function () { }); var test = new Test('a test', noop); - runner.on('fail', function (test, err) { - expect(err.message).to.equal('not evil'); + runner.on('fail', function(test, err) { + expect(err.message, 'to be', 'not evil'); done(); }); @@ -321,39 +333,39 @@ describe('Runner', function () { }); }); - describe('.failHook(hook, err)', function () { - it('should increment .failures', function () { - expect(runner.failures).to.equal(0); + describe('.failHook(hook, err)', function() { + it('should increment .failures', function() { + expect(runner.failures, 'to be', 0); runner.failHook(new Test('fail hook 1', noop), {}); - expect(runner.failures).to.equal(1); + expect(runner.failures, 'to be', 1); runner.failHook(new Test('fail hook 2', noop), {}); - expect(runner.failures).to.equal(2); + expect(runner.failures, 'to be', 2); }); - it('should augment hook title with current test title', function () { + it('should augment hook title with current test title', function() { var hook = new Hook('"before each" hook'); - hook.ctx = { currentTest: new Test('should behave', noop) }; + hook.ctx = {currentTest: new Test('should behave', noop)}; runner.failHook(hook, {}); - expect(hook.title).to.equal('"before each" hook for "should behave"'); + expect(hook.title, 'to be', '"before each" hook for "should behave"'); hook.ctx.currentTest = new Test('should obey', noop); runner.failHook(hook, {}); - expect(hook.title).to.equal('"before each" hook for "should obey"'); + expect(hook.title, 'to be', '"before each" hook for "should obey"'); }); - it('should emit "fail"', function (done) { + it('should emit "fail"', function(done) { var hook = new Hook(); var err = {}; - runner.on('fail', function (hook, err) { - expect(hook).to.equal(hook); - expect(err).to.equal(err); + runner.on('fail', function(hook, err) { + expect(hook, 'to be', hook); + expect(err, 'to be', err); done(); }); runner.failHook(hook, err); }); - it('should emit "end" if suite bail is true', function (done) { + it('should emit "end" if suite bail is true', function(done) { var hook = new Hook(); var err = {}; suite.bail(true); @@ -361,11 +373,11 @@ describe('Runner', function () { runner.failHook(hook, err); }); - it('should not emit "end" if suite bail is not true', function (done) { + it('should not emit "end" if suite bail is not true', function(done) { var hook = new Hook(); var err = {}; suite.bail(false); - runner.on('end', function () { + runner.on('end', function() { throw new Error('"end" was emit, but the bail is false'); }); runner.failHook(hook, err); @@ -373,22 +385,22 @@ describe('Runner', function () { }); }); - describe('allowUncaught', function () { - it('should allow unhandled errors to propagate through', function (done) { + describe('allowUncaught', function() { + it('should allow unhandled errors to propagate through', function(done) { var newRunner = new Runner(suite); newRunner.allowUncaught = true; - newRunner.test = new Test('failing test', function () { + newRunner.test = new Test('failing test', function() { throw new Error('allow unhandled errors'); }); - function fail () { + function fail() { newRunner.runTest(); } - expect(fail).to.throwError('allow unhandled errors'); + expect(fail, 'to throw', 'allow unhandled errors'); done(); }); }); - describe('stackTrace', function () { + describe('stackTrace', function() { var stack = [ 'AssertionError: foo bar', 'at EventEmitter. (/usr/local/dev/test.js:16:12)', @@ -403,35 +415,35 @@ describe('Runner', function () { 'at processImmediate [as _immediateCallback] (timers.js:321:17)' ]; - describe('shortStackTrace', function () { - beforeEach(function () { + describe('shortStackTrace', function() { + beforeEach(function() { if (path.sep !== '/') { this.skip(); } }); - it('should prettify the stack-trace', function (done) { + it('should prettify the stack-trace', function(done) { var hook = new Hook(); var err = new Error(); // Fake stack-trace err.stack = stack.join('\n'); - runner.on('fail', function (hook, err) { - expect(err.stack).to.equal(stack.slice(0, 3).join('\n')); + runner.on('fail', function(hook, err) { + expect(err.stack, 'to be', stack.slice(0, 3).join('\n')); done(); }); runner.failHook(hook, err); }); }); - describe('longStackTrace', function () { - beforeEach(function () { + describe('longStackTrace', function() { + beforeEach(function() { if (path.sep !== '/') { this.skip(); } }); - it('should display the full stack-trace', function (done) { + it('should display the full stack-trace', function(done) { var hook = new Hook(); var err = new Error(); // Fake stack-trace @@ -439,8 +451,8 @@ describe('Runner', function () { // Add --stack-trace option runner.fullStackTrace = true; - runner.on('fail', function (hook, err) { - expect(err.stack).to.equal(stack.join('\n')); + runner.on('fail', function(hook, err) { + expect(err.stack, 'to be', stack.join('\n')); done(); }); runner.failHook(hook, err); diff --git a/test/unit/suite.spec.js b/test/unit/suite.spec.js index 3c3786efd1..29022f29ad 100644 --- a/test/unit/suite.spec.js +++ b/test/unit/suite.spec.js @@ -4,14 +4,14 @@ var mocha = require('../../lib/mocha'); var Suite = mocha.Suite; var Test = mocha.Test; -function supportsFunctionNames () { +function supportsFunctionNames() { // eslint-disable-next-line no-extra-parens - return (function foo () {}).name === 'foo'; + return function foo() {}.name === 'foo'; } -describe('Suite', function () { - describe('.clone()', function () { - beforeEach(function () { +describe('Suite', function() { + describe('.clone()', function() { + beforeEach(function() { this.suite = new Suite('To be cloned'); this.suite._timeout = 3043; this.suite._slow = 101; @@ -24,305 +24,273 @@ describe('Suite', function () { this.suite._afterAll.push(5); }); - it('should copy the title', function () { - expect(this.suite.clone().title).to.equal('To be cloned'); + it('should copy the title', function() { + expect(this.suite.clone().title, 'to be', 'To be cloned'); }); - it('should copy the timeout value', function () { - expect(this.suite.clone().timeout()).to.equal(3043); + it('should copy the timeout value', function() { + expect(this.suite.clone().timeout(), 'to be', 3043); }); - it('should copy the slow value', function () { - expect(this.suite.clone().slow()).to.equal(101); + it('should copy the slow value', function() { + expect(this.suite.clone().slow(), 'to be', 101); }); - it('should copy the bail value', function () { - expect(this.suite.clone().bail()).to.be(true); + it('should copy the bail value', function() { + expect(this.suite.clone().bail(), 'to be', true); }); - it('should not copy the values from the suites array', function () { - expect(this.suite.clone().suites).to.be.empty(); + it('should not copy the values from the suites array', function() { + expect(this.suite.clone().suites, 'to be empty'); }); - it('should not copy the values from the tests array', function () { - expect(this.suite.clone().tests).to.be.empty(); + it('should not copy the values from the tests array', function() { + expect(this.suite.clone().tests, 'to be empty'); }); - it('should not copy the values from the _beforeEach array', function () { - expect(this.suite.clone()._beforeEach).to.be.empty(); + it('should not copy the values from the _beforeEach array', function() { + expect(this.suite.clone()._beforeEach, 'to be empty'); }); - it('should not copy the values from the _beforeAll array', function () { - expect(this.suite.clone()._beforeAll).to.be.empty(); + it('should not copy the values from the _beforeAll array', function() { + expect(this.suite.clone()._beforeAll, 'to be empty'); }); - it('should not copy the values from the _afterEach array', function () { - expect(this.suite.clone()._afterEach).to.be.empty(); + it('should not copy the values from the _afterEach array', function() { + expect(this.suite.clone()._afterEach, 'to be empty'); }); - it('should not copy the values from the _afterAll array', function () { - expect(this.suite.clone()._afterAll).to.be.empty(); + it('should not copy the values from the _afterAll array', function() { + expect(this.suite.clone()._afterAll, 'to be empty'); }); }); - describe('.timeout()', function () { - beforeEach(function () { + describe('.timeout()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when no argument is passed', function () { - it('should return the timeout value', function () { - expect(this.suite.timeout()).to.equal(2000); + describe('when no argument is passed', function() { + it('should return the timeout value', function() { + expect(this.suite.timeout(), 'to be', 2000); }); }); - describe('when argument is passed', function () { - it('should return the Suite object', function () { + describe('when argument is passed', function() { + it('should return the Suite object', function() { var newSuite = this.suite.timeout(5000); - expect(newSuite.timeout()).to.equal(5000); + expect(newSuite.timeout(), 'to be', 5000); }); }); }); - describe('.slow()', function () { - beforeEach(function () { + describe('.slow()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when given a string', function () { - it('should parse it', function () { + describe('when given a string', function() { + it('should parse it', function() { this.suite.slow('5 seconds'); - expect(this.suite.slow()).to.equal(5000); + expect(this.suite.slow(), 'to be', 5000); }); }); - describe('when no argument is passed', function () { - it('should return the slow value', function () { - expect(this.suite.slow()).to.equal(75); + describe('when no argument is passed', function() { + it('should return the slow value', function() { + expect(this.suite.slow(), 'to be', 75); }); }); - describe('when argument is passed', function () { - it('should return the Suite object', function () { + describe('when argument is passed', function() { + it('should return the Suite object', function() { var newSuite = this.suite.slow(5000); - expect(newSuite.slow()).to.equal(5000); + expect(newSuite.slow(), 'to be', 5000); }); }); }); - describe('.bail()', function () { - beforeEach(function () { + describe('.bail()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); this.suite._bail = true; }); - describe('when no argument is passed', function () { - it('should return the bail value', function () { - expect(this.suite.bail()).to.be(true); + describe('when no argument is passed', function() { + it('should return the bail value', function() { + expect(this.suite.bail(), 'to be', true); }); }); - describe('when argument is passed', function () { - it('should return the Suite object', function () { + describe('when argument is passed', function() { + it('should return the Suite object', function() { var newSuite = this.suite.bail(false); - expect(newSuite.bail()).to.be(false); + expect(newSuite.bail(), 'to be', false); }); }); }); - describe('.beforeAll()', function () { - beforeEach(function () { + describe('.beforeAll()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function () { - it('adds it to _beforeAll', function () { - var fn = function () {}; + describe('wraps the passed in function in a Hook', function() { + it('adds it to _beforeAll', function() { + var fn = function() {}; this.suite.beforeAll(fn); - expect(this.suite._beforeAll).to.have.length(1); + expect(this.suite._beforeAll, 'to have length', 1); var beforeAllItem = this.suite._beforeAll[0]; - expect(beforeAllItem.title).to.match(/^"before all" hook/); - expect(beforeAllItem.fn).to.equal(fn); + expect(beforeAllItem.title, 'to match', /^"before all" hook/); + expect(beforeAllItem.fn, 'to be', fn); }); - it('appends title to hook', function () { - var fn = function () { - }; + it('appends title to hook', function() { + var fn = function() {}; this.suite.beforeAll('test', fn); - expect(this.suite._beforeAll) - .to - .have - .length(1); + expect(this.suite._beforeAll, 'to have length', 1); var beforeAllItem = this.suite._beforeAll[0]; - expect(beforeAllItem.title) - .to - .equal('"before all" hook: test'); - expect(beforeAllItem.fn) - .to - .equal(fn); + expect(beforeAllItem.title, 'to be', '"before all" hook: test'); + expect(beforeAllItem.fn, 'to be', fn); }); - it('uses function name if available', function () { + it('uses function name if available', function() { if (!supportsFunctionNames()) { this.skip(); return; } - function namedFn () {} + function namedFn() {} this.suite.beforeAll(namedFn); var beforeAllItem = this.suite._beforeAll[0]; - expect(beforeAllItem.title).to.equal('"before all" hook: namedFn'); - expect(beforeAllItem.fn).to.equal(namedFn); + expect(beforeAllItem.title, 'to be', '"before all" hook: namedFn'); + expect(beforeAllItem.fn, 'to be', namedFn); }); }); }); - describe('.afterAll()', function () { - beforeEach(function () { + describe('.afterAll()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function () { - it('adds it to _afterAll', function () { - var fn = function () {}; + describe('wraps the passed in function in a Hook', function() { + it('adds it to _afterAll', function() { + var fn = function() {}; this.suite.afterAll(fn); - expect(this.suite._afterAll).to.have.length(1); + expect(this.suite._afterAll, 'to have length', 1); var afterAllItem = this.suite._afterAll[0]; - expect(afterAllItem.title).to.match(/^"after all" hook/); - expect(afterAllItem.fn).to.equal(fn); + expect(afterAllItem.title, 'to match', /^"after all" hook/); + expect(afterAllItem.fn, 'to be', fn); }); - it('appends title to hook', function () { - var fn = function () { - }; + it('appends title to hook', function() { + var fn = function() {}; this.suite.afterAll('test', fn); - expect(this.suite._afterAll) - .to - .have - .length(1); + expect(this.suite._afterAll, 'to have length', 1); var beforeAllItem = this.suite._afterAll[0]; - expect(beforeAllItem.title) - .to - .equal('"after all" hook: test'); - expect(beforeAllItem.fn) - .to - .equal(fn); + expect(beforeAllItem.title, 'to be', '"after all" hook: test'); + expect(beforeAllItem.fn, 'to be', fn); }); - it('uses function name if available', function () { + it('uses function name if available', function() { if (!supportsFunctionNames()) { this.skip(); return; } - function namedFn () {} + function namedFn() {} this.suite.afterAll(namedFn); var afterAllItem = this.suite._afterAll[0]; - expect(afterAllItem.title).to.equal('"after all" hook: namedFn'); - expect(afterAllItem.fn).to.equal(namedFn); + expect(afterAllItem.title, 'to be', '"after all" hook: namedFn'); + expect(afterAllItem.fn, 'to be', namedFn); }); }); }); - describe('.beforeEach()', function () { - beforeEach(function () { + describe('.beforeEach()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function () { - it('adds it to _beforeEach', function () { - var fn = function () {}; + describe('wraps the passed in function in a Hook', function() { + it('adds it to _beforeEach', function() { + var fn = function() {}; this.suite.beforeEach(fn); - expect(this.suite._beforeEach).to.have.length(1); + expect(this.suite._beforeEach, 'to have length', 1); var beforeEachItem = this.suite._beforeEach[0]; - expect(beforeEachItem.title).to.match(/^"before each" hook/); - expect(beforeEachItem.fn).to.equal(fn); + expect(beforeEachItem.title, 'to match', /^"before each" hook/); + expect(beforeEachItem.fn, 'to be', fn); }); - it('appends title to hook', function () { - var fn = function () { - }; + it('appends title to hook', function() { + var fn = function() {}; this.suite.beforeEach('test', fn); - expect(this.suite._beforeEach) - .to - .have - .length(1); + expect(this.suite._beforeEach, 'to have length', 1); var beforeAllItem = this.suite._beforeEach[0]; - expect(beforeAllItem.title) - .to - .equal('"before each" hook: test'); - expect(beforeAllItem.fn) - .to - .equal(fn); + expect(beforeAllItem.title, 'to be', '"before each" hook: test'); + expect(beforeAllItem.fn, 'to be', fn); }); - it('uses function name if available', function () { + it('uses function name if available', function() { if (!supportsFunctionNames()) { this.skip(); return; } - function namedFn () {} + function namedFn() {} this.suite.beforeEach(namedFn); var beforeEachItem = this.suite._beforeEach[0]; - expect(beforeEachItem.title).to.equal('"before each" hook: namedFn'); - expect(beforeEachItem.fn).to.equal(namedFn); + expect(beforeEachItem.title, 'to be', '"before each" hook: namedFn'); + expect(beforeEachItem.fn, 'to be', namedFn); }); }); }); - describe('.afterEach()', function () { - beforeEach(function () { + describe('.afterEach()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('wraps the passed in function in a Hook', function () { - it('adds it to _afterEach', function () { - var fn = function () {}; + describe('wraps the passed in function in a Hook', function() { + it('adds it to _afterEach', function() { + var fn = function() {}; this.suite.afterEach(fn); - expect(this.suite._afterEach).to.have.length(1); + expect(this.suite._afterEach, 'to have length', 1); var afterEachItem = this.suite._afterEach[0]; - expect(afterEachItem.title).to.match(/^"after each" hook/); - expect(afterEachItem.fn).to.equal(fn); + expect(afterEachItem.title, 'to match', /^"after each" hook/); + expect(afterEachItem.fn, 'to be', fn); }); - it('appends title to hook', function () { - var fn = function () { - }; + it('appends title to hook', function() { + var fn = function() {}; this.suite.afterEach('test', fn); - expect(this.suite._afterEach) - .to - .have - .length(1); + expect(this.suite._afterEach, 'to have length', 1); var beforeAllItem = this.suite._afterEach[0]; - expect(beforeAllItem.title) - .to - .equal('"after each" hook: test'); - expect(beforeAllItem.fn) - .to - .equal(fn); + expect(beforeAllItem.title, 'to be', '"after each" hook: test'); + expect(beforeAllItem.fn, 'to be', fn); }); - it('uses function name if available', function () { + it('uses function name if available', function() { if (!supportsFunctionNames()) { this.skip(); return; } - function namedFn () {} + function namedFn() {} this.suite.afterEach(namedFn); var afterEachItem = this.suite._afterEach[0]; - expect(afterEachItem.title).to.equal('"after each" hook: namedFn'); - expect(afterEachItem.fn).to.equal(namedFn); + expect(afterEachItem.title, 'to be', '"after each" hook: namedFn'); + expect(afterEachItem.fn, 'to be', namedFn); }); }); }); - describe('.addSuite()', function () { - beforeEach(function () { + describe('.addSuite()', function() { + beforeEach(function() { this.first = new Suite('First suite'); this.first.timeout(4002); this.first.slow(200); @@ -330,26 +298,26 @@ describe('Suite', function () { this.first.addSuite(this.second); }); - it('sets the parent on the added Suite', function () { - expect(this.second.parent).to.equal(this.first); + it('sets the parent on the added Suite', function() { + expect(this.second.parent, 'to be', this.first); }); - it('copies the timeout value', function () { - expect(this.second.timeout()).to.equal(4002); + it('copies the timeout value', function() { + expect(this.second.timeout(), 'to be', 4002); }); - it('copies the slow value', function () { - expect(this.second.slow()).to.equal(200); + it('copies the slow value', function() { + expect(this.second.slow(), 'to be', 200); }); - it('adds the suite to the suites collection', function () { - expect(this.first.suites).to.have.length(1); - expect(this.first.suites[0]).to.equal(this.second); + it('adds the suite to the suites collection', function() { + expect(this.first.suites, 'to have length', 1); + expect(this.first.suites[0], 'to be', this.second); }); - it('treats suite as pending if its parent is pending', function () { + it('treats suite as pending if its parent is pending', function() { this.first.pending = true; - expect(this.second.isPending()).to.be(true); + expect(this.second.isPending(), 'to be', true); }); }); @@ -362,166 +330,175 @@ describe('Suite', function () { // }); // // it('sets the parent on the added test', function(){ - // expect(this.test.parent).to.equal(this.suite); + // expect(this.test.parent, 'to be', this.suite); // }); // // it('copies the timeout value', function(){ - // expect(this.test.timeout()).to.equal(4002); + // expect(this.test.timeout(), 'to be', 4002); // }); // // it('adds the test to the tests collection', function(){ - // expect(this.suite.tests).to.have.length(1); - // expect(this.suite.tests[0]).to.equal(this.test); + // expect(this.suite.tests, 'to have length', 1); + // expect(this.suite.tests[0], 'to be', this.test); // }); // }); - describe('.fullTitle()', function () { - beforeEach(function () { + describe('.fullTitle()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when there is no parent', function () { - it('returns the suite title', function () { - expect(this.suite.fullTitle()).to.equal('A Suite'); + describe('when there is no parent', function() { + it('returns the suite title', function() { + expect(this.suite.fullTitle(), 'to be', 'A Suite'); }); }); - describe('when there is a parent', function () { - it('returns the combination of parent\'s and suite\'s title', function () { + describe('when there is a parent', function() { + it("returns the combination of parent's and suite's title", function() { var parentSuite = new Suite('I am a parent'); parentSuite.addSuite(this.suite); - expect(this.suite.fullTitle()).to.equal('I am a parent A Suite'); + expect(this.suite.fullTitle(), 'to be', 'I am a parent A Suite'); }); }); }); - describe('.titlePath()', function () { - beforeEach(function () { + describe('.titlePath()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when there is no parent', function () { - it('returns the suite title', function () { - expect(this.suite.titlePath()).to.eql(['A Suite']); + describe('when there is no parent', function() { + it('returns the suite title', function() { + expect(this.suite.titlePath(), 'to equal', ['A Suite']); }); }); - describe('when there is a parent', function () { - describe('the parent is the root suite', function () { - it('returns the suite title', function () { + describe('when there is a parent', function() { + describe('the parent is the root suite', function() { + it('returns the suite title', function() { var parentSuite = new Suite(''); parentSuite.addSuite(this.suite); - expect(this.suite.titlePath()).to.eql(['A Suite']); + expect(this.suite.titlePath(), 'to equal', ['A Suite']); }); }); - describe('the parent is not the root suite', function () { - it('returns the concatenation of parent\'s and suite\'s title', function () { + describe('the parent is not the root suite', function() { + it("returns the concatenation of parent's and suite's title", function() { var parentSuite = new Suite('I am a parent'); parentSuite.addSuite(this.suite); - expect(this.suite.titlePath()).to.eql(['I am a parent', 'A Suite']); + expect(this.suite.titlePath(), 'to equal', [ + 'I am a parent', + 'A Suite' + ]); }); }); }); }); - describe('.total()', function () { - beforeEach(function () { + describe('.total()', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when there are no nested suites or tests', function () { - it('should return 0', function () { - expect(this.suite.total()).to.equal(0); + describe('when there are no nested suites or tests', function() { + it('should return 0', function() { + expect(this.suite.total(), 'to be', 0); }); }); - describe('when there are several tests in the suite', function () { - it('should return the number', function () { + describe('when there are several tests in the suite', function() { + it('should return the number', function() { this.suite.addTest(new Test('a child test')); this.suite.addTest(new Test('another child test')); - expect(this.suite.total()).to.equal(2); + expect(this.suite.total(), 'to be', 2); }); }); }); - describe('.eachTest(fn)', function () { - beforeEach(function () { + describe('.eachTest(fn)', function() { + beforeEach(function() { this.suite = new Suite('A Suite'); }); - describe('when there are no nested suites or tests', function () { - it('should return 0', function () { + describe('when there are no nested suites or tests', function() { + it('should return 0', function() { var n = 0; - function fn () { n++; } + function fn() { + n++; + } this.suite.eachTest(fn); - expect(n).to.equal(0); + expect(n, 'to be', 0); }); }); - describe('when there are several tests in the suite', function () { - it('should return the number', function () { + describe('when there are several tests in the suite', function() { + it('should return the number', function() { this.suite.addTest(new Test('a child test')); this.suite.addTest(new Test('another child test')); var n = 0; - function fn () { n++; } + function fn() { + n++; + } this.suite.eachTest(fn); - expect(n).to.equal(2); + expect(n, 'to be', 2); }); }); - describe('when there are several levels of nested suites', function () { - it('should return the number', function () { + describe('when there are several levels of nested suites', function() { + it('should return the number', function() { this.suite.addTest(new Test('a child test')); var suite = new Suite('a child suite'); suite.addTest(new Test('a test in a child suite')); this.suite.addSuite(suite); var n = 0; - function fn () { n++; } + function fn() { + n++; + } this.suite.eachTest(fn); - expect(n).to.equal(2); + expect(n, 'to be', 2); }); }); }); - describe('initialization', function () { + describe('initialization', function() { /* eslint no-new: off */ - it('should throw an error if the title isn\'t a string', function () { - expect(function () { + it("should throw an error if the title isn't a string", function() { + expect(function() { new Suite(undefined, 'root'); - }).to.throwError(); + }, 'to throw'); - expect(function () { - new Suite(function () {}, 'root'); - }).to.throwError(); + expect(function() { + new Suite(function() {}, 'root'); + }, 'to throw'); }); - it('should not throw if the title is a string', function () { - expect(function () { + it('should not throw if the title is a string', function() { + expect(function() { new Suite('Bdd suite', 'root'); - }).to.not.throwError(); + }, 'not to throw'); }); }); }); -describe('Test', function () { - describe('initialization', function () { - it('should throw an error if the title isn\'t a string', function () { - expect(function () { - new Test(function () {}); - }).to.throwError(); +describe('Test', function() { + describe('initialization', function() { + it("should throw an error if the title isn't a string", function() { + expect(function() { + new Test(function() {}); + }, 'to throw'); - expect(function () { - new Test(undefined, function () {}); - }).to.throwError(); + expect(function() { + new Test(undefined, function() {}); + }, 'to throw'); }); - it('should not throw if the title is a string', function () { - expect(function () { - new Test('test-case', function () {}); - }).to.not.throwError(); + it('should not throw if the title is a string', function() { + expect(function() { + new Test('test-case', function() {}); + }, 'not to throw'); }); }); }); diff --git a/test/unit/test.spec.js b/test/unit/test.spec.js index 86aa5effa3..6192bf9f7f 100644 --- a/test/unit/test.spec.js +++ b/test/unit/test.spec.js @@ -3,10 +3,10 @@ var mocha = require('../../lib/mocha'); var Test = mocha.Test; -describe('Test', function () { - describe('.clone()', function () { - beforeEach(function () { - this._test = new Test('To be cloned', function () {}); +describe('Test', function() { + describe('.clone()', function() { + beforeEach(function() { + this._test = new Test('To be cloned', function() {}); this._test._timeout = 3043; this._test._slow = 101; this._test._enableTimeouts = true; @@ -17,60 +17,64 @@ describe('Test', function () { this._test.file = 'bar'; }); - it('should copy the title', function () { - expect(this._test.clone().title).to.equal('To be cloned'); + it('should copy the title', function() { + expect(this._test.clone().title, 'to be', 'To be cloned'); }); - it('should copy the timeout value', function () { - expect(this._test.clone().timeout()).to.equal(3043); + it('should copy the timeout value', function() { + expect(this._test.clone().timeout(), 'to be', 3043); }); - it('should copy the slow value', function () { - expect(this._test.clone().slow()).to.equal(101); + it('should copy the slow value', function() { + expect(this._test.clone().slow(), 'to be', 101); }); - it('should copy the enableTimeouts value', function () { - expect(this._test.clone().enableTimeouts()).to.be(true); + it('should copy the enableTimeouts value', function() { + expect(this._test.clone().enableTimeouts(), 'to be', true); }); - it('should copy the retries value', function () { - expect(this._test.clone().retries()).to.equal(3); + it('should copy the retries value', function() { + expect(this._test.clone().retries(), 'to be', 3); }); - it('should copy the currentRetry value', function () { - expect(this._test.clone().currentRetry()).to.equal(1); + it('should copy the currentRetry value', function() { + expect(this._test.clone().currentRetry(), 'to be', 1); }); - it('should copy the globals value', function () { - expect(this._test.clone().globals()).to.not.be.empty(); + it('should copy the globals value', function() { + expect(this._test.clone().globals(), 'not to be empty'); }); - it('should copy the parent value', function () { - expect(this._test.clone().parent).to.equal('foo'); + it('should copy the parent value', function() { + expect(this._test.clone().parent, 'to be', 'foo'); }); - it('should copy the file value', function () { - expect(this._test.clone().file).to.equal('bar'); + it('should copy the file value', function() { + expect(this._test.clone().file, 'to be', 'bar'); }); }); - describe('.isPending()', function () { - beforeEach(function () { - this._test = new Test('Is it skipped', function () {}); + describe('.isPending()', function() { + beforeEach(function() { + this._test = new Test('Is it skipped', function() {}); }); - it('should not be pending by default', function () { - expect(this._test.isPending()).to.not.be(true); + it('should not be pending by default', function() { + expect(this._test.isPending(), 'not to be', true); }); - it('should be pending when marked as such', function () { + it('should be pending when marked as such', function() { this._test.pending = true; - expect(this._test.isPending()).to.be(true); + expect(this._test.isPending(), 'to be', true); }); - it('should be pending when its parent is pending', function () { - this._test.parent = { isPending: function () { return true; } }; - expect(this._test.isPending()).to.be(true); + it('should be pending when its parent is pending', function() { + this._test.parent = { + isPending: function() { + return true; + } + }; + expect(this._test.isPending(), 'to be', true); }); }); }); diff --git a/test/unit/throw.spec.js b/test/unit/throw.spec.js index 9e90860194..da0c7ff643 100644 --- a/test/unit/throw.spec.js +++ b/test/unit/throw.spec.js @@ -6,12 +6,12 @@ var Suite = require('../../lib/suite'); var Test = require('../../lib/test'); var Runner = require('../../lib/runner'); -describe('a test that throws', function () { +describe('a test that throws', function() { var suite; var runner; var uncaughtHandlers; - beforeEach(function () { + beforeEach(function() { suite = new Suite('Suite', 'root'); runner = new Runner(suite); @@ -20,15 +20,14 @@ describe('a test that throws', function () { process.removeAllListeners('uncaughtException'); }); - afterEach(function () { - uncaughtHandlers.forEach(function (listener) { + afterEach(function() { + uncaughtHandlers.forEach(function(listener) { process.on('uncaughtException', listener); }); }); describe('extensible', function () { it('should not crash if throwing non-extensible type', function (done) { - /* eslint-disable-next-line no-unused-vars */ var test = new Test('im async and throw string async', function (done2) { process.nextTick(function () { throw 'error'; @@ -52,89 +51,87 @@ describe('a test that throws', function () { }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); }); - it('should not pass if throwing sync and test is async', function (done) { - /* eslint-disable-next-line no-unused-vars */ - var test = new Test('im async and throw undefined sync', function (done2) { + it('should not pass if throwing sync and test is async', function(done) { + var test = new Test('im async and throw undefined sync', function(done2) { throw undefined; }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); }); - it('should not pass if throwing async and test is async', function (done) { - /* eslint-disable-next-line no-unused-vars */ - var test = new Test('im async and throw undefined async', function (done2) { - process.nextTick(function () { + it('should not pass if throwing async and test is async', function(done) { + var test = new Test('im async and throw undefined async', function( + done2 + ) { + process.nextTick(function() { throw undefined; }); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); }); }); - describe('null', function () { - it('should not pass if throwing sync and test is sync', function (done) { - var test = new Test('im sync and throw null sync', function () { + describe('null', function() { + it('should not pass if throwing sync and test is sync', function(done) { + var test = new Test('im sync and throw null sync', function() { throw null; }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); }); - it('should not pass if throwing sync and test is async', function (done) { - /* eslint-disable-next-line no-unused-vars */ - var test = new Test('im async and throw null sync', function (done2) { + it('should not pass if throwing sync and test is async', function(done) { + var test = new Test('im async and throw null sync', function(done2) { throw null; }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); }); - it('should not pass if throwing async and test is async', function (done) { - /* eslint-disable-next-line no-unused-vars */ - var test = new Test('im async and throw null async', function (done2) { - process.nextTick(function () { + it('should not pass if throwing async and test is async', function(done) { + var test = new Test('im async and throw null async', function(done2) { + process.nextTick(function() { throw null; }); }); suite.addTest(test); runner = new Runner(suite); - runner.on('end', function () { - expect(runner.failures).to.equal(1); - expect(test.state).to.equal('failed'); + runner.on('end', function() { + expect(runner.failures, 'to be', 1); + expect(test.state, 'to be', 'failed'); done(); }); runner.run(); diff --git a/test/unit/timeout.spec.js b/test/unit/timeout.spec.js index 066e70d111..ce95edcb81 100644 --- a/test/unit/timeout.spec.js +++ b/test/unit/timeout.spec.js @@ -1,61 +1,61 @@ 'use strict'; -describe('timeouts', function () { - beforeEach(function (done) { +describe('timeouts', function() { + beforeEach(function(done) { // uncomment // setTimeout(done, 3000); done(); }); - it('should error on timeout', function (done) { + it('should error on timeout', function(done) { // uncomment // setTimeout(done, 3000); done(); }); - it('should allow overriding per-test', function (done) { + it('should allow overriding per-test', function(done) { this.timeout(200); - setTimeout(function () { + setTimeout(function() { done(); }, 50); }); - describe('disabling', function () { - it('should allow overriding per-test', function (done) { + describe('disabling', function() { + it('should allow overriding per-test', function(done) { this.enableTimeouts(false); this.timeout(1); setTimeout(done, 2); }); - it('should work with timeout(0)', function (done) { + it('should work with timeout(0)', function(done) { this.timeout(0); setTimeout(done, 1); }); - describe('using beforeEach', function () { - beforeEach(function () { + describe('using beforeEach', function() { + beforeEach(function() { this.timeout(0); }); - it('should work with timeout(0)', function (done) { + it('should work with timeout(0)', function(done) { setTimeout(done, 1); }); }); - describe('using before', function () { - before(function () { + describe('using before', function() { + before(function() { this.timeout(0); }); - it('should work with timeout(0)', function (done) { + it('should work with timeout(0)', function(done) { setTimeout(done, 1); }); }); - describe('using enableTimeouts(false)', function () { + describe('using enableTimeouts(false)', function() { this.timeout(4); - it('should suppress timeout(4)', function (done) { + it('should suppress timeout(4)', function(done) { this.slow(100); // The test is in the before() call. this.enableTimeouts(false); @@ -63,15 +63,15 @@ describe('timeouts', function () { }); }); - describe('suite-level', function () { + describe('suite-level', function() { this.timeout(0); - it('should work with timeout(0)', function (done) { + it('should work with timeout(0)', function(done) { setTimeout(done, 1); }); - describe('nested suite', function () { - it('should work with timeout(0)', function (done) { + describe('nested suite', function() { + it('should work with timeout(0)', function(done) { setTimeout(done, 1); }); }); diff --git a/test/unit/utils.spec.js b/test/unit/utils.spec.js index 7c4313ffee..e5a68debd0 100644 --- a/test/unit/utils.spec.js +++ b/test/unit/utils.spec.js @@ -2,85 +2,82 @@ var utils = require('../../lib/utils'); -describe('lib/utils', function () { - describe('clean', function () { - it('should remove the wrapping function declaration', function () { - expect(utils.clean('function (one, two, three) {\n//code\n}')) - .to - .equal('//code'); +describe('lib/utils', function() { + describe('clean', function() { + it('should remove the wrapping function declaration', function() { + expect( + utils.clean('function (one, two, three) {\n//code\n}'), + 'to be', + '//code' + ); }); - it('should handle newlines in the function declaration', function () { - expect(utils.clean('function (one, two, three)\n {\n//code\n}')) - .to - .equal('//code'); + it('should handle newlines in the function declaration', function() { + expect( + utils.clean('function (one, two, three)\n {\n//code\n}'), + 'to be', + '//code' + ); }); - it('should remove space character indentation from the function body', - function () { - expect(utils.clean(' //line1\n //line2')) - .to - .equal('//line1\n //line2'); - }); + it('should remove space character indentation from the function body', function() { + expect( + utils.clean(' //line1\n //line2'), + 'to be', + '//line1\n //line2' + ); + }); - it('should remove tab character indentation from the function body', - function () { - expect(utils.clean('\t//line1\n\t\t//line2')) - .to - .equal('//line1\n\t//line2'); - }); + it('should remove tab character indentation from the function body', function() { + expect( + utils.clean('\t//line1\n\t\t//line2'), + 'to be', + '//line1\n\t//line2' + ); + }); - it('should handle functions with tabs in their declarations', function () { - expect(utils.clean('function\t(\t)\t{\n//code\n}')) - .to - .equal('//code'); + it('should handle functions with tabs in their declarations', function() { + expect(utils.clean('function\t(\t)\t{\n//code\n}'), 'to be', '//code'); }); - it('should handle named functions without space after name', function () { - expect(utils.clean('function withName() {\n//code\n}')) - .to - .equal('//code'); + it('should handle named functions without space after name', function() { + expect( + utils.clean('function withName() {\n//code\n}'), + 'to be', + '//code' + ); }); - it('should handle named functions with space after name', function () { - expect(utils.clean('function withName () {\n//code\n}')) - .to - .equal('//code'); + it('should handle named functions with space after name', function() { + expect( + utils.clean('function withName () {\n//code\n}'), + 'to be', + '//code' + ); }); - it( - 'should handle functions with no space between the end and the closing brace', - function () { - expect(utils.clean('function() {/*code*/}')) - .to - .equal('/*code*/'); - }); + it('should handle functions with no space between the end and the closing brace', function() { + expect(utils.clean('function() {/*code*/}'), 'to be', '/*code*/'); + }); - it('should handle functions with parentheses in the same line', - function () { - expect(utils.clean('function() { if (true) { /* code */ } }')) - .to - .equal('if (true) { /* code */ }'); - }); + it('should handle functions with parentheses in the same line', function() { + expect( + utils.clean('function() { if (true) { /* code */ } }'), + 'to be', + 'if (true) { /* code */ }' + ); + }); - it('should handle empty functions', function () { - expect(utils.clean('function() {}')) - .to - .equal(''); + it('should handle empty functions', function() { + expect(utils.clean('function() {}'), 'to be', ''); }); - it('should format a single line test function', function () { - var fn = [ - 'function () {', - ' var a = 1;', - '}' - ].join('\n'); - expect(utils.clean(fn)) - .to - .equal('var a = 1;'); + it('should format a single line test function', function() { + var fn = ['function () {', ' var a = 1;', '}'].join('\n'); + expect(utils.clean(fn), 'to be', 'var a = 1;'); }); - it('should format a multi line test indented with spaces', function () { + it('should format a multi line test indented with spaces', function() { // and no new lines after curly braces, shouldn't matter var fn = [ 'function(){ var a = 1;', @@ -88,12 +85,10 @@ describe('lib/utils', function () { ' var b = 2;', ' var c = 3; }' ].join('\n'); - expect(utils.clean(fn)) - .to - .equal('var a = 1;\n var b = 2;\nvar c = 3;'); + expect(utils.clean(fn), 'to be', 'var a = 1;\n var b = 2;\nvar c = 3;'); }); - it('should format a multi line test indented with tabs', function () { + it('should format a multi line test indented with tabs', function() { var fn = [ 'function (arg1, arg2) {', '\tif (true) {', @@ -101,12 +96,10 @@ describe('lib/utils', function () { '\t}', '}' ].join('\n'); - expect(utils.clean(fn)) - .to - .equal('if (true) {\n\tvar a = 1;\n}'); + expect(utils.clean(fn), 'to be', 'if (true) {\n\tvar a = 1;\n}'); }); - it('should format functions saved in windows style - spaces', function () { + it('should format functions saved in windows style - spaces', function() { var fn = [ 'function (one) {', ' do {', @@ -114,12 +107,10 @@ describe('lib/utils', function () { ' } while (false);', ' }' ].join('\r\n'); - expect(utils.clean(fn)) - .to - .equal('do {\n "nothing";\n} while (false);'); + expect(utils.clean(fn), 'to be', 'do {\n "nothing";\n} while (false);'); }); - it('should format functions saved in windows style - tabs', function () { + it('should format functions saved in windows style - tabs', function() { var fn = [ 'function ( ) {', '\tif (false) {', @@ -129,78 +120,88 @@ describe('lib/utils', function () { '\t}', '}' ].join('\r\n'); - expect(utils.clean(fn)) - .to - .equal('if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}'); + expect( + utils.clean(fn), + 'to be', + 'if (false) {\n\tvar json = {\n\t\tone : 1\n\t};\n}' + ); }); - it('should format es6 arrow functions', function () { - var fn = [ - '() => {', - ' var a = 1;', - '}' - ].join('\n'); - expect(utils.clean(fn)) - .to - .equal('var a = 1;'); + it('should format es6 arrow functions', function() { + var fn = ['() => {', ' var a = 1;', '}'].join('\n'); + expect(utils.clean(fn), 'to be', 'var a = 1;'); }); - it('should format es6 arrow functions with implicit return', function () { + it('should format es6 arrow functions with implicit return', function() { var fn = '() => foo()'; - expect(utils.clean(fn)) - .to - .equal('foo()'); + expect(utils.clean(fn), 'to be', 'foo()'); }); }); - describe('stringify', function () { + describe('stringify', function() { var stringify = utils.stringify; - it('should return an object representation of a string created with a String constructor', function () { + it('should return an object representation of a string created with a String constructor', function() { /* eslint no-new-wrappers: off */ - expect(stringify(new String('foo'))).to.equal('{\n "0": "f"\n "1": "o"\n "2": "o"\n}'); + expect( + stringify(new String('foo')), + 'to be', + '{\n "0": "f"\n "1": "o"\n "2": "o"\n}' + ); }); - it('should return Buffer with .toJSON representation', function () { - expect(stringify(Buffer.from([0x01]))).to.equal('[\n 1\n]'); - expect(stringify(Buffer.from([0x01, 0x02]))).to.equal('[\n 1\n 2\n]'); + it('should return Buffer with .toJSON representation', function() { + expect(stringify(Buffer.from([0x01])), 'to be', '[\n 1\n]'); + expect(stringify(Buffer.from([0x01, 0x02])), 'to be', '[\n 1\n 2\n]'); - expect(stringify(Buffer.from('ABCD'))).to.equal('[\n 65\n 66\n 67\n 68\n]'); + expect( + stringify(Buffer.from('ABCD')), + 'to be', + '[\n 65\n 66\n 67\n 68\n]' + ); }); - it('should return Date object with .toISOString() + string prefix', function () { - expect(stringify(new Date(0))).to.equal('[Date: ' + new Date(0).toISOString() + ']'); + it('should return Date object with .toISOString() + string prefix', function() { + expect( + stringify(new Date(0)), + 'to be', + '[Date: ' + new Date(0).toISOString() + ']' + ); var date = new Date(); // now - expect(stringify(date)).to.equal('[Date: ' + date.toISOString() + ']'); + expect(stringify(date), 'to be', '[Date: ' + date.toISOString() + ']'); }); - it('should return invalid Date object with .toString() + string prefix', function () { - expect(stringify(new Date(''))).to.equal('[Date: ' + new Date('').toString() + ']'); + it('should return invalid Date object with .toString() + string prefix', function() { + expect( + stringify(new Date('')), + 'to be', + '[Date: ' + new Date('').toString() + ']' + ); }); - describe('#Number', function () { - it('should show the handle -0 situations', function () { - expect(stringify(-0)).to.eql('-0'); - expect(stringify(0)).to.eql('0'); - expect(stringify('-0')).to.eql('"-0"'); + describe('#Number', function() { + it('should show the handle -0 situations', function() { + expect(stringify(-0), 'to be', '-0'); + expect(stringify(0), 'to be', '0'); + expect(stringify('-0'), 'to be', '"-0"'); }); - it('should work well with `NaN` and `Infinity`', function () { - expect(stringify(NaN)).to.equal('NaN'); - expect(stringify(Infinity)).to.equal('Infinity'); - expect(stringify(-Infinity)).to.equal('-Infinity'); + it('should work well with `NaN` and `Infinity`', function() { + expect(stringify(NaN), 'to be', 'NaN'); + expect(stringify(Infinity), 'to be', 'Infinity'); + expect(stringify(-Infinity), 'to be', '-Infinity'); }); - it('floats and ints', function () { - expect(stringify(1)).to.equal('1'); - expect(stringify(1.2)).to.equal('1.2'); - expect(stringify(1e9)).to.equal('1000000000'); + it('floats and ints', function() { + expect(stringify(1), 'to be', '1'); + expect(stringify(1.2), 'to be', '1.2'); + expect(stringify(1e9), 'to be', '1000000000'); }); }); - describe('canonicalize example', function () { - it('should represent the actual full result', function () { + describe('canonicalize example', function() { + it('should represent the actual full result', function() { var expected = { str: 'string', int: 90, @@ -210,22 +211,16 @@ describe('lib/utils', function () { undef: undefined, regex: /^[a-z|A-Z]/, date: new Date(0), - func: function () {}, + func: function() {}, infi: Infinity, nan: NaN, zero: -0, buffer: Buffer.from([0x01, 0x02]), array: [1, 2, 3], empArr: [], - matrix: [[1], - [ - 2, - 3, - 4 - ] - ], - object: { a: 1, b: 2 }, - canObj: { a: { b: 1, c: 2 }, b: {} }, + matrix: [[1], [2, 3, 4]], + object: {a: 1, b: 2}, + canObj: {a: {b: 1, c: 2}, b: {}}, empObj: {} }; expected.circular = expected; // Make `Circular` situation @@ -278,145 +273,205 @@ describe('lib/utils', function () { ' "zero": -0', '}' ].join('\n'); - expect(stringify(expected)).to.equal(actual); + expect(stringify(expected), 'to be', actual); }); }); - it('should canonicalize the object', function () { - var travis = { name: 'travis', age: 24 }; - var travis2 = { age: 24, name: 'travis' }; + it('should canonicalize the object', function() { + var travis = {name: 'travis', age: 24}; + var travis2 = {age: 24, name: 'travis'}; - expect(stringify(travis)).to.equal(stringify(travis2)); + expect(stringify(travis), 'to be', stringify(travis2)); }); - it('should handle circular structures in objects', function () { - var travis = { name: 'travis' }; + it('should handle circular structures in objects', function() { + var travis = {name: 'travis'}; travis.whoami = travis; - expect(stringify(travis)).to.equal('{\n "name": "travis"\n "whoami": [Circular]\n}'); + expect( + stringify(travis), + 'to be', + '{\n "name": "travis"\n "whoami": [Circular]\n}' + ); }); - it('should handle circular structures in arrays', function () { + it('should handle circular structures in arrays', function() { var travis = ['travis']; travis.push(travis); - expect(stringify(travis)).to.equal('[\n "travis"\n [Circular]\n]'); + expect(stringify(travis), 'to be', '[\n "travis"\n [Circular]\n]'); }); - it('should handle circular structures in functions', function () { - var travis = function () {}; + it('should handle circular structures in functions', function() { + var travis = function() {}; travis.fn = travis; - expect(stringify(travis)).to.equal('{\n "fn": [Circular]\n}'); + expect(stringify(travis), 'to be', '{\n "fn": [Circular]\n}'); }); - it('should handle various non-undefined, non-null, non-object, non-array, non-date, and non-function values', function () { + it('should handle various non-undefined, non-null, non-object, non-array, non-date, and non-function values', function() { var regexp = new RegExp('(?:)'); var regExpObj = {regexp: regexp}; var regexpString = '/(?:)/'; - expect(stringify(regExpObj)).to.equal('{\n "regexp": ' + regexpString + '\n}'); - expect(stringify(regexp)).to.equal(regexpString); + expect( + stringify(regExpObj), + 'to be', + '{\n "regexp": ' + regexpString + '\n}' + ); + expect(stringify(regexp), 'to be', regexpString); var number = 1; var numberObj = {number: number}; var numberString = '1'; - expect(stringify(numberObj)).to.equal('{\n "number": ' + number + '\n}'); - expect(stringify(number)).to.equal(numberString); + expect(stringify(numberObj), 'to be', '{\n "number": ' + number + '\n}'); + expect(stringify(number), 'to be', numberString); var boolean = false; var booleanObj = {boolean: boolean}; var booleanString = 'false'; - expect(stringify(booleanObj)).to.equal('{\n "boolean": ' + boolean + '\n}'); - expect(stringify(boolean)).to.equal(booleanString); + expect( + stringify(booleanObj), + 'to be', + '{\n "boolean": ' + boolean + '\n}' + ); + expect(stringify(boolean), 'to be', booleanString); var string = 'sneepy'; var stringObj = {string: string}; - expect(stringify(stringObj)).to.equal('{\n "string": "' + string + '"\n}'); - expect(stringify(string)).to.equal(JSON.stringify(string)); + expect( + stringify(stringObj), + 'to be', + '{\n "string": "' + string + '"\n}' + ); + expect(stringify(string), 'to be', JSON.stringify(string)); var nullValue = null; - var nullObj = {'null': null}; + var nullObj = {null: null}; var nullString = '[null]'; - expect(stringify(nullObj)).to.equal('{\n "null": [null]\n}'); - expect(stringify(nullValue)).to.equal(nullString); + expect(stringify(nullObj), 'to be', '{\n "null": [null]\n}'); + expect(stringify(nullValue), 'to be', nullString); }); - it('should handle arrays', function () { + it('should handle arrays', function() { var array = ['dave', 'dave', 'dave', 'dave']; var arrayObj = {array: array}; var arrayString = ' "dave"\n "dave"\n "dave"\n "dave"'; - expect(stringify(arrayObj)).to.equal('{\n "array": [\n' + arrayString + '\n ]\n}'); - expect(stringify(array)).to.equal('[' + arrayString.replace(/\s+/g, '\n ') + '\n]'); + expect( + stringify(arrayObj), + 'to be', + '{\n "array": [\n' + arrayString + '\n ]\n}' + ); + expect( + stringify(array), + 'to be', + '[' + arrayString.replace(/\s+/g, '\n ') + '\n]' + ); }); - it('should handle functions', function () { - var fn = function () {}; + it('should handle functions', function() { + var fn = function() {}; var fnObj = {fn: fn}; var fnString = '[Function]'; - expect(stringify(fnObj)).to.equal('{\n "fn": ' + fnString + '\n}'); - expect(stringify(fn)).to.equal('[Function]'); + expect(stringify(fnObj), 'to be', '{\n "fn": ' + fnString + '\n}'); + expect(stringify(fn), 'to be', '[Function]'); }); - it('should handle empty objects', function () { - expect(stringify({})).to.equal('{}'); - expect(stringify({foo: {}})).to.equal('{\n "foo": {}\n}'); + it('should handle empty objects', function() { + expect(stringify({}), 'to be', '{}'); + expect(stringify({foo: {}}), 'to be', '{\n "foo": {}\n}'); }); - it('should handle empty arrays', function () { - expect(stringify([])).to.equal('[]'); - expect(stringify({foo: []})).to.equal('{\n "foo": []\n}'); + it('should handle empty arrays', function() { + expect(stringify([]), 'to be', '[]'); + expect(stringify({foo: []}), 'to be', '{\n "foo": []\n}'); }); - it('should handle non-empty arrays', function () { - expect(stringify(['a', 'b', 'c'])).to.equal('[\n "a"\n "b"\n "c"\n]'); + it('should handle non-empty arrays', function() { + expect(stringify(['a', 'b', 'c']), 'to be', '[\n "a"\n "b"\n "c"\n]'); }); - it('should handle empty functions (with no properties)', function () { - expect(stringify(function () {})).to.equal('[Function]'); - expect(stringify({foo: function () {}})).to.equal('{\n "foo": [Function]\n}'); - expect(stringify({foo: function () {}, bar: 'baz'})).to.equal('{\n "bar": "baz"\n "foo": [Function]\n}'); + it('should handle empty functions (with no properties)', function() { + expect(stringify(function() {}), 'to be', '[Function]'); + expect( + stringify({foo: function() {}}), + 'to be', + '{\n "foo": [Function]\n}' + ); + expect( + stringify({foo: function() {}, bar: 'baz'}), + 'to be', + '{\n "bar": "baz"\n "foo": [Function]\n}' + ); }); - it('should handle functions w/ properties', function () { - var fn = function () {}; + it('should handle functions w/ properties', function() { + var fn = function() {}; fn.bar = 'baz'; - expect(stringify(fn)).to.equal('{\n "bar": "baz"\n}'); - expect(stringify({foo: fn})).to.equal('{\n "foo": {\n "bar": "baz"\n }\n}'); - }); - - it('should handle undefined values', function () { - expect(stringify({foo: undefined})).to.equal('{\n "foo": [undefined]\n}'); - expect(stringify({foo: 'bar', baz: undefined})).to.equal('{\n "baz": [undefined]\n "foo": "bar"\n}'); - expect(stringify()).to.equal('[undefined]'); - }); - - it('should recurse', function () { - expect(stringify({foo: {bar: {baz: {quux: {herp: 'derp'}}}}})).to.equal('{\n "foo": {\n "bar": {\n "baz": {\n "quux": {\n "herp": "derp"\n }\n }\n }\n }\n}'); - }); - - it('might get confusing', function () { - expect(stringify(null)).to.equal('[null]'); - }); - - it('should not freak out if it sees a primitive twice', function () { - expect(stringify({foo: null, bar: null})).to.equal('{\n "bar": [null]\n "foo": [null]\n}'); - expect(stringify({foo: 1, bar: 1})).to.equal('{\n "bar": 1\n "foo": 1\n}'); - }); - - it('should stringify dates', function () { + expect(stringify(fn), 'to be', '{\n "bar": "baz"\n}'); + expect( + stringify({foo: fn}), + 'to be', + '{\n "foo": {\n "bar": "baz"\n }\n}' + ); + }); + + it('should handle undefined values', function() { + expect( + stringify({foo: undefined}), + 'to be', + '{\n "foo": [undefined]\n}' + ); + expect( + stringify({foo: 'bar', baz: undefined}), + 'to be', + '{\n "baz": [undefined]\n "foo": "bar"\n}' + ); + expect(stringify(), 'to be', '[undefined]'); + }); + + it('should recurse', function() { + expect( + stringify({foo: {bar: {baz: {quux: {herp: 'derp'}}}}}), + 'to be', + '{\n "foo": {\n "bar": {\n "baz": {\n "quux": {\n "herp": "derp"\n }\n }\n }\n }\n}' + ); + }); + + it('might get confusing', function() { + expect(stringify(null), 'to be', '[null]'); + }); + + it('should not freak out if it sees a primitive twice', function() { + expect( + stringify({foo: null, bar: null}), + 'to be', + '{\n "bar": [null]\n "foo": [null]\n}' + ); + expect( + stringify({foo: 1, bar: 1}), + 'to be', + '{\n "bar": 1\n "foo": 1\n}' + ); + }); + + it('should stringify dates', function() { var date = new Date(0); - expect(stringify(date)).to.equal('[Date: 1970-01-01T00:00:00.000Z]'); - expect(stringify({date: date})).to.equal('{\n "date": [Date: 1970-01-01T00:00:00.000Z]\n}'); + expect(stringify(date), 'to be', '[Date: 1970-01-01T00:00:00.000Z]'); + expect( + stringify({date: date}), + 'to be', + '{\n "date": [Date: 1970-01-01T00:00:00.000Z]\n}' + ); }); - it('should handle object without an Object prototype', function () { + it('should handle object without an Object prototype', function() { var a; if (Object.create) { a = Object.create(null); @@ -425,33 +480,45 @@ describe('lib/utils', function () { } a.foo = 1; - expect(stringify(a)).to.equal('{\n "foo": 1\n}'); + expect(stringify(a), 'to be', '{\n "foo": 1\n}'); }); // In old version node.js, Symbol is not available by default. if (typeof global.Symbol === 'function') { - it('should handle Symbol', function () { + it('should handle Symbol', function() { var symbol = Symbol('value'); - expect(stringify(symbol)).to.equal('Symbol(value)'); - expect(stringify({symbol: symbol})).to.equal('{\n "symbol": Symbol(value)\n}'); + expect(stringify(symbol), 'to be', 'Symbol(value)'); + expect( + stringify({symbol: symbol}), + 'to be', + '{\n "symbol": Symbol(value)\n}' + ); }); } - it('should handle length properties that cannot be coerced to a number', function () { - expect(stringify({length: {nonBuiltinProperty: 0}})).to.equal('{\n "length": {\n "nonBuiltinProperty": 0\n }\n}'); - expect(stringify({length: 'a string where length should be'})).to.equal('{\n "length": "a string where length should be"\n}'); + it('should handle length properties that cannot be coerced to a number', function() { + expect( + stringify({length: {nonBuiltinProperty: 0}}), + 'to be', + '{\n "length": {\n "nonBuiltinProperty": 0\n }\n}' + ); + expect( + stringify({length: 'a string where length should be'}), + 'to be', + '{\n "length": "a string where length should be"\n}' + ); }); }); - describe('type', function () { + describe('type', function() { /* eslint no-extend-native: off */ var type = utils.type; var toString = Object.prototype.toString; - beforeEach(function () { + beforeEach(function() { // some JS engines such as PhantomJS 1.x exhibit this behavior - Object.prototype.toString = function () { + Object.prototype.toString = function() { if (this === global) { return '[object DOMWindow]'; } @@ -459,92 +526,92 @@ describe('lib/utils', function () { }; }); - it('should recognize various types', function () { - expect(type({})).to.equal('object'); - expect(type([])).to.equal('array'); - expect(type(1)).to.equal('number'); - expect(type(Infinity)).to.equal('number'); - expect(type(null)).to.equal('null'); - expect(type(undefined)).to.equal('undefined'); - expect(type(new Date())).to.equal('date'); - expect(type(/foo/)).to.equal('regexp'); - expect(type('type')).to.equal('string'); - expect(type(global)).to.equal('domwindow'); - expect(type(true)).to.equal('boolean'); - }); - - describe('when toString on null or undefined stringifies window', function () { - it('should recognize null and undefined', function () { - expect(type(null)).to.equal('null'); - expect(type(undefined)).to.equal('undefined'); + it('should recognize various types', function() { + expect(type({}), 'to be', 'object'); + expect(type([]), 'to be', 'array'); + expect(type(1), 'to be', 'number'); + expect(type(Infinity), 'to be', 'number'); + expect(type(null), 'to be', 'null'); + expect(type(undefined), 'to be', 'undefined'); + expect(type(new Date()), 'to be', 'date'); + expect(type(/foo/), 'to be', 'regexp'); + expect(type('type'), 'to be', 'string'); + expect(type(global), 'to be', 'domwindow'); + expect(type(true), 'to be', 'boolean'); + }); + + describe('when toString on null or undefined stringifies window', function() { + it('should recognize null and undefined', function() { + expect(type(null), 'to be', 'null'); + expect(type(undefined), 'to be', 'undefined'); }); }); - afterEach(function () { + afterEach(function() { Object.prototype.toString = toString; }); }); - describe('parseQuery()', function () { + describe('parseQuery()', function() { var parseQuery = utils.parseQuery; - it('should get queryString and return key-value object', function () { - expect(parseQuery('?foo=1&bar=2&baz=3')) - .to - .eql({ - foo: '1', - bar: '2', - baz: '3' - }); - - expect(parseQuery('?r1=^@(?!.*\\)$)&r2=m{2}&r3=^co.*')) - .to - .eql({ - r1: '^@(?!.*\\)$)', - r2: 'm{2}', - r3: '^co.*' - }); - }); - - it('should parse "+" as a space', function () { - expect(parseQuery('?grep=foo+bar')) - .to - .eql({grep: 'foo bar'}); + it('should get queryString and return key-value object', function() { + expect(parseQuery('?foo=1&bar=2&baz=3'), 'to equal', { + foo: '1', + bar: '2', + baz: '3' + }); + + expect(parseQuery('?r1=^@(?!.*\\)$)&r2=m{2}&r3=^co.*'), 'to equal', { + r1: '^@(?!.*\\)$)', + r2: 'm{2}', + r3: '^co.*' + }); + }); + + it('should parse "+" as a space', function() { + expect(parseQuery('?grep=foo+bar'), 'to equal', {grep: 'foo bar'}); }); }); - describe('isPromise', function () { - it('should return true if the value is Promise-ish', function () { - expect(utils.isPromise({ - then: function () { - } - })).to.be(true); + describe('isPromise', function() { + it('should return true if the value is Promise-ish', function() { + expect( + utils.isPromise({ + then: function() {} + }), + 'to be', + true + ); }); - it('should return false if the value is not an object', function () { - expect(utils.isPromise(1)).to.be(false); + it('should return false if the value is not an object', function() { + expect(utils.isPromise(1), 'to be', false); }); - it('should return false if the value is an object w/o a "then" function', - function () { - expect(utils.isPromise({})).to.be(false); - }); + it('should return false if the value is an object w/o a "then" function', function() { + expect(utils.isPromise({}), 'to be', false); + }); }); - describe('escape', function () { - it('replaces the usual xml suspects', function () { - expect(utils.escape('a>bc>d>')).to.be('>a>bc>d>'); - expect(utils.escape('"a"bc"d"')).to.be('"a"bc"d"'); - expect(utils.escape('<>"&')).to.be('<>"&'); + describe('escape', function() { + it('replaces the usual xml suspects', function() { + expect(utils.escape('a>bc>d>'), 'to be', '>a>bc>d>'); + expect(utils.escape('"a"bc"d"'), 'to be', '"a"bc"d"'); + expect(utils.escape('<>"&'), 'to be', '<>"&'); - expect(utils.escape('&a&bc&d&')).to.be('&a&bc&d&'); - expect(utils.escape('&<')).to.be('&amp;&lt;'); + expect(utils.escape('&a&bc&d&'), 'to be', '&a&bc&d&'); + expect(utils.escape('&<'), 'to be', '&amp;&lt;'); }); - it('replaces invalid xml characters', function () { - expect(utils.escape('\x1B[32mfoo\x1B[0m')).to.be('foo'); + it('replaces invalid xml characters', function() { + expect( + utils.escape('\x1B[32mfoo\x1B[0m'), + 'to be', + 'foo' + ); // Ensure we can handle non-trivial unicode characters as well - expect(utils.escape('💩')).to.be('💩'); + expect(utils.escape('💩'), 'to be', '💩'); }); }); });