var noop = exports.noop = function(){}; exports.extend = function extend(dest, source) { for (var prop in source) { dest[prop] = source[prop]; } }; exports.eventEmitterListenerCount = require('events').EventEmitter.listenerCount || function(emitter, type) { return emitter.listeners(type).length; }; exports.bufferAllocUnsafe = Buffer.allocUnsafe ? Buffer.allocUnsafe : function oldBufferAllocUnsafe(size) { return new Buffer(size); }; exports.bufferFromString = Buffer.from ? Buffer.from : function oldBufferFromString(string, encoding) { return new Buffer(string, encoding); }; exports.BufferingLogger = function createBufferingLogger(identifier, uniqueID) { try { var logFunction = require('debug')(identifier); } catch(e) { logFunction = noop; logFunction.enabled = false; } if (logFunction.enabled) { var logger = new BufferingLogger(identifier, uniqueID, logFunction); var debug = logger.log.bind(logger); debug.printOutput = logger.printOutput.bind(logger); debug.enabled = logFunction.enabled; return debug; } logFunction.printOutput = noop; return logFunction; }; function BufferingLogger(identifier, uniqueID, logFunction) { this.logFunction = logFunction; this.identifier = identifier; this.uniqueID = uniqueID; this.buffer = []; } BufferingLogger.prototype.log = function() { this.buffer.push([ new Date(), Array.prototype.slice.call(arguments) ]); return this; }; BufferingLogger.prototype.clear = function() { this.buffer = []; return this; }; BufferingLogger.prototype.printOutput = function(logFunction) { if (!logFunction) { logFunction = this.logFunction; } var uniqueID = this.uniqueID; this.buffer.forEach(function(entry) { var date = entry[0].toLocaleString(); var args = entry[1].slice(); var formatString = args[0]; if (formatString !== (void 0) && formatString !== null) { formatString = '%s - %s - ' + formatString.toString(); args.splice(0, 1, formatString, date, uniqueID); logFunction.apply(global, args); } }); };