const { Transform } = require('stream') // A stream that converts database objects stream to "{id}\t{data_json}\n" stream or a json stream of obj.data fields class SpeckleObjectsStream extends Transform { constructor(simpleText) { super({ writableObjectMode: true }) this.simpleText = simpleText if (!this.simpleText) this.push('[') this.isFirstObject = true } _transform(dbObj, encoding, callback) { let objData = dbObj.dataText if (objData === undefined) objData = JSON.stringify(dbObj.data) try { if (this.simpleText) { this.push(`${dbObj.id}\t`) this.push(objData) this.push('\n') } else { // JSON output if (!this.isFirstObject) this.push(',') this.push(objData) this.isFirstObject = false } callback() } catch (e) { callback(e) } } _flush(callback) { if (!this.simpleText) this.push(']') callback() } } exports.SpeckleObjectsStream = SpeckleObjectsStream