'use strict' var util = require('util') var stream = require('readable-stream') var delegate = require('delegates') var Tracker = require('./tracker.js') var TrackerStream = module.exports = function (name, size, options) { stream.Transform.call(this, options) this.tracker = new Tracker(name, size) this.name = name this.id = this.tracker.id this.tracker.on('change', delegateChange(this)) } util.inherits(TrackerStream, stream.Transform) function delegateChange (trackerStream) { return function (name, completion, tracker) { trackerStream.emit('change', name, completion, trackerStream) } } TrackerStream.prototype._transform = function (data, encoding, cb) { this.tracker.completeWork(data.length ? data.length : 1) this.push(data) cb() } TrackerStream.prototype._flush = function (cb) { this.tracker.finish() cb() } delegate(TrackerStream.prototype, 'tracker') .method('completed') .method('addWork') .method('finish')