/
githubmirror
/
axios
Обзор
Документация
Войти
/
githubmirror
/
axios
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v1.x
lib/helpers/progressEventReducer.js
54 строки
1 KB
Rayan Salhab
fix(http): flush download progress before stream close (#11040)
01 июл 2026, 21:04
Не верифицирован
01 июл 2026, 21:04
9713123
Код
Авторство
О чём код?
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) => { if (!e || typeof e.loaded !== 'number') { return; } const rawLoaded = e.loaded; const total = e.lengthComputable ? e.total : undefined; const loaded = Math.max(0, total != null ? Math.min(rawLoaded, total) : rawLoaded); const progressBytes = Math.max(0, loaded - bytesNotified); const rate = _speedometer(progressBytes); bytesNotified = Math.max(bytesNotified, loaded); const data = { loaded, total, progress: total ? loaded / total : undefined, bytes: progressBytes, rate: rate ? rate : undefined, estimated: rate && total ? (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, scheduler = utils.asap) => (...args) => scheduler(() => fn(...args));