Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

40 řádky
1.1 KiB

  1. import {createReadStream} from "fs";
  2. import {createInterface} from "readline";
  3. export default function(file, newlineDelimited, callback) {
  4. var index = -1,
  5. input = file === "-" ? process.stdin : createReadStream(file);
  6. function readObject() {
  7. return new Promise(function(resolve, reject) {
  8. var data = [];
  9. input
  10. .on("data", function(d) { data.push(d); })
  11. .on("end", function() { resolve(JSON.parse(Buffer.concat(data))); })
  12. .on("error", reject);
  13. });
  14. }
  15. function readNewlineDelimitedObjects() {
  16. return new Promise(function(resolve, reject) {
  17. var queue = Promise.resolve();
  18. createInterface({
  19. input: input,
  20. output: null
  21. }).on("line", function(line) {
  22. queue = queue.then(function() { return callbackObject(JSON.parse(line)); });
  23. }).on("close", function() {
  24. queue.then(function() { resolve(); }, reject);
  25. }).on("error", reject);
  26. });
  27. }
  28. function callbackObject(object) {
  29. return callback(object, ++index);
  30. }
  31. return newlineDelimited
  32. ? readNewlineDelimitedObjects()
  33. : readObject().then(callbackObject);
  34. }