1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- import speedometer from "./speedometer.js";
- import throttle from "./throttle.js";
- import utils from "../utils.js";
- export const progressEventReducer = (listener, isDownloadStream, freq = 3) => {
- let bytesNotified = 0;
- const _speedometer = speedometer(50, 250);
- return throttle(e => {
- const loaded = e.loaded;
- const total = e.lengthComputable ? e.total : undefined;
- const progressBytes = loaded - bytesNotified;
- const rate = _speedometer(progressBytes);
- const inRange = loaded <= total;
- bytesNotified = loaded;
- const data = {
- loaded,
- total,
- progress: total ? (loaded / total) : undefined,
- bytes: progressBytes,
- rate: rate ? rate : undefined,
- estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
- event: e,
- lengthComputable: total != null,
- [isDownloadStream ? 'download' : 'upload']: true
- };
- listener(data);
- }, freq);
- }
- export const progressEventDecorator = (total, throttled) => {
- const lengthComputable = total != null;
- return [(loaded) => throttled[0]({
- lengthComputable,
- total,
- loaded
- }), throttled[1]];
- }
- export const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));
|