@altostra/core
Version:
Core library for shared types and logic
1 lines • 3.47 kB
JavaScript
;var __awaiter=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))((function(o,l){function n(e){try{a(i.next(e))}catch(e){l(e)}}function s(e){try{a(i.throw(e))}catch(e){l(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,s)}a((i=i.apply(e,t||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0}),exports.timeout=exports.delay=exports.whenAll=exports.runWithLimit=exports.pollWait=void 0;const AltoError_1=require("../../Errors/AltoError"),from_1=require("@reactivex/ix-es2015-cjs/iterable/from"),filter_1=require("@reactivex/ix-es2015-cjs/iterable/operators/filter"),map_1=require("@reactivex/ix-es2015-cjs/iterable/operators/map"),defaultPollWaitOptions={intervalMillisecs:5e3,maxTrials:1/0,timeoutMillisecs:1/0};function pollWait(e,t,r){return __awaiter(this,void 0,void 0,(function*(){const{intervalMillisecs:i,maxTrials:o,timeoutMillisecs:l}=validatePollOptions(Object.assign(Object.assign({},defaultPollWaitOptions),r));let n,s=!1;const a=new Promise(l<1/0?(e,t)=>{const r=setTimeout(()=>{s=!0,t(new AltoError_1.AltoError("The operation has timed out"))},l);n=()=>{clearTimeout(r),e(void 0)}}:e=>(n=()=>e(void 0),n)),u=yield Promise.race([a,function(){return __awaiter(this,void 0,void 0,(function*(){for(let r=0;!s&&r<=o;r++){const r=yield e();if(t(r))return r;s||(yield new Promise(e=>setTimeout(e,i)))}throw new AltoError_1.AltoError("Max polling trials have reached.")}))}()]);return null==n||n(),u}))}function validatePollOptions(e){let t;if(e.intervalMillisecs<=0?t="'intervalMillisecs' must be greater than zero":isNaN(e.intervalMillisecs)?t="'intervalMillisecs' must be a number":e.maxTrials<=0?t="'maxTrials' must be greater than zero":isNaN(e.maxTrials)&&(t="'maxTrials' must be a number"),e.timeoutMillisecs<=0?t="'timeoutMillisecs' must be greater than zero":isNaN(e.timeoutMillisecs)&&(t="'timeoutMillisecs' must be a number"),t)throw new AltoError_1.AltoError(t);return e}function runWithLimit(e,t){var r;return __awaiter(this,void 0,void 0,(function*(){let i=0,o=!1;const l=[],n=[],s=t[Symbol.iterator]();try{const t=Array.from({length:e},()=>function e(){return __awaiter(this,void 0,void 0,(function*(){try{if(o||l.length>0)return;const t=s.next();if(t.done)return void(o=!0);const r=i++;n[r]=yield t.value(),yield e()}catch(e){l.push(e)}}))}());if(yield Promise.all(t),0===l.length)return n;throw 1===l.length?l[0]:AltoError_1.AltoError.create("Multiple errors occurred in an async operation",{data:{errors:l}})}catch(e){throw yield Promise.resolve(null===(r=s.return)||void 0===r?void 0:r.call(s)).catch(e=>console.log("An error was thrown while ending actions iterable",e)),e}}))}function whenAll({promises:e,errorsHandler:t}){return __awaiter(this,void 0,void 0,(function*(){const r=yield Promise.allSettled(e),i=[...(0,from_1.from)(r).pipe((0,map_1.map)((e,t)=>({result:e,index:t})),(0,filter_1.filter)(e=>"rejected"===e.result.status),(0,map_1.map)(({result:e,index:t})=>({index:t,error:e.reason})))];return i.length>0&&(yield Promise.resolve(t(i))),[...(0,from_1.from)(r).pipe((0,map_1.map)(e=>"fulfilled"===e.status?e.value:void 0))]}))}function delay(e){return 0===e?Promise.resolve(void 0):new Promise(t=>setTimeout(t,e))}function timeout(e,t){return delay(e).then(()=>{throw AltoError_1.AltoError.create(t)})}exports.pollWait=pollWait,exports.runWithLimit=runWithLimit,exports.whenAll=whenAll,exports.delay=delay,exports.timeout=timeout;