Comparing version 0.1.1 to 0.2.0
109
client.js
@@ -13,13 +13,27 @@ /* | ||
* Rob Miller (rmiller@mozilla.com) | ||
* Victor Ng (vng@mozilla.com) | ||
* | ||
***** END LICENSE BLOCK ***** | ||
*/ | ||
"use strict" | ||
"use strict"; | ||
var Senders = require('./senders/index'); | ||
var _ = require('underscore'); | ||
var superscore = require('superscore'); | ||
var config = require('./config'); | ||
var env_version = '0.8'; | ||
var message = require('./message'); | ||
var helpers = require('./message/helpers'); | ||
var toArrayBuffer = helpers.toArrayBuffer; | ||
var Field = message.Field; | ||
var os = require('os'); | ||
var Senders = require('./senders/index'); | ||
var _ = require('underscore'); | ||
var ByteBuffer = require('bytebuffer'); | ||
var uuid = require('./uuid'); | ||
var compute_oid_uuid = uuid.compute_oid_uuid; | ||
var helpers = require('./message/helpers'); | ||
var dict_to_fields = helpers.dict_to_fields; | ||
// Put a namespace around RFC 3164 syslog messages | ||
@@ -37,22 +51,25 @@ var SEVERITY = { | ||
function IsoDateString(d) { | ||
function zeroFill(number, width) | ||
{ | ||
width -= number.toString().length; | ||
if ( width > 0 ) | ||
{ | ||
return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number; | ||
} | ||
return number + ""; // always return a string | ||
} | ||
var PB_NAMETYPE_TO_INT = {'STRING': 0, | ||
'BYTES': 1, | ||
'INTEGER': 2, | ||
'DOUBLE': 3, | ||
'BOOL': 4}; | ||
return d.getUTCFullYear() + '-' | ||
+ zeroFill(d.getUTCMonth() + 1, 2) + '-' | ||
+ zeroFill(d.getUTCDate(), 2) + 'T' | ||
+ zeroFill(d.getUTCHours(), 2) + ':' | ||
+ zeroFill(d.getUTCMinutes(), 2) + ':' | ||
+ zeroFill(d.getUTCSeconds(), 2) + "." | ||
+ zeroFill(d.getUTCMilliseconds() * 1000, 6) + 'Z' | ||
var PB_TYPEMAP = {0: 'STRING', | ||
1: 'BYTES', | ||
2: 'INTEGER', | ||
3: 'DOUBLE', | ||
4: 'BOOL'}; | ||
var PB_FIELDMAP = {0: 'value_string', | ||
1: 'value_bytes', | ||
2: 'value_integer', | ||
3: 'value_double', | ||
4: 'value_bool'}; | ||
function DateToNano(d) { | ||
return d.getTime() * 1000000; | ||
} | ||
var HekaClient = function(sender, logger, severity, disabledTimers, filters) | ||
@@ -68,3 +85,3 @@ { | ||
this.logger = typeof(logger) != 'undefined' ? logger : ''; | ||
this.severity = typeof(severity) != 'undefined' ? severity : 6; | ||
this.severity = typeof(severity) != 'undefined' ? severity : SEVERITY.INFORMATIONAL; | ||
this.disabledTimers = typeof(disabledTimers) != 'undefined' ? disabledTimers : []; | ||
@@ -91,4 +108,4 @@ this.filters = typeof(filters) != 'undefined' ? filters : []; | ||
HekaClient.prototype.heka = function(type, opts) { | ||
// opts = timestamp, logger, severity, payload, fields | ||
if (opts === undefined) opts = {}; | ||
if (opts.timestamp === undefined) opts.timestamp = new Date(); | ||
@@ -99,22 +116,32 @@ if (opts.logger === undefined) opts.logger = this.logger; | ||
if (opts.fields === undefined) opts.fields = {}; | ||
if (opts.timestamp instanceof Date) { | ||
opts.timestamp = IsoDateString(opts.timestamp); | ||
}; | ||
if (opts.pid === undefined) opts.pid = this.pid; | ||
if (opts.hostname === undefined) opts.hostname = this.hostname; | ||
var msg = new message.Message(); | ||
msg.timestamp = DateToNano(opts.timestamp); | ||
var fullMsg = {'type': type, 'timestamp': opts.timestamp, | ||
'logger': opts.logger, 'severity': opts.severity, | ||
'payload': opts.payload, 'fields': opts.fields, | ||
'env_version': env_version, | ||
'heka_pid': opts.pid, | ||
'heka_hostname': opts.hostname | ||
}; | ||
this._sendMessage(fullMsg); | ||
msg.type = type; | ||
msg.logger = opts.logger; | ||
msg.severity = opts.severity; | ||
msg.payload = opts.payload; | ||
var fields = dict_to_fields(opts.fields); | ||
for (var i = 0; i < fields.length; i++) { | ||
msg.fields.push(fields[i]); | ||
} | ||
msg.env_version = env_version; | ||
msg.pid = opts.pid; | ||
msg.hostname = opts.hostname; | ||
msg.uuid = '0000000000000000'; | ||
var msg_encoded = msg.encode(); | ||
var raw_uuid = new Buffer(compute_oid_uuid(msg_encoded.toBuffer()), "hex"); | ||
msg.uuid = ByteBuffer.wrap(toArrayBuffer(raw_uuid)); | ||
this._sendMessage(msg); | ||
}; | ||
HekaClient.prototype.addMethod = function(name, method, override) { | ||
if (typeof(method) !== 'function') { | ||
if (typeof method !== 'function') { | ||
throw new Error('`method` argument must be a function'); | ||
@@ -162,3 +189,4 @@ }; | ||
HekaClient.prototype.timer = function(fn, name, opts) { | ||
// opts = timestamp, logger, severity, fields, rate | ||
if (opts === undefined) opts = {}; | ||
if (opts.rate === undefined) opts.rate = 1; | ||
@@ -181,5 +209,2 @@ var NoOpTimer = function() { | ||
// | ||
// | ||
if (opts === undefined) opts = {}; | ||
var currentClient = this; | ||
@@ -231,3 +256,7 @@ | ||
exports.IsoDateString = IsoDateString; | ||
/***************************/ | ||
exports.DateToNano = DateToNano; | ||
exports.HekaClient = HekaClient; | ||
@@ -234,0 +263,0 @@ exports.clientFromJsonConfig = config.clientFromJsonConfig; |
@@ -20,3 +20,6 @@ /* | ||
var globalConfig = {}; | ||
var resolver = require('./resolver'); | ||
var resolveName = resolver.resolveName; | ||
var getattr = function(obj, attr, defaultValue) { | ||
@@ -28,32 +31,4 @@ defaultValue = typeof(defaultValue) !== 'undefined' ? defaultValue : {}; | ||
/* | ||
* Fetch a module attribute by name and return the actual object (usually | ||
* a function) to which the name refers. | ||
* | ||
* @param name: String referring to the callable. Should consist of a module | ||
* name (can be a bare name or a file path, anything that will | ||
* work with `require`) and an exported module attribute name | ||
* separated by a colon. For example, this function itself would | ||
* be specified by './config:resolveName'. | ||
*/ | ||
var resolveName = function(name) { | ||
var pieces = name.split(':'); | ||
var module = require(pieces[0]); | ||
var fn_path = pieces[1].split("."); | ||
var fn = null; | ||
fn = module[fn_path.shift()]; | ||
for (; fn_path.length > 0;) { | ||
fn = fn[fn_path.shift()]; | ||
} | ||
if (fn === undefined) { | ||
var msg = "ERROR loading: ["+pieces[0]+":" + pieces[1] + "]. Make sure you've exported it properly."; | ||
throw new Error(msg); | ||
} | ||
return fn; | ||
}; | ||
var getGlobalConfig = function() { | ||
@@ -60,0 +35,0 @@ return globalConfig; |
{ | ||
"author": "Rob Miller <rmiller@mozilla.com>", | ||
"name": "heka", | ||
"description": "Metrics logging", | ||
"version": "0.1.1", | ||
"description": "A node.js client for Mozilla's Heka logging server", | ||
"version": "0.2.0", | ||
"homepage": "https://github.com/mozilla-services/heka-node", | ||
@@ -12,2 +12,6 @@ "repository": { | ||
"main": "./client.js", | ||
"files": ["protobuf/*.proto", | ||
"message/*.js", | ||
"senders/*.js", | ||
"*.js"], | ||
"engines": { | ||
@@ -17,15 +21,13 @@ "node": ">=0.10.0" | ||
"dependencies": { | ||
"underscore": ">=1.4.2" | ||
"protobufjs": ">=0.12.8", | ||
"underscore": ">=1.4.2", | ||
"superscore": ">=0.3.4" | ||
}, | ||
"optionalDependencies": { | ||
"msgpack":">=0.1.5", | ||
"restify":">=1.4.4" | ||
}, | ||
"devDependencies": { | ||
"jasmine-node": ">=1.0.13", | ||
"jasmine-node": ">=1.6.0", | ||
"horaa": ">=0.1.1alpha" | ||
}, | ||
"scripts": { | ||
"test": "jasmine-node tests" | ||
"test": "jasmine-node tests" | ||
} | ||
} |
@@ -19,3 +19,14 @@ /* | ||
var encoders = require('./encoders'); | ||
var resolver = require('../resolver'); | ||
var message = require('../message'); | ||
var crypto = require('crypto'); | ||
var ByteBuffer = require('bytebuffer'); | ||
var helpers = require('../message/helpers'); | ||
var toArrayBuffer = helpers.toArrayBuffer; | ||
var resolveName = resolver.resolveName; | ||
var HASHNAME_TO_ENUM = { 'sha1': message.Header.HmacHashFunction.SHA1, | ||
'md5': message.Header.HmacHashFunction.MD5}; | ||
var abstractSender = function() { | ||
@@ -27,17 +38,70 @@ /* | ||
*/ | ||
this.init = function(encoder) { | ||
if (typeof(encoder) === 'function') { | ||
this.encoder = encoder; | ||
} else { | ||
this.init = function(encoder, hmc) { | ||
if (typeof encoder === 'string') { | ||
this.encoder = resolveName(encoder); | ||
} | ||
if (encoder === undefined) { | ||
this.encoder = encoders.jsonEncoder; | ||
}; | ||
if (hmc === undefined) { | ||
this.hmc = null; | ||
} else { | ||
this.hmc = hmc; | ||
} | ||
}; | ||
this.buildHeader = function(msg, msg_length) { | ||
var header = new message.Header(); | ||
header.message_encoding = this.encoder.encoder_type; | ||
header.message_length = msg_length; | ||
if (this.hmc != null) { | ||
var hmac = crypto.createHmac(this.hmc.hash_function, this.hmc.key); | ||
hmac.update(msg.encode().toBuffer()); | ||
header.hmac_signer = this.hmc.signer; | ||
header.hmac_key_version = this.hmc.key_version; | ||
// TODO: handle the case where we don't have a match to | ||
// the hash function | ||
header.hmac_hash_function = HASHNAME_TO_ENUM[this.hmc.hash_function]; | ||
header.hmac = ByteBuffer.wrap(toArrayBuffer(new Buffer(hmac.digest('hex'), 'hex'))); | ||
} | ||
return header; | ||
}; | ||
this.sendMessage = function(msg) { | ||
output = this.encoder(msg); | ||
/* | ||
* Wire format is: | ||
* | ||
* 1 byte : RECORD_SEPARATOR | ||
* 1 byte : HEADER_LENGTH | ||
* N bytes : header | ||
* 1 byte : UNIT_SEPARATOR | ||
* N bytes : messsage bytes | ||
*/ | ||
msg_buff = this.encoder.encode(msg); | ||
header = this.buildHeader(msg, msg_buff.length); | ||
var header_buff = header.encode().toBuffer(); | ||
var buff = new Buffer(2); | ||
buff.writeUInt8(message.RECORD_SEPARATOR, 0); | ||
buff.writeUInt8(header_buff.length, 1); | ||
var unit_buff = new Buffer(1); | ||
unit_buff.writeUInt8(message.UNIT_SEPARATOR, 0); | ||
var result_buff = Buffer.concat([buff, header_buff, unit_buff, msg_buff]) | ||
// The implementation of send_msg should *not* alter the | ||
// content in anyway prior to transmission. This ensures that | ||
// switching to an alternate encoder is always safe. | ||
this._send_msg(output); | ||
this._send_msg(result_buff); | ||
}; | ||
@@ -44,0 +108,0 @@ |
@@ -19,5 +19,5 @@ /* | ||
var StdoutSender = function(encoder) { | ||
var StdoutSender = function(encoder, hmc) { | ||
this.stream = process.stdout; | ||
this.init(encoder); | ||
this.init(encoder, hmc); | ||
@@ -33,9 +33,10 @@ this._send_msg = function(text) { | ||
var encoder = config['encoder']; | ||
return new StdoutSender(encoder); | ||
var hmc = config['hmc']; | ||
return new StdoutSender(encoder, hmc); | ||
}; | ||
var FileSender = function(filePath, encoder) { | ||
var FileSender = function(filePath, encoder, hmc) { | ||
this.stream = fs.createWriteStream(filePath); | ||
this.init(encoder); | ||
this.init(encoder, hmc); | ||
@@ -48,7 +49,30 @@ this._send_msg = function(text) { | ||
var fileSenderFactory = function(filePath, encoder) { | ||
return new FileSender(filePath, encoder); | ||
var fileSenderFactory = function(sender_config) { | ||
var filePath = sender_config['filePath']; | ||
var encoder = sender_config['encoder']; | ||
var hmc = sender_config['hmc']; | ||
return new FileSender(filePath, encoder, hmc); | ||
}; | ||
var DebugSender = function(encoder, hmc) { | ||
this.init(encoder, hmc); | ||
this.msgs = []; | ||
this._send_msg = function(text) { | ||
this.msgs.push(text); | ||
} | ||
}; | ||
base.abstractSender.call(DebugSender.prototype); | ||
var debugSenderFactory = function(config) { | ||
var config = typeof config !== 'undefined' ? config : {}; | ||
var encoder = config['encoder']; | ||
var hmc = config['hmc']; | ||
return new DebugSender(encoder, hmc); | ||
}; | ||
exports.fileSenderFactory = fileSenderFactory; | ||
exports.stdoutSenderFactory = stdoutSenderFactory; | ||
exports.debugSenderFactory = debugSenderFactory; |
@@ -18,19 +18,96 @@ /* | ||
var Header = require('../message').Header; | ||
try | ||
{ | ||
var msgpack = require('msgpack'); | ||
} catch(err) { | ||
var msgpack = null; | ||
/* | ||
* Encoders are classes implement an encode(msg) method and | ||
* serialize to a node.js Buffer. | ||
* | ||
* They must also export an attribute `encoder_type` which | ||
* provides a lookup value into the ProtocolBuffer definition | ||
* in Header.MessageEncoding | ||
* | ||
*/ | ||
var PB_NAMETYPE_TO_INT = {'STRING': 0, | ||
'BYTES': 1, | ||
'INTEGER': 2, | ||
'DOUBLE': 3, | ||
'BOOL': 4}; | ||
var PB_TYPEMAP = {0: 'STRING', | ||
1: 'BYTES', | ||
2: 'INTEGER', | ||
3: 'DOUBLE', | ||
4: 'BOOL'}; | ||
var PB_FIELDMAP = {0: 'value_string', | ||
1: 'value_bytes', | ||
2: 'value_integer', | ||
3: 'value_double', | ||
4: 'value_bool'}; | ||
var JSONEncoder = function() { | ||
this.setup(); | ||
} | ||
var jsonEncoder = function(data) { | ||
return JSON.stringify(data) + "\n"; | ||
JSONEncoder.prototype.setup = function() { | ||
this.encoder_type = Header.MessageEncoding.JSON; | ||
} | ||
var msgpackEncoder = function(data) { | ||
return msgpack.pack(data); | ||
JSONEncoder.prototype.encode = function(msg) { | ||
jdata = {} | ||
jdata['uuid'] = new Buffer(msg.uuid).toString('base64'); | ||
jdata['timestamp'] = msg.timestamp; | ||
jdata['type'] = msg.type; | ||
jdata['logger'] = msg.logger; | ||
jdata['severity'] = msg.severity; | ||
jdata['payload'] = msg.payload; | ||
jdata['env_version'] = msg.env_version; | ||
jdata['pid'] = msg.pid; | ||
jdata['hostname'] = msg.hostname; | ||
jdata['fields'] = []; | ||
for (var i = 0; i < msg.fields.length; i++) { | ||
var f = msg.fields[i]; | ||
var field_dict = {'value_type': f.value_type, 'value_format': 0}; | ||
if (f.value_string.length !== 0) { | ||
field_dict['value_string'] = [f.value_string[0]]; | ||
jdata['fields'].push(field_dict); | ||
} else if (f.value_bytes.length !== 0) { | ||
field_dict['value_bytes'] = [(new Buffer(f.value_bytes[0])).toString('base64')]; | ||
jdata['fields'].push(field_dict); | ||
} else if (f.value_integer.length !== 0) { | ||
field_dict['value_integer'] = [f.value_integer[0]]; | ||
jdata['fields'].push(field_dict); | ||
} else if (f.value_double.length !== 0) { | ||
field_dict['value_double'] = [f.value_double[0]]; | ||
jdata['fields'].push(field_dict); | ||
} else if (f.value_bool.length !== 0) { | ||
field_dict['value_bool'] = [f.value_bool[0]]; | ||
jdata['fields'].push(field_dict); | ||
} | ||
} | ||
var data = JSON.stringify(jdata) | ||
return new Buffer(data); | ||
} | ||
exports.msgpackEncoder = msgpackEncoder; | ||
exports.jsonEncoder = jsonEncoder; | ||
var ProtoBufEncoder = function() { | ||
this.setup(); | ||
} | ||
ProtoBufEncoder.prototype.setup = function() { | ||
this.encoder_type = Header.MessageEncoding.PROTOCOL_BUFFER; | ||
} | ||
ProtoBufEncoder.prototype.encode = function(msg) { | ||
return msg.encode().toBuffer() | ||
} | ||
exports.jsonEncoder = new JSONEncoder(); | ||
exports.protobufEncoder = new ProtoBufEncoder(); |
@@ -17,9 +17,8 @@ /* | ||
"use strict"; | ||
var zmq = require('./zmq.js'); | ||
var dev = require('./dev.js'); | ||
var udp = require('./udp.js'); | ||
exports.debugSenderFactory = dev.debugSenderFactory; | ||
exports.fileSenderFactory = dev.fileSenderFactory; | ||
exports.stdoutSenderFactory = dev.stdoutSenderFactory; | ||
exports.udpSenderFactory = udp.udpSenderFactory; | ||
exports.zmqPubSenderFactory = zmq.zmqPubSenderFactory; |
@@ -22,4 +22,4 @@ /* | ||
var UdpSender = function(host, port, encoder) { | ||
this.init(encoder); | ||
var UdpSender = function(host, port, encoder, hmc) { | ||
this.init(encoder, hmc); | ||
@@ -51,4 +51,3 @@ if (!Array.isArray(host)) | ||
this._send_msg = function(text) { | ||
var message = new Buffer(text); | ||
this._send_msg = function(buffer) { | ||
var client = this.dgram.createSocket("udp4"); | ||
@@ -59,3 +58,3 @@ | ||
var port = elem[1]; | ||
client.send(message, 0, message.length, port, host, function(err, bytes) { | ||
client.send(buffer, 0, buffer.length, port, host, function(err, bytes) { | ||
client.close(); | ||
@@ -85,8 +84,13 @@ }); | ||
var ports = sender_config['ports']; | ||
var encoder = sender_config['encoder']; | ||
var hmc = sender_config['hmc']; | ||
if ((hosts == null) || (ports == null)) { | ||
throw new Error("Invalid host/port combination: ["+hosts+"] ["+ports+"]"); | ||
} | ||
return new UdpSender(hosts, ports); | ||
var sender = new UdpSender(hosts, ports, encoder, hmc); | ||
return sender; | ||
}; | ||
exports.udpSenderFactory = udpSenderFactory; |
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
35165
15
909
2
+ Addedprotobufjs@>=0.12.8
+ Addedsuperscore@>=0.3.4
+ Added@protobufjs/aspromise@1.1.2(transitive)
+ Added@protobufjs/base64@1.1.2(transitive)
+ Added@protobufjs/codegen@2.0.4(transitive)
+ Added@protobufjs/eventemitter@1.1.0(transitive)
+ Added@protobufjs/fetch@1.1.0(transitive)
+ Added@protobufjs/float@1.0.2(transitive)
+ Added@protobufjs/inquire@1.1.0(transitive)
+ Added@protobufjs/path@1.1.2(transitive)
+ Added@protobufjs/pool@1.1.0(transitive)
+ Added@protobufjs/utf8@1.1.0(transitive)
+ Added@types/node@22.13.1(transitive)
+ Addedajv@6.12.6(transitive)
+ Addedasynckit@0.4.0(transitive)
+ Addedaws-sign2@0.7.0(transitive)
+ Addedaws4@1.13.2(transitive)
+ Addedcaseless@0.12.0(transitive)
+ Addedcombined-stream@1.0.8(transitive)
+ Addeddelayed-stream@1.0.0(transitive)
+ Addedextend@3.0.2(transitive)
+ Addedfast-json-stable-stringify@2.1.0(transitive)
+ Addedforever-agent@0.6.1(transitive)
+ Addedform-data@2.3.3(transitive)
+ Addedhar-schema@2.0.0(transitive)
+ Addedhar-validator@5.1.5(transitive)
+ Addedhttp-signature@1.2.0(transitive)
+ Addedis-typedarray@1.0.0(transitive)
+ Addedisstream@0.1.2(transitive)
+ Addedjson-schema-traverse@0.4.1(transitive)
+ Addedjson-stringify-safe@5.0.1(transitive)
+ Addedjsprim@1.4.2(transitive)
+ Addedlong@5.3.0(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addedoauth-sign@0.9.0(transitive)
+ Addedperformance-now@2.1.0(transitive)
+ Addedprotobufjs@7.4.0(transitive)
+ Addedpsl@1.15.0(transitive)
+ Addedpunycode@2.3.1(transitive)
+ Addedqs@6.5.3(transitive)
+ Addedrequest@2.88.2(transitive)
+ Addedsuperscore@0.3.4(transitive)
+ Addedtough-cookie@2.5.0(transitive)
+ Addedtunnel-agent@0.6.0(transitive)
+ Addedundici-types@6.20.0(transitive)
+ Addeduri-js@4.4.1(transitive)
+ Addeduuid@3.4.0(transitive)
- Removed@netflix/nerror@1.1.3(transitive)
- Removedabort-controller@3.0.0(transitive)
- Removedatomic-sleep@1.0.0(transitive)
- Removedbase64-js@1.5.1(transitive)
- Removedbuffer@6.0.3(transitive)
- Removedcall-bind-apply-helpers@1.0.1(transitive)
- Removedcall-bound@1.0.3(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removedcsv@6.3.11(transitive)
- Removedcsv-generate@4.4.2(transitive)
- Removedcsv-parse@5.6.0(transitive)
- Removedcsv-stringify@6.5.2(transitive)
- Removeddebug@2.6.94.4.0(transitive)
- Removeddepd@2.0.0(transitive)
- Removeddestroy@1.2.0(transitive)
- Removeddetect-node@2.1.0(transitive)
- Removeddtrace-provider@0.8.8(transitive)
- Removeddunder-proto@1.0.1(transitive)
- Removedee-first@1.1.1(transitive)
- Removedencodeurl@1.0.2(transitive)
- Removedes-define-property@1.0.1(transitive)
- Removedes-errors@1.3.0(transitive)
- Removedes-object-atoms@1.1.1(transitive)
- Removedescape-html@1.0.3(transitive)
- Removedescape-regexp-component@1.0.2(transitive)
- Removedetag@1.8.1(transitive)
- Removedevent-target-shim@5.0.1(transitive)
- Removedevents@3.3.0(transitive)
- Removedewma@2.0.1(transitive)
- Removedextsprintf@1.4.1(transitive)
- Removedfast-decode-uri-component@1.0.1(transitive)
- Removedfast-querystring@1.1.2(transitive)
- Removedfast-redact@3.5.0(transitive)
- Removedfind-my-way@7.7.0(transitive)
- Removedformidable@1.2.6(transitive)
- Removedfresh@0.5.2(transitive)
- Removedfunction-bind@1.1.2(transitive)
- Removedget-intrinsic@1.2.7(transitive)
- Removedget-proto@1.0.1(transitive)
- Removedgopd@1.2.0(transitive)
- Removedhandle-thing@2.0.1(transitive)
- Removedhas-symbols@1.1.0(transitive)
- Removedhasown@2.0.2(transitive)
- Removedhpack.js@2.1.6(transitive)
- Removedhttp-deceiver@1.2.7(transitive)
- Removedhttp-errors@2.0.0(transitive)
- Removedhttp-signature@1.4.0(transitive)
- Removedieee754@1.2.1(transitive)
- Removedinherits@2.0.4(transitive)
- Removedisarray@1.0.0(transitive)
- Removedjsprim@2.0.2(transitive)
- Removedlodash@4.17.21(transitive)
- Removedlru-cache@7.18.3(transitive)
- Removedmath-intrinsics@1.1.0(transitive)
- Removedmime@1.6.03.0.0(transitive)
- Removedminimalistic-assert@1.0.1(transitive)
- Removedms@2.0.02.1.3(transitive)
- Removedmsgpack@1.0.3(transitive)
- Removednan@2.22.0(transitive)
- Removednegotiator@0.6.4(transitive)
- Removedobject-inspect@1.13.4(transitive)
- Removedobuf@1.1.2(transitive)
- Removedon-exit-leak-free@2.1.2(transitive)
- Removedon-finished@2.4.1(transitive)
- Removedonce@1.4.0(transitive)
- Removedpidusage@3.0.2(transitive)
- Removedpino@8.21.0(transitive)
- Removedpino-abstract-transport@1.2.0(transitive)
- Removedpino-std-serializers@6.2.2(transitive)
- Removedprocess@0.11.10(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedprocess-warning@3.0.0(transitive)
- Removedqs@6.14.0(transitive)
- Removedquick-format-unescaped@4.0.4(transitive)
- Removedrange-parser@1.2.1(transitive)
- Removedreadable-stream@2.3.83.6.24.7.0(transitive)
- Removedreal-require@0.2.0(transitive)
- Removedrestify@11.1.0(transitive)
- Removedrestify-errors@8.0.2(transitive)
- Removedret@0.2.2(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedsafe-json-stringify@1.2.0(transitive)
- Removedsafe-regex2@2.0.0(transitive)
- Removedsafe-stable-stringify@2.5.0(transitive)
- Removedselect-hose@2.0.0(transitive)
- Removedsemver@7.7.1(transitive)
- Removedsend@0.18.0(transitive)
- Removedsetprototypeof@1.2.0(transitive)
- Removedside-channel@1.1.0(transitive)
- Removedside-channel-list@1.0.0(transitive)
- Removedside-channel-map@1.0.1(transitive)
- Removedside-channel-weakmap@1.0.2(transitive)
- Removedsonic-boom@3.8.1(transitive)
- Removedspdy@4.0.2(transitive)
- Removedspdy-transport@3.0.0(transitive)
- Removedsplit2@4.2.0(transitive)
- Removedstatuses@2.0.1(transitive)
- Removedstream-transform@3.3.3(transitive)
- Removedstring_decoder@1.1.11.3.0(transitive)
- Removedthread-stream@2.7.0(transitive)
- Removedtoidentifier@1.0.1(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removeduuid@9.0.1(transitive)
- Removedvasync@2.2.1(transitive)
- Removedwbuf@1.7.3(transitive)
- Removedwrappy@1.0.2(transitive)