import {createReadStream} from "fs"; import {createInterface} from "readline"; export default function(file, newlineDelimited, callback) { var index = -1, input = file === "-" ? process.stdin : createReadStream(file); function readObject() { return new Promise(function(resolve, reject) { var data = []; input .on("data", function(d) { data.push(d); }) .on("end", function() { resolve(JSON.parse(Buffer.concat(data))); }) .on("error", reject); }); } function readNewlineDelimitedObjects() { return new Promise(function(resolve, reject) { var queue = Promise.resolve(); createInterface({ input: input, output: null }).on("line", function(line) { queue = queue.then(function() { return callbackObject(JSON.parse(line)); }); }).on("close", function() { queue.then(function() { resolve(); }, reject); }).on("error", reject); }); } function callbackObject(object) { return callback(object, ++index); } return newlineDelimited ? readNewlineDelimitedObjects() : readObject().then(callbackObject); }