/* db.collection.find().stream().pipe(Stringify()).pipe(res) */ var Transform = require('readable-stream/transform') var stringify = require('json-stringify-safe') var util = require('util') util.inherits(Stringify, Transform) module.exports = Stringify function Stringify(options) { if (!(this instanceof Stringify)) return new Stringify(options || {}) if (options && options.replacer) { this.replacer = options.replacer; } if (options && options.space !== undefined) { this.space = options.space; } Transform.call(this, options || {}) this._writableState.objectMode = true // Array Deliminator and Stringifier defaults var opener = options && options.opener ? options.opener : '[\n' var seperator = options && options.seperator ? options.seperator : '\n,\n' var closer = options && options.closer ? options.closer : '\n]\n' var stringifier = options && options.stringifier ? options.stringifier : stringify // Array Deliminators and Stringifier this.opener = new Buffer(opener, 'utf8') this.seperator = new Buffer(seperator, 'utf8') this.closer = new Buffer(closer, 'utf8') this.stringifier = stringifier } // Flags Stringify.prototype.started = false // JSON.stringify options Stringify.prototype.replacer = null Stringify.prototype.space = 0 Stringify.prototype._transform = function (doc, enc, cb) { if (this.started) { this.push(this.seperator) } else { this.push(this.opener) this.started = true } doc = this.stringifier(doc, this.replacer, this.space) this.push(new Buffer(doc, 'utf8')) cb() } Stringify.prototype._flush = function (cb) { if (!this.started) this.push(this.opener) this.push(this.closer) this.push(null) cb() }