@uppy/utils
Version:
Shared utility functions for Uppy Core and plugins maintained by the Uppy team.
55 lines • 2.44 kB
JavaScript
function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError("attempted to use private field on non-instance"); return e; }
var id = 0;
function _classPrivateFieldLooseKey(e) { return "__private_" + id++ + "_" + e; }
var _aliveTimer = /*#__PURE__*/_classPrivateFieldLooseKey("aliveTimer");
var _isDone = /*#__PURE__*/_classPrivateFieldLooseKey("isDone");
var _onTimedOut = /*#__PURE__*/_classPrivateFieldLooseKey("onTimedOut");
var _timeout = /*#__PURE__*/_classPrivateFieldLooseKey("timeout");
/**
* Helper to abort upload requests if there has not been any progress for `timeout` ms.
* Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`
* Call `timer.progress()` to signal that there has been progress of any kind.
* Call `timer.done()` when the upload has completed.
*/
class ProgressTimeout {
constructor(timeout,
// eslint-disable-next-line no-shadow
timeoutHandler) {
Object.defineProperty(this, _aliveTimer, {
writable: true,
value: void 0
});
Object.defineProperty(this, _isDone, {
writable: true,
value: false
});
Object.defineProperty(this, _onTimedOut, {
writable: true,
value: void 0
});
Object.defineProperty(this, _timeout, {
writable: true,
value: void 0
});
_classPrivateFieldLooseBase(this, _timeout)[_timeout] = timeout;
_classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut] = () => timeoutHandler(timeout);
}
progress() {
// Some browsers fire another progress event when the upload is
// cancelled, so we have to ignore progress after the timer was
// told to stop.
if (_classPrivateFieldLooseBase(this, _isDone)[_isDone]) return;
if (_classPrivateFieldLooseBase(this, _timeout)[_timeout] > 0) {
clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);
_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = setTimeout(_classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut], _classPrivateFieldLooseBase(this, _timeout)[_timeout]);
}
}
done() {
if (!_classPrivateFieldLooseBase(this, _isDone)[_isDone]) {
clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);
_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = undefined;
_classPrivateFieldLooseBase(this, _isDone)[_isDone] = true;
}
}
}
export default ProgressTimeout;