Comparing version 0.5.9 to 0.6.0
var EventEmitter = require('events').EventEmitter; | ||
var io = require('socket.io'); | ||
var fs = require('fs'); | ||
var browserify = require('browserify'); | ||
StreamIO.prototype = new EventEmitter; | ||
function StreamIO (client) { | ||
var dnodeSrc = 'var DNode = (function () {' | ||
+ browserify.bundle( | ||
JSON.parse( | ||
fs.readFileSync(__dirname + '/../package.json', 'utf8') | ||
).browserify | ||
) | ||
+ '; return require("dnode") })()' | ||
; | ||
module.exports = function (webserver, mount) { | ||
var sock = io.listen(webserver); | ||
var server = new EventEmitter; | ||
this.remoteAddress = '???'; | ||
this.remotePort = -1; | ||
if (client && client.request && client.request.socket) { | ||
this.remoteAddress = client.request.socket.remoteAddress; | ||
this.remotePort = client.request.socket.remotePort; | ||
if (mount && webserver.use) { | ||
webserver.use(function (req, res, next) { | ||
if (req.url === mount) { | ||
res.writeHead(200, { 'Content-Type' : 'text/javascript' }); | ||
res.end(dnodeSrc); | ||
} | ||
else next() | ||
}); | ||
} | ||
else if (mount) { | ||
if (!webserver._events) webserver._events = {}; | ||
var ev = webserver._events; | ||
if (!ev.request) ev.request = []; | ||
if (!Array.isArray(ev.request)) ev.request = [ ev.request ]; | ||
ev.request.unshift(function (req, res) { | ||
if (req.url === mount) { | ||
res.writeHead(200, { 'Content-Type' : 'text/javascript' }); | ||
res.end(dnodeSrc); | ||
} | ||
}); | ||
} | ||
this.socketio = client; | ||
this.readyState = 'open'; | ||
this.write = function (msg) { | ||
client.send(msg); | ||
}; | ||
this.end = function (msg) { | ||
this.readyState = 'closed'; | ||
if (msg) this.write(msg); | ||
this.emit('end'); | ||
}; | ||
this.destroy = function () { | ||
if (this.readyState != 'closed') this.end(); | ||
}; | ||
} | ||
module.exports = function (sock, handler) { | ||
var streams = {}; | ||
sock.on('clientConnect', function (client) { | ||
var id = client.sessionId; | ||
streams[id] = new StreamIO(client); | ||
handler(streams[id]); | ||
streams[id].emit('connect'); | ||
sock.on('connection', function (client) { | ||
var stream = new EventEmitter; | ||
stream.socketio = client; | ||
stream.readable = true; | ||
stream.writable = true; | ||
stream.write = client.send.bind(client); | ||
stream.end = client.connection.end.bind(client); | ||
stream.destroy = client.connection.destroy.bind(client); | ||
client.on('message', stream.emit.bind(stream, 'data')); | ||
client.on('error', stream.emit.bind(stream, 'error')); | ||
client.on('disconnect', function () { | ||
stream.writable = false; | ||
stream.readable = false; | ||
stream.emit('end'); | ||
}); | ||
server.emit('connection', stream); | ||
}); | ||
sock.on('clientMessage', function (msg, client) { | ||
var id = client.sessionId; | ||
streams[id].emit('data', msg); | ||
}); | ||
sock.on('clientDisconnect', function (client) { | ||
var id = client.sessionId; | ||
streams[id].emit('disconnect'); | ||
streams[id].end(); | ||
}); | ||
return server; | ||
}; | ||
{ | ||
"name" : "dnode", | ||
"version" : "0.5.9", | ||
"description" : "Call remote methods and callbacks with a JSON-based protocol. RMI for network sockets and the browser too!", | ||
"main" : "./lib/dnode.js", | ||
"modules" : { | ||
"web" : "./lib/web" | ||
}, | ||
"directories" : { | ||
"lib" : "./lib" | ||
}, | ||
"version" : "0.6.0", | ||
"description" : "Execute remote callbacks with a JSON-based protocol. RMI for network sockets and socket.io too!", | ||
"main" : "./index.js", | ||
"keywords" : [ | ||
@@ -24,13 +18,24 @@ "message passing", | ||
}, | ||
"directories" : { | ||
"lib" : "./lib", | ||
"examples" : "./examples" | ||
}, | ||
"dependencies" : { | ||
"socket.io" : ">=0.6.1", | ||
"lazy" : ">=1.0.1", | ||
"lazy" : ">=1.0.2", | ||
"traverse" : ">=0.3.1", | ||
"hashish" : ">=0.0.2", | ||
"recon" : ">=0.0.5" | ||
"browserify" : ">=0.2.2", | ||
"dnode-protocol" : ">=0.0.5" | ||
}, | ||
"engine" : { | ||
"node" : ">=0.4.0" | ||
"browserify" : { | ||
"name" : "dnode", | ||
"base" : "./browser", | ||
"require" : [ "dnode-protocol" ] | ||
}, | ||
"author": "James Halliday <mail@substack.net> (http://substack.net/)" | ||
"engine" : { "node" : ">=0.4.0" }, | ||
"author" : { | ||
"name" : "James Halliday", | ||
"email" : "mail@substack.net", | ||
"url" : "http://substack.net" | ||
} | ||
} |
@@ -30,2 +30,4 @@ var DNode = require('dnode'); | ||
assert.equal(res, 60, 'result of 20 * 3 == 60'); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
@@ -35,7 +37,6 @@ }); | ||
setTimeout(function () { | ||
server.once('close', function () { | ||
assert.equal(counts.timesX, 1, 'timesX called once'); | ||
assert.equal(counts.clientX, 1, 'clientX called once'); | ||
server.end(); | ||
}, 300); | ||
}); | ||
}; |
@@ -56,2 +56,3 @@ var DNode = require('dnode'); | ||
server.end(); | ||
server.close(); | ||
assert.equal( | ||
@@ -58,0 +59,0 @@ sys.inspect(recv[0]), |
@@ -23,3 +23,3 @@ var DNode = require('dnode'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote) { | ||
DNode.connect(port, function (remote, conn) { | ||
var obj = { a : 1, b : 2 }; | ||
@@ -39,3 +39,4 @@ obj.c = obj; | ||
); | ||
server.end(); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
@@ -42,0 +43,0 @@ }); |
@@ -17,3 +17,3 @@ var DNode = require('dnode'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote) { | ||
DNode.connect(port, function (remote, conn) { | ||
remote.z( | ||
@@ -25,3 +25,2 @@ function (x,f) { f(x * 2) }, | ||
assert.equal(y, 5, 'double, not equal'); | ||
server.end(); | ||
} | ||
@@ -35,3 +34,4 @@ ); | ||
assert.equal(y, 20, 'double, equal'); | ||
server.end(); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
@@ -38,0 +38,0 @@ }); |
@@ -47,3 +47,3 @@ var DNode = require('dnode'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote) { | ||
DNode.connect(port, function (remote, conn) { | ||
remote.pass('test1', ev); | ||
@@ -56,7 +56,8 @@ var test2_calls = 0; | ||
remote.emit('test2'); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
}); | ||
}); | ||
setTimeout(function () { server.end() }, 750); | ||
}; | ||
var DNode = require('dnode'); | ||
var sys = require('sys'); | ||
exports.simple = function (assert) { | ||
exports.errors = function (assert) { | ||
var port = Math.floor(Math.random() * 40000 + 10000); | ||
var errors = { server : [], client : [] }; | ||
var server = DNode(function (remote) { | ||
var server = DNode(function (remote, conn) { | ||
conn.on('error', function (err) { | ||
errors.server.push(err); | ||
}); | ||
this.one = function () { | ||
@@ -21,74 +26,41 @@ throw 'string throw' | ||
var ended = { client : false, server : false }; | ||
var ts = setTimeout(function () { | ||
assert.fail('server never ended'); | ||
}, 5000); | ||
var serverErrors = { local : [], remote : [] }; | ||
server.on('remoteError', function (err) { | ||
serverErrors.remote.push(err); | ||
}); | ||
server.on('localError', function (err) { | ||
serverErrors.local.push(err); | ||
}); | ||
server.on('end', function () { | ||
assert.equal(serverErrors.remote.length, 1); | ||
assert.equal(serverErrors.local.length, 2); | ||
ended.server = true; | ||
clearTimeout(ts); | ||
assert.eql(errors.server[0], 'string throw'); | ||
try { undefined.name } | ||
catch (refErr) { | ||
assert.eql(refErr.message, errors.server[1].message); | ||
assert.eql(refErr.type, errors.server[1].type); | ||
} | ||
assert.equal(errors.server.length, 2); | ||
assert.eql(errors.client, [ 'Local error' ]); | ||
}); | ||
var errNum = 0; | ||
var caughtLocal = false; | ||
server.on('ready', function () { | ||
var client = DNode(function (client, conn) { | ||
conn.on('remoteError', function (err) { | ||
errNum ++; | ||
if (errNum == 1) { | ||
assert.equal(err, 'string throw'); | ||
} | ||
else if (errNum == 2) { | ||
try { undefined.name } | ||
catch (refErr) { | ||
assert.equal(err.name, refErr.name); | ||
assert.equal(err.message, refErr.message); | ||
assert.equal(err.type, refErr.type); | ||
} | ||
} | ||
conn.on('error', function (err) { | ||
errors.client.push(err); | ||
}); | ||
conn.on('localError', function (err) { | ||
assert.equal(err, 'Local error'); | ||
caughtLocal = true; | ||
}); | ||
conn.on('end', function () { | ||
assert.equal(clientErrors.remote.length, 2); | ||
assert.equal(clientErrors.local.length, 1); | ||
ended.client = true; | ||
}); | ||
this.pow = function () { | ||
throw 'Local error'; | ||
}; | ||
}).connect(port, function (remote) { | ||
}).connect(port, function (remote, conn) { | ||
remote.one(); | ||
remote.two(); | ||
remote.three(); | ||
setTimeout(function () { | ||
conn.end(); | ||
server.end(); | ||
server.close(); | ||
}, 100); | ||
}); | ||
var clientErrors = { local : [], remote : [] }; | ||
client.on('localError', function (err) { | ||
clientErrors.local.push(err); | ||
}); | ||
client.on('remoteError', function (err) { | ||
clientErrors.remote.push(err); | ||
}); | ||
}); | ||
setTimeout(function () { | ||
assert.equal(errNum, 2); | ||
assert.ok(caughtLocal); | ||
server.end(); | ||
setTimeout(function () { | ||
assert.ok(ended.server); | ||
assert.ok(ended.client); | ||
}, 50); | ||
}, 200); | ||
}; |
@@ -28,2 +28,3 @@ var DNode = require('dnode'); | ||
assert.equal(res2, 100000, 'result times twenty'); | ||
conn1.end(); conn2.end(); | ||
server1.close(); server2.close(); | ||
@@ -30,0 +31,0 @@ }); |
@@ -13,3 +13,3 @@ var DNode = require('dnode'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote) { | ||
DNode.connect(port, function (remote, conn) { | ||
remote.getObject(function (rObj) { | ||
@@ -26,2 +26,3 @@ assert.equal(rObj.a, 1); | ||
assert.equal(res, 260); | ||
conn.end(); | ||
server.close(); | ||
@@ -28,0 +29,0 @@ }); |
@@ -9,37 +9,42 @@ var dnode = require('dnode'); | ||
var dto = setTimeout(function () { | ||
assert.fail('never dropped'); | ||
}, 10000); | ||
var multiplier = null; | ||
var running = false; | ||
function makeServer (m) { | ||
multipler = m; | ||
var s = dnode(function (remote, conn) { | ||
this.mult = function (n, cb) { | ||
cb(n * m); | ||
conn.end(); | ||
}; | ||
}).listen(port); | ||
return s; | ||
} | ||
var server = makeServer(10); | ||
var server1 = dnode({ | ||
decify : function (n, cb) { cb(n * 10) }, | ||
}).listen(port); | ||
var client = dnode.connect({ | ||
host : 'localhost', | ||
port : port, | ||
reconnect : 100, | ||
block : session, | ||
}); | ||
var client = dnode.connect( | ||
'localhost', port, { reconnect : 10 }, | ||
function (remote, conn) { | ||
clearTimeout(to); | ||
conn.once('drop', function () { | ||
clearTimeout(dto); | ||
}); | ||
remote.decify(5, function (x) { | ||
assert.eql(x, 50); | ||
server1.close(); | ||
setTimeout(function () { | ||
var server2 = dnode({ | ||
decify : function (n, cb) { cb(n * 0.1) } | ||
}).listen(port); | ||
remote.decify(5, function (x) { | ||
assert.eql(x, 0.5); | ||
client.end(); | ||
conn.end(); | ||
server2.close(); | ||
}); | ||
}, 500); | ||
}); | ||
} | ||
); | ||
var res = {}; | ||
function session (remote, conn) { | ||
clearTimeout(to); | ||
remote.mult(5, function (x) { | ||
res[multipler] = x; | ||
assert.eql(x, 5 * multipler); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
} | ||
server.once('close', function () { | ||
server = makeServer(33); | ||
server.once('close', function () { | ||
assert.eql(res, { 10 : 10 * 5, 33 : 33 * 5 }); | ||
}); | ||
}); | ||
}; |
@@ -13,4 +13,5 @@ var DNode = require('dnode'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote) { | ||
server.end(); | ||
DNode.connect(port, function (remote, conn) { | ||
conn.end(); | ||
server.close(); | ||
assert.equal( | ||
@@ -17,0 +18,0 @@ remote.a, 1, |
@@ -28,3 +28,3 @@ var DNode = require('dnode') | ||
remote.print(args, function (m) { | ||
conn.end(); | ||
server.close(); | ||
@@ -31,0 +31,0 @@ |
@@ -1,2 +0,2 @@ | ||
var DNode = require('dnode'); | ||
var dnode = require('dnode'); | ||
@@ -7,3 +7,3 @@ | ||
var server = DNode({ | ||
var server = dnode({ | ||
timesTen : function (n,reply) { | ||
@@ -21,3 +21,3 @@ assert.equal(n, 50); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote, conn) { | ||
dnode.connect(port, function (remote, conn) { | ||
assert.ok(conn.id); | ||
@@ -33,2 +33,3 @@ assert.equal(conn.stream.remoteAddress, '127.0.0.1'); | ||
assert.equal(n, 500, '50 * 10 == 500'); | ||
conn.end(); | ||
server.close(); | ||
@@ -35,0 +36,0 @@ }); |
@@ -27,4 +27,4 @@ var DNode = require('dnode') | ||
assert.equal(m, 50, '5 * 10 == 50'); | ||
conn.end(); | ||
server.close(); | ||
}); | ||
@@ -31,0 +31,0 @@ }); |
@@ -1,35 +0,32 @@ | ||
var DNode = require('dnode'); | ||
var assert = require('assert'); | ||
var dnode = require('dnode'); | ||
var net = require('net'); | ||
var sys = require('sys'); | ||
exports.stream = function (assert) { | ||
exports.stream = function () { | ||
var port = Math.floor(Math.random() * 40000 + 10000); | ||
var server = DNode({ | ||
var server = dnode({ | ||
meow : function f (g) { g('cats') } | ||
}); | ||
var netServer = net.createServer(function (stream) { | ||
server.withStream(stream); | ||
setTimeout(function () { stream.end() }, 200); | ||
}) | ||
netServer.listen(port, 'localhost'); | ||
var netServer = net.createServer(); | ||
server.listen(netServer); | ||
var netClient = net.createConnection(port); | ||
var to = setTimeout(function () { | ||
assert.fail(); | ||
}, 5000); | ||
var times = 0; | ||
server.on('ready', function () { | ||
DNode.connect(netClient, function (remote) { | ||
netServer.listen(port, function () { | ||
var netClient = net.createConnection(port); | ||
dnode.connect(netClient, function (remote) { | ||
remote.meow(function (cats) { | ||
times ++; | ||
clearTimeout(to); | ||
assert.equal(cats, 'cats'); | ||
netClient.end(); | ||
netServer.close(); | ||
}); | ||
}); | ||
}); | ||
setTimeout(function () { | ||
assert.equal(times, 1); | ||
netClient.end(); | ||
netServer.close(); | ||
}, 200); | ||
}; |
@@ -1,2 +0,2 @@ | ||
var DNode = require('dnode'); | ||
var dnode = require('dnode'); | ||
@@ -6,3 +6,3 @@ exports.simple = function (assert) { | ||
var server = DNode({ | ||
var server = dnode({ | ||
unicodes : function (reply) { | ||
@@ -14,3 +14,3 @@ reply('☔☔☔☁☼☁❄'); | ||
server.on('ready', function () { | ||
DNode.connect(port, function (remote, conn) { | ||
dnode.connect(port, function (remote, conn) { | ||
assert.equal(conn.stream.remoteAddress, '127.0.0.1'); | ||
@@ -20,5 +20,9 @@ remote.unicodes(function (str) { | ||
}); | ||
server.end(); | ||
setTimeout(function () { | ||
conn.end(); | ||
server.close(); | ||
}, 50); | ||
}); | ||
}); | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
128429
3040
4
54
313
6
+ Addedbrowserify@>=0.2.2
+ Addeddnode-protocol@>=0.0.5
+ AddedJSONStream@1.3.5(transitive)
+ Addedacorn@7.4.1(transitive)
+ Addedacorn-node@1.8.2(transitive)
+ Addedacorn-walk@7.2.0(transitive)
+ Addedasn1.js@4.10.1(transitive)
+ Addedassert@1.5.1(transitive)
+ Addedbalanced-match@1.0.2(transitive)
+ Addedbase64-js@1.5.1(transitive)
+ Addedbn.js@4.12.05.2.1(transitive)
+ Addedbrace-expansion@1.1.11(transitive)
+ Addedbrorand@1.1.0(transitive)
+ Addedbrowser-pack@6.1.0(transitive)
+ Addedbrowser-resolve@2.0.0(transitive)
+ Addedbrowserify@17.0.0(transitive)
+ Addedbrowserify-aes@1.2.0(transitive)
+ Addedbrowserify-cipher@1.0.1(transitive)
+ Addedbrowserify-des@1.0.2(transitive)
+ Addedbrowserify-rsa@4.1.0(transitive)
+ Addedbrowserify-sign@4.2.3(transitive)
+ Addedbrowserify-zlib@0.2.0(transitive)
+ Addedbuffer@5.2.1(transitive)
+ Addedbuffer-from@1.1.2(transitive)
+ Addedbuffer-xor@1.0.3(transitive)
+ Addedbuiltin-status-codes@3.0.0(transitive)
+ Addedcached-path-relative@1.1.0(transitive)
+ Addedcipher-base@1.0.4(transitive)
+ Addedcombine-source-map@0.8.0(transitive)
+ Addedconcat-map@0.0.1(transitive)
+ Addedconcat-stream@1.6.2(transitive)
+ Addedconsole-browserify@1.2.0(transitive)
+ Addedconstants-browserify@1.0.0(transitive)
+ Addedconvert-source-map@1.1.3(transitive)
+ Addedcore-util-is@1.0.3(transitive)
+ Addedcreate-ecdh@4.0.4(transitive)
+ Addedcreate-hash@1.2.0(transitive)
+ Addedcreate-hmac@1.1.7(transitive)
+ Addedcrypto-browserify@3.12.0(transitive)
+ Addeddash-ast@1.0.0(transitive)
+ Addeddefined@1.0.1(transitive)
+ Addeddeps-sort@2.0.1(transitive)
+ Addeddes.js@1.1.0(transitive)
+ Addeddetective@5.2.1(transitive)
+ Addeddiffie-hellman@5.0.3(transitive)
+ Addeddnode-protocol@0.2.2(transitive)
+ Addeddomain-browser@1.2.0(transitive)
+ Addedduplexer2@0.1.4(transitive)
+ Addedelliptic@6.5.7(transitive)
+ Addedevents@3.3.0(transitive)
+ Addedevp_bytestokey@1.0.3(transitive)
+ Addedfast-safe-stringify@2.1.1(transitive)
+ Addedfs.realpath@1.0.0(transitive)
+ Addedget-assigned-identifiers@1.2.0(transitive)
+ Addedglob@7.2.3(transitive)
+ Addedhas@1.0.4(transitive)
+ Addedhash-base@3.0.4(transitive)
+ Addedhash.js@1.1.7(transitive)
+ Addedhmac-drbg@1.0.1(transitive)
+ Addedhtmlescape@1.1.1(transitive)
+ Addedhttps-browserify@1.0.0(transitive)
+ Addedieee754@1.2.1(transitive)
+ Addedinflight@1.0.6(transitive)
+ Addedinherits@2.0.32.0.4(transitive)
+ Addedinline-source-map@0.6.3(transitive)
+ Addedinsert-module-globals@7.2.1(transitive)
+ Addedis-arguments@1.1.1(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-core-module@2.15.1(transitive)
+ Addedis-generator-function@1.0.10(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedjsonify@0.0.1(transitive)
+ Addedjsonparse@1.3.1(transitive)
+ Addedlabeled-stream-splicer@2.0.2(transitive)
+ Addedlodash.memoize@3.0.4(transitive)
+ Addedmd5.js@1.3.5(transitive)
+ Addedmiller-rabin@4.0.1(transitive)
+ Addedminimalistic-assert@1.0.1(transitive)
+ Addedminimalistic-crypto-utils@1.0.1(transitive)
+ Addedminimatch@3.1.2(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmkdirp-classic@0.5.3(transitive)
+ Addedmodule-deps@6.2.3(transitive)
+ Addedonce@1.4.0(transitive)
+ Addedos-browserify@0.3.0(transitive)
+ Addedpako@1.0.11(transitive)
+ Addedparents@1.0.1(transitive)
+ Addedparse-asn1@5.1.7(transitive)
+ Addedpath-browserify@1.0.1(transitive)
+ Addedpath-is-absolute@1.0.1(transitive)
+ Addedpath-parse@1.0.7(transitive)
+ Addedpath-platform@0.11.15(transitive)
+ Addedpbkdf2@3.1.2(transitive)
+ Addedprocess@0.11.10(transitive)
+ Addedprocess-nextick-args@2.0.1(transitive)
+ Addedpublic-encrypt@4.0.3(transitive)
+ Addedpunycode@1.4.1(transitive)
+ Addedqs@6.13.0(transitive)
+ Addedquerystring-es3@0.2.1(transitive)
+ Addedrandombytes@2.1.0(transitive)
+ Addedrandomfill@1.0.4(transitive)
+ Addedread-only-stream@2.0.0(transitive)
+ Addedreadable-stream@2.3.83.6.2(transitive)
+ Addedresolve@1.22.8(transitive)
+ Addedripemd160@2.0.2(transitive)
+ Addedsafe-buffer@5.1.25.2.1(transitive)
+ Addedsha.js@2.4.11(transitive)
+ Addedshasum-object@1.0.0(transitive)
+ Addedshell-quote@1.8.1(transitive)
+ Addedsimple-concat@1.0.1(transitive)
+ Addedsource-map@0.5.7(transitive)
+ Addedstream-browserify@3.0.0(transitive)
+ Addedstream-combiner2@1.1.1(transitive)
+ Addedstream-http@3.2.0(transitive)
+ Addedstream-splicer@2.0.1(transitive)
+ Addedstring_decoder@1.1.11.3.0(transitive)
+ Addedsubarg@1.0.0(transitive)
+ Addedsupports-preserve-symlinks-flag@1.0.0(transitive)
+ Addedsyntax-error@1.4.0(transitive)
+ Addedthrough@2.3.8(transitive)
+ Addedthrough2@2.0.5(transitive)
+ Addedtimers-browserify@1.4.2(transitive)
+ Addedtty-browserify@0.0.1(transitive)
+ Addedtypedarray@0.0.6(transitive)
+ Addedumd@3.0.3(transitive)
+ Addedundeclared-identifiers@1.1.3(transitive)
+ Addedurl@0.11.4(transitive)
+ Addedutil@0.10.40.12.5(transitive)
+ Addedutil-deprecate@1.0.2(transitive)
+ Addedvm-browserify@1.1.2(transitive)
+ Addedwrappy@1.0.2(transitive)
+ Addedxtend@4.0.2(transitive)
- Removedhashish@>=0.0.2
- Removedrecon@>=0.0.5
- Removedhashish@0.0.4(transitive)
- Removedrecon@0.0.8(transitive)
Updatedlazy@>=1.0.2