UNPKG

opossum

Version:

A fail-fast circuit breaker for promises and callbacks

2 lines 26.9 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.circuitBreaker=t():e.circuitBreaker=t()}(self,(()=>{return e={187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,o=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function i(){i.init.call(this)}e.exports=i,e.exports.once=function(e,t){return new Promise((function(n,o){function r(n){e.removeListener(t,i),o(n)}function i(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}v(e,t,i,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&v(e,"error",t,{once:!0})}(e,r)}))},i.EventEmitter=i,i.prototype._events=void 0,i.prototype._eventsCount=0,i.prototype._maxListeners=void 0;var s=10;function c(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function a(e){return void 0===e._maxListeners?i.defaultMaxListeners:e._maxListeners}function u(e,t,n,o){var r,i,s,u;if(c(n),void 0===(i=e._events)?(i=e._events=Object.create(null),e._eventsCount=0):(void 0!==i.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),i=e._events),s=i[t]),void 0===s)s=i[t]=n,++e._eventsCount;else if("function"==typeof s?s=i[t]=o?[n,s]:[s,n]:o?s.unshift(n):s.push(n),(r=a(e))>0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,u=l,console&&console.warn&&console.warn(u)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function f(e,t,n){var o={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=l.bind(o);return r.listener=n,o.wrapFn=r,r}function h(e,t,n){var o=e._events;if(void 0===o)return[];var r=o[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(r):y(r,r.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function y(e,t){for(var n=new Array(t),o=0;o<t;++o)n[o]=e[o];return n}function v(e,t,n,o){if("function"==typeof e.on)o.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function r(i){o.once&&e.removeEventListener(t,r),n(i)}))}}Object.defineProperty(i,"defaultMaxListeners",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");s=e}}),i.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},i.prototype.getMaxListeners=function(){return a(this)},i.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,i=this._events;if(void 0!==i)r=r&&void 0===i.error;else if(!r)return!1;if(r){var s;if(t.length>0&&(s=t[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var a=i[e];if(void 0===a)return!1;if("function"==typeof a)o(a,this,t);else{var u=a.length,l=y(a,u);for(n=0;n<u;++n)o(l[n],this,t)}return!0},i.prototype.addListener=function(e,t){return u(this,e,t,!1)},i.prototype.on=i.prototype.addListener,i.prototype.prependListener=function(e,t){return u(this,e,t,!0)},i.prototype.once=function(e,t){return c(t),this.on(e,f(this,e,t)),this},i.prototype.prependOnceListener=function(e,t){return c(t),this.prependListener(e,f(this,e,t)),this},i.prototype.removeListener=function(e,t){var n,o,r,i,s;if(c(t),void 0===(o=this._events))return this;if(void 0===(n=o[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(r=-1,i=n.length-1;i>=0;i--)if(n[i]===t||n[i].listener===t){s=n[i].listener,r=i;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,r),1===n.length&&(o[e]=n[0]),void 0!==o.removeListener&&this.emit("removeListener",e,s||t)}return this},i.prototype.off=i.prototype.removeListener,i.prototype.removeAllListeners=function(e){var t,n,o;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var r,i=Object.keys(n);for(o=0;o<i.length;++o)"removeListener"!==(r=i[o])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(o=t.length-1;o>=0;o--)this.removeListener(e,t[o]);return this},i.prototype.listeners=function(e){return h(this,e,!0)},i.prototype.rawListeners=function(e){return h(this,e,!1)},i.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},524:(e,t,n)=>{"use strict";e.exports=n(269)},235:(e,t)=>{function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,r(o.key),o)}}function r(e){var t=function(e,t){if("object"!=n(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var r=o.call(e,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}var i=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.cache=new Map,this.maxEntries=null!=t?t:Math.pow(2,24)-1}var t,n;return t=e,(n=[{key:"get",value:function(e){var t=this.cache.get(e);if(t){if(t.expiresAt>Date.now()||0===t.expiresAt)return t.value;this.cache.delete(e)}}},{key:"set",value:function(e,t,n){this.cache.size===this.maxEntries&&void 0===this.get(e)&&this.cache.delete(this.cache.keys().next().value),this.cache.set(e,{expiresAt:n,value:t})}},{key:"delete",value:function(e){this.cache.delete(e)}},{key:"flush",value:function(){this.cache.clear()}}])&&o(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();e.exports=i},269:(e,t,n)=>{"use strict";function o(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);n<t;n++)o[n]=e[n];return o}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function s(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,c(o.key),o)}}function c(e){var t=function(e,t){if("object"!=i(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,"string");if("object"!=i(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}function a(e,t){return a=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},a(e,t)}function u(e){var t=f();return function(){var n,o=h(e);if(t){var r=h(this).constructor;n=Reflect.construct(o,arguments,r)}else n=o.apply(this,arguments);return function(e,t){if(t&&("object"==i(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return l(e)}(this,n)}}function l(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(f=function(){return!!e})()}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}var p=n(187),y=n(741),v=n(384),m=n(235),b=Symbol("state"),d=Symbol("open"),w=Symbol("closed"),g=Symbol("half-open"),T=Symbol("pending-close"),k=Symbol("shutdown"),O=Symbol("fallback"),C=Symbol("status"),S=Symbol("name"),j=Symbol("group"),x=Symbol("Enabled"),E=Symbol("warming-up"),P=Symbol("volume-threshold"),L=Symbol("our-error"),_=Symbol("reset-timeout"),A=Symbol("warmup-timeout"),B=Symbol("last-timer-at"),R=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&a(e,t)}(c,e);var t,n,o,r=u(c);function c(e){var t,n,o,s,a,u,f,h,p,L,R=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,c),(L=r.call(this)).options=R,L.options.timeout=null!==(t=R.timeout)&&void 0!==t?t:1e4,L.options.resetTimeout=null!==(n=R.resetTimeout)&&void 0!==n?n:3e4,L.options.errorThresholdPercentage=null!==(o=R.errorThresholdPercentage)&&void 0!==o?o:50,L.options.rollingCountTimeout=null!==(s=R.rollingCountTimeout)&&void 0!==s?s:1e4,L.options.rollingCountBuckets=null!==(a=R.rollingCountBuckets)&&void 0!==a?a:10,L.options.rollingPercentilesEnabled=!1!==R.rollingPercentilesEnabled,L.options.capacity=Number.isInteger(R.capacity)?R.capacity:Number.MAX_SAFE_INTEGER,L.options.errorFilter=R.errorFilter||function(e){return!1},L.options.cacheTTL=null!==(u=R.cacheTTL)&&void 0!==u?u:0,L.options.cacheGetKey=null!==(f=R.cacheGetKey)&&void 0!==f?f:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return JSON.stringify(t)},L.options.enableSnapshots=!1!==R.enableSnapshots,L.options.rotateBucketController=R.rotateBucketController,L.options.coalesce=!!R.coalesce,L.options.coalesceTTL=null!==(h=R.coalesceTTL)&&void 0!==h?h:L.options.timeout,L.options.coalesceResetOn=(null===(p=R.coalesceResetOn)||void 0===p?void 0:p.filter((function(e){return["error","success","timeout"].includes(e)})))||[],L.options.cache)if(void 0===L.options.cacheTransport)L.options.cacheTransport=new m(R.cacheSize);else if("object"!==i(L.options.cacheTransport)||!L.options.cacheTransport.get||!L.options.cacheTransport.set||!L.options.cacheTransport.flush)throw new TypeError("options.cacheTransport should be an object with `get`, `set` and `flush` methods");if(L.options.coalesce&&(L.options.coalesceCache=new m(R.coalesceSize)),L.semaphore=new v(L.options.capacity),!e)throw new TypeError("No action provided. Cannot construct a CircuitBreaker without an invocable action.");if(R.autoRenewAbortController&&!R.abortController&&(R.abortController=new AbortController),R.abortController&&"function"!=typeof R.abortController.abort)throw new TypeError("AbortController does not contain `abort()` method");if(L[P]=Number.isInteger(R.volumeThreshold)?R.volumeThreshold:0,L[E]=!0===R.allowWarmUp,L.options.status?L.options.status instanceof y?L[C]=L.options.status:L[C]=new y({stats:L.options.status}):L[C]=new y(L.options),L[b]=w,R.state?(L[x]=!1!==R.state.enabled,L[E]=R.state.warmUp||L[E],L[w]=!1!==R.state.closed,L[g]=L[T]=R.state.halfOpen||!1,L[d]=!L[w]&&!L[g],L[k]=R.state.shutdown||!1):(L[T]=!1,L[x]=!1!==R.enabled),L[O]=null,L[S]=R.name||e.name||F(),L[j]=R.group||L[S],L[E]){var M=L[A]=setTimeout((function(e){return L[E]=!1}),L.options.rollingCountTimeout);"function"==typeof M.unref&&M.unref()}L.action="function"!=typeof e?function(t){return Promise.resolve(e)}:e,R.maxFailures&&console.error("options.maxFailures is deprecated. Please use options.errorThresholdPercentage");var D,N=function(e){return function(t,n){return L[C].increment(e,n)}};function I(e){e[b]=g,e[T]=!0,e._renewAbortControllerIfNeeded(),e.emit("halfOpen",e.options.resetTimeout)}return L.on("success",N("successes")),L.on("failure",N("failures")),L.on("fallback",N("fallbacks")),L.on("timeout",N("timeouts")),L.on("fire",N("fires")),L.on("reject",N("rejects")),L.on("cacheHit",N("cacheHits")),L.on("cacheMiss",N("cacheMisses")),L.on("coalesceCacheHit",N("coalesceCacheHits")),L.on("coalesceCacheMiss",N("coalesceCacheMisses")),L.on("open",(function(e){return L[C].open()})),L.on("close",(function(e){return L[C].close()})),L.on("semaphoreLocked",N("semaphoreRejections")),L.on("open",((D=l(L))[B]=Date.now(),function(e){var t=D[_]=setTimeout((function(){I(D)}),D.options.resetTimeout);"function"==typeof t.unref&&t.unref()})),L.on("success",(function(e){L.halfOpen&&L.close()})),L[k]?(L[b]=k,L.shutdown()):L[w]?L.close():L[d]?void 0!==L.options.state.lastTimerAt&&Date.now()-L.options.state.lastTimerAt>L.options.resetTimeout?I(l(L)):L.open():L[g]&&(L[b]=g),L}return t=c,n=[{key:"_renewAbortControllerIfNeeded",value:function(){this.options.autoRenewAbortController&&this.options.abortController&&this.options.abortController.signal.aborted&&(this.options.abortController=new AbortController)}},{key:"close",value:function(){this[b]!==w&&(this[_]&&clearTimeout(this[_]),this[b]=w,this[T]=!1,this._renewAbortControllerIfNeeded(),this.emit("close"))}},{key:"open",value:function(){this[b]!==d&&(this[b]=d,this[T]=!1,this.emit("open"))}},{key:"shutdown",value:function(){this.emit("shutdown"),this.disable(),this.removeAllListeners(),this[_]&&clearTimeout(this[_]),this[A]&&clearTimeout(this[A]),this.status.shutdown(),this[b]=k,this.clearCache()}},{key:"isShutdown",get:function(){return this[b]===k}},{key:"name",get:function(){return this[S]}},{key:"group",get:function(){return this[j]}},{key:"pendingClose",get:function(){return this[T]}},{key:"closed",get:function(){return this[b]===w}},{key:"opened",get:function(){return this[b]===d}},{key:"halfOpen",get:function(){return this[b]===g}},{key:"status",get:function(){return this[C]}},{key:"stats",get:function(){return this[C].stats}},{key:"toJSON",value:function(){return{state:{name:this.name,enabled:this.enabled,closed:this.closed,open:this.opened,halfOpen:this.halfOpen,warmUp:this.warmUp,shutdown:this.isShutdown,lastTimerAt:this[B]},status:this.status.stats}}},{key:"enabled",get:function(){return this[x]}},{key:"warmUp",get:function(){return this[E]}},{key:"volumeThreshold",get:function(){return this[P]}},{key:"fallback",value:function(e){var t=e;return e instanceof c&&(t=function(){return e.fire.apply(e,arguments)}),this[O]=t,this}},{key:"fire",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return this.call.apply(this,[this.action].concat(t))}},{key:"call",value:function(e){var t=this;if(this.isShutdown){var n=I("The circuit has been shutdown.","ESHUTDOWN");return Promise.reject(n)}for(var o=arguments.length,r=new Array(o>1?o-1:0),i=1;i<o;i++)r[i-1]=arguments[i];var s=r.slice();if(this.emit("fire",s),!this[x]){var c=this.action.apply(e,s);return"function"==typeof c.then?c:Promise.resolve(c)}var a,u=this.options.cache||this.options.coalesce?this.options.cacheGetKey.apply(this,r):"";if(this.options.cache){var l=this.options.cacheTransport.get(u);if(l)return this.emit("cacheHit"),l;this.emit("cacheMiss")}if(this.options.coalesce){var f=this.options.coalesceCache.get(u);if(f)return this.emit("coalesceCacheHit"),f;this.emit("coalesceCacheMiss")}if(!this.closed&&!this.pendingClose){var h=I("Breaker is open","EOPENBREAKER");return this.emit("reject",h),D(this,h,s)||Promise.reject(h)}this[T]=!1;var p=!1,y=new Promise((function(n,o){var r=Date.now();if(t.semaphore.test()){t.options.timeout&&(a=setTimeout((function(){p=!0;var e=I("Timed out after ".concat(t.options.timeout,"ms"),"ETIMEDOUT"),i=Date.now()-r;t.semaphore.release(),t.emit("timeout",e,i,s),M(e,t,a,s,i,n,o),N(t,u,"timeout"),t.options.abortController&&t.options.abortController.abort()}),t.options.timeout));try{var i=t.action.apply(e,s),c="function"==typeof i.then?i:Promise.resolve(i);c.then((function(e){p||(clearTimeout(a),t.emit("success",e,Date.now()-r),N(t,u,"success"),t.semaphore.release(),n(e),t.options.cache&&t.options.cacheTransport.set(u,c,t.options.cacheTTL>0?Date.now()+t.options.cacheTTL:0))})).catch((function(e){if(!p){t.semaphore.release();var i=Date.now()-r;M(e,t,a,s,i,n,o),N(t,u,"error")}}))}catch(e){t.semaphore.release();var l=Date.now()-r;M(e,t,a,s,l,n,o),N(t,u,"error")}}else{var f=Date.now()-r,h=I("Semaphore locked","ESEMLOCKED");t.emit("semaphoreLocked",h,f),M(h,t,a,s,f,n,o),N(t,u)}}));return this.options.coalesce&&this.options.coalesceCache.set(u,y,this.options.coalesceTTL>0?Date.now()+this.options.coalesceTTL:0),y}},{key:"clearCache",value:function(){this.options.cache&&this.options.cacheTransport.flush(),this.options.coalesceCache&&this.options.coalesceCache.flush()}},{key:"healthCheck",value:function(e,t){var n=this;if(t=t||5e3,"function"!=typeof e)throw new TypeError("Health check function must be a function");if(isNaN(t))throw new TypeError("Health check interval must be a number");var o=function(t){e.apply(n).catch((function(e){n.emit("healthCheckFailed",e),n.open()}))},r=setInterval(o,t);"function"==typeof r.unref&&r.unref(),o()}},{key:"enable",value:function(){this[x]=!0,this.status.startListeneningForRotateEvent()}},{key:"disable",value:function(){this[x]=!1,this.status.removeRotateBucketControllerListener()}},{key:"getSignal",value:function(){if(this.options.abortController&&this.options.abortController.signal)return this.options.abortController.signal}},{key:"getAbortController",value:function(){return this.options.abortController}}],o=[{key:"isOurError",value:function(e){return!!e[L]}},{key:"newStatus",value:function(e){return new y(e)}}],n&&s(t.prototype,n),o&&s(t,o),Object.defineProperty(t,"prototype",{writable:!1}),c}(p);function M(e,t,n,r,i,s,c){var a;if(clearTimeout(n),(a=t.options).errorFilter.apply(a,[e].concat(o(r))))t.emit("success",e,i);else{!function(e,t,n,o){if(e.emit("failure",t,o,n),!e.warmUp){var r=e.stats;r.fires<e.volumeThreshold&&!e.halfOpen||(r.failures/r.fires*100>e.options.errorThresholdPercentage||e.halfOpen)&&e.open()}}(t,e,r,i);var u=D(t,e,r);if(u)return s(u)}c(e)}function D(e,t,n){if(e[O])try{var r=e[O].apply(e[O],[].concat(o(n),[t]));return e.emit("fallback",r,t),r instanceof Promise?r:Promise.resolve(r)}catch(e){return Promise.reject(e)}}function N(e,t,n){var o;n&&!e.options.coalesceResetOn.includes(n)||null===(o=e.options.coalesceCache)||void 0===o||o.delete(t)}function I(e,t){var n=new Error(e);return n.code=t,n[L]=!0,n}var F=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))};e.exports=R},384:(e,t)=>{"use strict";e.exports=function(e){var t=[],n=e,o={take:r,release:i,test:function(){return!(n<1)&&r()&&!0}};return Object.defineProperty(o,"count",{get:function(e){return n},enumerable:!0}),o;function r(e){return n>0?(--n,Promise.resolve(i)):new Promise((function(o,r){t.push((function(e){--n,o(i)})),e&&setTimeout((function(n){t.shift();var o=new Error("Timed out after ".concat(e,"ms"));o.code="ETIMEDOUT",r(o)}),e)}))}function i(){n++,t.length>0&&t.shift()()}}},741:(e,t,n)=>{"use strict";function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,a(o.key),o)}}function a(e){var t=function(e,t){if("object"!=o(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function l(e){var t=f();return function(){var n,r=h(e);if(t){var i=h(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(this,n)}}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(f=function(){return!!e})()}function h(e){return h=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},h(e)}var p=Symbol("window"),y=Symbol("buckets"),v=Symbol("timeout"),m=Symbol("percentiles"),b=Symbol("bucket-interval"),d=Symbol("snapshot-interval"),w=Symbol("rotate-event-name"),g=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u(e,t)}(r,e);var t,n,o=l(r);function r(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),(t=o.call(this))[y]=e.rollingCountBuckets||10,t[v]=e.rollingCountTimeout||1e4,t[p]=new Array(t[y]),t[m]=[0,.25,.5,.75,.9,.95,.99,.995,1],t[w]="rotate",t.rollingPercentilesEnabled=!1!==e.rollingPercentilesEnabled,t.enableSnapshots=!1!==e.enableSnapshots,t.rotateBucketController=e.rotateBucketController,t.rotateBucket=T(t[p]);for(var n=0;n<t[y];n++)t[p][n]=k();var s=Math.floor(t[v]/t[y]);return t.rotateBucketController?t.startListeneningForRotateEvent():(t[b]=setInterval(t.rotateBucket,s),"function"==typeof t[b].unref&&t[b].unref()),t.enableSnapshots&&(t[d]=setInterval((function(e){return t.emit("snapshot",t.stats)}),s),"function"==typeof t[d].unref&&t[d].unref()),e.stats&&(t[p][0]=i(i({},k()),e.stats)),t}return t=r,(n=[{key:"stats",get:function(){var e=this,t=this[p].reduce((function(t,n){return n?(Object.keys(t).forEach((function(e){"latencyTimes"!==e&&"percentiles"!==e&&(t[e]+=n[e]||0)})),e.rollingPercentilesEnabled&&n.latencyTimes&&(t.latencyTimes=t.latencyTimes.concat(n.latencyTimes)),t):t}),k());return this.rollingPercentilesEnabled?(t.latencyTimes.sort((function(e,t){return e-t})),t.latencyTimes.length?t.latencyMean=t.latencyTimes.reduce((function(e,t){return e+t}),0)/t.latencyTimes.length:t.latencyMean=0,this[m].forEach((function(e){t.percentiles[e]=function(e,t){return 0===e?t[0]||0:t[Math.ceil(e*t.length)-1]||0}(e,t.latencyTimes)}))):(t.latencyMean=-1,this[m].forEach((function(e){t.percentiles[e]=-1}))),t}},{key:"window",get:function(){return this[p].slice()}},{key:"increment",value:function(e,t){this[p][0][e]++,"successes"!==e&&"failures"!==e&&"timeouts"!==e||this[p][0].latencyTimes.push(t||0)}},{key:"open",value:function(){this[p][0].isCircuitBreakerOpen=!0}},{key:"close",value:function(){this[p][0].isCircuitBreakerOpen=!1}},{key:"shutdown",value:function(){this.removeAllListeners(),void 0===this.rotateBucketController?clearInterval(this[b]):this.removeRotateBucketControllerListener(),this.enableSnapshots&&clearInterval(this[d])}},{key:"removeRotateBucketControllerListener",value:function(){this.rotateBucketController&&this.rotateBucketController.removeListener(this[w],this.rotateBucket)}},{key:"startListeneningForRotateEvent",value:function(){this.rotateBucketController&&0===this.rotateBucketController.listenerCount(this[w],this.rotateBucket)&&this.rotateBucketController.on(this[w],this.rotateBucket)}}])&&c(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),r}(n(187).EventEmitter),T=function(e){return function(t){e.pop(),e.unshift(k())}},k=function(e){return{failures:0,fallbacks:0,successes:0,rejects:0,fires:0,timeouts:0,cacheHits:0,cacheMisses:0,coalesceCacheHits:0,coalesceCacheMisses:0,semaphoreRejections:0,percentiles:{},latencyTimes:[]}};e.exports=g}},t={},function n(o){var r=t[o];if(void 0!==r)return r.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,n),i.exports}(524);var e,t})); //# sourceMappingURL=opossum.min.map