index.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict'
  2. var fs = require('fs')
  3. var stream = require('stream')
  4. var util = require('util')
  5. var parse = require('./parser')
  6. module.exports = parse
  7. /* ------- Transform stream ------- */
  8. function Parser (opts) {
  9. opts = opts || {}
  10. stream.Transform.call(this, {objectMode: true})
  11. this._extract = parse.mkextract(opts)
  12. }
  13. util.inherits(Parser, stream.Transform)
  14. Parser.prototype._transform = function transform (data, encoding, done) {
  15. var block
  16. var lines = data.toString().split(/\n/)
  17. while (lines.length) {
  18. block = this._extract(lines.shift())
  19. if (block) {
  20. this.push(block)
  21. }
  22. }
  23. done()
  24. }
  25. module.exports.stream = function stream (opts) {
  26. return new Parser(opts)
  27. }
  28. /* ------- File parser ------- */
  29. module.exports.file = function file (file_path, done) {
  30. var opts = {}
  31. var collected = []
  32. if (arguments.length === 3) {
  33. opts = done
  34. done = arguments[2]
  35. }
  36. return fs.createReadStream(file_path, {encoding: 'utf8'})
  37. .on('error', done)
  38. .pipe(new Parser(opts))
  39. .on('error', done)
  40. .on('data', function (data) {
  41. collected.push(data)
  42. })
  43. .on('finish', function () {
  44. done(null, collected)
  45. })
  46. }