From f9e25c0744cc44afd848bc88252214d3f933bbcf Mon Sep 17 00:00:00 2001 From: Richard Rodger Date: Mon, 28 May 2018 22:18:44 +0100 Subject: [PATCH] v0.12.0 --- .gitignore | 3 +- docs/create-a-release.md | 17 - mesh.js | 156 ++-- package-lock.json | 1527 +++++++++++++------------------------- package.json | 16 +- test/mesh.test.js | 114 +-- 6 files changed, 678 insertions(+), 1155 deletions(-) delete mode 100644 docs/create-a-release.md diff --git a/.gitignore b/.gitignore index bdeb664..72acede 100644 --- a/.gitignore +++ b/.gitignore @@ -15,8 +15,7 @@ npm-debug.log node_modules *~ .DS_Store -docs/annotated -docs/coverage.html +coverage.html test/docker diff --git a/docs/create-a-release.md b/docs/create-a-release.md deleted file mode 100644 index 5470269..0000000 --- a/docs/create-a-release.md +++ /dev/null @@ -1,17 +0,0 @@ -# Creating a release - -1. Review github issues, triage, close and merge issues related to the release. -2. Update CHANGES.md, with date release, notes, and version. -3. Pull down the repository locally on the master branch. -4. Ensure there are no outstanding commits and the branch is clean. -5. Run `npm install` and ensure all dependencies correctly install. -6. Run `npm run test` and ensure testing and linting passes. -7. Run `npm version vx.x.x -m "version x.x.x"` where `x.x.x` is the version. -8. Run `git push upstream master --tags` -9. Run `npm publish` -10. Go to the [Github release page][Releases] and hit 'Draft a new release'. -11. Paste the Changelog content for this release and add additional release notes. -12. Choose the tag version and a title matching the release and publish. -13. Notify core maintainers of the release via email. - -[Releases]: https://github.com/senecajs/seneca-mesh/releases \ No newline at end of file diff --git a/mesh.js b/mesh.js index d9debb9..8bc3524 100644 --- a/mesh.js +++ b/mesh.js @@ -1,7 +1,4 @@ -/* - MIT License, - Copyright (c) 2015-2017, Richard Rodger and other contributors. -*/ +/* MIT License. Copyright © 2015-2018, Richard Rodger and other contributors. */ 'use strict' @@ -37,6 +34,10 @@ var optioner = Optioner({ jointime: 111, // join and wait for network details + // Explicitly allow overrides of specific local patterns. This is not supported + // by default to prevent infinite loops between subling services with same pins. + overrides: {}, + discover: { defined: { active: true @@ -84,13 +85,13 @@ var optioner = Optioner({ sneeze: null }) + function mesh(options) { var seneca = this seneca.depends('balance-client') - optioner(options, function(err, options) { - if (err) throw err + var opts = optioner.check(options) var closed = false @@ -106,26 +107,27 @@ function mesh(options) { // fixed network interface specification, as per format of // require('os').networkInterfaces. Merged with and overrides same. - var rif = Rif(options.netif) + var rif = Rif(opts.netif) - // options.base is deprecated - var isbase = !!(options.isbase || options.base) - options.isbase = isbase + // opts.base is deprecated + var isbase = !!(opts.isbase || opts.base) + opts.isbase = isbase - var pin = options.pin || options.pins + var pin = opts.pin || opts.pins if (isbase) { - pin = pin || 'role:mesh,base:true' + pin = Array.isArray(pin) ? pin : [].concat('role:mesh,base:'+seneca.id) + //pin = [''] } - options.host = intern.resolve_interface(options.host, rif) - var tag = options.tag + opts.host = intern.resolve_interface(opts.host, rif) + var tag = opts.tag - var listen = options.listen || [ - { pin: pin, model: options.model || 'consume' } + var listen = opts.listen || [ + { pin: pin, model: opts.model || 'consume' } ] - var balance_client_opts = options.balance_client || {} + var balance_client_opts = opts.balance_client || {} seneca.use('balance-client$mesh~' + mid, balance_client_opts) seneca.add('init:mesh', init) @@ -133,27 +135,27 @@ function mesh(options) { function init(msg, init_done) { var seneca = this - intern.find_bases(seneca, options, rif, function(found_bases) { + intern.find_bases(seneca, opts, rif, function(found_bases) { bases = found_bases seneca.log.debug({ kind: 'mesh', - host: options.host, - port: options.port, + host: opts.host, + port: opts.port, bases: bases, - options: options + opts: opts }) - var sneeze_opts = options.sneeze || {} + var sneeze_opts = opts.sneeze || {} sneeze_opts.bases = bases sneeze_opts.isbase = isbase - sneeze_opts.port = options.port || void 0 - sneeze_opts.host = options.host || void 0 + sneeze_opts.port = opts.port || void 0 + sneeze_opts.host = opts.host || void 0 sneeze_opts.identifier = seneca.id sneeze_opts.monitor = sneeze_opts.monitor || { - active: !!options.monitor + active: !!opts.monitor } sneeze_opts.tag = void 0 !== sneeze_opts.tag @@ -163,14 +165,14 @@ function mesh(options) { : 'seneca~mesh' seneca.add('role:transport,cmd:listen', - intern.make_transport_listen(options, join, listen, init_done)) + intern.make_transport_listen(opts, join, listen, init_done)) // call seneca.listen as a convenience // subsequent seneca.listen calls will still publish to network - if (options.auto) { + if (opts.auto) { _.each(listen, function(listen_opts) { - if (options.host && null == listen_opts.host) { - listen_opts.host = options.host + if (opts.host && null == listen_opts.host) { + listen_opts.host = opts.host } if ('@' === (listen_opts.host && listen_opts.host[0])) { @@ -233,7 +235,7 @@ function mesh(options) { var members = [] _.each(sneeze.members(), function(member) { - var m = options.make_entry(member) + var m = opts.make_entry(member) members.push(void 0 === m ? intern.default_make_entry(member) : m) }) @@ -280,12 +282,14 @@ function mesh(options) { return } - // TODO: how to handle local override? - var actmeta = client_instance.find(pin) - var ignore_client = !!(actmeta && !actmeta.client) + var actmeta = client_instance.find(pin, {exact: true}) - if (ignore_client) { - return + if(actmeta) { + // Prevent infinite loops between sibling services by + // not supporting local overrides unless explicitly granted. + if(!actmeta.client && !opts.overrides[pin]) { + return + } } target_map[pin_config.id] = true @@ -339,13 +343,13 @@ function mesh(options) { } }) } - }) } + function make_intern() { return { - make_transport_listen: function (options, join, listen, init_done) { + make_transport_listen: function (opts, join, listen, init_done) { var listen_count = 0 var last_mesh_listen_err = null @@ -372,7 +376,7 @@ function make_intern() { if (listen.length === listen_count) { setTimeout(function(){ init_done(last_mesh_listen_err) - },options.jointime) + },opts.jointime) } }) } else { @@ -398,11 +402,11 @@ function make_intern() { return out }, - find_bases: function(seneca, options, rif, done) { + find_bases: function(seneca, opts, rif, done) { var bases = [] - intern.addbase_funcmap.custom = function(seneca, options, bases, next) { - options.discover.custom.find(seneca, options, bases, function( + intern.addbase_funcmap.custom = function(seneca, opts, bases, next) { + opts.discover.custom.find(seneca, opts, bases, function( add, stop ) { @@ -421,31 +425,31 @@ function make_intern() { function next(add, stop) { bases = bases.concat(add || []) - if (stop && options.discover.stop) abI = addbases.length + if (stop && opts.discover.stop) abI = addbases.length do { ++abI } while ( - abI < addbases.length && !options.discover[addbases[abI]].active + abI < addbases.length && !opts.discover[addbases[abI]].active ) addbase = addbases[abI] if (null == addbase) { - bases = intern.resolve_bases(bases, options, rif) + bases = intern.resolve_bases(bases, opts, rif) return done(bases) } - intern.addbase_funcmap[addbase](seneca, options, bases, next) + intern.addbase_funcmap[addbase](seneca, opts, bases, next) } }, addbase_funcmap: { - defined: function(seneca, options, bases, next) { - var add = (options.sneeze || {}).bases || - options.bases || - options.remotes || [] + defined: function(seneca, opts, bases, next) { + var add = (opts.sneeze || {}).bases || + opts.bases || + opts.remotes || [] add = add.filter(function(base) { return base && 0 < base.length @@ -455,9 +459,9 @@ function make_intern() { }, // order significant! depends on defined as uses bases.length - guess: function(seneca, options, bases, next) { + guess: function(seneca, opts, bases, next) { var add = [] - var host = options.host + var host = opts.host if (0 === bases.length) { if (null != host && host !== DEFAULT_HOST) { @@ -469,26 +473,26 @@ function make_intern() { next(add) }, - multicast: function(seneca, options, bases, next) { + multicast: function(seneca, opts, bases, next) { var add = [] - var opts = options.discover.multicast + var mc_opts = opts.discover.multicast // Determine broadcast address using subnetmask - if (_.isString(opts.address) && '/' === opts.address[0]) { - var netprefix = parseInt(opts.address.substring(1), 10) - opts.address = Ip.subnet( - options.host, + if (_.isString(mc_opts.address) && '/' === mc_opts.address[0]) { + var netprefix = parseInt(mc_opts.address.substring(1), 10) + mc_opts.address = Ip.subnet( + opts.host, Ip.fromPrefixLen(netprefix) ).broadcastAddress } var d = Discover({ - broadcast: opts.address, + broadcast: mc_opts.address, advertisement: { seneca_mesh: true, - isbase: options.isbase, - host: options.host || DEFAULT_HOST, - port: options.port || DEFAULT_PORT + isbase: opts.isbase, + host: opts.host || DEFAULT_HOST, + port: opts.port || DEFAULT_PORT } }) @@ -503,9 +507,9 @@ function make_intern() { } }) - if (0 < count || opts.max_search < findCount) { + if (0 < count || mc_opts.max_search < findCount) { // only bases should keep broadcasting - if (!options.isbase) { + if (!opts.isbase) { d.stop() } @@ -515,17 +519,17 @@ function make_intern() { } findCount++ - }, opts.search_interval) + }, mc_opts.search_interval) }, - registry: function(seneca, options, bases, next) { + registry: function(seneca, opts, bases, next) { var first = true var base_addr = - (options.host || DEFAULT_HOST) + ':' + (options.port || DEFAULT_PORT) + (opts.host || DEFAULT_HOST) + ':' + (opts.port || DEFAULT_PORT) - if (options.isbase) { - var ri = options.discover.registry.refresh_interval + if (opts.isbase) { + var ri = opts.discover.registry.refresh_interval ri = ri + ri * (Math.random() - 0.5) setInterval(getset_bases, ri) } @@ -535,7 +539,7 @@ function make_intern() { function getset_bases() { seneca.act( 'role:registry,cmd:get,default$:{}', - { key: 'seneca-mesh/' + (options.tag || '-') + '/bases' }, + { key: 'seneca-mesh/' + (opts.tag || '-') + '/bases' }, function(err, out) { if (err) return @@ -549,10 +553,10 @@ function make_intern() { next(add, 0 < add.length) } - if (options.isbase) { + if (opts.isbase) { var prune_first = Math.random() < - options.discover.registry.prune_first_probability + opts.discover.registry.prune_first_probability if (prune_first || -1 === add.indexOf(base_addr)) { add.push(base_addr) @@ -560,7 +564,7 @@ function make_intern() { if ( prune_first && - options.discover.registry.prune_bound < add.length + opts.discover.registry.prune_bound < add.length ) { add.shift() } @@ -568,7 +572,7 @@ function make_intern() { var val = add.join(',') seneca.act('role:registry,cmd:set,default$:{}', { - key: 'seneca-mesh/' + (options.tag || '-') + '/bases', + key: 'seneca-mesh/' + (opts.tag || '-') + '/bases', value: val }) } @@ -598,10 +602,10 @@ function make_intern() { return entry }, - resolve_bases: function(orig_bases, options, rif) { - options = options || {} + resolve_bases: function(orig_bases, opts, rif) { + opts = opts || {} - var host = options.host + var host = opts.host // remove empties var bases = (orig_bases || []).filter(function(base) { diff --git a/package-lock.json b/package-lock.json index e475daa..cf6f70c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,9 +110,9 @@ } }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-regex": { "version": "2.1.1", @@ -122,7 +122,13 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "archy": { "version": "1.0.0", @@ -130,6 +136,15 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "are-we-there-yet": { + "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==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -214,10 +229,13 @@ } }, "backoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz", - "integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo=", - "dev": true + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", + "dev": true, + "requires": { + "precond": "0.2" + } }, "balanced-match": { "version": "1.0.0", @@ -235,10 +253,19 @@ "tweetnacl": "^0.14.3" } }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, "boom": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-3.2.2.tgz", - "integrity": "sha1-DwzF0ErcUAO4x9cfQsynJx/vDng=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { "hoek": "4.x.x" @@ -284,6 +311,25 @@ "concat-map": "0.0.1" } }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "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=" + }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" + }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", @@ -399,97 +445,11 @@ "lazy-cache": "^1.0.3" } }, - "chairo": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/chairo/-/chairo-2.2.1.tgz", - "integrity": "sha1-4E2yhikzq/XY6tW+JTX2jBf1SKA=", - "dev": true, - "requires": { - "boom": "3.x.x", - "hoek": "4.x.x", - "items": "2.x.x", - "joi": "8.x.x", - "jsonic": "0.2.x", - "seneca": "2.x.x" - }, - "dependencies": { - "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=", - "dev": true - }, - "joi": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-8.4.2.tgz", - "integrity": "sha1-vXd0ZY/pkFjYmU7R1LmWJITruFk=", - "dev": true, - "requires": { - "hoek": "4.x.x", - "isemail": "2.x.x", - "moment": "2.x.x", - "topo": "2.x.x" - } - }, - "jsonic": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.2.2.tgz", - "integrity": "sha1-Enu5nfTYIWUsSKI9AlzysW5hhJE=", - "dev": true - }, - "lodash": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.0.tgz", - "integrity": "sha1-IoSqBvWxNq29lUuQNRG2L8OdH1k=", - "dev": true - }, - "seneca": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/seneca/-/seneca-2.1.0.tgz", - "integrity": "sha1-QhPY/AGEAUsNPqR7XttzZ/aF2Zw=", - "dev": true, - "requires": { - "archy": "1.0.0", - "eraro": "0.4.1", - "gate-executor": "0.4.0", - "gex": "0.2.2", - "jsonic": "0.2.2", - "lodash": "4.5.0", - "lru-cache": "4.0.0", - "minimist": "1.2.0", - "nid": "0.3.2", - "norma": "0.3.0", - "parambulator": "1.5.2", - "patrun": "0.5.0", - "rolling-stats": "0.1.1", - "semver": "5.1.0", - "seneca-basic": "0.4.0", - "seneca-cluster": "0.0.1", - "seneca-mem-store": "0.5.0", - "seneca-parambulator": "0.2.0", - "seneca-repl": "0.2.0", - "seneca-transport": "1.2.0", - "seneca-web": "0.7.1", - "use-plugin": "0.3.1", - "zig": "0.1.1" - } - }, - "seneca-repl": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/seneca-repl/-/seneca-repl-0.2.0.tgz", - "integrity": "sha1-fQdtEOshvax52aibm7kyhlQlSu4=", - "dev": true, - "requires": { - "jsonic": "0.2.x", - "lodash": "4.5.x" - } - } - } - }, "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.2", @@ -504,6 +464,11 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -571,6 +536,16 @@ "hoek": "4.x.x" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==" + }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", @@ -586,7 +561,6 @@ "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.1" } @@ -594,8 +568,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "0.3.0", @@ -643,42 +616,18 @@ "typedarray": "^0.0.6" } }, - "connect": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", - "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=", - "dev": true, - "requires": { - "debug": "~2.2.0", - "finalhandler": "0.4.1", - "parseurl": "~1.3.1", - "utils-merge": "1.0.0" - }, - "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" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "consul": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/consul/-/consul-0.25.0.tgz", - "integrity": "sha1-BcBqZnaJIgQnBV3pLGRY3tef8u0=", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/consul/-/consul-0.31.0.tgz", + "integrity": "sha512-Dxfbv3LrBTuMXWl2SqKSWeLF3p5zUXazUCF+6McaRwwHzMyfTt6I00pu22F5keUfdC8d3KDIY9IZ4KanDf9q9w==", "dev": true, "requires": { - "papi": "^0.25.0" + "papi": "^0.27.0" } }, "content": { @@ -704,8 +653,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "coveralls": { "version": "3.0.1", @@ -787,11 +735,31 @@ "dev": true, "optional": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } }, "del": { "version": "2.2.2", @@ -814,17 +782,15 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "diff": { "version": "3.5.0", @@ -856,35 +822,23 @@ "jsbn": "~0.1.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "end-of-stream": { + "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==", + "requires": { + "once": "^1.4.0" + } }, "eraro": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/eraro/-/eraro-0.4.1.tgz", - "integrity": "sha1-ZThzB2mh6J/8Pwx+LJTVofhmYp0=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eraro/-/eraro-1.0.0.tgz", + "integrity": "sha512-JeEqKyNgOxZNji2otWWDCDu1sWqGkrIBBhoGQH0LrPZObccQW8CoD94xkOtpmmlHeY/frG8IwR+jeCS8SQA/Xw==", "dev": true, "requires": { - "lodash": "~2.4.1" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } + "lodash": "4.17" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -1114,14 +1068,12 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, - "etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=", - "dev": true + "expand-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==" }, "extend": { "version": "3.0.1", @@ -1147,11 +1099,12 @@ "dev": true }, "farmhash": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/farmhash/-/farmhash-1.2.1.tgz", - "integrity": "sha1-Lb8SYE71yh8UIPtmAPzLMNVHTf0=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/farmhash/-/farmhash-2.1.0.tgz", + "integrity": "sha512-X2cdtc4AxiH3tVdJ/h87dOU22Ojt3JYruw3L0gAp/SJzHqUUoxMcYzX7wnVzSUeEj6CwzOwcY+v6vdfP0KVx2g==", "requires": { - "nan": "^2.4.0" + "nan": "^2.10.0", + "prebuild-install": "^2.5.3" } }, "fast-deep-equal": { @@ -1169,8 +1122,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { "version": "2.0.0", @@ -1191,35 +1143,6 @@ "object-assign": "^4.0.1" } }, - "finalhandler": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", - "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", - "dev": true, - "requires": { - "debug": "~2.2.0", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "unpipe": "~1.0.0" - }, - "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" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, "find-rc": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/find-rc/-/find-rc-3.0.1.tgz", @@ -1255,11 +1178,10 @@ "mime-types": "^2.1.12" } }, - "fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", - "dev": true + "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==" }, "fs.realpath": { "version": "1.0.0", @@ -1274,21 +1196,43 @@ "dev": true }, "gate-executor": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/gate-executor/-/gate-executor-0.4.0.tgz", - "integrity": "sha1-ReSue9dg/+8NiB/ZOttPf2x2kVI=", - "dev": true, - "requires": { - "async": "1.5.2", - "eraro": "0.4.1", - "lodash": "4.0.0" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/gate-executor/-/gate-executor-1.1.1.tgz", + "integrity": "sha1-Zn9ncoSg2+hrbEigtK/oxISBLK8=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "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" }, "dependencies": { - "lodash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.0.0.tgz", - "integrity": "sha1-msQ4RMWV4o0wEIt7pYNwM5WSLfw=", - "dev": 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=", + "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=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } } } }, @@ -1302,22 +1246,19 @@ } }, "gex": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/gex/-/gex-0.2.2.tgz", - "integrity": "sha1-LUCdJDCVlwjaVc9WKUxk9tiXNIc=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/gex/-/gex-0.3.0.tgz", + "integrity": "sha512-A1F2DMZUAnieFmVowt1QHcH7AJQZApRThR+z4C0GlzMGi6VYUAf9UvQdxODiCajGPGSRso86YJQ48E8+b5CBAQ==", "dev": true, "requires": { - "lodash": "3.10.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.0.tgz", - "integrity": "sha1-k9UcZygopEFqEq9XIguoqHN+L7s=", - "dev": true - } + "lodash": "4.17" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -1473,6 +1414,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1480,8 +1422,12 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "heavy": { "version": "4.0.4", @@ -1528,16 +1474,6 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" }, - "http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha1-GX4izevUGYWF6GlO9nhhl7ke2UI=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "statuses": "1" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -1583,8 +1519,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "3.3.0", @@ -1696,8 +1636,7 @@ "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 + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-path-cwd": { "version": "1.0.0", @@ -1744,8 +1683,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isemail": { "version": "3.1.2", @@ -1770,7 +1708,8 @@ "items": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", - "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=" + "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=", + "dev": true }, "jison": { "version": "0.4.13", @@ -1889,13 +1828,13 @@ "dev": true }, "jsonpath": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-0.2.11.tgz", - "integrity": "sha1-v+IuBmW5cS+Oe99+Lh+MCLWUxg4=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.0.tgz", + "integrity": "sha1-Rc2dTE0NaCXZC9fkD4PxGCsT3Qc=", "requires": { "esprima": "1.2.2", "jison": "0.4.13", - "static-eval": "0.2.3", + "static-eval": "2.0.0", "underscore": "1.7.0" } }, @@ -1991,7 +1930,6 @@ "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" @@ -2020,27 +1958,15 @@ "dev": true }, "lru-cache": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.0.tgz", - "integrity": "sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg=", + "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.1", - "yallist": "^2.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", - "dev": true - }, "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", @@ -2062,6 +1988,11 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" + }, "mimos": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/mimos/-/mimos-3.0.3.tgz", @@ -2084,14 +2015,12 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -2099,16 +2028,10 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, - "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2122,12 +2045,6 @@ "nan": "^2.0.9" } }, - "mstring": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mstring/-/mstring-0.1.2.tgz", - "integrity": "sha1-iiaLGy3q3h5Y5NHrpUhKn++vrwI=", - "dev": true - }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -2146,11 +2063,12 @@ "dev": true }, "ndjson": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.4.4.tgz", - "integrity": "sha1-eCAmc24Uaf7m7qED6IVxM2xyw3E=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz", + "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=", "dev": true, "requires": { + "json-stringify-safe": "^5.0.1", "minimist": "^1.2.0", "split2": "^2.1.0", "through2": "^2.0.3" @@ -2177,6 +2095,14 @@ "integrity": "sha1-W/PpXrnEG1c4SoBTM9qjtzTuMno=", "dev": true }, + "node-abi": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.1.tgz", + "integrity": "sha512-pUlswqpHQ7zGPI9lGjZ4XDNIEUDbHxsltfIRb7dTnYdhgHWHOcB0MLZKLoCz6UMcGzSPG5wGl1HODZVQAUsH6w==", + "requires": { + "semver": "^5.4.1" + } + }, "node-discover": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/node-discover/-/node-discover-0.6.2.tgz", @@ -2206,24 +2132,37 @@ } } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, "norma": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/norma/-/norma-0.3.0.tgz", - "integrity": "sha1-JyZcNBEBjDLJPucZ9pLPkN7Fq2Q=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/norma/-/norma-0.4.1.tgz", + "integrity": "sha512-BSnU+B35GzJgkEcNqiMIm79507Qg68O5L7gRVKATRSx17BHyDn0gVJsi3YzoANC1NbBoKRExwd3KsEZSUox63Q==", "dev": true, "requires": { - "eraro": "~0.4.1", - "lodash": "~2.4.1" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } + "eraro": "1.0", + "lodash": "4.17" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -2233,23 +2172,12 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -2291,7 +2219,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -2316,6 +2243,11 @@ "integrity": "sha1-nIEJSTaTyvCCmfyoTFlq64YLrqo=", "dev": true }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -2323,45 +2255,18 @@ "dev": true }, "pad": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pad/-/pad-1.1.0.tgz", - "integrity": "sha1-en0YUgDrrDL58S7nVsOh0IezGQs=" - }, - "papi": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/papi/-/papi-0.25.1.tgz", - "integrity": "sha1-pUwCKxeA+SQPrmqh6GGyHJ+PEtk=", - "dev": true - }, - "parambulator": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/parambulator/-/parambulator-1.5.2.tgz", - "integrity": "sha1-cMr6sUVG0QA8xTveMy4vIFxc+J0=", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pad/-/pad-1.2.1.tgz", + "integrity": "sha512-cx/l/K+9UjGXJmoYolvP0l3cEUyB9BUdUL3wj3uwskIiApboLsinvsXxU9nSNg9Luz2ZyH0zzJNbqgLSNtfIDw==", "requires": { - "gex": "0.2.2", - "jsonic": "0.2.2", - "lodash": "4.5.0" - }, - "dependencies": { - "jsonic": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.2.2.tgz", - "integrity": "sha1-Enu5nfTYIWUsSKI9AlzysW5hhJE=", - "dev": true - }, - "lodash": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.0.tgz", - "integrity": "sha1-IoSqBvWxNq29lUuQNRG2L8OdH1k=", - "dev": true - } + "coffee-script": "^1.12.7", + "wcwidth": "^1.0.1" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "papi": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/papi/-/papi-0.27.0.tgz", + "integrity": "sha1-c5Kjjr76f7Z+mLNjvKPRNoJ8ryg=", "dev": true }, "path-is-absolute": { @@ -2377,21 +2282,13 @@ "dev": true }, "patrun": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/patrun/-/patrun-0.5.0.tgz", - "integrity": "sha1-d6UfdzrEkxuzU/1B1Z3mR4/GEY0=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/patrun/-/patrun-1.0.0.tgz", + "integrity": "sha512-oemWSuxjb27nPkREl88BxZ2EFDFUKSPace+zYZjFKj2xFn6w/LgDFGptgQvme384As2gpEFIv4WMVE1cb9lDXQ==", "dev": true, "requires": { - "gex": "0.2.2", - "lodash": "3.10.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.0.tgz", - "integrity": "sha1-k9UcZygopEFqEq9XIguoqHN+L7s=", - "dev": true - } + "gex": "0.3", + "lodash": "4.17" } }, "performance-now": { @@ -2482,6 +2379,28 @@ } } }, + "prebuild-install": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", + "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^1.0.2", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-abi": "^2.2.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.1.6", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, "precond": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", @@ -2491,8 +2410,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { "version": "1.12.1", @@ -2503,8 +2421,7 @@ "process-nextick-args": { "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 + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "2.0.0", @@ -2518,28 +2435,41 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.0.tgz", - "integrity": "sha1-qfMRQq9GjLcrJbMBNrokVoNJFr4=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=", - "dev": true + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } }, "readable-stream": { "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.0", "inherits": "~2.0.3", @@ -2551,12 +2481,12 @@ } }, "reconnect-core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.1.0.tgz", - "integrity": "sha1-W7Ngs1sZfqVT8JK2BXUzqkHyhow=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", + "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=", "dev": true, "requires": { - "backoff": "~2.3.0" + "backoff": "~2.5.0" } }, "regexpp": { @@ -2706,8 +2636,7 @@ "safe-buffer": { "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 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", @@ -2722,52 +2651,13 @@ "dev": true }, "semver": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", - "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=", - "dev": true - }, - "send": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.1.tgz", - "integrity": "sha1-ow1fTILIqbrprQCh2bG9vm8Zntc=", - "dev": true, - "requires": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.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" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "seneca": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/seneca/-/seneca-3.5.0.tgz", - "integrity": "sha512-8rsfzTyz9Z39FaOOa1+NqvwAw8u7TRWOJa66LqG4tqQm+rRu4jitQhueeyO0Kf4qk4wUoS6NKsORYeqJFg+yHw==", + "version": "github:senecajs/seneca#206857763575eb90633763742512bb4e812587d7", + "from": "github:senecajs/seneca", "dev": true, "requires": { "archy": "1.0", @@ -2785,442 +2675,68 @@ "qs": "6.5", "rolling-stats": "0.1", "semver": "5.5", - "seneca-transport": "2.2", + "seneca-transport": "2.3", "use-plugin": "1.0", "wreck": "12.5" - }, - "dependencies": { - "backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "dev": true, - "requires": { - "precond": "0.2" - } - }, - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "eraro": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eraro/-/eraro-1.0.0.tgz", - "integrity": "sha512-JeEqKyNgOxZNji2otWWDCDu1sWqGkrIBBhoGQH0LrPZObccQW8CoD94xkOtpmmlHeY/frG8IwR+jeCS8SQA/Xw==", - "dev": true, - "requires": { - "lodash": "4.17" - } - }, - "gate-executor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/gate-executor/-/gate-executor-1.1.1.tgz", - "integrity": "sha1-Zn9ncoSg2+hrbEigtK/oxISBLK8=", - "dev": true - }, - "gex": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gex/-/gex-0.3.0.tgz", - "integrity": "sha512-A1F2DMZUAnieFmVowt1QHcH7AJQZApRThR+z4C0GlzMGi6VYUAf9UvQdxODiCajGPGSRso86YJQ48E8+b5CBAQ==", - "dev": true, - "requires": { - "lodash": "4.17" - } - }, - "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" - } - }, - "ndjson": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz", - "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=", - "dev": true, - "requires": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.0", - "split2": "^2.1.0", - "through2": "^2.0.3" - } - }, - "norma": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/norma/-/norma-0.4.1.tgz", - "integrity": "sha512-BSnU+B35GzJgkEcNqiMIm79507Qg68O5L7gRVKATRSx17BHyDn0gVJsi3YzoANC1NbBoKRExwd3KsEZSUox63Q==", - "dev": true, - "requires": { - "eraro": "1.0", - "lodash": "4.17" - } - }, - "patrun": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/patrun/-/patrun-1.0.0.tgz", - "integrity": "sha512-oemWSuxjb27nPkREl88BxZ2EFDFUKSPace+zYZjFKj2xFn6w/LgDFGptgQvme384As2gpEFIv4WMVE1cb9lDXQ==", - "dev": true, - "requires": { - "gex": "0.3", - "lodash": "4.17" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "reconnect-core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", - "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=", - "dev": true, - "requires": { - "backoff": "~2.5.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "seneca-transport": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-2.2.0.tgz", - "integrity": "sha512-lnOJ4mptsao/hZfLsK945NUBXJdwk3yI5zMgQtCfixmAxTCZ0Un3lq+TVdPk3fmDwjstjHV/URnVZPDFO3iVHA==", - "dev": true, - "requires": { - "eraro": "1.0", - "gex": "0.3", - "jsonic": "0.3", - "lodash": "4.17", - "lru-cache": "4.1", - "ndjson": "1.5", - "nid": "0.3", - "patrun": "1.0", - "qs": "6.5", - "reconnect-core": "1.3", - "wreck": "12.5" - } - }, - "use-plugin": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/use-plugin/-/use-plugin-1.0.2.tgz", - "integrity": "sha512-46ZNYmSDMgyCBsUIPwLFWzY45jIu4sHFKKq3/M63XCd/RxvliC4qRVWtUAWEexP7q8X1MHJ2Br1U5KLkVFcQCw==", - "dev": true, - "requires": { - "eraro": "1.0", - "nid": "0.3", - "norma": "0.4" - } - }, - "wreck": { - "version": "12.5.1", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz", - "integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==", - "dev": true, - "requires": { - "boom": "5.x.x", - "hoek": "4.x.x" - } - } } }, "seneca-balance-client": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/seneca-balance-client/-/seneca-balance-client-0.6.1.tgz", - "integrity": "sha1-ocfnNezsz33VAA9ljg1PHLV6HF8=", - "dev": true, - "requires": { - "eraro": "0.4.1", - "jsonic": "0.3.0", - "lodash": "4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, - "seneca-basic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/seneca-basic/-/seneca-basic-0.4.0.tgz", - "integrity": "sha1-NeFADmG+EOuQ33Pd4/laRTh7gzc=", - "dev": true, - "requires": { - "async": "1.5.2", - "lodash": "4.0.0", - "nid": "0.3.2" - }, - "dependencies": { - "lodash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.0.0.tgz", - "integrity": "sha1-msQ4RMWV4o0wEIt7pYNwM5WSLfw=", - "dev": true - } - } - }, - "seneca-cluster": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/seneca-cluster/-/seneca-cluster-0.0.1.tgz", - "integrity": "sha1-1qK0SCyLzUnM8Obhol+F70Cl9tM=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/seneca-balance-client/-/seneca-balance-client-0.7.0.tgz", + "integrity": "sha512-w8IEGKgvOshdpBQQMuDHtl7ZzD4qr1skN/v/sYuJwKTjuFhU9xZ+GvFQK+lYMgQyZrbhhU0y5cKQfry6zD8SRA==", "dev": true, "requires": { - "eraro": "0.4.x", - "semver": "5.1.x" + "eraro": "1.0", + "jsonic": "0.3", + "lodash": "4.17", + "optioner": "1.1" } }, "seneca-consul-registry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/seneca-consul-registry/-/seneca-consul-registry-0.1.0.tgz", - "integrity": "sha1-U15kQ4Z42TBufglLbieVVmTPUaM=", - "dev": true, - "requires": { - "consul": "0.25.0", - "lodash": "4.5.0" - }, - "dependencies": { - "lodash": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.0.tgz", - "integrity": "sha1-IoSqBvWxNq29lUuQNRG2L8OdH1k=", - "dev": true - } - } - }, - "seneca-mem-store": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/seneca-mem-store/-/seneca-mem-store-0.5.0.tgz", - "integrity": "sha1-LDgxkSMw+uMWI06prmiXNuB0Vzg=", - "dev": true, - "requires": { - "lodash": "3.10.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "seneca-parambulator": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/seneca-parambulator/-/seneca-parambulator-0.2.0.tgz", - "integrity": "sha1-HiYmrpU5H4bW2WoKFYm4kHu6IQ4=", + "resolved": "https://registry.npmjs.org/seneca-consul-registry/-/seneca-consul-registry-0.2.0.tgz", + "integrity": "sha512-ZoJhJzRo/6+5W5D9T883HKxcC3HRLLvk9BA3cqtf5gUqtiP6LkumUD3Y6uZJWI0kvMwWzzithwDjhTUeAaPEQg==", "dev": true, "requires": { - "lodash": "4.5.0", - "parambulator": "1.5.2" - }, - "dependencies": { - "lodash": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.0.tgz", - "integrity": "sha1-IoSqBvWxNq29lUuQNRG2L8OdH1k=", - "dev": true - } + "consul": "0.31", + "lodash": "4.17" } }, "seneca-repl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/seneca-repl/-/seneca-repl-1.1.2.tgz", - "integrity": "sha512-3MYvd0c9tAl4Pj0gIZonSLO4qDA+RTNjS0nPlWqYSB8IJ6sfShtMvOOJhKxVE/Vm/2XJuhTOTVKwgef3U8INGQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/seneca-repl/-/seneca-repl-1.2.0.tgz", + "integrity": "sha512-HvWU/bnxnjwb50l9vBCG3BUgW5TouQF6MBsDAJzuNwRTJnIAfO9sMrlJojH8aN9TjRfClDvVa75LuNnSFJ1Gzw==", "dev": true, "requires": { - "jsonic": "0.2.2", - "lodash": "4.15.0", - "optioner": "^0.8.0" - }, - "dependencies": { - "hoek": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.0.1.tgz", - "integrity": "sha1-FAsWVI/hYm2R0k9JFMRMi/2pUuM=", - "dev": true - }, - "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=", - "dev": true - }, - "joi": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-9.0.4.tgz", - "integrity": "sha1-iNZIkJFavrEnzXVwJxFtUN8+aN8=", - "dev": true, - "requires": { - "hoek": "4.x.x", - "isemail": "2.x.x", - "items": "2.x.x", - "moment": "2.x.x", - "topo": "2.x.x" - } - }, - "jsonic": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.2.2.tgz", - "integrity": "sha1-Enu5nfTYIWUsSKI9AlzysW5hhJE=", - "dev": true - }, - "lodash": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.15.0.tgz", - "integrity": "sha1-MWI5HY8BQKoiz49rPDTWt/Y9Oqk=", - "dev": true - }, - "optioner": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/optioner/-/optioner-0.8.0.tgz", - "integrity": "sha1-5hhOs3m0NODl+Ev5fcvIDkCDwbI=", - "dev": true, - "requires": { - "hoek": "4.0.1", - "joi": "9.0.4" - } - } + "jsonic": "0.3", + "lodash": "4.17", + "optioner": "1.1" } }, "seneca-transport": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-1.2.0.tgz", - "integrity": "sha1-A2fOuKjxV9ljfAqiKH+C9rJ6gao=", - "dev": true, - "requires": { - "eraro": "0.4.x", - "gex": "0.2.x", - "jsonic": "0.2.x", - "lodash": "4.5.1", - "lru-cache": "3.2.x", - "ndjson": "1.4.x", - "nid": "0.3.2", - "patrun": "0.5.x", - "qs": "5.2.0", - "reconnect-core": "1.1.x", - "wreck": "6.3.x" - }, - "dependencies": { - "jsonic": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.2.2.tgz", - "integrity": "sha1-Enu5nfTYIWUsSKI9AlzysW5hhJE=", - "dev": true - }, - "lodash": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.1.tgz", - "integrity": "sha1-gOigdMpfOJOmscELKmNkktcQwxY=", - "dev": true - }, - "lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "seneca-web": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/seneca-web/-/seneca-web-0.7.1.tgz", - "integrity": "sha1-9pT4CtK7Rhj8a4VmcKG9zfTewH0=", - "dev": true, - "requires": { - "async": "1.5.2", - "connect": "3.4.1", - "eraro": "0.4.1", - "json-stringify-safe": "5.0.1", - "lodash": "4.2.1", - "methods": "^1.1.1", - "mstring": "0.1.2", - "nid": "0.3.2", - "norma": "0.3.0", - "parambulator": "1.5.1", - "rolling-stats": "0.1.1", - "serve-static": "1.10.2" - }, - "dependencies": { - "gex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/gex/-/gex-0.2.0.tgz", - "integrity": "sha1-5f9BdNZstlaq7bYk76LjV/YR5og=", - "dev": true, - "requires": { - "lodash": "~2.4.1" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "jsonic": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/jsonic/-/jsonic-0.2.0.tgz", - "integrity": "sha1-fjpTlkLd8sS4DT+pEVwL+pN3xb0=", - "dev": true - }, - "lodash": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.2.1.tgz", - "integrity": "sha1-Fx/c+7ww1onFRM0YwFKfVt5sGqk=", - "dev": true - }, - "parambulator": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parambulator/-/parambulator-1.5.1.tgz", - "integrity": "sha1-N8XQ5b+5JOJVg7JDMulPiIdiQsw=", - "dev": true, - "requires": { - "gex": "0.2.0", - "jsonic": "0.2.0", - "lodash": "2.4.2" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - } - } - }, - "serve-static": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.2.tgz", - "integrity": "sha1-/rgA0OciEk3QsAMzFgwW6cqovLM=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-2.3.0.tgz", + "integrity": "sha512-kocolZ+54fNbwVFloBnOyjeH4SFXFGyefeuqh2sNoQCycAGxBQpzFC8CIJkjL1YUQS8KczPxEs5sIFrKYIQdnA==", "dev": true, "requires": { - "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.13.1" + "eraro": "1.0", + "gex": "0.3", + "jsonic": "0.3", + "lodash": "4.17", + "lru-cache": "4.1", + "ndjson": "1.5", + "nid": "0.3", + "patrun": "1.0", + "qs": "6.5", + "reconnect-core": "1.3", + "wreck": "12.5" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -3269,8 +2785,22 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } }, "slice-ansi": { "version": "1.0.0", @@ -3282,54 +2812,44 @@ } }, "sneeze": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/sneeze/-/sneeze-0.8.0.tgz", - "integrity": "sha1-1U9JJdN/F6SdsuJxSIpGplyo1eg=", - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "jsonpath": "0.2.11", - "keypress": "0.2.1", - "lodash": "4.5.0", - "optioner": "0.8.0", - "pad": "1.1.0", - "swim": "0.3.2" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/sneeze/-/sneeze-0.9.0.tgz", + "integrity": "sha512-TGVeiDX40RSDyPYkpetDl+qQlvM90YW2cpdqgfKn01pdlOB342Wj/n2M/8+TayHLCmd/cJI/UkqFCc7xV7koaA==", + "requires": { + "ansi-escapes": "3.1", + "chalk": "2.4", + "jsonpath": "1.0", + "keypress": "0.2", + "lodash": "4.17", + "optioner": "1.1", + "pad": "1.2", + "swim": "0.6" }, "dependencies": { - "hoek": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.0.1.tgz", - "integrity": "sha1-FAsWVI/hYm2R0k9JFMRMi/2pUuM=" - }, - "isemail": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", - "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" - }, - "joi": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/joi/-/joi-9.0.4.tgz", - "integrity": "sha1-iNZIkJFavrEnzXVwJxFtUN8+aN8=", + "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==", "requires": { - "hoek": "4.x.x", - "isemail": "2.x.x", - "items": "2.x.x", - "moment": "2.x.x", - "topo": "2.x.x" + "color-convert": "^1.9.0" } }, - "lodash": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.0.tgz", - "integrity": "sha1-IoSqBvWxNq29lUuQNRG2L8OdH1k=" + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } }, - "optioner": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/optioner/-/optioner-0.8.0.tgz", - "integrity": "sha1-5hhOs3m0NODl+Ev5fcvIDkCDwbI=", + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "hoek": "4.0.1", - "joi": "9.0.4" + "has-flag": "^3.0.0" } } } @@ -3432,46 +2952,47 @@ } }, "static-eval": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.3.tgz", - "integrity": "sha1-Aj8XrJ/uQm6niMEuo5IG3Bdfiyo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz", + "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==", "requires": { - "escodegen": "~0.0.24" + "escodegen": "^1.8.1" }, "dependencies": { "escodegen": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz", - "integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", "requires": { - "esprima": "~1.0.2", - "estraverse": "~1.3.0", - "source-map": ">= 0.1.2" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" } }, "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" }, "estraverse": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz", - "integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI=" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true } } }, - "statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=", - "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" @@ -3480,14 +3001,12 @@ "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "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" } @@ -3498,7 +3017,6 @@ "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" } @@ -3514,8 +3032,7 @@ "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 + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "subtext": { "version": "5.0.0", @@ -3554,17 +3071,18 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true }, "swim": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/swim/-/swim-0.3.2.tgz", - "integrity": "sha1-2nIgLrHamkc3ja6r3xOsKTHakP8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/swim/-/swim-0.6.0.tgz", + "integrity": "sha512-RYtxXKwYSrFHpuvuQJShXnkBGlT5P1TV4zzxXhezG+OfAqrJNOb8MK1+L5VaWBrANbgv7klKklpK40GaiTXqAw==", "requires": { "clone": "^1.0.2", "commander": "^2.6.0", "debug": "^2.1.1", - "farmhash": "^1.1.0", + "farmhash": "^2.0.0", "msgpack": "^1.0.2" } }, @@ -3613,6 +3131,42 @@ } } }, + "tar-fs": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.2.tgz", + "integrity": "sha512-LdknWjPEiZC1nOBwhv0JBzfJBGPJar08dZg2rwZe0ZTLQoRGEzgrl7vF3qUEkCHpI/wN9e7RyCuDhMsJUCLPPQ==", + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3644,6 +3198,11 @@ "os-tmpdir": "~1.0.2" } }, + "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==" + }, "topo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", @@ -3673,7 +3232,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -3689,7 +3247,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -3733,43 +3290,21 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, "use-plugin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/use-plugin/-/use-plugin-0.3.1.tgz", - "integrity": "sha1-XZafuZq1XOTxr5BsmXgjKnWJIa8=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/use-plugin/-/use-plugin-1.0.2.tgz", + "integrity": "sha512-46ZNYmSDMgyCBsUIPwLFWzY45jIu4sHFKKq3/M63XCd/RxvliC4qRVWtUAWEexP7q8X1MHJ2Br1U5KLkVFcQCw==", "dev": true, "requires": { - "eraro": "~0.4.1", - "lodash": "~2.4.1", - "nid": "~0.3.2", - "norma": "~0.3.0" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } + "eraro": "1.0", + "nid": "0.3", + "norma": "0.4" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "verror": { "version": "1.10.0", @@ -3791,6 +3326,14 @@ "hoek": "4.x.x" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3800,6 +3343,19 @@ "isexe": "^2.0.0" } }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -3810,40 +3366,21 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "wreck": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.3.0.tgz", - "integrity": "sha1-oTaXafB7u2LWo3gzanhx/Hc8dAs=", + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz", + "integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==", "dev": true, "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - }, - "dependencies": { - "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" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - } + "boom": "5.x.x", + "hoek": "4.x.x" } }, "write": { @@ -3858,8 +3395,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "yallist": { "version": "2.1.2", @@ -3879,23 +3415,6 @@ "decamelize": "^1.0.0", "window-size": "0.1.0" } - }, - "zig": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/zig/-/zig-0.1.1.tgz", - "integrity": "sha1-gBGFWUx9EzjxTD6/vgunTwuWnMs=", - "dev": true, - "requires": { - "lodash": "~2.4.1" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } } } } diff --git a/package.json b/package.json index e9bd647..20bb6cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "seneca-mesh", - "version": "0.11.0", + "version": "0.12.0", "description": "Mesh your Seneca.js microservices together - no more service discovery!", "main": "mesh.js", "license": "MIT", @@ -15,10 +15,9 @@ ], "scripts": { "test": "lab test/*.test.js -r console -L -t 80 -c -v", - "annotate": "docco mesh.js -o docs/annotated", "lint": "lab *.js -dL", "coveralls": "lab -s -P test -r lcov | coveralls", - "coverage": "lab -v -P test -L -t 78 -r html > docs/coverage.html", + "coverage": "lab -v -P test -L -t 78 -r html > coverage.html", "prettier": "prettier --write --no-semi --single-quote mesh.js" }, "repository": { @@ -45,19 +44,18 @@ "node-uuid": "1.4.7", "optioner": "1.1", "rif": "0.3", - "sneeze": "0.8" + "sneeze": "0.9" }, "devDependencies": { - "chairo": "2", "color": "0", "coveralls": "3", "hapi": "16", "lab": "14", "code": "4", - "seneca-repl": "1", - "seneca": "plugin", - "seneca-balance-client": "0", - "seneca-consul-registry": "0", + "seneca-repl": "1.2", + "seneca": "github:senecajs/seneca", + "seneca-balance-client": "0.7", + "seneca-consul-registry": "0.2", "prettier": "1" }, "files": [ diff --git a/test/mesh.test.js b/test/mesh.test.js index ad7da72..8c4e125 100644 --- a/test/mesh.test.js +++ b/test/mesh.test.js @@ -1,7 +1,4 @@ -/* - MIT License, - Copyright (c) 2015-2017, Richard Rodger and other contributors. -*/ +/* MIT License. Copyright (c) 2015-2018, Richard Rodger and other contributors. */ 'use strict' @@ -20,6 +17,7 @@ var describe = lab.describe var it = lab.it var expect = Code.expect +var tmx = parseInt(process.env.TIMEOUT_MULTIPLIER || 1, 10) var Mesh = require('..') @@ -36,10 +34,10 @@ var test_discover = { describe('#mesh', function () { - it('nextgen-single-with-base', {parallel: false, timeout: 5555}, function (fin) { + it('nextgen-single-with-base', {parallel: false, timeout: 5555*tmx}, function (fin) { var b0 = Seneca({tag: 'b0', legacy: { transport: false }}) .test(fin) - .use('..', {base: true, discover: test_discover}) + .use(Mesh, {base: true, discover: test_discover}) var s0 = Seneca({tag: 's0', legacy: { transport: false }}) .test(fin) @@ -47,7 +45,7 @@ describe('#mesh', function () { b0.ready(function () { s0 - .use('..', {pin: 'a:1', discover: test_discover}) + .use(Mesh, {pin: 'a:1', discover: test_discover}) .ready(function () { b0.act('a:1,x:0', function (ignore, out) { @@ -56,7 +54,8 @@ describe('#mesh', function () { b0.act('a:1,x:1', function (ignore, out) { Assert.equal(1, out.x) - s0.close(b0.close.bind(b0, setTimeout.bind(this, fin, 555))) + //s0.close(b0.close.bind(b0, setTimeout.bind(this, fin, 555*tmx))) + close(fin,777,s0,b0) }) }) }) @@ -185,23 +184,23 @@ describe('#mesh', function () { }) - it('base', {timeout: 5555, parallel: false}, function (done) { + it('base', {timeout: 5555*tmx, parallel: false}, function (done) { Seneca({tag: 'b0a', log: 'test', debug: {short_logs: true}}) .error(done) - .use('..', {isbase: true, discover: test_discover}) + .use(Mesh, {isbase: true, discover: test_discover}) .ready(function () { - this.close(setTimeout.bind(this, done, 555)) + this.close(setTimeout.bind(this, done, 555*tmx)) }) }) - it('single-with-base', {parallel: false, timeout: 5555}, function (done) { + it('single-with-base', {parallel: false, timeout: 5555*tmx}, function (done) { var b0b, s0b b0b = Seneca({tag: 'b0b', log: 'silent', debug: {short_logs: true}}) .error(done) - .use('..', {isbase: true, discover: test_discover}) + .use(Mesh, {isbase: true, discover: test_discover}) s0b = Seneca({tag: 's0b', log: 'silent', debug: {short_logs: true}}) @@ -209,7 +208,7 @@ describe('#mesh', function () { .add('a:1', function (msg) { this.good({x: msg.i}) }) b0b.ready(function () { - s0b.use('..', {pin: 'a:1', discover: test_discover}).ready(function () { + s0b.use(Mesh, {pin: 'a:1', discover: test_discover}).ready(function () { s0b.act('role:mesh,get:members', function (err, out) { if (err) { done(err) } Assert.equal(1, out.list.length) @@ -222,7 +221,7 @@ describe('#mesh', function () { if (err) { done(err) } Assert.equal(1, out.x) - s0b.close(b0b.close.bind(b0b, setTimeout.bind(this, done, 555))) + s0b.close(b0b.close.bind(b0b, setTimeout.bind(this, done, 555*tmx))) }) }) }) @@ -230,24 +229,24 @@ describe('#mesh', function () { }) }) - it('happy', {parallel: false, timeout: 5555}, function (fin) { + it('happy', {parallel: false, timeout: 5555*tmx}, function (fin) { var b0, s0, s1, c0 b0 = Seneca({id$: 'b0'}) .test(fin) - .use('..', {base: true, discover: test_discover, sneeze: {silent: true}}) + .use(Mesh, {base: true, discover: test_discover, sneeze: {silent: true}}) s0 = Seneca({id$: 's0'}) .test(fin) - .use('..', {pin: 'a:1', discover: test_discover, sneeze: {silent: true}}) + .use(Mesh, {pin: 'a:1', discover: test_discover, sneeze: {silent: true}}) .add('a:1', function (m, r) { r({x: 0}) }) s1 = Seneca({id$: 's1'}) - .test(fin)//, 'print') - .use('..', {pin: 'a:1', discover: test_discover, sneeze: {silent: true}}) + .test(fin) + .use(Mesh, {pin: 'a:1', discover: test_discover, sneeze: {silent: true}}) .add('a:1', function (m, r) { r({x: 1}) }) .add('a:1', function (m, r) { this.prior(m, r) @@ -256,7 +255,7 @@ describe('#mesh', function () { c0 = Seneca({id$: 'c0'}) .test(fin) - .use('..', {discover: test_discover, sneeze: {silent: true}}) + .use(Mesh, {discover: test_discover, sneeze: {silent: true}}) b0.ready(s0.ready.bind(s0, s1.ready.bind(s1, c0.ready.bind(c0, function () { c0 @@ -294,14 +293,15 @@ describe('#mesh', function () { expect(o.x).equal(1) }) - .close(s1.close.bind(s1,b0.close.bind(b0, fin)))},1555)) + .close(s1.close.bind(s1,b0.close.bind( + b0, setTimeout.bind(this, fin, 555*tmx))))},1555*tmx)) }) }) })))) }) - it('many-actors', {parallel: false, timeout: 19999}, function (done) { + it('many-actors', {parallel: false, timeout: 19999*tmx}, function (done) { var b0, s0, s1, s2, c0, c1 b0 = Seneca({tag: 'b0', log: 'test', debug: {short_logs: true}}) @@ -326,12 +326,12 @@ describe('#mesh', function () { .error(done) - b0.use('..', {isbase: true, discover: test_discover, sneeze: {silent: true}}).ready(function () { - s0.use('..', {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { - s1.use('..', {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { - s2.use('..', {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { - c0.use('..', {discover: test_discover, sneeze: {silent: true}}).ready(function () { - c1.use('..', {discover: test_discover, sneeze: {silent: true}}).ready(setTimeout.bind(null, do_topology, 1222)) + b0.use(Mesh, {isbase: true, discover: test_discover, sneeze: {silent: true}}).ready(function () { + s0.use(Mesh, {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { + s1.use(Mesh, {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { + s2.use(Mesh, {pin: 'a:1', model: 'actor', discover: test_discover, sneeze: {silent: true}}).ready(function () { + c0.use(Mesh, {discover: test_discover, sneeze: {silent: true}}).ready(function () { + c1.use(Mesh, {discover: test_discover, sneeze: {silent: true}}).ready(setTimeout.bind(null, do_topology, 1222)) }) }) }) }) }) function do_topology () { @@ -400,7 +400,7 @@ describe('#mesh', function () { c1.act('a:1,x:0', function (e, o) { Assert.equal(3, o.x) - s1.close(setTimeout.bind(this, do_s1_down, 2555)) + s1.close(setTimeout.bind(this, do_s1_down, 2555*tmx)) }) }) }) }) }) }) }) }) }) @@ -458,12 +458,12 @@ describe('#mesh', function () { s2.close() s0.close() b0.close() - setTimeout(done, 1555) + setTimeout(done, 1555*tmx) } }) - it('observe-consume-basic', {parallel: false, timeout: 9999}, function (done) { + it('observe-consume-basic', {parallel: false, timeout: 9999*tmx}, function (done) { var b0, s0, s1, c0 var s0x = 0 var s1z = 0 @@ -487,20 +487,20 @@ describe('#mesh', function () { .error(done) - b0.use('..', {isbase: true, discover: test_discover, sneeze: {silent: true}}).ready(function () { - s0.use('..', { + b0.use(Mesh, {isbase: true, discover: test_discover, sneeze: {silent: true}}).ready(function () { + s0.use(Mesh, { listen: [ {pin: 'a:1'}, {pin: 'b:1', model: 'observe'} ], discover: test_discover }).ready(function () { - s1.use('..', { + s1.use(Mesh, { listen: [ {pin: 'c:1'}, {pin: 'b:1', model: 'observe'} ], discover: test_discover }).ready(function () { - c0.use('..', {discover: test_discover, sneeze: {silent: true}}).ready(do_abc) + c0.use(Mesh, {discover: test_discover, sneeze: {silent: true}}).ready(do_abc) }) }) }) @@ -538,12 +538,12 @@ describe('#mesh', function () { s1.close() s0.close() b0.close() - setTimeout(done, 555) + setTimeout(done, 555*tmx) } }) - it('single-custom', {parallel: false, timeout: 5555}, function (done) { + it('single-custom', {parallel: false, timeout: 5555*tmx}, function (done) { var b0b, s0b function custom_bases (seneca, options, bases, next) { @@ -553,7 +553,7 @@ describe('#mesh', function () { b0b = Seneca({tag: 'b0b', log: 'silent', debug: {short_logs: true}}) .error(done) - .use('..', { + .use(Mesh, { isbase: true, port: 39901, sneeze: { @@ -572,7 +572,7 @@ describe('#mesh', function () { .add('a:1', function (msg) { this.good({x: msg.i}) }) b0b.ready(function () { - s0b.use('..', { + s0b.use(Mesh, { pin: 'a:1', discover: { custom: { @@ -595,7 +595,7 @@ describe('#mesh', function () { s0b.close() b0b.close() - setTimeout(done, 555) + setTimeout(done, 555*tmx) }) }) }) @@ -605,11 +605,11 @@ describe('#mesh', function () { // Tests https://github.com/senecajs/seneca-mesh/issues/11 - it('canonical-pins', {parallel: false, timeout: 5555}, function (done) { - var b0 = Seneca({legacy:{transport:false}}).test(done).use('..', {base: true}) - var s0 = Seneca({legacy:{transport:false}}).test(done).use('..', {pin: 'a:1,b:2;c:3'}) - var s1 = Seneca({legacy:{transport:false}}).test(done).use('..', {pin: 'c:3;b:2,a:1'}) - var c0 = Seneca({legacy:{transport:false}}).test(done).use('..') + it('canonical-pins', {parallel: false, timeout: 5555*tmx}, function (done) { + var b0 = Seneca({legacy:{transport:false}}).test(done).use(Mesh, {base: true}) + var s0 = Seneca({legacy:{transport:false}}).test(done).use(Mesh, {pin: 'a:1,b:2;c:3'}) + var s1 = Seneca({legacy:{transport:false}}).test(done).use(Mesh, {pin: 'c:3;b:2,a:1'}) + var c0 = Seneca({legacy:{transport:false}}).test(done).use(Mesh) s0.add('a:1,b:2', function (msg, reply) { reply({s: 0, x: msg.x}) }) s1.add('a:1,b:2', function (msg, reply) { reply({s: 1, x: msg.x}) }) @@ -654,7 +654,7 @@ describe('#mesh', function () { done() }) - }, 2555) + }, 2555*tmx) }) }) @@ -689,3 +689,23 @@ function make_rif () { return Rif(netif) } + + +function close() { + var fin = arguments[0] + var delay = arguments[1] + var instances = Array.prototype.slice.call(arguments,2) + + close_instance(0) + function close_instance(index) { + if(instances.length <= index) { + setTimeout(fin,delay*tmx) + } + else { + instances[index].close(function(err) { + if(err) return fin(err) + close_instance(index+1) + }) + } + } +}