!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("rxjs")):"function"==typeof define&&define.amd?define(["exports","rxjs"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).rxjsPoll={},e.rxjs)}(this,function(e,t){"use strict";const r="delay",n="retry",i={REPEAT:"repeat",INTERVAL:"interval"},o={CONSTANT:"constant",LINEAR:"linear",EXPONENTIAL:"exponential",RANDOM:"random",DYNAMIC:"dynamic"},l=t.of(!1),c={type:i.REPEAT,delay:{strategy:o.CONSTANT,time:1e3},retry:{strategy:o.EXPONENTIAL,time:1e3,limit:3,consecutiveOnly:!0},pause:{notifier:l,whenHidden:!0}};function s(e,t=0,r=!0){if(Array.isArray(e))return e.map(e=>s(e,t,r));let n=null!=e?e:t;return(Number.isNaN(n)||r&&!Number.isFinite(n))&&(n=t),Math.abs(n)}function u(e,t){return Math.floor(Math.random()*(t-e+1))+e}function a(e){return"function"==typeof e}function p(e){const t=function(e){var t,r,n,i,o,l,u,p,y,d,f,m,v,h,g,T;return{type:null!==(t=null==e?void 0:e.type)&&void 0!==t?t:c.type,delay:{strategy:null!==(n=null===(r=null==e?void 0:e.delay)||void 0===r?void 0:r.strategy)&&void 0!==n?n:c.delay.strategy,time:a(null===(i=null==e?void 0:e.delay)||void 0===i?void 0:i.time)?e.delay.time:s(null===(o=null==e?void 0:e.delay)||void 0===o?void 0:o.time,c.delay.time)},retry:{strategy:null!==(u=null===(l=null==e?void 0:e.retry)||void 0===l?void 0:l.strategy)&&void 0!==u?u:c.retry.strategy,time:a(null===(p=null==e?void 0:e.retry)||void 0===p?void 0:p.time)?e.retry.time:s(null===(y=null==e?void 0:e.retry)||void 0===y?void 0:y.time,c.retry.time),limit:s(null===(d=null==e?void 0:e.retry)||void 0===d?void 0:d.limit,c.retry.limit,!1),consecutiveOnly:null!==(m=null===(f=null==e?void 0:e.retry)||void 0===f?void 0:f.consecutiveOnly)&&void 0!==m?m:c.retry.consecutiveOnly},pause:{notifier:null!==(h=null===(v=null==e?void 0:e.pause)||void 0===v?void 0:v.notifier)&&void 0!==h?h:c.pause.notifier,whenHidden:null!==(T=null===(g=null==e?void 0:e.pause)||void 0===g?void 0:g.whenHidden)&&void 0!==T?T:c.pause.whenHidden}}}(e);return Object.assign(Object.assign({},t),{getDelayTime:y(r,t),getRetryTime:y(n,t)})}function y(e,t){const n=c[e].time,i=function(e,t){const{strategy:n,time:i}=t[e],o=e===r,l=t.retry.consecutiveOnly;let c,s;switch(s=o?"pollCount":l?"consecutiveRetryCount":"retryCount",n){case"constant":c=()=>i;break;case"linear":c=e=>e[s]*i;break;case"exponential":c=e=>Math.pow(2,e[s]-1)*i;break;case"random":c=()=>u(i[0],i[1]);break;case"dynamic":c=e=>i(e);break;default:throw new Error("rxjs-poll: Unknown strategy!")}return c}(e,t);return e=>{const t=s(i(Object.assign({},e)),n);return r=t,Array.isArray(r)?u(r[0],r[1]):r;var r}}function d(e){const{time:r,sourceStartTime:n=0,sourceEndTime:i=0}=e,o=r-(i-n)-100;return o>0?t.timer(o):t.of(0)}function f(e,r){return e.pipe(t.repeat({delay:()=>t.timer(r())}))}function m(e,r){return n=>n.pipe(t.retry({delay:n=>(e.incrementRetry(),e.isRetryLimit()?t.throwError(()=>n):(e.setError(n),t.timer(r?r():e.getRetryTime())))}),t.tap(()=>e.resetError()))}const v={createDirectPoller$:function(e,r){return f(t.of(null),()=>(r.incrementPoll(),r.getDelayTime())).pipe(t.switchMap(()=>e),m(r))},createCycleControl$:function(e,r){const n=new t.Subject;let i=0,o=0,l=0;return{poller$:f(t.of(null),()=>(r.incrementPoll(),i=r.getDelayTime(),i)).pipe(t.switchMap(()=>e.pipe(t.tap({subscribe:()=>{o=performance.now()},complete:()=>{l=performance.now(),n.next()},error:()=>{l=performance.now()}}))),m(r,()=>(i=r.getRetryTime(),n.next(),i))),cycler$:n.pipe(t.switchMap(()=>d({time:i,sourceStartTime:o,sourceEndTime:l})))}}},h={value:void 0,error:void 0,pollCount:0,retryCount:0,consecutiveRetryCount:0};class g{constructor(e){this._config=e,this._state=Object.assign({},h)}get config(){return this._config}get state(){return this._state}setValue(e){this._state.value=e}setError(e){this._state.error=e}resetError(){this._state.error=void 0,this._state.consecutiveRetryCount=0}incrementPoll(){this._state.pollCount+=1}incrementRetry(){this._state.retryCount+=1,this._state.consecutiveRetryCount+=1}isRetryLimit(){const e=this._config.retry.consecutiveOnly?"consecutiveRetryCount":"retryCount";return this._state[e]>this._config.retry.limit}getDelayTime(){return this._config.getDelayTime(this._state)}getRetryTime(){return this._config.getRetryTime(this._state)}}const T={createDirectPoller$:function(e,t){return f(e,()=>(t.incrementPoll(),t.getDelayTime())).pipe(m(t))},createCycleControl$:function(e,r){const n=new t.Subject;let i=0;return{poller$:f(e.pipe(t.tap({complete:()=>{r.incrementPoll(),i=r.getDelayTime(),n.next()}})),()=>i).pipe(m(r,()=>(i=r.getRetryTime(),n.next(),i))),cycler$:n.pipe(t.switchMap(()=>d({time:i})))}}};function $(e){const t=void 0!==globalThis.window&&void 0!==globalThis.window.document,{notifier:r,whenHidden:n}=e.pollService.config.pause,i=r===l;return t&&n||!i?t&&n||i?n&&i?"hidden":"both":"notifier":"none"}function w(e,r,n){const i=function(){if(E)return E;return E=t.fromEvent(document,"visibilitychange").pipe(t.startWith(null),t.map(()=>document.hidden),t.shareReplay({bufferSize:1,refCount:!0})),E}(),o=i.pipe(t.switchMap(e=>e?r:t.NEVER));let l=!0;return i.pipe(t.filter(e=>!e||l),t.exhaustMap(()=>e.pipe(t.takeUntil(o))),t.tap(()=>l=!1))}let E;function b(e,r){const n=r.pipe(t.catchError(()=>t.NEVER),t.share()),i=t.race(n,l).pipe(t.take(1));return t.merge(i,n).pipe(t.distinctUntilChanged(),t.switchMap(r=>r?t.NEVER:e))}function R(e,r){const n=new g(r),o=e.pipe(t.takeLast(1),t.tap(e=>n.setValue(e))),l=n.config.type===i.REPEAT?T:v,c={source$:o,pollService:n,factory:l},{poller$:s}=function(e){var t,r,n,i;const{source$:o,pollService:l,factory:c}=e,s=$(e);if("none"===s)return e.poller$=null!==(t=e.poller$)&&void 0!==t?t:c.createDirectPoller$(o,l),e;const{notifier:u}=l.config.pause;if("notifier"===s){const t=null!==(r=e.poller$)&&void 0!==r?r:c.createDirectPoller$(o,l);return e.poller$=b(t,u),e}let a,p;if(e.poller$&&e.cycler$)a=e.poller$,p=e.cycler$;else{const t=c.createCycleControl$(o,l);a=null!==(n=e.poller$)&&void 0!==n?n:t.poller$,p=null!==(i=e.cycler$)&&void 0!==i?i:t.cycler$}if(e.cycler$=p,"hidden"===s)e.poller$=w(a,p);else{if("both"!==s)throw new Error(`composePause$: Unsupported pause mode "${s}"!`);e.poller$=b(w(a,p),u)}return e}(c);return s}e.poll=function(e){return t=>R(t,p(e))},e.pollType=i,e.strategyType=o});
//# sourceMappingURL=index.min.js.map
