@creejs/commons-retrier 2.1.8 → 2.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/cjs/index-dev.cjs +40 -21
- package/dist/cjs/index-dev.cjs.map +1 -1
- package/dist/cjs/index-min.cjs +1 -1
- package/dist/cjs/index-min.cjs.map +1 -1
- package/dist/esm/index-dev.js +40 -21
- package/dist/esm/index-dev.js.map +1 -1
- package/dist/esm/index-min.js +1 -1
- package/dist/esm/index-min.js.map +1 -1
- package/dist/umd/index.dev.js +40 -21
- package/dist/umd/index.dev.js.map +1 -1
- package/dist/umd/index.min.js +1 -1
- package/dist/umd/index.min.js.map +1 -1
- package/package.json +2 -2
- package/types/retrier.d.ts +11 -6
package/dist/umd/index.dev.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.CommonsLang = {}));
|
|
5
5
|
})(this, (function (exports) { 'use strict';
|
|
6
6
|
|
|
7
|
-
var t$1={constructorName:
|
|
7
|
+
var t$1={constructorName:r$1,defaults:function(t,...r){if(null==t)throw new TypeError('"target" must not be null or undefined');for(const n of r)if(null!=n)for(const r in n) void 0===t[r]&&(t[r]=n[r]);return t},extend:n$1,extends:n$1,equals:function(t,r){if(t===r)return true;if("function"==typeof t?.equals)return t.equals(r);if("function"==typeof r?.equals)return r.equals(t);return false},isBrowser:e$1,isNode:function(){return !e$1()}};function r$1(t){return t?.constructor?.name}function n$1(t,...r){if(null==t)throw new TypeError('"target" must not be null or undefined');for(const n of r)if(null!=n)for(const r in n)t[r]=n[r];return t}function e$1(){return "undefined"!=typeof window&&"undefined"!=typeof document}var o$1={isNumber:h$1,isNil:a$1};function u$1(t){return "function"==typeof t}function a$1(t){return null==t}function c$1(t){return !!h$1(t)&&t>0}function l$1(t){return !!h$1(t)&&t>=0}function h$1(t){return null!=t&&"number"==typeof t}function m$1(t){return null!=t&&"function"==typeof t.then}function b$1(t){return null!=t&&"string"==typeof t}var L$1={assertNumber:C,assertPositive:D,assertNotNegative:F,assertFunction:q,assertNotNil:W,assertString:J};function k(t,r){if(!Array.isArray(t))throw new Error(`${r?'"'+r+'" ':" "}Not Array: type=${typeof t} value=${JSON.stringify(t)}`)}function J(t,r){if(!b$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not String: type=${typeof t} value=${JSON.stringify(t)}`)}function C(t,r){if(!h$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not Number: type=${typeof t} value=${JSON.stringify(t)}`)}function D(t,r){if(!c$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not Positive: ${t}`)}function F(t,r){if(!l$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not "0 or Positive": ${t}`)}function q(t,r){if(!u$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not Function: type=${typeof t} value=${JSON.stringify(t)}`)}function R(t,r){if(!m$1(t))throw new Error(`${r?'"'+r+'" ':" "}Not Promise: type=${typeof t} value=${JSON.stringify(t)}`)}function W(t,r){if(a$1(t))throw new Error((r?'"'+r+'" ':" ")+"Should Not Nil")}var Y={defer:Z,delay:function(t,r){h$1(t)?(r=t,t=Promise.resolve()):null==t&&null==r&&(r=1,t=Promise.resolve());null!=t&&R(t),C(r=r??1e3);const n=Z(),e=Date.now();return t.then((...t)=>{const o=Date.now()-e;o<r?setTimeout(()=>n.resolve(...t),r-o):n.resolve(...t);}).catch(t=>{const o=Date.now()-e;o<r?setTimeout(()=>n.reject(t),r-o):n.reject(t);}),n.promise},timeout:function(t,r,n){R(t),C(r=r??1);const e=Z(r,n),o=Date.now();return t.then((...t)=>{Date.now()-o<=r?e.resolve(...t):e.reject(new Error(n??`Promise Timeout: ${r}ms`));}).catch(t=>{!e.resolved&&!e.rejected&&e.reject(t);}),e.promise},allSettled:_$1,returnValuePromised:tt,series:async function(t){k(t);const r=[];for(const n of t)q(n),r.push(await n());return r},seriesAllSettled:async function(t){k(t);const r=[];for(const n of t){q(n);try{r.push({ok:!0,result:await n()});}catch(t){r.push({ok:false,result:t});}}return r},parallel:async function(t,r=5){if(k(t),C(r),r<=0)throw new Error(`Invalid maxParallel: ${r}, should > 0`);t.forEach(t=>q(t));const n=[];if(t.length<=r){const r=await Promise.all(t.map(t=>tt(t)));return n.push(...r),n}const e=[];for(const o of t)if(q(o),e.push(o),e.length>=r){const t=await Promise.all(e.map(t=>tt(t)));n.push(...t),e.length=0;}if(e.length>0&&e.length<r){const t=await Promise.all(e.map(t=>tt(t)));n.push(...t);}return n},parallelAllSettled:async function(t,r=5){if(k(t),C(r),r<=0)throw new Error(`Invalid maxParallel: ${r}, should > 0`);t.forEach(t=>q(t));const n=[];if(t.length<=r){const r=await _$1(t.map(t=>tt(t)));return n.push(...r),n}const e=[];for(const o of t)if(q(o),e.push(o),e.length>=r){const t=await _$1(e.map(t=>tt(t)));n.push(...t),e.length=0;}if(e.length>0&&e.length<r){const t=await _$1(e.map(t=>tt(t)));n.push(...t);}return n}};function Z(t=-1,r){C(t);const n={};let e;return t>=0&&(n.timerHandler=e=setTimeout(()=>{clearTimeout(e),n.timerCleared=true,n.reject(new Error(r??`Promise Timeout: ${t}ms`));},t),n.timerHandler=e),n.promise=new Promise((t,r)=>{n.resolve=(...r)=>{null!=e&&(clearTimeout(e),n.timerCleared=true),n.resolved=true,t(...r);},n.reject=t=>{null!=e&&(clearTimeout(e),n.timerCleared=true),n.rejected=true,r(t);};}),n.promise.cancel=()=>{null!=e&&(clearTimeout(e),n.timerCleared=true),n.rejected=true,n.canceled=n.promise.canceled=true,n.reject(new Error("Cancelled"));},n}async function _$1(t){k(t);const r=await Promise.allSettled(t),n=[];for(const t of r)"fulfilled"===t.status&&n.push({ok:true,result:t.value}),"rejected"===t.status&&n.push({ok:false,result:t.reason});return n}function tt(t){try{const r=t();return m$1(r)?r:Promise.resolve(r)}catch(t){return Promise.reject(t)}}new TextDecoder;new TextEncoder;
|
|
8
8
|
|
|
9
9
|
// module vars
|
|
10
10
|
const DefaultMinInterval = 50;
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
// internal
|
|
15
15
|
|
|
16
16
|
// module vars
|
|
17
|
-
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } =
|
|
18
|
-
const { isNumber } =
|
|
17
|
+
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } = L$1;
|
|
18
|
+
const { isNumber } = o$1;
|
|
19
19
|
|
|
20
20
|
class Policy {
|
|
21
21
|
/**
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
var e={isFunction:t,isNil:s};function t(e){return "function"==typeof e}function s(e){return null==e}function n(e){return null!=e&&"string"==typeof e}var r={assertNumber:function(e,t){if(!function(e){return null!=e&&"number"==typeof e}(e))throw new Error(`${t?'"'+t+'" ':" "}Not Number: type=${typeof e} value=${JSON.stringify(e)}`)},assertFunction:function(e,s){if(!t(e))throw new Error(`${s?'"'+s+'" ':" "}Not Function: type=${typeof e} value=${JSON.stringify(e)}`)},assertNotNil:function(e,t){if(s(e))throw new Error((t?'"'+t+'" ':" ")+"Should Not Nil")},assertString:function(e,t){if(!n(e))throw new Error(`${t?'"'+t+'" ':" "}Not String: type=${typeof e} value=${JSON.stringify(e)}`)},assertStringOrSymbol:function(e,t){if(!n(e)&&!function(e){return null!=e&&"symbol"==typeof e}(e))throw new Error(`${t?'"'+t+'" ':" "}Not String or Symbol: type=${typeof e} value=${JSON.stringify(e)}`)}};const i="DOwner$#$",{assertFunction:l,assertNotNil:a}=r;class o{constructor(e,t,s=false){a(e,"event"),l(t,"callback"),this._event=e,this._callback=t,this._isOnce=!!s,this._owner=void 0;}set owner(e){this._owner=e;}get owner(){return this._owner===i?void 0:this._owner}get event(){return this._event}get isOnce(){return this._isOnce}isSameCallback(e){return this._callback===e}get callback(){return this._callback}invoke(...e){try{return this._callback(...e)}finally{if(this._isOnce)try{this._event._remove(this);}catch(e){console.warn(e);}}}listener(...e){return this.invoke(...e)}}const{isFunction:c,isNil:h}=e,{assertStringOrSymbol:u,assertFunction:_}=r;class f{static get DefaultOwner(){return i}constructor(e){u(e,"eventName"),this._name=e,this._callbacks=new Set,this._listeners=[],this._callback2Listeners=new Map,this._listener2Owner=new Map,this._owner2Listeners=new Map;}get name(){return this._name}isEmpty(){return 0===this._callbacks.size}rawListeners(){return [...this._listeners]}listenerCount(e){return null==e?this._listeners.length:this._callback2Listeners.get(e)?.size??0}callbacks(){return [...this.rawListeners().map(e=>e.callback)]}emit(...e){if(0===this._listeners.length)return false;for(const t of [...this._listeners])t.invoke(...e);return true}hasListener(e){return !!c(e)&&this._callbacks.has(e)}hasOwner(e){return !h(e)&&this._owner2Listeners.has(e)}addListener(e,t){return this._addListener(e,t,false,false)}prependListener(e,t){return this._addListener(e,t,false,true)}addOnceListener(e,t){return this._addListener(e,t,true,false)}prependOnceListener(e,t){return this._addListener(e,t,true,true)}_addListener(e,t,s,n){if(h(e))return false;_(e),this._callbacks.has(e)||this._callbacks.add(e),t=t??i;const r=new o(this,e,s);r.owner=t,n?this._listeners.unshift(r):this._listeners.push(r),this._listener2Owner.set(r,t);let l=this._callback2Listeners.get(e);null==l&&(l=new Set,this._callback2Listeners.set(e,l)),l.add(r);let a=this._owner2Listeners.get(t);return null==a&&(a=new Set,this._owner2Listeners.set(t,a)),a.add(r),true}removeListener(e){if(h(e))return false;if(!this._callbacks.has(e))return false;this._callbacks.delete(e);const t=this._callback2Listeners.get(e);if(null==t)return false;this._callback2Listeners.delete(e);for(const e of t){ -1!==this._listeners.indexOf(e)&&this._listeners.splice(this._listeners.indexOf(e),1);const t=this._listener2Owner.get(e);if(null==t)continue;this._listener2Owner.delete(e);const s=this._owner2Listeners.get(t);null!=s&&(s.delete(e),0===s.size&&this._owner2Listeners.delete(t));}return true}_remove(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1);const{callback:s}=e,n=this._callback2Listeners.get(s);null!=n&&(n.delete(e),0===n.size&&(this._callback2Listeners.delete(s),this._callbacks.delete(s)));const r=this._listener2Owner.get(e);if(null==r)return;this._listener2Owner.delete(e);const i=this._owner2Listeners.get(r);null!=i&&(i.delete(e),0===i.size&&this._owner2Listeners.delete(r));}removeAllListeners(e){if(h(e))return this._callbacks.clear(),this._listeners.length=0,this._callback2Listeners.clear(),this._listener2Owner.clear(),this._owner2Listeners.clear(),this;const t=this._owner2Listeners.get(e);if(null==t)return this;this._owner2Listeners.delete(e);for(const e of t){ -1!==this._listeners.indexOf(e)&&this._listeners.splice(this._listeners.indexOf(e),1),this._listener2Owner.delete(e);const{callback:t}=e,s=this._callback2Listeners.get(t);null!=s&&(s.delete(e),0===s.size&&(this._callback2Listeners.delete(t),this._callbacks.delete(t)));}return this}}const{isNil:
|
|
159
|
+
var e={isFunction:t,isNil:s};function t(e){return "function"==typeof e}function s(e){return null==e}function n(e){return null!=e&&"string"==typeof e}var r={assertNumber:function(e,t){if(!function(e){return null!=e&&"number"==typeof e}(e))throw new Error(`${t?'"'+t+'" ':" "}Not Number: type=${typeof e} value=${JSON.stringify(e)}`)},assertFunction:function(e,s){if(!t(e))throw new Error(`${s?'"'+s+'" ':" "}Not Function: type=${typeof e} value=${JSON.stringify(e)}`)},assertNotNil:function(e,t){if(s(e))throw new Error((t?'"'+t+'" ':" ")+"Should Not Nil")},assertString:function(e,t){if(!n(e))throw new Error(`${t?'"'+t+'" ':" "}Not String: type=${typeof e} value=${JSON.stringify(e)}`)},assertStringOrSymbol:function(e,t){if(!n(e)&&!function(e){return null!=e&&"symbol"==typeof e}(e))throw new Error(`${t?'"'+t+'" ':" "}Not String or Symbol: type=${typeof e} value=${JSON.stringify(e)}`)}};new TextDecoder,new TextEncoder,BigInt(1e6),BigInt(1e9);const i="DOwner$#$",{assertFunction:l,assertNotNil:a}=r;class o{constructor(e,t,s=false){a(e,"event"),l(t,"callback"),this._event=e,this._callback=t,this._isOnce=!!s,this._owner=void 0;}set owner(e){this._owner=e;}get owner(){return this._owner===i?void 0:this._owner}get event(){return this._event}get isOnce(){return this._isOnce}isSameCallback(e){return this._callback===e}get callback(){return this._callback}invoke(...e){try{return this._callback(...e)}finally{if(this._isOnce)try{this._event._remove(this);}catch(e){console.warn(e);}}}listener(...e){return this.invoke(...e)}}const{isFunction:c,isNil:h}=e,{assertStringOrSymbol:u,assertFunction:_}=r;class f{static get DefaultOwner(){return i}constructor(e){u(e,"eventName"),this._name=e,this._callbacks=new Set,this._listeners=[],this._callback2Listeners=new Map,this._listener2Owner=new Map,this._owner2Listeners=new Map;}get name(){return this._name}isEmpty(){return 0===this._callbacks.size}rawListeners(){return [...this._listeners]}listenerCount(e){return null==e?this._listeners.length:this._callback2Listeners.get(e)?.size??0}callbacks(){return [...this.rawListeners().map(e=>e.callback)]}emit(...e){if(0===this._listeners.length)return false;for(const t of [...this._listeners])t.invoke(...e);return true}hasListener(e){return !!c(e)&&this._callbacks.has(e)}hasOwner(e){return !h(e)&&this._owner2Listeners.has(e)}addListener(e,t){return this._addListener(e,t,false,false)}prependListener(e,t){return this._addListener(e,t,false,true)}addOnceListener(e,t){return this._addListener(e,t,true,false)}prependOnceListener(e,t){return this._addListener(e,t,true,true)}_addListener(e,t,s,n){if(h(e))return false;_(e),this._callbacks.has(e)||this._callbacks.add(e),t=t??i;const r=new o(this,e,s);r.owner=t,n?this._listeners.unshift(r):this._listeners.push(r),this._listener2Owner.set(r,t);let l=this._callback2Listeners.get(e);null==l&&(l=new Set,this._callback2Listeners.set(e,l)),l.add(r);let a=this._owner2Listeners.get(t);return null==a&&(a=new Set,this._owner2Listeners.set(t,a)),a.add(r),true}removeListener(e){if(h(e))return false;if(!this._callbacks.has(e))return false;this._callbacks.delete(e);const t=this._callback2Listeners.get(e);if(null==t)return false;this._callback2Listeners.delete(e);for(const e of t){ -1!==this._listeners.indexOf(e)&&this._listeners.splice(this._listeners.indexOf(e),1);const t=this._listener2Owner.get(e);if(null==t)continue;this._listener2Owner.delete(e);const s=this._owner2Listeners.get(t);null!=s&&(s.delete(e),0===s.size&&this._owner2Listeners.delete(t));}return true}_remove(e){const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1);const{callback:s}=e,n=this._callback2Listeners.get(s);null!=n&&(n.delete(e),0===n.size&&(this._callback2Listeners.delete(s),this._callbacks.delete(s)));const r=this._listener2Owner.get(e);if(null==r)return;this._listener2Owner.delete(e);const i=this._owner2Listeners.get(r);null!=i&&(i.delete(e),0===i.size&&this._owner2Listeners.delete(r));}removeAllListeners(e){if(h(e))return this._callbacks.clear(),this._listeners.length=0,this._callback2Listeners.clear(),this._listener2Owner.clear(),this._owner2Listeners.clear(),this;const t=this._owner2Listeners.get(e);if(null==t)return this;this._owner2Listeners.delete(e);for(const e of t){ -1!==this._listeners.indexOf(e)&&this._listeners.splice(this._listeners.indexOf(e),1),this._listener2Owner.delete(e);const{callback:t}=e,s=this._callback2Listeners.get(t);null!=s&&(s.delete(e),0===s.size&&(this._callback2Listeners.delete(t),this._callbacks.delete(t)));}return this}}const{isNil:d}=e,{assertString:m,assertFunction:L,assertNumber:w,assertStringOrSymbol:v,assertNotNil:g}=r,p=["on","once","addListener","prependListener","prependOnceListener","off","offAll","offOwner","removeAllListeners","removeListener","emit","setMaxListeners","getMaxListeners","hasOwner","listeners","listenerCount","eventNames","rawListeners"];let b=10;class O{static mixin(e){const t=new O;e.__emitter=t;for(const s of p){const n=t[s];e[s]=n.bind(t);}return e}static get defaultMaxListeners(){return b}static set defaultMaxListeners(e){w(e),b=e??10;}constructor(){this._name2Event=new Map,this._maxListeners=b;}addListener(e,t,s){return this.on(e,t,s)}prependListener(e,t,s){m(e),L(t),this._checkMaxListeners(e);return this._getOrCreateEvent(e).prependListener(t,s),this}prependOnceListener(e,t,s){m(e),L(t),this._checkMaxListeners(e);return this._getOrCreateEvent(e).prependOnceListener(t,s),this}emit(e,...t){const s=this._name2Event.get(e);return null!=s&&!s.isEmpty()&&(s.emit(...t),true)}eventNames(){return [...this._name2Event.keys()]}getMaxListeners(){return this._maxListeners}listenerCount(e,t){v(e,"eventName");const s=this._name2Event.get(e);return null==s||s.isEmpty()?0:s.listenerCount(t)}listeners(e){v(e,"eventName");const t=this._name2Event.get(e);return null==t||t.isEmpty()?[]:t.callbacks()}off(e,t){const s=this._name2Event.get(e);return null==s?this:(s.removeListener(t),s.isEmpty()?(this._name2Event.delete(e),this):this)}offAll(e,t){v(e,"eventName");const s=this._name2Event.get(e);return null==s?this:(s.removeAllListeners(t),s.isEmpty()?(this._name2Event.delete(e),this):this)}offOwner(e){g(e,"owner");const t=[...this._name2Event.values()];for(const s of t)s.removeAllListeners(e),s.isEmpty()&&this._name2Event.delete(s.name);return this}on(e,t,s){m(e),L(t),this._checkMaxListeners(e);return this._getOrCreateEvent(e).addListener(t,s),this}_checkMaxListeners(e){let t=0;0!==this._maxListeners&&this._maxListeners!==1/0&&(t=this.listenerCount(e))>=this._maxListeners&&console.warn(`maxlistenersexceededwarning: Possible EventEmitter memory leak detected. ${t} ${e} listeners added to [${this}]. Use emitter.setMaxListeners() to increase limit`);}once(e,t,s){m(e),L(t);return this._getOrCreateEvent(e).addOnceListener(t,s),this}rawListeners(e){return this._name2Event.get(e)?.rawListeners()||[]}removeAllListeners(e,t){return this.offAll(e,t)}removeListener(e,t){return this.off(e,t)}setMaxListeners(e){if(w(e),e<0)throw new RangeError("maxListeners must >=0");return this._maxListeners=e,this}_getOrCreateEvent(e){if(this._name2Event.has(e))return this._name2Event.get(e);const t=new f(e);return this._name2Event.set(e,t),t}hasOwner(e){if(d(e))return false;for(const t of this._name2Event.values())if(t.hasOwner(e))return true;return false}}
|
|
160
160
|
|
|
161
161
|
const Start = 'start'; // retry started
|
|
162
162
|
const Stop = 'stop'; // retry stopped
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
// 3rd
|
|
184
184
|
// internal
|
|
185
185
|
// module vars
|
|
186
|
-
const { assertPositive: assertPositive$4 } =
|
|
186
|
+
const { assertPositive: assertPositive$4 } = L$1;
|
|
187
187
|
class FixedIntervalPolicy extends Policy {
|
|
188
188
|
/**
|
|
189
189
|
* Creates a fixed interval retry policy with the specified interval.
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
// 3rd
|
|
219
219
|
// internal
|
|
220
220
|
// module vars
|
|
221
|
-
const { assertPositive: assertPositive$3 } =
|
|
221
|
+
const { assertPositive: assertPositive$3 } = L$1;
|
|
222
222
|
class FixedIncreasePolicy extends Policy {
|
|
223
223
|
/**
|
|
224
224
|
* each call to _next() increases the interval by "increasement".
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
// 3rd
|
|
256
256
|
// internal
|
|
257
257
|
// module vars
|
|
258
|
-
const { assertPositive: assertPositive$2 } =
|
|
258
|
+
const { assertPositive: assertPositive$2 } = L$1;
|
|
259
259
|
|
|
260
260
|
class FactoreIncreasePolicy extends Policy {
|
|
261
261
|
/**
|
|
@@ -299,7 +299,7 @@
|
|
|
299
299
|
// 3rd
|
|
300
300
|
// internal
|
|
301
301
|
// module vars
|
|
302
|
-
const { assertPositive: assertPositive$1 } =
|
|
302
|
+
const { assertPositive: assertPositive$1 } = L$1;
|
|
303
303
|
|
|
304
304
|
class ShuttlePolicy extends Policy {
|
|
305
305
|
/**
|
|
@@ -349,7 +349,7 @@
|
|
|
349
349
|
*/
|
|
350
350
|
|
|
351
351
|
// module vars
|
|
352
|
-
const { assertNotNil, assertFunction: assertFunction$1 } =
|
|
352
|
+
const { assertNotNil, assertFunction: assertFunction$1 } = L$1;
|
|
353
353
|
class Task {
|
|
354
354
|
/**
|
|
355
355
|
* Creates a new Task instance.
|
|
@@ -442,7 +442,7 @@
|
|
|
442
442
|
|
|
443
443
|
// internal
|
|
444
444
|
// module vars
|
|
445
|
-
const { assertNotNegative: assertNotNegative$2 } =
|
|
445
|
+
const { assertNotNegative: assertNotNegative$2 } = L$1;
|
|
446
446
|
/**
|
|
447
447
|
* @class FixedBackoff
|
|
448
448
|
*/
|
|
@@ -462,7 +462,7 @@
|
|
|
462
462
|
// internal
|
|
463
463
|
|
|
464
464
|
// module vars
|
|
465
|
-
const { assertNotNegative: assertNotNegative$1 } =
|
|
465
|
+
const { assertNotNegative: assertNotNegative$1 } = L$1;
|
|
466
466
|
/**
|
|
467
467
|
* @class ExponentialBackoffPolicy
|
|
468
468
|
*/
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
|
|
481
481
|
// internal
|
|
482
482
|
// module vars
|
|
483
|
-
const { assertNotNegative } =
|
|
483
|
+
const { assertNotNegative } = L$1;
|
|
484
484
|
/**
|
|
485
485
|
* @class LinearBackoff
|
|
486
486
|
*/
|
|
@@ -500,8 +500,8 @@
|
|
|
500
500
|
// internal
|
|
501
501
|
|
|
502
502
|
// module vars
|
|
503
|
-
const { assertPositive, assertString, assertFunction, assertNumber } =
|
|
504
|
-
const { isNil } =
|
|
503
|
+
const { assertPositive, assertString, assertFunction, assertNumber } = L$1;
|
|
504
|
+
const { isNil } = o$1;
|
|
505
505
|
const TaskTimoutFlag = '!#@%$&^*';
|
|
506
506
|
|
|
507
507
|
/**
|
|
@@ -566,7 +566,7 @@
|
|
|
566
566
|
|
|
567
567
|
/**
|
|
568
568
|
* Sets the retry attempts to be infinite by setting max retries to maximum safe integer.
|
|
569
|
-
* @returns {
|
|
569
|
+
* @returns {this} The retrier instance for chaining.
|
|
570
570
|
*/
|
|
571
571
|
infinite () {
|
|
572
572
|
this._maxRetries = Infinity;
|
|
@@ -761,7 +761,7 @@
|
|
|
761
761
|
* Sets the timeout duration for each Task execution.
|
|
762
762
|
* 1. must > 0
|
|
763
763
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
764
|
-
* @returns {
|
|
764
|
+
* @returns {this} The retrier instance for chaining.
|
|
765
765
|
*/
|
|
766
766
|
taskTimeout (timeout) {
|
|
767
767
|
assertPositive(timeout, 'timeout');
|
|
@@ -774,7 +774,7 @@
|
|
|
774
774
|
* 1. <= 0 - no timeout
|
|
775
775
|
* 2. \> 0 - timeout duration in milliseconds
|
|
776
776
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
777
|
-
* @returns {
|
|
777
|
+
* @returns {this} The retrier instance for chaining.
|
|
778
778
|
*/
|
|
779
779
|
timeout (timeout) {
|
|
780
780
|
assertNumber(timeout, 'timeout');
|
|
@@ -782,6 +782,15 @@
|
|
|
782
782
|
return this
|
|
783
783
|
}
|
|
784
784
|
|
|
785
|
+
/**
|
|
786
|
+
* Disables the timeout for the retrier.
|
|
787
|
+
* @returns {this} The retrier instance for chaining.
|
|
788
|
+
*/
|
|
789
|
+
notimeout () {
|
|
790
|
+
this._timeout = 0;
|
|
791
|
+
return this
|
|
792
|
+
}
|
|
793
|
+
|
|
785
794
|
/**
|
|
786
795
|
* Sets the task function to be retried.
|
|
787
796
|
* @param {Function} task - The function to be executed and retried on failure.
|
|
@@ -831,8 +840,18 @@
|
|
|
831
840
|
let lastError = null;
|
|
832
841
|
// @ts-ignore
|
|
833
842
|
this.emit(Event.Start, startAt);
|
|
834
|
-
this._taskingFlag =
|
|
843
|
+
this._taskingFlag = Y.defer();
|
|
835
844
|
let latency = null;
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* DO NOT worry about "while(true)", we will not be trapped in an infinite loop.
|
|
848
|
+
*
|
|
849
|
+
* "async" keyword ensures:
|
|
850
|
+
* 1. call start(), will enfore the first loop executed
|
|
851
|
+
* 2. when first "await" is encountered, "while(true)" loop hanged to wait
|
|
852
|
+
* 3. "async" will return a Promise when "while(true)" loop hanged
|
|
853
|
+
* 4. Returned "async" wrapper Promise, it is NOT "this._taskingFlag.promise"
|
|
854
|
+
*/
|
|
836
855
|
while (true) {
|
|
837
856
|
// need to stop?
|
|
838
857
|
if (this._breakFlag != null) {
|
|
@@ -861,7 +880,7 @@
|
|
|
861
880
|
const nextDelay = this._policy.generate(this._currentRetries);
|
|
862
881
|
try {
|
|
863
882
|
try {
|
|
864
|
-
await
|
|
883
|
+
await Y.timeout(task.execute(this._currentRetries, latency, nextDelay), this._taskTimeout, TaskTimoutFlag);
|
|
865
884
|
} catch (err) {
|
|
866
885
|
// @ts-ignore
|
|
867
886
|
if (err.message === TaskTimoutFlag) {
|
|
@@ -902,7 +921,7 @@
|
|
|
902
921
|
this._taskingFlag.reject(lastError ?? new Error(`Max Retries Exceeded, Retring ${this._currentRetries} times > max ${this._maxRetries}`));
|
|
903
922
|
break
|
|
904
923
|
}
|
|
905
|
-
await
|
|
924
|
+
await Y.delay(nextDelay);
|
|
906
925
|
}
|
|
907
926
|
this._taskingFlag.promise.finally(() => {
|
|
908
927
|
this.resetRetryPolicy();
|
|
@@ -929,7 +948,7 @@
|
|
|
929
948
|
// @ts-ignore
|
|
930
949
|
return this._breakFlag.promise
|
|
931
950
|
}
|
|
932
|
-
this._breakFlag =
|
|
951
|
+
this._breakFlag = Y.defer();
|
|
933
952
|
this._breakReason = reason ?? new Error('Manually Stop');
|
|
934
953
|
// @ts-ignore
|
|
935
954
|
this.once(Event.Completed, () => {
|