progress-emitter.js 612 Bytes
'use strict';
const EventEmitter = require('events');

const written = new WeakMap();

class ProgressEmitter extends EventEmitter {
	constructor(source, destination) {
		super();
		this._source = source;
		this._destination = destination;
	}

	set written(value) {
		written.set(this, value);
		this.emitProgress();
	}

	get written() {
		return written.get(this);
	}

	emitProgress() {
		const {size, written} = this;
		this.emit('progress', {
			src: this._source,
			dest: this._destination,
			size,
			written,
			percent: written === size ? 1 : written / size
		});
	}
}

module.exports = ProgressEmitter;