@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/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Commons-retrier Library provides a Retrier to:
|
|
|
12
12
|
|
|
13
13
|
- **Intervals**
|
|
14
14
|
|
|
15
|
-
After a retrying, what delay should we
|
|
15
|
+
After a retrying, what delay should we wait for?
|
|
16
16
|
|
|
17
17
|
- **Minimum Interval**
|
|
18
18
|
- **Maximum Interval**
|
|
@@ -21,6 +21,9 @@ Commons-retrier Library provides a Retrier to:
|
|
|
21
21
|
- **Fixed Increase Policy**
|
|
22
22
|
- **Factor Increase Policy**
|
|
23
23
|
- **Shuttle Policy**
|
|
24
|
+
- **Exponential Backoff with Jitter**
|
|
25
|
+
- **Fixed Backoff with Jitter**
|
|
26
|
+
- **Linear Backoff with Jitter**
|
|
24
27
|
|
|
25
28
|
- **Timeout**
|
|
26
29
|
|
|
@@ -82,7 +85,7 @@ npm intall @creejs/commons-retrier
|
|
|
82
85
|
|
|
83
86
|
2. always(task)
|
|
84
87
|
|
|
85
|
-
```
|
|
88
|
+
```javascript
|
|
86
89
|
|
|
87
90
|
const { Retrier } = require('@creejs/commons-retrier')
|
|
88
91
|
|
package/dist/cjs/index-dev.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var t$1={constructorName:
|
|
5
|
+
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;
|
|
6
6
|
|
|
7
7
|
// module vars
|
|
8
8
|
const DefaultMinInterval = 50;
|
|
@@ -12,8 +12,8 @@ const DefaultMaxRetries = 3;
|
|
|
12
12
|
// internal
|
|
13
13
|
|
|
14
14
|
// module vars
|
|
15
|
-
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } =
|
|
16
|
-
const { isNumber } =
|
|
15
|
+
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } = L$1;
|
|
16
|
+
const { isNumber } = o$1;
|
|
17
17
|
|
|
18
18
|
class Policy {
|
|
19
19
|
/**
|
|
@@ -154,7 +154,7 @@ class Policy {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
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:
|
|
157
|
+
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}}
|
|
158
158
|
|
|
159
159
|
const Start = 'start'; // retry started
|
|
160
160
|
const Stop = 'stop'; // retry stopped
|
|
@@ -181,7 +181,7 @@ var Event = {
|
|
|
181
181
|
// 3rd
|
|
182
182
|
// internal
|
|
183
183
|
// module vars
|
|
184
|
-
const { assertPositive: assertPositive$4 } =
|
|
184
|
+
const { assertPositive: assertPositive$4 } = L$1;
|
|
185
185
|
class FixedIntervalPolicy extends Policy {
|
|
186
186
|
/**
|
|
187
187
|
* Creates a fixed interval retry policy with the specified interval.
|
|
@@ -216,7 +216,7 @@ class FixedIntervalPolicy extends Policy {
|
|
|
216
216
|
// 3rd
|
|
217
217
|
// internal
|
|
218
218
|
// module vars
|
|
219
|
-
const { assertPositive: assertPositive$3 } =
|
|
219
|
+
const { assertPositive: assertPositive$3 } = L$1;
|
|
220
220
|
class FixedIncreasePolicy extends Policy {
|
|
221
221
|
/**
|
|
222
222
|
* each call to _next() increases the interval by "increasement".
|
|
@@ -253,7 +253,7 @@ class FixedIncreasePolicy extends Policy {
|
|
|
253
253
|
// 3rd
|
|
254
254
|
// internal
|
|
255
255
|
// module vars
|
|
256
|
-
const { assertPositive: assertPositive$2 } =
|
|
256
|
+
const { assertPositive: assertPositive$2 } = L$1;
|
|
257
257
|
|
|
258
258
|
class FactoreIncreasePolicy extends Policy {
|
|
259
259
|
/**
|
|
@@ -297,7 +297,7 @@ class FactoreIncreasePolicy extends Policy {
|
|
|
297
297
|
// 3rd
|
|
298
298
|
// internal
|
|
299
299
|
// module vars
|
|
300
|
-
const { assertPositive: assertPositive$1 } =
|
|
300
|
+
const { assertPositive: assertPositive$1 } = L$1;
|
|
301
301
|
|
|
302
302
|
class ShuttlePolicy extends Policy {
|
|
303
303
|
/**
|
|
@@ -347,7 +347,7 @@ class ShuttlePolicy extends Policy {
|
|
|
347
347
|
*/
|
|
348
348
|
|
|
349
349
|
// module vars
|
|
350
|
-
const { assertNotNil, assertFunction: assertFunction$1 } =
|
|
350
|
+
const { assertNotNil, assertFunction: assertFunction$1 } = L$1;
|
|
351
351
|
class Task {
|
|
352
352
|
/**
|
|
353
353
|
* Creates a new Task instance.
|
|
@@ -440,7 +440,7 @@ class AlwaysTask extends Task {
|
|
|
440
440
|
|
|
441
441
|
// internal
|
|
442
442
|
// module vars
|
|
443
|
-
const { assertNotNegative: assertNotNegative$2 } =
|
|
443
|
+
const { assertNotNegative: assertNotNegative$2 } = L$1;
|
|
444
444
|
/**
|
|
445
445
|
* @class FixedBackoff
|
|
446
446
|
*/
|
|
@@ -460,7 +460,7 @@ class FixedBackoff extends FixedIntervalPolicy {
|
|
|
460
460
|
// internal
|
|
461
461
|
|
|
462
462
|
// module vars
|
|
463
|
-
const { assertNotNegative: assertNotNegative$1 } =
|
|
463
|
+
const { assertNotNegative: assertNotNegative$1 } = L$1;
|
|
464
464
|
/**
|
|
465
465
|
* @class ExponentialBackoffPolicy
|
|
466
466
|
*/
|
|
@@ -478,7 +478,7 @@ class ExponentialBackoffPolicy extends FactoreIncreasePolicy {
|
|
|
478
478
|
|
|
479
479
|
// internal
|
|
480
480
|
// module vars
|
|
481
|
-
const { assertNotNegative } =
|
|
481
|
+
const { assertNotNegative } = L$1;
|
|
482
482
|
/**
|
|
483
483
|
* @class LinearBackoff
|
|
484
484
|
*/
|
|
@@ -498,8 +498,8 @@ class LinearBackoff extends FixedIncreasePolicy {
|
|
|
498
498
|
// internal
|
|
499
499
|
|
|
500
500
|
// module vars
|
|
501
|
-
const { assertPositive, assertString, assertFunction, assertNumber } =
|
|
502
|
-
const { isNil } =
|
|
501
|
+
const { assertPositive, assertString, assertFunction, assertNumber } = L$1;
|
|
502
|
+
const { isNil } = o$1;
|
|
503
503
|
const TaskTimoutFlag = '!#@%$&^*';
|
|
504
504
|
|
|
505
505
|
/**
|
|
@@ -564,7 +564,7 @@ class Retrier {
|
|
|
564
564
|
|
|
565
565
|
/**
|
|
566
566
|
* Sets the retry attempts to be infinite by setting max retries to maximum safe integer.
|
|
567
|
-
* @returns {
|
|
567
|
+
* @returns {this} The retrier instance for chaining.
|
|
568
568
|
*/
|
|
569
569
|
infinite () {
|
|
570
570
|
this._maxRetries = Infinity;
|
|
@@ -759,7 +759,7 @@ class Retrier {
|
|
|
759
759
|
* Sets the timeout duration for each Task execution.
|
|
760
760
|
* 1. must > 0
|
|
761
761
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
762
|
-
* @returns {
|
|
762
|
+
* @returns {this} The retrier instance for chaining.
|
|
763
763
|
*/
|
|
764
764
|
taskTimeout (timeout) {
|
|
765
765
|
assertPositive(timeout, 'timeout');
|
|
@@ -772,7 +772,7 @@ class Retrier {
|
|
|
772
772
|
* 1. <= 0 - no timeout
|
|
773
773
|
* 2. \> 0 - timeout duration in milliseconds
|
|
774
774
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
775
|
-
* @returns {
|
|
775
|
+
* @returns {this} The retrier instance for chaining.
|
|
776
776
|
*/
|
|
777
777
|
timeout (timeout) {
|
|
778
778
|
assertNumber(timeout, 'timeout');
|
|
@@ -780,6 +780,15 @@ class Retrier {
|
|
|
780
780
|
return this
|
|
781
781
|
}
|
|
782
782
|
|
|
783
|
+
/**
|
|
784
|
+
* Disables the timeout for the retrier.
|
|
785
|
+
* @returns {this} The retrier instance for chaining.
|
|
786
|
+
*/
|
|
787
|
+
notimeout () {
|
|
788
|
+
this._timeout = 0;
|
|
789
|
+
return this
|
|
790
|
+
}
|
|
791
|
+
|
|
783
792
|
/**
|
|
784
793
|
* Sets the task function to be retried.
|
|
785
794
|
* @param {Function} task - The function to be executed and retried on failure.
|
|
@@ -829,8 +838,18 @@ class Retrier {
|
|
|
829
838
|
let lastError = null;
|
|
830
839
|
// @ts-ignore
|
|
831
840
|
this.emit(Event.Start, startAt);
|
|
832
|
-
this._taskingFlag =
|
|
841
|
+
this._taskingFlag = Y.defer();
|
|
833
842
|
let latency = null;
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* DO NOT worry about "while(true)", we will not be trapped in an infinite loop.
|
|
846
|
+
*
|
|
847
|
+
* "async" keyword ensures:
|
|
848
|
+
* 1. call start(), will enfore the first loop executed
|
|
849
|
+
* 2. when first "await" is encountered, "while(true)" loop hanged to wait
|
|
850
|
+
* 3. "async" will return a Promise when "while(true)" loop hanged
|
|
851
|
+
* 4. Returned "async" wrapper Promise, it is NOT "this._taskingFlag.promise"
|
|
852
|
+
*/
|
|
834
853
|
while (true) {
|
|
835
854
|
// need to stop?
|
|
836
855
|
if (this._breakFlag != null) {
|
|
@@ -859,7 +878,7 @@ class Retrier {
|
|
|
859
878
|
const nextDelay = this._policy.generate(this._currentRetries);
|
|
860
879
|
try {
|
|
861
880
|
try {
|
|
862
|
-
await
|
|
881
|
+
await Y.timeout(task.execute(this._currentRetries, latency, nextDelay), this._taskTimeout, TaskTimoutFlag);
|
|
863
882
|
} catch (err) {
|
|
864
883
|
// @ts-ignore
|
|
865
884
|
if (err.message === TaskTimoutFlag) {
|
|
@@ -900,7 +919,7 @@ class Retrier {
|
|
|
900
919
|
this._taskingFlag.reject(lastError ?? new Error(`Max Retries Exceeded, Retring ${this._currentRetries} times > max ${this._maxRetries}`));
|
|
901
920
|
break
|
|
902
921
|
}
|
|
903
|
-
await
|
|
922
|
+
await Y.delay(nextDelay);
|
|
904
923
|
}
|
|
905
924
|
this._taskingFlag.promise.finally(() => {
|
|
906
925
|
this.resetRetryPolicy();
|
|
@@ -927,7 +946,7 @@ class Retrier {
|
|
|
927
946
|
// @ts-ignore
|
|
928
947
|
return this._breakFlag.promise
|
|
929
948
|
}
|
|
930
|
-
this._breakFlag =
|
|
949
|
+
this._breakFlag = Y.defer();
|
|
931
950
|
this._breakReason = reason ?? new Error('Manually Stop');
|
|
932
951
|
// @ts-ignore
|
|
933
952
|
this.once(Event.Completed, () => {
|