UNPKG

@uppy/utils

Version:

Shared utility functions for Uppy Core and plugins maintained by the Uppy team.

55 lines 2.44 kB
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;