35 lines
612 B
JavaScript
35 lines
612 B
JavaScript
'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;
|