Blame view
node_modules/stream-serializer/index.js
1.3 KB
f7563de62
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
var EventEmitter = require('events').EventEmitter exports = module.exports = function (wrapper) { if('function' == typeof wrapper) return wrapper return exports[wrapper] || exports.json } exports.json = function (stream, _JSON) { _JSON = _JSON || JSON var write = stream.write var soFar = '' function parse (line) { var js try { js = _JSON.parse(line) //ignore lines of whitespace... } catch (err) { err.line = line return stream.emit('error', err) //return console.error('invalid JSON', line) } if(js !== undefined) write.call(stream, js) } function onData (data) { var lines = (soFar + data).split(' ') soFar = lines.pop() while(lines.length) { parse(lines.shift()) } } stream.write = onData var end = stream.end stream.end = function (data) { if(data) stream.write(data) //if there is any left over... if(soFar) { parse(soFar) } return end.call(stream) } stream.emit = function (event, data) { if(event == 'data') { data = _JSON.stringify(data) + ' ' } //since all stream events only use one argument, this is okay... EventEmitter.prototype.emit.call(stream, event, data) } return stream } exports.raw = function (stream) { return stream } |