@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/esm/index-dev.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var t$1={constructorName:
|
|
1
|
+
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;
|
|
2
2
|
|
|
3
3
|
// module vars
|
|
4
4
|
const DefaultMinInterval = 50;
|
|
@@ -8,8 +8,8 @@ const DefaultMaxRetries = 3;
|
|
|
8
8
|
// internal
|
|
9
9
|
|
|
10
10
|
// module vars
|
|
11
|
-
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } =
|
|
12
|
-
const { isNumber } =
|
|
11
|
+
const { assertPositive: assertPositive$5, assertNotNegative: assertNotNegative$3 } = L$1;
|
|
12
|
+
const { isNumber } = o$1;
|
|
13
13
|
|
|
14
14
|
class Policy {
|
|
15
15
|
/**
|
|
@@ -150,7 +150,7 @@ class Policy {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
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:
|
|
153
|
+
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}}
|
|
154
154
|
|
|
155
155
|
const Start = 'start'; // retry started
|
|
156
156
|
const Stop = 'stop'; // retry stopped
|
|
@@ -177,7 +177,7 @@ var Event = {
|
|
|
177
177
|
// 3rd
|
|
178
178
|
// internal
|
|
179
179
|
// module vars
|
|
180
|
-
const { assertPositive: assertPositive$4 } =
|
|
180
|
+
const { assertPositive: assertPositive$4 } = L$1;
|
|
181
181
|
class FixedIntervalPolicy extends Policy {
|
|
182
182
|
/**
|
|
183
183
|
* Creates a fixed interval retry policy with the specified interval.
|
|
@@ -212,7 +212,7 @@ class FixedIntervalPolicy extends Policy {
|
|
|
212
212
|
// 3rd
|
|
213
213
|
// internal
|
|
214
214
|
// module vars
|
|
215
|
-
const { assertPositive: assertPositive$3 } =
|
|
215
|
+
const { assertPositive: assertPositive$3 } = L$1;
|
|
216
216
|
class FixedIncreasePolicy extends Policy {
|
|
217
217
|
/**
|
|
218
218
|
* each call to _next() increases the interval by "increasement".
|
|
@@ -249,7 +249,7 @@ class FixedIncreasePolicy extends Policy {
|
|
|
249
249
|
// 3rd
|
|
250
250
|
// internal
|
|
251
251
|
// module vars
|
|
252
|
-
const { assertPositive: assertPositive$2 } =
|
|
252
|
+
const { assertPositive: assertPositive$2 } = L$1;
|
|
253
253
|
|
|
254
254
|
class FactoreIncreasePolicy extends Policy {
|
|
255
255
|
/**
|
|
@@ -293,7 +293,7 @@ class FactoreIncreasePolicy extends Policy {
|
|
|
293
293
|
// 3rd
|
|
294
294
|
// internal
|
|
295
295
|
// module vars
|
|
296
|
-
const { assertPositive: assertPositive$1 } =
|
|
296
|
+
const { assertPositive: assertPositive$1 } = L$1;
|
|
297
297
|
|
|
298
298
|
class ShuttlePolicy extends Policy {
|
|
299
299
|
/**
|
|
@@ -343,7 +343,7 @@ class ShuttlePolicy extends Policy {
|
|
|
343
343
|
*/
|
|
344
344
|
|
|
345
345
|
// module vars
|
|
346
|
-
const { assertNotNil, assertFunction: assertFunction$1 } =
|
|
346
|
+
const { assertNotNil, assertFunction: assertFunction$1 } = L$1;
|
|
347
347
|
class Task {
|
|
348
348
|
/**
|
|
349
349
|
* Creates a new Task instance.
|
|
@@ -436,7 +436,7 @@ class AlwaysTask extends Task {
|
|
|
436
436
|
|
|
437
437
|
// internal
|
|
438
438
|
// module vars
|
|
439
|
-
const { assertNotNegative: assertNotNegative$2 } =
|
|
439
|
+
const { assertNotNegative: assertNotNegative$2 } = L$1;
|
|
440
440
|
/**
|
|
441
441
|
* @class FixedBackoff
|
|
442
442
|
*/
|
|
@@ -456,7 +456,7 @@ class FixedBackoff extends FixedIntervalPolicy {
|
|
|
456
456
|
// internal
|
|
457
457
|
|
|
458
458
|
// module vars
|
|
459
|
-
const { assertNotNegative: assertNotNegative$1 } =
|
|
459
|
+
const { assertNotNegative: assertNotNegative$1 } = L$1;
|
|
460
460
|
/**
|
|
461
461
|
* @class ExponentialBackoffPolicy
|
|
462
462
|
*/
|
|
@@ -474,7 +474,7 @@ class ExponentialBackoffPolicy extends FactoreIncreasePolicy {
|
|
|
474
474
|
|
|
475
475
|
// internal
|
|
476
476
|
// module vars
|
|
477
|
-
const { assertNotNegative } =
|
|
477
|
+
const { assertNotNegative } = L$1;
|
|
478
478
|
/**
|
|
479
479
|
* @class LinearBackoff
|
|
480
480
|
*/
|
|
@@ -494,8 +494,8 @@ class LinearBackoff extends FixedIncreasePolicy {
|
|
|
494
494
|
// internal
|
|
495
495
|
|
|
496
496
|
// module vars
|
|
497
|
-
const { assertPositive, assertString, assertFunction, assertNumber } =
|
|
498
|
-
const { isNil } =
|
|
497
|
+
const { assertPositive, assertString, assertFunction, assertNumber } = L$1;
|
|
498
|
+
const { isNil } = o$1;
|
|
499
499
|
const TaskTimoutFlag = '!#@%$&^*';
|
|
500
500
|
|
|
501
501
|
/**
|
|
@@ -560,7 +560,7 @@ class Retrier {
|
|
|
560
560
|
|
|
561
561
|
/**
|
|
562
562
|
* Sets the retry attempts to be infinite by setting max retries to maximum safe integer.
|
|
563
|
-
* @returns {
|
|
563
|
+
* @returns {this} The retrier instance for chaining.
|
|
564
564
|
*/
|
|
565
565
|
infinite () {
|
|
566
566
|
this._maxRetries = Infinity;
|
|
@@ -755,7 +755,7 @@ class Retrier {
|
|
|
755
755
|
* Sets the timeout duration for each Task execution.
|
|
756
756
|
* 1. must > 0
|
|
757
757
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
758
|
-
* @returns {
|
|
758
|
+
* @returns {this} The retrier instance for chaining.
|
|
759
759
|
*/
|
|
760
760
|
taskTimeout (timeout) {
|
|
761
761
|
assertPositive(timeout, 'timeout');
|
|
@@ -768,7 +768,7 @@ class Retrier {
|
|
|
768
768
|
* 1. <= 0 - no timeout
|
|
769
769
|
* 2. \> 0 - timeout duration in milliseconds
|
|
770
770
|
* @param {number} timeout - The timeout duration in milliseconds.
|
|
771
|
-
* @returns {
|
|
771
|
+
* @returns {this} The retrier instance for chaining.
|
|
772
772
|
*/
|
|
773
773
|
timeout (timeout) {
|
|
774
774
|
assertNumber(timeout, 'timeout');
|
|
@@ -776,6 +776,15 @@ class Retrier {
|
|
|
776
776
|
return this
|
|
777
777
|
}
|
|
778
778
|
|
|
779
|
+
/**
|
|
780
|
+
* Disables the timeout for the retrier.
|
|
781
|
+
* @returns {this} The retrier instance for chaining.
|
|
782
|
+
*/
|
|
783
|
+
notimeout () {
|
|
784
|
+
this._timeout = 0;
|
|
785
|
+
return this
|
|
786
|
+
}
|
|
787
|
+
|
|
779
788
|
/**
|
|
780
789
|
* Sets the task function to be retried.
|
|
781
790
|
* @param {Function} task - The function to be executed and retried on failure.
|
|
@@ -825,8 +834,18 @@ class Retrier {
|
|
|
825
834
|
let lastError = null;
|
|
826
835
|
// @ts-ignore
|
|
827
836
|
this.emit(Event.Start, startAt);
|
|
828
|
-
this._taskingFlag =
|
|
837
|
+
this._taskingFlag = Y.defer();
|
|
829
838
|
let latency = null;
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* DO NOT worry about "while(true)", we will not be trapped in an infinite loop.
|
|
842
|
+
*
|
|
843
|
+
* "async" keyword ensures:
|
|
844
|
+
* 1. call start(), will enfore the first loop executed
|
|
845
|
+
* 2. when first "await" is encountered, "while(true)" loop hanged to wait
|
|
846
|
+
* 3. "async" will return a Promise when "while(true)" loop hanged
|
|
847
|
+
* 4. Returned "async" wrapper Promise, it is NOT "this._taskingFlag.promise"
|
|
848
|
+
*/
|
|
830
849
|
while (true) {
|
|
831
850
|
// need to stop?
|
|
832
851
|
if (this._breakFlag != null) {
|
|
@@ -855,7 +874,7 @@ class Retrier {
|
|
|
855
874
|
const nextDelay = this._policy.generate(this._currentRetries);
|
|
856
875
|
try {
|
|
857
876
|
try {
|
|
858
|
-
await
|
|
877
|
+
await Y.timeout(task.execute(this._currentRetries, latency, nextDelay), this._taskTimeout, TaskTimoutFlag);
|
|
859
878
|
} catch (err) {
|
|
860
879
|
// @ts-ignore
|
|
861
880
|
if (err.message === TaskTimoutFlag) {
|
|
@@ -896,7 +915,7 @@ class Retrier {
|
|
|
896
915
|
this._taskingFlag.reject(lastError ?? new Error(`Max Retries Exceeded, Retring ${this._currentRetries} times > max ${this._maxRetries}`));
|
|
897
916
|
break
|
|
898
917
|
}
|
|
899
|
-
await
|
|
918
|
+
await Y.delay(nextDelay);
|
|
900
919
|
}
|
|
901
920
|
this._taskingFlag.promise.finally(() => {
|
|
902
921
|
this.resetRetryPolicy();
|
|
@@ -923,7 +942,7 @@ class Retrier {
|
|
|
923
942
|
// @ts-ignore
|
|
924
943
|
return this._breakFlag.promise
|
|
925
944
|
}
|
|
926
|
-
this._breakFlag =
|
|
945
|
+
this._breakFlag = Y.defer();
|
|
927
946
|
this._breakReason = reason ?? new Error('Manually Stop');
|
|
928
947
|
// @ts-ignore
|
|
929
948
|
this.once(Event.Completed, () => {
|