tracker-stream.js 833 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use strict'
  2. const stream = require('stream')
  3. const Tracker = require('./tracker.js')
  4. class TrackerStream extends stream.Transform {
  5. constructor (name, size, options) {
  6. super(options)
  7. this.tracker = new Tracker(name, size)
  8. this.name = name
  9. this.id = this.tracker.id
  10. this.tracker.on('change', this.trackerChange.bind(this))
  11. }
  12. trackerChange (name, completion) {
  13. this.emit('change', name, completion, this)
  14. }
  15. _transform (data, encoding, cb) {
  16. this.tracker.completeWork(data.length ? data.length : 1)
  17. this.push(data)
  18. cb()
  19. }
  20. _flush (cb) {
  21. this.tracker.finish()
  22. cb()
  23. }
  24. completed () {
  25. return this.tracker.completed()
  26. }
  27. addWork (work) {
  28. return this.tracker.addWork(work)
  29. }
  30. finish () {
  31. return this.tracker.finish()
  32. }
  33. }
  34. module.exports = TrackerStream