const net = require('net'); const through = require('through2'); const colors = require('ansi-colors'); const log = require('fancy-log'); const _colors = { '[DEBUG]': colors.white, '[INFO]': colors.cyan, '[ERROR]': colors.red, '[WARNING]': colors.yellow, }; const getColor = (line) => { for (const [tag, color] of Object.entries(_colors)) { if (line.indexOf(tag) > -1) { return color; } } return null;// colors.reset; }; const _log = (line, color) => { if (line[0] === '\t') { console.log(color(line)) } else { const result = line.split(' '); console.log(colors.gray(result.slice(0, 4).join(' ')) + ' ' + color(result.slice(4).join(' '))); } }; module.exports = () => { return through.obj(function (file, enc, callback) { const debug = file.debug; if (!file.debug) { this.emit('end'); callback(); return; } let color = null; const server = net.createServer((socket) => { socket.on("data", (data) => { const lines = data.toString().split('\n'); for (let line of lines) if (line.length > 2) { const newColor = getColor(line); if (newColor != null) color = newColor; _log(line, color); } }); socket.on("close", () => { socket.destroy(); server.close(); this.emit('end'); callback(); }); }); log(colors.green('[debug]'), colors.cyan('listen on'), colors.magenta(`${debug.host}:${debug.port}`)); server.listen(debug.port, debug.host); }) }; module.exports.log = _log;