@creejs/commons-retrier 2.1.10 → 2.1.11
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/dist/cjs/index-dev.cjs +70 -64
- 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 +70 -64
- 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 +70 -64
- 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 +1 -1
- package/types/policy.d.ts +0 -1
- package/types/retrier.d.ts +6 -13
- package/types/task.d.ts +2 -1
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: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)
|
|
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.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;
|
|
@@ -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)}`)}};new TextDecoder,new TextEncoder
|
|
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;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
|
|
@@ -340,6 +340,63 @@ class ShuttlePolicy extends Policy {
|
|
|
340
340
|
}
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
+
// internal
|
|
344
|
+
// module vars
|
|
345
|
+
const { assertNotNegative: assertNotNegative$2 } = L$1;
|
|
346
|
+
/**
|
|
347
|
+
* @class FixedBackoff
|
|
348
|
+
*/
|
|
349
|
+
class FixedBackoff extends FixedIntervalPolicy {
|
|
350
|
+
/**
|
|
351
|
+
* Creates a fixed backoff policy with optional jitter.
|
|
352
|
+
* @param {number} fixedInterval - The fixed interval between retries in milliseconds.
|
|
353
|
+
* @param {number} [jitter=500] - The maximum random jitter to add to the interval in milliseconds.
|
|
354
|
+
*/
|
|
355
|
+
constructor (fixedInterval, jitter = 500) {
|
|
356
|
+
super(fixedInterval);
|
|
357
|
+
assertNotNegative$2(jitter, 'jitter');
|
|
358
|
+
this._jitter = jitter ?? 500;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// internal
|
|
363
|
+
|
|
364
|
+
// module vars
|
|
365
|
+
const { assertNotNegative: assertNotNegative$1 } = L$1;
|
|
366
|
+
/**
|
|
367
|
+
* @class ExponentialBackoffPolicy
|
|
368
|
+
*/
|
|
369
|
+
class ExponentialBackoffPolicy extends FactoreIncreasePolicy {
|
|
370
|
+
/**
|
|
371
|
+
* Creates an exponential backoff policy with optional jitter.
|
|
372
|
+
* @param {number} [jitter=500] - Maximum jitter in milliseconds to add to backoff intervals.
|
|
373
|
+
*/
|
|
374
|
+
constructor (jitter = 500) {
|
|
375
|
+
super(2);
|
|
376
|
+
assertNotNegative$1(jitter, 'jitter');
|
|
377
|
+
this._jitter = jitter ?? 500;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// internal
|
|
382
|
+
// module vars
|
|
383
|
+
const { assertNotNegative } = L$1;
|
|
384
|
+
/**
|
|
385
|
+
* @class LinearBackoff
|
|
386
|
+
*/
|
|
387
|
+
class LinearBackoff extends FixedIncreasePolicy {
|
|
388
|
+
/**
|
|
389
|
+
* Creates a linear backoff policy with optional jitter.
|
|
390
|
+
* @param {number} increasement - The base increasement value for backoff.
|
|
391
|
+
* @param {number} [jitter=500] - The maximum jitter value to add to backoff (default: 500).
|
|
392
|
+
*/
|
|
393
|
+
constructor (increasement, jitter = 500) {
|
|
394
|
+
super(increasement);
|
|
395
|
+
assertNotNegative(jitter, 'jitter');
|
|
396
|
+
this._jitter = jitter ?? 500;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
343
400
|
// owned
|
|
344
401
|
|
|
345
402
|
/**
|
|
@@ -360,6 +417,7 @@ class Task {
|
|
|
360
417
|
this.retrier = retrier;
|
|
361
418
|
this.task = task;
|
|
362
419
|
this.result = undefined;
|
|
420
|
+
/** @type {Error|undefined} */
|
|
363
421
|
this.error = undefined;
|
|
364
422
|
}
|
|
365
423
|
|
|
@@ -386,7 +444,7 @@ class Task {
|
|
|
386
444
|
this.result = await this.task(retries, latence, nextInterval);
|
|
387
445
|
this.error = undefined;
|
|
388
446
|
} catch (e) {
|
|
389
|
-
this.error = e;
|
|
447
|
+
this.error = e instanceof Error ? e : new Error(String(e));
|
|
390
448
|
}
|
|
391
449
|
}
|
|
392
450
|
|
|
@@ -439,63 +497,11 @@ class AlwaysTask extends Task {
|
|
|
439
497
|
}
|
|
440
498
|
|
|
441
499
|
// internal
|
|
442
|
-
// module vars
|
|
443
|
-
const { assertNotNegative: assertNotNegative$2 } = L$1;
|
|
444
|
-
/**
|
|
445
|
-
* @class FixedBackoff
|
|
446
|
-
*/
|
|
447
|
-
class FixedBackoff extends FixedIntervalPolicy {
|
|
448
|
-
/**
|
|
449
|
-
* Creates a fixed backoff policy with optional jitter.
|
|
450
|
-
* @param {number} fixedInterval - The fixed interval between retries in milliseconds.
|
|
451
|
-
* @param {number} [jitter=500] - The maximum random jitter to add to the interval in milliseconds.
|
|
452
|
-
*/
|
|
453
|
-
constructor (fixedInterval, jitter = 500) {
|
|
454
|
-
super(fixedInterval);
|
|
455
|
-
assertNotNegative$2(jitter, 'jitter');
|
|
456
|
-
this._jitter = jitter ?? 500;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
// internal
|
|
461
|
-
|
|
462
|
-
// module vars
|
|
463
|
-
const { assertNotNegative: assertNotNegative$1 } = L$1;
|
|
464
|
-
/**
|
|
465
|
-
* @class ExponentialBackoffPolicy
|
|
466
|
-
*/
|
|
467
|
-
class ExponentialBackoffPolicy extends FactoreIncreasePolicy {
|
|
468
|
-
/**
|
|
469
|
-
* Creates an exponential backoff policy with optional jitter.
|
|
470
|
-
* @param {number} [jitter=500] - Maximum jitter in milliseconds to add to backoff intervals.
|
|
471
|
-
*/
|
|
472
|
-
constructor (jitter = 500) {
|
|
473
|
-
super(2);
|
|
474
|
-
assertNotNegative$1(jitter, 'jitter');
|
|
475
|
-
this._jitter = jitter ?? 500;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
500
|
|
|
479
|
-
// internal
|
|
480
|
-
// module vars
|
|
481
|
-
const { assertNotNegative } = L$1;
|
|
482
501
|
/**
|
|
483
|
-
* @
|
|
502
|
+
* @typedef {import('./policy.js').default} Policy
|
|
503
|
+
* @typedef {import('@creejs/commons-lang/lib/promise-utils.js').Deferred} Deferred
|
|
484
504
|
*/
|
|
485
|
-
class LinearBackoff extends FixedIncreasePolicy {
|
|
486
|
-
/**
|
|
487
|
-
* Creates a linear backoff policy with optional jitter.
|
|
488
|
-
* @param {number} increasement - The base increasement value for backoff.
|
|
489
|
-
* @param {number} [jitter=500] - The maximum jitter value to add to backoff (default: 500).
|
|
490
|
-
*/
|
|
491
|
-
constructor (increasement, jitter = 500) {
|
|
492
|
-
super(increasement);
|
|
493
|
-
assertNotNegative(jitter, 'jitter');
|
|
494
|
-
this._jitter = jitter ?? 500;
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
// internal
|
|
499
505
|
|
|
500
506
|
// module vars
|
|
501
507
|
const { assertPositive, assertString, assertFunction, assertNumber } = L$1;
|
|
@@ -531,13 +537,13 @@ class Retrier {
|
|
|
531
537
|
|
|
532
538
|
/**
|
|
533
539
|
* A Deferred Object as Singal to prevent Task concurrent start
|
|
534
|
-
* @type {
|
|
540
|
+
* @type {Deferred|undefined}
|
|
535
541
|
*/
|
|
536
542
|
this._taskingFlag = undefined;
|
|
537
543
|
|
|
538
544
|
/**
|
|
539
545
|
* A Deferred Object as Singal to prevent Task concurrent stop
|
|
540
|
-
* @type {
|
|
546
|
+
* @type {Deferred|undefined}
|
|
541
547
|
*/
|
|
542
548
|
this._breakFlag = undefined;
|
|
543
549
|
/**
|
|
@@ -835,7 +841,8 @@ class Retrier {
|
|
|
835
841
|
return this._taskingFlag.promise
|
|
836
842
|
}
|
|
837
843
|
const startAt = Date.now();
|
|
838
|
-
|
|
844
|
+
/** @type {Error|undefined} */
|
|
845
|
+
let lastError;
|
|
839
846
|
// @ts-ignore
|
|
840
847
|
this.emit(Event.Start, startAt);
|
|
841
848
|
this._taskingFlag = Y.defer();
|
|
@@ -853,7 +860,7 @@ class Retrier {
|
|
|
853
860
|
while (true) {
|
|
854
861
|
// need to stop?
|
|
855
862
|
if (this._breakFlag != null) {
|
|
856
|
-
this._taskingFlag.reject(this._breakReason);
|
|
863
|
+
this._taskingFlag.reject(this._breakReason ?? new Error('Have Been Broken'));
|
|
857
864
|
break
|
|
858
865
|
}
|
|
859
866
|
|
|
@@ -947,14 +954,13 @@ class Retrier {
|
|
|
947
954
|
return this._breakFlag.promise
|
|
948
955
|
}
|
|
949
956
|
this._breakFlag = Y.defer();
|
|
957
|
+
/** @type {Error|undefined} */
|
|
950
958
|
this._breakReason = reason ?? new Error('Manually Stop');
|
|
951
959
|
// @ts-ignore
|
|
952
960
|
this.once(Event.Completed, () => {
|
|
953
|
-
|
|
954
|
-
this._breakFlag.resolve();
|
|
961
|
+
this._breakFlag?.resolve();
|
|
955
962
|
});
|
|
956
963
|
|
|
957
|
-
// @ts-ignore
|
|
958
964
|
this._breakFlag.promise.finally(() => {
|
|
959
965
|
this._breakFlag = undefined;
|
|
960
966
|
this._breakReason = undefined;
|