@openfeature/web-sdk 1.6.1 → 1.7.0
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/LICENSE +1 -1
- package/README.md +59 -2
- package/dist/cjs/index.js +542 -24
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +524 -6
- package/dist/esm/index.js.map +4 -4
- package/dist/global/index.js +527 -8
- package/dist/global/index.js.map +4 -4
- package/dist/global/index.min.js +1 -1
- package/dist/global/index.min.js.map +4 -4
- package/dist/types.d.ts +145 -3
- package/package.json +1 -1
package/dist/global/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var OpenFeature=(()=>{var Ae=Object.create;var j=Object.defineProperty,Oe=Object.defineProperties,Te=Object.getOwnPropertyDescriptor,be=Object.getOwnPropertyDescriptors,De=Object.getOwnPropertyNames,ve=Object.getOwnPropertySymbols,ce=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty,ke=Object.prototype.propertyIsEnumerable,Se=Reflect.get;var ue=(i,e,t)=>e in i?j(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,P=(i,e)=>{for(var t in e||(e={}))pe.call(e,t)&&ue(i,t,e[t]);if(ve)for(var t of ve(e))ke.call(e,t)&&ue(i,t,e[t]);return i},k=(i,e)=>Oe(i,be(e));var Ne=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),Le=(i,e)=>{for(var t in e)j(i,t,{get:e[t],enumerable:!0})},ge=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of De(e))!pe.call(i,o)&&o!==t&&j(i,o,{get:()=>e[o],enumerable:!(r=Te(e,o))||r.enumerable});return i};var He=(i,e,t)=>(t=i!=null?Ae(ce(i)):{},ge(e||!i||!i.__esModule?j(t,"default",{value:i,enumerable:!0}):t,i)),Fe=i=>ge(j({},"__esModule",{value:!0}),i);var Ee=(i,e,t)=>Se(ce(i),t,e);var m=(i,e,t)=>new Promise((r,o)=>{var a=s=>{try{d(t.next(s))}catch(l){o(l)}},n=s=>{try{d(t.throw(s))}catch(l){o(l)}},d=s=>s.done?r(s.value):Promise.resolve(s.value).then(a,n);d((t=t.apply(i,e)).next())});var Ce=Ne((zr,ae)=>{"use strict";var Ge=Object.prototype.hasOwnProperty,y="~";function X(){}Object.create&&(X.prototype=Object.create(null),new X().__proto__||(y=!1));function je(i,e,t){this.fn=i,this.context=e,this.once=t||!1}function Pe(i,e,t,r,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var a=new je(t,r||i,o),n=y?y+e:e;return i._events[n]?i._events[n].fn?i._events[n]=[i._events[n],a]:i._events[n].push(a):(i._events[n]=a,i._eventsCount++),i}function Q(i,e){--i._eventsCount===0?i._events=new X:delete i._events[e]}function f(){this._events=new X,this._eventsCount=0}f.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Ge.call(t,r)&&e.push(y?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};f.prototype.listeners=function(e){var t=y?y+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,a=r.length,n=new Array(a);o<a;o++)n[o]=r[o].fn;return n};f.prototype.listenerCount=function(e){var t=y?y+e:e,r=this._events[t];return r?r.fn?1:r.length:0};f.prototype.emit=function(e,t,r,o,a,n){var d=y?y+e:e;if(!this._events[d])return!1;var s=this._events[d],l=arguments.length,c,v;if(s.fn){switch(s.once&&this.removeListener(e,s.fn,void 0,!0),l){case 1:return s.fn.call(s.context),!0;case 2:return s.fn.call(s.context,t),!0;case 3:return s.fn.call(s.context,t,r),!0;case 4:return s.fn.call(s.context,t,r,o),!0;case 5:return s.fn.call(s.context,t,r,o,a),!0;case 6:return s.fn.call(s.context,t,r,o,a,n),!0}for(v=1,c=new Array(l-1);v<l;v++)c[v-1]=arguments[v];s.fn.apply(s.context,c)}else{var C=s.length,u;for(v=0;v<C;v++)switch(s[v].once&&this.removeListener(e,s[v].fn,void 0,!0),l){case 1:s[v].fn.call(s[v].context);break;case 2:s[v].fn.call(s[v].context,t);break;case 3:s[v].fn.call(s[v].context,t,r);break;case 4:s[v].fn.call(s[v].context,t,r,o);break;default:if(!c)for(u=1,c=new Array(l-1);u<l;u++)c[u-1]=arguments[u];s[v].fn.apply(s[v].context,c)}}return!0};f.prototype.on=function(e,t,r){return Pe(this,e,t,r,!1)};f.prototype.once=function(e,t,r){return Pe(this,e,t,r,!0)};f.prototype.removeListener=function(e,t,r,o){var a=y?y+e:e;if(!this._events[a])return this;if(!t)return Q(this,a),this;var n=this._events[a];if(n.fn)n.fn===t&&(!o||n.once)&&(!r||n.context===r)&&Q(this,a);else{for(var d=0,s=[],l=n.length;d<l;d++)(n[d].fn!==t||o&&!n[d].once||r&&n[d].context!==r)&&s.push(n[d]);s.length?this._events[a]=s.length===1?s[0]:s:Q(this,a)}return this};f.prototype.removeAllListeners=function(e){var t;return e?(t=y?y+e:e,this._events[t]&&Q(this,t)):(this._events=new X,this._eventsCount=0),this};f.prototype.off=f.prototype.removeListener;f.prototype.addListener=f.prototype.on;f.prefixed=y;f.EventEmitter=f;typeof ae!="undefined"&&(ae.exports=f)});var Ke={};Le(Ke,{AllProviderEvents:()=>A,AllProviderStatus:()=>w,ClientProviderEvents:()=>A,ClientProviderStatus:()=>w,DefaultLogger:()=>I,ErrorCode:()=>h,FlagNotFoundError:()=>N,GeneralError:()=>T,GenericEventEmitter:()=>J,InMemoryProvider:()=>de,InvalidContextError:()=>K,LOG_LEVELS:()=>he,MapHookData:()=>Y,NOOP_PROVIDER:()=>q,OpenFeature:()=>Ye,OpenFeatureAPI:()=>te,OpenFeatureCommonAPI:()=>z,OpenFeatureError:()=>g,OpenFeatureEventEmitter:()=>S,ParseError:()=>U,ProviderEvents:()=>A,ProviderFatalError:()=>L,ProviderNotReadyError:()=>H,ProviderStatus:()=>w,ProviderWrapper:()=>M,SafeLogger:()=>b,ServerProviderEvents:()=>fe,ServerProviderStatus:()=>me,StandardResolutionReasons:()=>R,TargetingKeyMissingError:()=>W,TelemetryAttribute:()=>_,TelemetryFlagMetadata:()=>$,TypeMismatchError:()=>F,createEvaluationEvent:()=>Me,instantiateErrorByErrorCode:()=>oe,isObject:()=>ye,isString:()=>xe,objectOrUndefined:()=>x,statusMatchesEvent:()=>B,stringOrUndefined:()=>D});var Y=class{constructor(){this.data=new Map}set(e,t){this.data.set(e,t)}get(e){return this.data.get(e)}has(e){return this.data.has(e)}delete(e){return this.data.delete(e)}clear(){this.data.clear()}};var R={STATIC:"STATIC",DEFAULT:"DEFAULT",TARGETING_MATCH:"TARGETING_MATCH",SPLIT:"SPLIT",CACHED:"CACHED",DISABLED:"DISABLED",UNKNOWN:"UNKNOWN",STALE:"STALE",ERROR:"ERROR"},h=(s=>(s.PROVIDER_NOT_READY="PROVIDER_NOT_READY",s.PROVIDER_FATAL="PROVIDER_FATAL",s.FLAG_NOT_FOUND="FLAG_NOT_FOUND",s.PARSE_ERROR="PARSE_ERROR",s.TYPE_MISMATCH="TYPE_MISMATCH",s.TARGETING_KEY_MISSING="TARGETING_KEY_MISSING",s.INVALID_CONTEXT="INVALID_CONTEXT",s.GENERAL="GENERAL",s))(h||{});var g=class i extends Error{constructor(e,t){super(e),Object.setPrototypeOf(this,i.prototype),this.name="OpenFeatureError",this.cause=t==null?void 0:t.cause}};var N=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="FlagNotFoundError",this.code="FLAG_NOT_FOUND"}};var T=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="GeneralError",this.code="GENERAL"}};var K=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="InvalidContextError",this.code="INVALID_CONTEXT"}};var U=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="ParseError",this.code="PARSE_ERROR"}};var L=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="ProviderFatalError",this.code="PROVIDER_FATAL"}};var H=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="ProviderNotReadyError",this.code="PROVIDER_NOT_READY"}};var W=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="TargetingKeyMissingError",this.code="TARGETING_KEY_MISSING"}};var F=class i extends g{constructor(e,t){super(e,t),Object.setPrototypeOf(this,i.prototype),this.name="TypeMismatchError",this.code="TYPE_MISMATCH"}};var oe=(i,e)=>{switch(i){case"FLAG_NOT_FOUND":return new N(e);case"PARSE_ERROR":return new U(e);case"TYPE_MISMATCH":return new F(e);case"TARGETING_KEY_MISSING":return new W(e);case"INVALID_CONTEXT":return new K(e);case"PROVIDER_NOT_READY":return new H(e);case"PROVIDER_FATAL":return new L(e);default:return new T(e)}};var me=(a=>(a.NOT_READY="NOT_READY",a.READY="READY",a.ERROR="ERROR",a.STALE="STALE",a.FATAL="FATAL",a))(me||{}),w=(n=>(n.NOT_READY="NOT_READY",n.READY="READY",n.ERROR="ERROR",n.STALE="STALE",n.FATAL="FATAL",n.RECONCILING="RECONCILING",n))(w||{});var fe=(o=>(o.Ready="PROVIDER_READY",o.Error="PROVIDER_ERROR",o.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",o.Stale="PROVIDER_STALE",o))(fe||{}),A=(n=>(n.Ready="PROVIDER_READY",n.Error="PROVIDER_ERROR",n.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",n.ContextChanged="PROVIDER_CONTEXT_CHANGED",n.Reconciling="PROVIDER_RECONCILING",n.Stale="PROVIDER_STALE",n))(A||{});var we={READY:"PROVIDER_READY",ERROR:"PROVIDER_ERROR",FATAL:"PROVIDER_ERROR",STALE:"PROVIDER_STALE",RECONCILING:"PROVIDER_RECONCILING",NOT_READY:void 0},B=(i,e)=>!e&&i==="PROVIDER_READY"||we[e]===i;var I=class{error(...e){console.error(...e)}warn(...e){console.warn(...e)}info(){}debug(){}};var he=["error","warn","info","debug"],b=class{constructor(e){this.fallbackLogger=new I;try{for(let t of he)if(!e[t]||typeof e[t]!="function")throw new Error(`The provided logger is missing the ${t} method.`);this.logger=e}catch(t){console.error(t),console.error("Falling back to the default logger."),this.logger=this.fallbackLogger}}error(...e){this.log("error",...e)}warn(...e){this.log("warn",...e)}info(...e){this.log("info",...e)}debug(...e){this.log("debug",...e)}log(e,...t){try{this.logger[e](...t)}catch(r){this.fallbackLogger[e](...t)}}};var J=class{constructor(e){this.globalLogger=e;this._handlers={PROVIDER_CONFIGURATION_CHANGED:new WeakMap,PROVIDER_CONTEXT_CHANGED:new WeakMap,PROVIDER_READY:new WeakMap,PROVIDER_ERROR:new WeakMap,PROVIDER_STALE:new WeakMap,PROVIDER_RECONCILING:new WeakMap}}emit(e,t){this.eventEmitter.emit(e,t)}addHandler(e,t){let r=a=>m(this,null,function*(){var n;try{yield t(a)}catch(d){(n=this._logger)==null||n.error("Error running event handler:",d)}}),o=this._handlers[e].get(t);this._handlers[e].set(t,[...o||[],r]),this.eventEmitter.on(e,r)}removeHandler(e,t){let r=this._handlers[e].get(t);if(r){let o=r.pop();o&&this.eventEmitter.removeListener(e,o)}}removeAllHandlers(e){e?this.eventEmitter.removeAllListeners(e):this.eventEmitter.removeAllListeners()}getHandlers(e){return this.eventEmitter.listeners(e)}setLogger(e){return this._eventLogger=new b(e),this}get _logger(){var e,t;return(t=this._eventLogger)!=null?t:(e=this.globalLogger)==null?void 0:e.call(this)}};var _={KEY:"feature_flag.key",ERROR_CODE:"error.type",ERROR_MESSAGE:"error.message",VARIANT:"feature_flag.result.variant",VALUE:"feature_flag.result.value",CONTEXT_ID:"feature_flag.context.id",REASON:"feature_flag.result.reason",PROVIDER:"feature_flag.provider.name",FLAG_SET_ID:"feature_flag.set.id",VERSION:"feature_flag.version"};var $={CONTEXT_ID:"contextId",FLAG_SET_ID:"flagSetId",VERSION:"version"};var Ie="feature_flag.evaluation";function Me(i,e){var n,d;let t={[_.KEY]:i.flagKey,[_.PROVIDER]:i.providerMetadata.name,[_.REASON]:((n=e.reason)!=null?n:R.UNKNOWN).toLowerCase()};e.variant?t[_.VARIANT]=e.variant:t[_.VALUE]=e.value;let r=e.flagMetadata[$.CONTEXT_ID]||i.context.targetingKey;r&&(t[_.CONTEXT_ID]=r);let o=e.flagMetadata[$.FLAG_SET_ID];o&&(t[_.FLAG_SET_ID]=o);let a=e.flagMetadata[$.VERSION];return a&&(t[_.VERSION]=a),e.reason===R.ERROR&&(t[_.ERROR_CODE]=((d=e.errorCode)!=null?d:"GENERAL").toLowerCase(),e.errorMessage&&(t[_.ERROR_MESSAGE]=e.errorMessage)),{name:Ie,attributes:t}}function xe(i){return typeof i=="string"}function D(i){return xe(i)?i:void 0}function ye(i){return typeof i=="object"}function x(i){return ye(i)?i:void 0}function ne(i){return typeof i!="undefined"&&i!==null}var M=class{constructor(e,t,r){this._provider=e;this._status=t;this._pendingContextChanges=0;var o,a,n;(o=e.events)==null||o.addHandler("PROVIDER_READY",()=>{this._status=r.READY}),(a=e.events)==null||a.addHandler("PROVIDER_STALE",()=>{this._status=r.STALE}),(n=e.events)==null||n.addHandler("PROVIDER_ERROR",d=>{(d==null?void 0:d.errorCode)==="PROVIDER_FATAL"?this._status=r.FATAL:this._status=r.ERROR})}get provider(){return this._provider}set provider(e){this._provider=e}get status(){return this._status}set status(e){this._status=e}get allContextChangesSettled(){return this._pendingContextChanges===0}incrementPendingContextChanges(){this._pendingContextChanges++}decrementPendingContextChanges(){this._pendingContextChanges--}},z=class{constructor(e){this._hooks=[];this._context={};this._logger=new I;this._clientEventHandlers=new Map;this._domainScopedContext=new Map;this._clientEvents=new Map;this._runsOn=e}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}setLogger(e){return this._logger=new b(e),this}get providerMetadata(){return this.getProviderMetadata()}getProviderMetadata(e){return this.getProviderForClient(e).metadata}addHandler(e,t,r){[...new Map([[void 0,this._defaultProvider]]),...this._domainScopedProviders].forEach(o=>{var l;let a=o[0],n=o[1].provider,d=o[1].status;if(B(e,d))try{t({domain:a,providerName:n.metadata.name})}catch(c){(l=this._logger)==null||l.error("Error running event handler:",c)}}),this._apiEmitter.addHandler(e,t),r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this._apiEmitter.removeHandler(e,t)}clearHandlers(){this._apiEmitter.removeAllHandlers()}getHandlers(e){return this._apiEmitter.getHandlers(e)}setAwaitableProvider(e,t){var c,v,C,u,E,O,V,le;let r=D(e),o=(c=x(e))!=null?c:x(t);if(!o){this._logger.debug("No provider defined, ignoring setProvider call");return}let a=this.getProviderForClient(r),n=o.metadata.name;if(a===o){this._logger.debug("Provider is already set, ignoring setProvider call");return}if(!o.runsOn)this._logger.debug(`Provider '${o.metadata.name}' has not defined its intended use.`);else if(o.runsOn!==this._runsOn)throw new T(`Provider '${o.metadata.name}' is intended for use on the ${o.runsOn}.`);let d=this.getAssociatedEventEmitters(r),s,l=new M(o,this._statusEnumType.NOT_READY,this._statusEnumType);return typeof o.initialize=="function"&&!this.allProviders.includes(o)?s=(E=(u=(C=o.initialize)==null?void 0:C.call(o,r?(v=this._domainScopedContext.get(r))!=null?v:this._context:this._context))==null?void 0:u.then(()=>{var p;l.status=this._statusEnumType.READY,this.getAssociatedEventEmitters(r).forEach(G=>{G==null||G.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:n})}),(p=this._apiEmitter)==null||p.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:n})}))==null?void 0:E.catch(p=>{var G;throw(p==null?void 0:p.code)==="PROVIDER_FATAL"?l.status=this._statusEnumType.FATAL:l.status=this._statusEnumType.ERROR,this.getAssociatedEventEmitters(r).forEach(re=>{re==null||re.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:n,message:p==null?void 0:p.message})}),(G=this._apiEmitter)==null||G.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:n,message:p==null?void 0:p.message}),p}):(l.status=this._statusEnumType.READY,d.forEach(p=>{p==null||p.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:n})}),(O=this._apiEmitter)==null||O.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:n})),r?this._domainScopedProviders.set(r,l):this._defaultProvider=l,this.transferListeners(a,o,r,d),this.allProviders.includes(a)||(le=(V=a==null?void 0:a.onClose)==null?void 0:V.call(a))==null||le.catch(p=>{this._logger.error(`error closing provider: ${p==null?void 0:p.message}, ${p==null?void 0:p.stack}`)}),s}getProviderForClient(e){var t,r;return e?(r=(t=this._domainScopedProviders.get(e))==null?void 0:t.provider)!=null?r:this._defaultProvider.provider:this._defaultProvider.provider}buildAndCacheEventEmitterForClient(e){let t=this._clientEvents.get(e);if(t)return t;let r=this._createEventEmitter();this._clientEvents.set(e,r);let o=this.getProviderForClient(e);return Object.values(A).forEach(a=>{var n;return(n=o.events)==null?void 0:n.addHandler(a,d=>m(this,null,function*(){r.emit(a,k(P({},d),{clientName:e,domain:e,providerName:o.metadata.name}))}))}),r}getUnboundEmitters(){let e=[...this._domainScopedProviders.keys()];return[...[...this._clientEvents.keys()].filter(ne).filter(o=>!e.includes(o)).map(o=>this._clientEvents.get(o)),this._clientEvents.get(void 0)].filter(ne)}getAssociatedEventEmitters(e){return e?[this.buildAndCacheEventEmitterForClient(e)]:this.getUnboundEmitters()}transferListeners(e,t,r,o){var n;(n=this._clientEventHandlers.get(r))==null||n.forEach(d=>{var s;return(s=e.events)==null?void 0:s.removeHandler(...d)});let a=Object.values(A).map(d=>[d,l=>m(this,null,function*(){o.forEach(c=>{c==null||c.emit(d,k(P({},l),{clientName:r,domain:r,providerName:t.metadata.name}))}),this._apiEmitter.emit(d,k(P({},l),{clientName:r,domain:r,providerName:t.metadata.name}))})]);this._clientEventHandlers.set(r,a),a.forEach(d=>{var s;return(s=t.events)==null?void 0:s.addHandler(...d)})}close(){return m(this,null,function*(){var t,r;try{yield(r=(t=this==null?void 0:this._defaultProvider.provider)==null?void 0:t.onClose)==null?void 0:r.call(t)}catch(o){this.handleShutdownError(this._defaultProvider.provider,o)}let e=Array.from(this._domainScopedProviders);yield Promise.all(e.map(a=>m(this,[a],function*([,o]){var n,d;try{yield(d=o==null?void 0:(n=o.provider).onClose)==null?void 0:d.call(n)}catch(s){this.handleShutdownError(o==null?void 0:o.provider,s)}})))})}clearProvidersAndSetDefault(e){return m(this,null,function*(){try{yield this.close()}catch(t){this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.")}finally{this._domainScopedProviders.clear(),this._defaultProvider=new M(e,this._statusEnumType.NOT_READY,this._statusEnumType)}})}get allProviders(){return[...[...this._domainScopedProviders.values()].map(e=>e.provider),this._defaultProvider.provider]}handleShutdownError(e,t){this._logger.error(`Error during shutdown of provider ${e.metadata.name}: ${t}`),this._logger.error(t==null?void 0:t.stack)}};var Ve="No-op",ie=class{constructor(){this.metadata={name:"No-op Provider"}}resolveBooleanEvaluation(e,t){return this.noOp(t)}resolveStringEvaluation(e,t){return this.noOp(t)}resolveNumberEvaluation(e,t){return this.noOp(t)}resolveObjectEvaluation(e,t){return this.noOp(t)}noOp(e){return{value:e,reason:Ve}}},q=new ie;var se=He(Ce(),1);var S=class extends J{constructor(){super();this.eventEmitter=new se.default}};var Z=class i extends g{constructor(e){super(e),Object.setPrototypeOf(this,i.prototype),this.name="VariantNotFoundError",this.code="GENERAL"}};var de=class{constructor(e={}){this.events=new S;this.runsOn="client";this.metadata={name:"in-memory"};this._flagConfiguration=P({},e)}putConfiguration(e){return m(this,null,function*(){try{let t=Object.entries(P(P({},e),this._flagConfiguration)).map(([r])=>r);this._flagConfiguration=P({},e),this.events.emit("PROVIDER_CONFIGURATION_CHANGED",{flagsChanged:t})}catch(t){throw this.events.emit("PROVIDER_ERROR"),t}})}resolveBooleanEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveNumberEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveStringEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveObjectEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveAndCheckFlag(e,t,r,o){if(!(e in this._flagConfiguration)){let n=`no flag found with key ${e}`;throw o==null||o.debug(n),new N(n)}if(this._flagConfiguration[e].disabled)return{value:t,reason:R.DISABLED};let a=this.resolveFlagWithReason(e,r);if(a.value===void 0){let n=`no value associated with variant provided for ${e} found`;throw o==null||o.error(n),new Z(n)}if(typeof a.value!=typeof t)throw new F;return a}resolveFlagWithReason(e,t){try{return this.lookupFlagValue(e,t)}catch(r){throw r instanceof g?r:new T((r==null?void 0:r.message)||"unknown error")}}lookupFlagValue(e,t){var s;let r=this._flagConfiguration[e],o=t&&(r==null?void 0:r.contextEvaluator),a=o?(s=r.contextEvaluator)==null?void 0:s.call(r,t):r.defaultVariant,n=a&&(r==null?void 0:r.variants[a]),d=o?R.TARGETING_MATCH:R.STATIC;return k(P({value:n},a&&{variant:a}),{reason:d})}};var ee=class{constructor(e,t,r,o,a,n,d){this.providerAccessor=e;this.providerStatusAccessor=t;this.emitterAccessor=r;this.apiContextAccessor=o;this.apiHooksAccessor=a;this.globalLogger=n;this.options=d;this._hooks=[]}get metadata(){var e,t;return{name:(e=this.options.domain)!=null?e:this.options.name,domain:(t=this.options.domain)!=null?t:this.options.name,version:this.options.version,providerMetadata:this.providerAccessor().metadata}}get providerStatus(){return this.providerStatusAccessor()}addHandler(e,t,r){var a;if(this.emitterAccessor().addHandler(e,t),B(e,this.providerStatus))try{t({clientName:this.metadata.name,domain:this.metadata.domain,providerName:this._provider.metadata.name})}catch(n){(a=this._logger)==null||a.error("Error running event handler:",n)}r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this.emitterAccessor().removeHandler(e,t)}getHandlers(e){return this.emitterAccessor().getHandlers(e)}setLogger(e){return this._clientLogger=new b(e),this}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}getBooleanValue(e,t,r){return this.getBooleanDetails(e,t,r).value}getBooleanDetails(e,t,r){return this.evaluate(e,this._provider.resolveBooleanEvaluation,t,"boolean",r)}getStringValue(e,t,r){return this.getStringDetails(e,t,r).value}getStringDetails(e,t,r){return this.evaluate(e,this._provider.resolveStringEvaluation,t,"string",r)}getNumberValue(e,t,r){return this.getNumberDetails(e,t,r).value}getNumberDetails(e,t,r){return this.evaluate(e,this._provider.resolveNumberEvaluation,t,"number",r)}getObjectValue(e,t,r){return this.getObjectDetails(e,t,r).value}getObjectDetails(e,t,r){return this.evaluate(e,this._provider.resolveObjectEvaluation,t,"object",r)}track(e,t={}){var r,o,a;try{if(this.shortCircuitIfNotReady(),typeof this._provider.track=="function"){let n=Object.freeze(P({},this.apiContextAccessor((r=this==null?void 0:this.options)==null?void 0:r.domain)));return(a=(o=this._provider).track)==null?void 0:a.call(o,e,n,t)}else this._logger.debug("Provider does not support the track function; will no-op.")}catch(n){this._logger.debug("Error recording tracking event.",n)}}evaluate(e,t,r,o,a={}){var v,C;let n=[...this.apiHooksAccessor(),...this.getHooks(),...a.hooks||[],...this._provider.hooks||[]],d=[...n].reverse(),s=P({},this.apiContextAccessor((v=this==null?void 0:this.options)==null?void 0:v.domain)),l=d.map(()=>Object.freeze({flagKey:e,defaultValue:r,flagValueType:o,clientMetadata:this.metadata,providerMetadata:this._provider.metadata,context:s,logger:this._logger,hookData:new Y})),c;try{this.beforeHooks(n,l,a),this.shortCircuitIfNotReady();let u=t.call(this._provider,e,r,s,this._logger),E=k(P({},u),{flagMetadata:Object.freeze((C=u.flagMetadata)!=null?C:{}),flagKey:e});if(E.errorCode){let O=oe(E.errorCode,E.errorMessage);this.errorHooks(d,l,O,a),c=this.getErrorEvaluationDetails(e,r,O,E.flagMetadata)}else this.afterHooks(d,l,E,a),c=E}catch(u){this.errorHooks(d,l,u,a),c=this.getErrorEvaluationDetails(e,r,u)}return this.finallyHooks(d,l,c,a),c}beforeHooks(e,t,r){var o;for(let[a,n]of e.entries()){let d=e.length-1-a,s=t[d];Object.freeze(s),Object.freeze(s.context),(o=n==null?void 0:n.before)==null||o.call(n,s,Object.freeze(r.hookHints))}}afterHooks(e,t,r,o){var a;for(let[n,d]of e.entries()){let s=t[n];(a=d==null?void 0:d.after)==null||a.call(d,s,r,o.hookHints)}}errorHooks(e,t,r,o){var a;for(let[n,d]of e.entries())try{let s=t[n];(a=d==null?void 0:d.error)==null||a.call(d,s,r,o.hookHints)}catch(s){this._logger.error(`Unhandled error during 'error' hook: ${s}`),s instanceof Error&&this._logger.error(s.stack),this._logger.error(s==null?void 0:s.stack)}}finallyHooks(e,t,r,o){var a;for(let[n,d]of e.entries())try{let s=t[n];(a=d==null?void 0:d.finally)==null||a.call(d,s,r,o.hookHints)}catch(s){this._logger.error(`Unhandled error during 'finally' hook: ${s}`),s instanceof Error&&this._logger.error(s.stack),this._logger.error(s==null?void 0:s.stack)}}get _provider(){return this.providerAccessor()}get _logger(){return this._clientLogger||this.globalLogger()}shortCircuitIfNotReady(){if(this.providerStatus==="NOT_READY")throw new H("provider has not yet initialized");if(this.providerStatus==="FATAL")throw new L("provider is in an irrecoverable error state")}getErrorEvaluationDetails(e,t,r,o={}){let a=r==null?void 0:r.message;return{errorCode:(r==null?void 0:r.code)||"GENERAL",errorMessage:a,value:t,reason:R.ERROR,flagMetadata:Object.freeze(o),flagKey:e}}};var _e=Symbol.for("@openfeature/web-sdk/api"),Re=globalThis,te=class i extends z{constructor(){super("client");this._statusEnumType=w;this._apiEmitter=new S;this._defaultProvider=new M(q,"NOT_READY",this._statusEnumType);this._domainScopedProviders=new Map;this._createEventEmitter=()=>new S}static getInstance(){let t=Re[_e];if(t)return t;let r=new i;return Re[_e]=r,r}getProviderStatus(t){var r,o;return t?(o=(r=this._domainScopedProviders.get(t))==null?void 0:r.status)!=null?o:this._defaultProvider.status:this._defaultProvider.status}setProviderAndWait(t,r,o){return m(this,null,function*(){let a=D(t),n=a?x(r):x(t),d=a?x(o):x(r);d&&(a?this._domainScopedContext.set(a,d):this._context=d),yield this.setAwaitableProvider(a,n)})}setProvider(t,r,o){let a=D(t),n=a?x(r):x(t),d=a?x(o):x(r);d&&(a?this._domainScopedContext.set(a,d):this._context=d);let s=this.setAwaitableProvider(a,n);return Promise.resolve(s).catch(l=>{this._logger.error("Error during provider initialization:",l)}),this}getProvider(t){return this.getProviderForClient(t)}setContext(t,r){return m(this,null,function*(){var n,d;let o=D(t),a=(d=(n=x(t))!=null?n:x(r))!=null?d:{};if(o){let s=this._domainScopedProviders.get(o);if(s){let l=this.getContext(o);this._domainScopedContext.set(o,a),yield this.runProviderContextChangeHandler(o,s,l,a)}else this._domainScopedContext.set(o,a)}else{let s=this._context;this._context=a;let l=Array.from(this._domainScopedProviders.entries()).filter(([v])=>!this._domainScopedContext.has(v)).reduce((v,[C,u])=>(v.push({domain:C,wrapper:u}),v),[]),c=[{domain:void 0,wrapper:this._defaultProvider},...l];yield Promise.all(c.map(v=>this.runProviderContextChangeHandler(v.domain,v.wrapper,s,a)))}})}getContext(t){let r=D(t);if(r){let o=this._domainScopedContext.get(r);if(o)return o;this._logger.debug(`Unable to find context for '${r}'.`)}return this._context}clearContext(t){return m(this,null,function*(){let r=D(t);if(r){let o=this._domainScopedProviders.get(r);if(o){let a=this.getContext(r);this._domainScopedContext.delete(r);let n=this.getContext();yield this.runProviderContextChangeHandler(r,o,a,n)}else this._domainScopedContext.delete(r)}else return this.setContext({})})}clearContexts(){return m(this,null,function*(){yield this.clearContext(),yield Promise.allSettled(Array.from(this._domainScopedProviders.keys()).map(t=>this.clearContext(t)))})}getClient(t,r){return new ee(()=>this.getProviderForClient(t),()=>this.getProviderStatus(t),()=>this.buildAndCacheEventEmitterForClient(t),o=>this.getContext(o),()=>this.getHooks(),()=>this._logger,{domain:t,version:r})}clearProviders(){return m(this,null,function*(){yield Ee(i.prototype,this,"clearProvidersAndSetDefault").call(this,q),this._domainScopedContext.clear()})}runProviderContextChangeHandler(t,r,o,a){return m(this,null,function*(){var d,s,l,c,v,C;let n=((s=(d=r.provider)==null?void 0:d.metadata)==null?void 0:s.name)||"unnamed-provider";try{if(typeof r.provider.onContextChange=="function"){let u=r.provider.onContextChange(o,a);typeof(u==null?void 0:u.then)=="function"&&(r.incrementPendingContextChanges(),r.status=this._statusEnumType.RECONCILING,this.getAssociatedEventEmitters(t).forEach(E=>{E==null||E.emit("PROVIDER_RECONCILING",{domain:t,providerName:n})}),(l=this._apiEmitter)==null||l.emit("PROVIDER_RECONCILING",{domain:t,providerName:n}),yield u,r.decrementPendingContextChanges())}r.status=this._statusEnumType.READY,r.allContextChangesSettled&&(this.getAssociatedEventEmitters(t).forEach(u=>{u==null||u.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:n})}),(c=this._apiEmitter)==null||c.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:n}))}catch(u){if(r.decrementPendingContextChanges(),r.status=this._statusEnumType.ERROR,r.allContextChangesSettled){let E=u,O=`Error running ${n}'s context change handler: ${E==null?void 0:E.message}`;(v=this._logger)==null||v.error(`${O}`,u),this.getAssociatedEventEmitters(t).forEach(V=>{V==null||V.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:n,message:O})}),(C=this._apiEmitter)==null||C.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:n,message:O})}}})}},Ye=te.getInstance();return Fe(Ke);})();
|
|
1
|
+
"use strict";var OpenFeature=(()=>{var Le=Object.create;var Y=Object.defineProperty,Ve=Object.defineProperties,Ie=Object.getOwnPropertyDescriptor,Me=Object.getOwnPropertyDescriptors,Ge=Object.getOwnPropertyNames,ye=Object.getOwnPropertySymbols,Ce=Object.getPrototypeOf,Te=Object.prototype.hasOwnProperty,je=Object.prototype.propertyIsEnumerable,Ye=Reflect.get;var Re=(s,e,t)=>e in s?Y(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,m=(s,e)=>{for(var t in e||(e={}))Te.call(e,t)&&Re(s,t,e[t]);if(ye)for(var t of ye(e))je.call(e,t)&&Re(s,t,e[t]);return s},_=(s,e)=>Ve(s,Me(e));var Be=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),Ue=(s,e)=>{for(var t in e)Y(s,t,{get:e[t],enumerable:!0})},_e=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ge(e))!Te.call(s,o)&&o!==t&&Y(s,o,{get:()=>e[o],enumerable:!(r=Ie(e,o))||r.enumerable});return s};var We=(s,e,t)=>(t=s!=null?Le(Ce(s)):{},_e(e||!s||!s.__esModule?Y(t,"default",{value:s,enumerable:!0}):t,s)),Ke=s=>_e(Y({},"__esModule",{value:!0}),s);var Oe=(s,e,t)=>Ye(Ce(s),t,e);var E=(s,e,t)=>new Promise((r,o)=>{var n=a=>{try{l(t.next(a))}catch(d){o(d)}},i=a=>{try{l(t.throw(a))}catch(d){o(d)}},l=a=>a.done?r(a.value):Promise.resolve(a.value).then(n,i);l((t=t.apply(s,e)).next())});var Ne=Be((ao,ge)=>{"use strict";var qe=Object.prototype.hasOwnProperty,C="~";function q(){}Object.create&&(q.prototype=Object.create(null),new q().__proto__||(C=!1));function Qe(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function De(s,e,t,r,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new Qe(t,r||s,o),i=C?C+e:e;return s._events[i]?s._events[i].fn?s._events[i]=[s._events[i],n]:s._events[i].push(n):(s._events[i]=n,s._eventsCount++),s}function te(s,e){--s._eventsCount===0?s._events=new q:delete s._events[e]}function y(){this._events=new q,this._eventsCount=0}y.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)qe.call(t,r)&&e.push(C?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};y.prototype.listeners=function(e){var t=C?C+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var o=0,n=r.length,i=new Array(n);o<n;o++)i[o]=r[o].fn;return i};y.prototype.listenerCount=function(e){var t=C?C+e:e,r=this._events[t];return r?r.fn?1:r.length:0};y.prototype.emit=function(e,t,r,o,n,i){var l=C?C+e:e;if(!this._events[l])return!1;var a=this._events[l],d=arguments.length,v,u;if(a.fn){switch(a.once&&this.removeListener(e,a.fn,void 0,!0),d){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,t),!0;case 3:return a.fn.call(a.context,t,r),!0;case 4:return a.fn.call(a.context,t,r,o),!0;case 5:return a.fn.call(a.context,t,r,o,n),!0;case 6:return a.fn.call(a.context,t,r,o,n,i),!0}for(u=1,v=new Array(d-1);u<d;u++)v[u-1]=arguments[u];a.fn.apply(a.context,v)}else{var P=a.length,p;for(u=0;u<P;u++)switch(a[u].once&&this.removeListener(e,a[u].fn,void 0,!0),d){case 1:a[u].fn.call(a[u].context);break;case 2:a[u].fn.call(a[u].context,t);break;case 3:a[u].fn.call(a[u].context,t,r);break;case 4:a[u].fn.call(a[u].context,t,r,o);break;default:if(!v)for(p=1,v=new Array(d-1);p<d;p++)v[p-1]=arguments[p];a[u].fn.apply(a[u].context,v)}}return!0};y.prototype.on=function(e,t,r){return De(this,e,t,r,!1)};y.prototype.once=function(e,t,r){return De(this,e,t,r,!0)};y.prototype.removeListener=function(e,t,r,o){var n=C?C+e:e;if(!this._events[n])return this;if(!t)return te(this,n),this;var i=this._events[n];if(i.fn)i.fn===t&&(!o||i.once)&&(!r||i.context===r)&&te(this,n);else{for(var l=0,a=[],d=i.length;l<d;l++)(i[l].fn!==t||o&&!i[l].once||r&&i[l].context!==r)&&a.push(i[l]);a.length?this._events[n]=a.length===1?a[0]:a:te(this,n)}return this};y.prototype.removeAllListeners=function(e){var t;return e?(t=C?C+e:e,this._events[t]&&te(this,t)):(this._events=new q,this._eventsCount=0),this};y.prototype.off=y.prototype.removeListener;y.prototype.addListener=y.prototype.on;y.prefixed=C;y.EventEmitter=y;typeof ge!="undefined"&&(ge.exports=y)});var et={};Ue(et,{AggregateError:()=>ne,AllProviderEvents:()=>A,AllProviderStatus:()=>k,BaseEvaluationStrategy:()=>H,ClientProviderEvents:()=>A,ClientProviderStatus:()=>k,ComparisonStrategy:()=>he,DefaultLogger:()=>F,ErrorCode:()=>x,ErrorWithCode:()=>Q,FirstMatchStrategy:()=>Z,FirstSuccessfulStrategy:()=>fe,FlagNotFoundError:()=>w,GeneralError:()=>f,GenericEventEmitter:()=>J,InMemoryProvider:()=>me,InvalidContextError:()=>U,LOG_LEVELS:()=>Se,MapHookData:()=>B,MultiProvider:()=>xe,NOOP_PROVIDER:()=>ee,OpenFeature:()=>Ze,OpenFeatureAPI:()=>de,OpenFeatureCommonAPI:()=>X,OpenFeatureError:()=>c,OpenFeatureEventEmitter:()=>b,ParseError:()=>W,ProviderEvents:()=>A,ProviderFatalError:()=>L,ProviderNotReadyError:()=>V,ProviderStatus:()=>k,ProviderWrapper:()=>M,SafeLogger:()=>D,ServerProviderEvents:()=>be,ServerProviderStatus:()=>Ae,StandardResolutionReasons:()=>O,TargetingKeyMissingError:()=>K,TelemetryAttribute:()=>T,TelemetryFlagMetadata:()=>z,TypeMismatchError:()=>I,constructAggregateError:()=>ie,createEvaluationEvent:()=>ze,instantiateErrorByErrorCode:()=>ve,isObject:()=>Fe,isString:()=>ke,objectOrUndefined:()=>R,statusMatchesEvent:()=>$,stringOrUndefined:()=>N,throwAggregateErrorFromPromiseResults:()=>ae});var B=class{constructor(){this.data=new Map}set(e,t){this.data.set(e,t)}get(e){return this.data.get(e)}has(e){return this.data.has(e)}delete(e){return this.data.delete(e)}clear(){this.data.clear()}};var O={STATIC:"STATIC",DEFAULT:"DEFAULT",TARGETING_MATCH:"TARGETING_MATCH",SPLIT:"SPLIT",CACHED:"CACHED",DISABLED:"DISABLED",UNKNOWN:"UNKNOWN",STALE:"STALE",ERROR:"ERROR"},x=(a=>(a.PROVIDER_NOT_READY="PROVIDER_NOT_READY",a.PROVIDER_FATAL="PROVIDER_FATAL",a.FLAG_NOT_FOUND="FLAG_NOT_FOUND",a.PARSE_ERROR="PARSE_ERROR",a.TYPE_MISMATCH="TYPE_MISMATCH",a.TARGETING_KEY_MISSING="TARGETING_KEY_MISSING",a.INVALID_CONTEXT="INVALID_CONTEXT",a.GENERAL="GENERAL",a))(x||{});var c=class s extends Error{constructor(e,t){super(e),Object.setPrototypeOf(this,s.prototype),this.name="OpenFeatureError",this.cause=t==null?void 0:t.cause}};var w=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="FlagNotFoundError",this.code="FLAG_NOT_FOUND"}};var f=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="GeneralError",this.code="GENERAL"}};var U=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="InvalidContextError",this.code="INVALID_CONTEXT"}};var W=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="ParseError",this.code="PARSE_ERROR"}};var L=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="ProviderFatalError",this.code="PROVIDER_FATAL"}};var V=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="ProviderNotReadyError",this.code="PROVIDER_NOT_READY"}};var K=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="TargetingKeyMissingError",this.code="TARGETING_KEY_MISSING"}};var I=class s extends c{constructor(e,t){super(e,t),Object.setPrototypeOf(this,s.prototype),this.name="TypeMismatchError",this.code="TYPE_MISMATCH"}};var ve=(s,e)=>{switch(s){case"FLAG_NOT_FOUND":return new w(e);case"PARSE_ERROR":return new W(e);case"TYPE_MISMATCH":return new I(e);case"TARGETING_KEY_MISSING":return new K(e);case"INVALID_CONTEXT":return new U(e);case"PROVIDER_NOT_READY":return new V(e);case"PROVIDER_FATAL":return new L(e);default:return new f(e)}};var Ae=(n=>(n.NOT_READY="NOT_READY",n.READY="READY",n.ERROR="ERROR",n.STALE="STALE",n.FATAL="FATAL",n))(Ae||{}),k=(i=>(i.NOT_READY="NOT_READY",i.READY="READY",i.ERROR="ERROR",i.STALE="STALE",i.FATAL="FATAL",i.RECONCILING="RECONCILING",i))(k||{});var be=(o=>(o.Ready="PROVIDER_READY",o.Error="PROVIDER_ERROR",o.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",o.Stale="PROVIDER_STALE",o))(be||{}),A=(i=>(i.Ready="PROVIDER_READY",i.Error="PROVIDER_ERROR",i.ConfigurationChanged="PROVIDER_CONFIGURATION_CHANGED",i.ContextChanged="PROVIDER_CONTEXT_CHANGED",i.Reconciling="PROVIDER_RECONCILING",i.Stale="PROVIDER_STALE",i))(A||{});var $e={READY:"PROVIDER_READY",ERROR:"PROVIDER_ERROR",FATAL:"PROVIDER_ERROR",STALE:"PROVIDER_STALE",RECONCILING:"PROVIDER_RECONCILING",NOT_READY:void 0},$=(s,e)=>!e&&s==="PROVIDER_READY"||$e[e]===s;var F=class{error(...e){console.error(...e)}warn(...e){console.warn(...e)}info(){}debug(){}};var Se=["error","warn","info","debug"],D=class{constructor(e){this.fallbackLogger=new F;try{for(let t of Se)if(!e[t]||typeof e[t]!="function")throw new Error(`The provided logger is missing the ${t} method.`);this.logger=e}catch(t){console.error(t),console.error("Falling back to the default logger."),this.logger=this.fallbackLogger}}error(...e){this.log("error",...e)}warn(...e){this.log("warn",...e)}info(...e){this.log("info",...e)}debug(...e){this.log("debug",...e)}log(e,...t){try{this.logger[e](...t)}catch(r){this.fallbackLogger[e](...t)}}};var J=class{constructor(e){this.globalLogger=e;this._handlers={PROVIDER_CONFIGURATION_CHANGED:new WeakMap,PROVIDER_CONTEXT_CHANGED:new WeakMap,PROVIDER_READY:new WeakMap,PROVIDER_ERROR:new WeakMap,PROVIDER_STALE:new WeakMap,PROVIDER_RECONCILING:new WeakMap}}emit(e,t){this.eventEmitter.emit(e,t)}addHandler(e,t){let r=n=>E(this,null,function*(){var i;try{yield t(n)}catch(l){(i=this._logger)==null||i.error("Error running event handler:",l)}}),o=this._handlers[e].get(t);this._handlers[e].set(t,[...o||[],r]),this.eventEmitter.on(e,r)}removeHandler(e,t){let r=this._handlers[e].get(t);if(r){let o=r.pop();o&&this.eventEmitter.removeListener(e,o)}}removeAllHandlers(e){e?this.eventEmitter.removeAllListeners(e):this.eventEmitter.removeAllListeners()}getHandlers(e){return this.eventEmitter.listeners(e)}setLogger(e){return this._eventLogger=new D(e),this}get _logger(){var e,t;return(t=this._eventLogger)!=null?t:(e=this.globalLogger)==null?void 0:e.call(this)}};var T={KEY:"feature_flag.key",ERROR_CODE:"error.type",ERROR_MESSAGE:"error.message",VARIANT:"feature_flag.result.variant",VALUE:"feature_flag.result.value",CONTEXT_ID:"feature_flag.context.id",REASON:"feature_flag.result.reason",PROVIDER:"feature_flag.provider.name",FLAG_SET_ID:"feature_flag.set.id",VERSION:"feature_flag.version"};var z={CONTEXT_ID:"contextId",FLAG_SET_ID:"flagSetId",VERSION:"version"};var Je="feature_flag.evaluation";function ze(s,e){var i,l,a;let t={[T.KEY]:s.flagKey,[T.PROVIDER]:s.providerMetadata.name,[T.REASON]:((i=e.reason)!=null?i:O.UNKNOWN).toLowerCase()};if(e.variant&&(t[T.VARIANT]=e.variant),e.value!==null)if(typeof e.value!="object")t[T.VALUE]=e.value;else try{t[T.VALUE]=JSON.stringify(e.value)}catch(d){}let r=(l=e.flagMetadata[z.CONTEXT_ID])!=null?l:s.context.targetingKey;r&&(t[T.CONTEXT_ID]=r);let o=e.flagMetadata[z.FLAG_SET_ID];o&&(t[T.FLAG_SET_ID]=o);let n=e.flagMetadata[z.VERSION];return n&&(t[T.VERSION]=n),e.reason===O.ERROR&&(t[T.ERROR_CODE]=((a=e.errorCode)!=null?a:"GENERAL").toLowerCase(),e.errorMessage&&(t[T.ERROR_MESSAGE]=e.errorMessage)),{name:Je,attributes:t}}function ke(s){return typeof s=="string"}function N(s){return ke(s)?s:void 0}function Fe(s){return typeof s=="object"}function R(s){return Fe(s)?s:void 0}function pe(s){return typeof s!="undefined"&&s!==null}var M=class{constructor(e,t,r){this._provider=e;this._status=t;this._pendingContextChanges=0;var o,n,i;(o=e.events)==null||o.addHandler("PROVIDER_READY",()=>{this._status=r.READY}),(n=e.events)==null||n.addHandler("PROVIDER_STALE",()=>{this._status=r.STALE}),(i=e.events)==null||i.addHandler("PROVIDER_ERROR",l=>{(l==null?void 0:l.errorCode)==="PROVIDER_FATAL"?this._status=r.FATAL:this._status=r.ERROR})}get provider(){return this._provider}set provider(e){this._provider=e}get status(){return this._status}set status(e){this._status=e}get allContextChangesSettled(){return this._pendingContextChanges===0}incrementPendingContextChanges(){this._pendingContextChanges++}decrementPendingContextChanges(){this._pendingContextChanges--}},X=class{constructor(e){this._hooks=[];this._context={};this._logger=new F;this._clientEventHandlers=new Map;this._domainScopedContext=new Map;this._clientEvents=new Map;this._runsOn=e}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}setLogger(e){return this._logger=new D(e),this}get providerMetadata(){return this.getProviderMetadata()}getProviderMetadata(e){return this.getProviderForClient(e).metadata}addHandler(e,t,r){[...new Map([[void 0,this._defaultProvider]]),...this._domainScopedProviders].forEach(o=>{var d;let n=o[0],i=o[1].provider,l=o[1].status;if($(e,l))try{t({domain:n,providerName:i.metadata.name})}catch(v){(d=this._logger)==null||d.error("Error running event handler:",v)}}),this._apiEmitter.addHandler(e,t),r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this._apiEmitter.removeHandler(e,t)}clearHandlers(){this._apiEmitter.removeAllHandlers()}getHandlers(e){return this._apiEmitter.getHandlers(e)}setAwaitableProvider(e,t){var v,u,P,p,h,S,G,Pe;let r=N(e),o=(v=R(e))!=null?v:R(t);if(!o){this._logger.debug("No provider defined, ignoring setProvider call");return}let n=this.getProviderForClient(r),i=o.metadata.name;if(n===o){this._logger.debug("Provider is already set, ignoring setProvider call");return}if(!o.runsOn)this._logger.debug(`Provider '${o.metadata.name}' has not defined its intended use.`);else if(o.runsOn!==this._runsOn)throw new f(`Provider '${o.metadata.name}' is intended for use on the ${o.runsOn}.`);let l=this.getAssociatedEventEmitters(r),a,d=new M(o,this._statusEnumType.NOT_READY,this._statusEnumType);return typeof o.initialize=="function"&&!this.allProviders.includes(o)?a=(h=(p=(P=o.initialize)==null?void 0:P.call(o,r?(u=this._domainScopedContext.get(r))!=null?u:this._context:this._context))==null?void 0:p.then(()=>{var g;d.status=this._statusEnumType.READY,this.getAssociatedEventEmitters(r).forEach(j=>{j==null||j.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}),(g=this._apiEmitter)==null||g.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}))==null?void 0:h.catch(g=>{var j;throw(g==null?void 0:g.code)==="PROVIDER_FATAL"?d.status=this._statusEnumType.FATAL:d.status=this._statusEnumType.ERROR,this.getAssociatedEventEmitters(r).forEach(ue=>{ue==null||ue.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:i,message:g==null?void 0:g.message})}),(j=this._apiEmitter)==null||j.emit("PROVIDER_ERROR",{clientName:r,domain:r,providerName:i,message:g==null?void 0:g.message}),g}):(d.status=this._statusEnumType.READY,l.forEach(g=>{g==null||g.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})}),(S=this._apiEmitter)==null||S.emit("PROVIDER_READY",{clientName:r,domain:r,providerName:i})),r?this._domainScopedProviders.set(r,d):this._defaultProvider=d,this.transferListeners(n,o,r,l),this.allProviders.includes(n)||(Pe=(G=n==null?void 0:n.onClose)==null?void 0:G.call(n))==null||Pe.catch(g=>{this._logger.error(`error closing provider: ${g==null?void 0:g.message}, ${g==null?void 0:g.stack}`)}),a}getProviderForClient(e){var t,r;return e?(r=(t=this._domainScopedProviders.get(e))==null?void 0:t.provider)!=null?r:this._defaultProvider.provider:this._defaultProvider.provider}buildAndCacheEventEmitterForClient(e){let t=this._clientEvents.get(e);if(t)return t;let r=this._createEventEmitter();this._clientEvents.set(e,r);let o=this.getProviderForClient(e);return Object.values(A).forEach(n=>{var i;return(i=o.events)==null?void 0:i.addHandler(n,l=>E(this,null,function*(){r.emit(n,_(m({},l),{clientName:e,domain:e,providerName:o.metadata.name}))}))}),r}getUnboundEmitters(){let e=[...this._domainScopedProviders.keys()];return[...[...this._clientEvents.keys()].filter(pe).filter(o=>!e.includes(o)).map(o=>this._clientEvents.get(o)),this._clientEvents.get(void 0)].filter(pe)}getAssociatedEventEmitters(e){return e?[this.buildAndCacheEventEmitterForClient(e)]:this.getUnboundEmitters()}transferListeners(e,t,r,o){var i;(i=this._clientEventHandlers.get(r))==null||i.forEach(l=>{var a;return(a=e.events)==null?void 0:a.removeHandler(...l)});let n=Object.values(A).map(l=>[l,d=>E(this,null,function*(){o.forEach(v=>{v==null||v.emit(l,_(m({},d),{clientName:r,domain:r,providerName:t.metadata.name}))}),this._apiEmitter.emit(l,_(m({},d),{clientName:r,domain:r,providerName:t.metadata.name}))})]);this._clientEventHandlers.set(r,n),n.forEach(l=>{var a;return(a=t.events)==null?void 0:a.addHandler(...l)})}close(){return E(this,null,function*(){var t,r;try{yield(r=(t=this==null?void 0:this._defaultProvider.provider)==null?void 0:t.onClose)==null?void 0:r.call(t)}catch(o){this.handleShutdownError(this._defaultProvider.provider,o)}let e=Array.from(this._domainScopedProviders);yield Promise.all(e.map(n=>E(this,[n],function*([,o]){var i,l;try{yield(l=o==null?void 0:(i=o.provider).onClose)==null?void 0:l.call(i)}catch(a){this.handleShutdownError(o==null?void 0:o.provider,a)}})))})}clearProvidersAndSetDefault(e){return E(this,null,function*(){try{yield this.close()}catch(t){this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.")}finally{this._domainScopedProviders.clear(),this._defaultProvider=new M(e,this._statusEnumType.NOT_READY,this._statusEnumType)}})}get allProviders(){return[...[...this._domainScopedProviders.values()].map(e=>e.provider),this._defaultProvider.provider]}handleShutdownError(e,t){this._logger.error(`Error during shutdown of provider ${e.metadata.name}: ${t}`),this._logger.error(t==null?void 0:t.stack)}};var Xe="No-op",ce=class{constructor(){this.metadata={name:"No-op Provider"}}resolveBooleanEvaluation(e,t){return this.noOp(t)}resolveStringEvaluation(e,t){return this.noOp(t)}resolveNumberEvaluation(e,t){return this.noOp(t)}resolveObjectEvaluation(e,t){return this.noOp(t)}noOp(e){return{value:e,reason:Xe}}},ee=new ce;var Ee=We(Ne(),1);var b=class extends J{constructor(){super();this.eventEmitter=new Ee.default}};var re=class s extends c{constructor(e){super(e),Object.setPrototypeOf(this,s.prototype),this.name="VariantNotFoundError",this.code="GENERAL"}};var me=class{constructor(e={}){this.events=new b;this.runsOn="client";this.metadata={name:"in-memory"};this._flagConfiguration=m({},e)}putConfiguration(e){return E(this,null,function*(){try{let t=Object.entries(m(m({},e),this._flagConfiguration)).map(([r])=>r);this._flagConfiguration=m({},e),this.events.emit("PROVIDER_CONFIGURATION_CHANGED",{flagsChanged:t})}catch(t){throw this.events.emit("PROVIDER_ERROR"),t}})}resolveBooleanEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveNumberEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveStringEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveObjectEvaluation(e,t,r,o){return this.resolveAndCheckFlag(e,t,r||this._context,o)}resolveAndCheckFlag(e,t,r,o){if(!(e in this._flagConfiguration)){let i=`no flag found with key ${e}`;throw o==null||o.debug(i),new w(i)}if(this._flagConfiguration[e].disabled)return{value:t,reason:O.DISABLED};let n=this.resolveFlagWithReason(e,r);if(n.value===void 0){let i=`no value associated with variant provided for ${e} found`;throw o==null||o.error(i),new re(i)}if(typeof n.value!=typeof t)throw new I;return n}resolveFlagWithReason(e,t){try{return this.lookupFlagValue(e,t)}catch(r){throw r instanceof c?r:new f((r==null?void 0:r.message)||"unknown error")}}lookupFlagValue(e,t){var a;let r=this._flagConfiguration[e],o=t&&(r==null?void 0:r.contextEvaluator),n=o?(a=r.contextEvaluator)==null?void 0:a.call(r,t):r.defaultVariant,i=n&&(r==null?void 0:r.variants[n]),l=o?O.TARGETING_MATCH:O.STATIC;return _(m({value:i},n&&{variant:n}),{reason:l})}};var oe=class{constructor(e){this.logger=e}beforeHooks(e,t,r){var o;for(let n of e!=null?e:[])(o=n==null?void 0:n.before)==null||o.call(n,t,Object.freeze(r))}afterHooks(e,t,r,o){var n;for(let i of e!=null?e:[])(n=i==null?void 0:i.after)==null||n.call(i,t,r,o)}errorHooks(e,t,r,o){var n;for(let i of e!=null?e:[])try{(n=i==null?void 0:i.error)==null||n.call(i,t,r,o)}catch(l){this.logger.error(`Unhandled error during 'error' hook: ${l}`),l instanceof Error&&this.logger.error(l.stack)}}finallyHooks(e,t,r,o){var n;for(let i of e!=null?e:[])try{(n=i==null?void 0:i.finally)==null||n.call(i,t,r,o)}catch(l){this.logger.error(`Unhandled error during 'finally' hook: ${l}`),l instanceof Error&&this.logger.error(l.stack)}}};var Q=class extends c{constructor(t,r){super(r);this.code=t}},ne=class extends f{constructor(t,r){super(t);this.originalErrors=r}},ie=s=>{let e=s.map(({providerName:t,error:r})=>({source:t,error:r})).flat();return new ne(`Provider errors occurred: ${e[0].source}: ${e[0].error}`,e)},ae=(s,e)=>{let t=s.map((r,o)=>r.status==="rejected"?{error:r.reason,providerName:e[o].name}:null).filter(r=>!!r);if(t.length)throw ie(t)};var H=class{shouldEvaluateThisProvider(e,t){return!(e.providerStatus==="NOT_READY"||e.providerStatus==="FATAL")}shouldEvaluateNextProvider(e,t,r){return!0}shouldTrackWithThisProvider(e,t,r,o){return!(e.providerStatus==="NOT_READY"||e.providerStatus==="FATAL")}hasError(e){return"thrownError"in e||!!e.details.errorCode}hasErrorWithCode(e,t){var r;return"thrownError"in e?((r=e.thrownError)==null?void 0:r.code)===t:e.details.errorCode===t}collectProviderErrors(e){var r;let t=[];for(let o of e)"thrownError"in o?t.push({providerName:o.providerName,error:o.thrownError}):o.details.errorCode&&t.push({providerName:o.providerName,error:new Q(o.details.errorCode,(r=o.details.errorMessage)!=null?r:"unknown error")});return{errors:t}}resolutionToFinalResult(e){return{details:e.details,provider:e.provider,providerName:e.providerName}}};var Z=class extends H{shouldEvaluateNextProvider(e,t,r){return this.hasErrorWithCode(r,"FLAG_NOT_FOUND")?!0:(this.hasError(r),!1)}determineFinalResult(e,t,r){let o=r[r.length-1];return this.hasError(o)?this.collectProviderErrors(r):this.resolutionToFinalResult(o)}};var fe=class extends H{shouldEvaluateNextProvider(e,t,r){return this.hasError(r)}determineFinalResult(e,t,r){let o=r[r.length-1];return this.hasError(o)?this.collectProviderErrors(r):this.resolutionToFinalResult(o)}};var he=class extends H{constructor(t,r){super();this.fallbackProvider=t;this.onMismatch=r}determineFinalResult(t,r,o){var d;let n,i,l,a=!1;for(let[v,u]of o.entries()){if(this.hasError(u))return this.collectProviderErrors(o);u.provider===this.fallbackProvider&&(i=u),v===0&&(l=u),typeof n!="undefined"&&n!==u.details.value?a=!0:n=u.details.value}if(!i)throw new f("Fallback provider not found in resolution results");if(!l)throw new f("Final resolution not found in resolution results");return a?((d=this.onMismatch)==null||d.call(this,o),{details:i.details,provider:i.provider}):this.resolutionToFinalResult(l)}};var se=class{constructor(e){this.events=e;this.providerStatuses={}}wrapEventHandler(e){var r,o,n,i,l;let t=e.provider;(r=t.events)==null||r.addHandler("PROVIDER_ERROR",a=>{this.changeProviderStatus(e.name,"ERROR",a)}),(o=t.events)==null||o.addHandler("PROVIDER_STALE",a=>{this.changeProviderStatus(e.name,"STALE",a)}),(n=t.events)==null||n.addHandler("PROVIDER_CONFIGURATION_CHANGED",a=>{this.events.emit("PROVIDER_CONFIGURATION_CHANGED",a)}),(i=t.events)==null||i.addHandler("PROVIDER_READY",a=>{this.changeProviderStatus(e.name,"READY",a)}),(l=t.events)==null||l.addHandler("PROVIDER_RECONCILING",a=>{this.changeProviderStatus(e.name,"RECONCILING",a)})}providerStatus(e){return this.providerStatuses[e]}getStatusFromProviderStatuses(){let e=Object.values(this.providerStatuses);return e.includes("FATAL")?"FATAL":e.includes("NOT_READY")?"NOT_READY":e.includes("ERROR")?"ERROR":e.includes("STALE")?"STALE":e.includes("RECONCILING")?"RECONCILING":"READY"}changeProviderStatus(e,t,r){let o=this.getStatusFromProviderStatuses();this.providerStatuses[e]=t;let n=this.getStatusFromProviderStatuses();o!==n&&(n==="FATAL"||n==="ERROR"?this.events.emit("PROVIDER_ERROR",r):n==="STALE"?this.events.emit("PROVIDER_STALE",r):n==="READY"?this.events.emit("PROVIDER_READY",r):n==="RECONCILING"&&this.events.emit("PROVIDER_RECONCILING",r))}};var xe=class s{constructor(e,t=new Z,r=new F){this.constructorProviders=e;this.evaluationStrategy=t;this.logger=r;this.runsOn="client";this.events=new b;this.hookContexts=new WeakMap;this.hookHints=new WeakMap;this.providerEntries=[];this.providerEntriesByName={};this.statusTracker=new se(this.events);this.hookExecutor=new oe(this.logger),this.registerProviders(e);let o=Object.keys(this.providerEntriesByName).reduce((n,i)=>_(m({},n),{[i]:this.providerEntriesByName[i].provider.metadata}),{});this.metadata=_(m({},o),{name:s.name})}registerProviders(e){var r,o;let t={};for(let n of e){let i=n.provider.metadata.name,l=(r=n.name)!=null?r:i;if(n.name&&t[n.name])throw new Error("Provider names must be unique");(o=t[l])!=null||(t[l]=[]),t[l].push(n.provider)}for(let n of Object.keys(t)){let i=t[n].length>1;for(let l=0;l<t[n].length;l++){let a=i?`${n}-${l+1}`:n;this.providerEntriesByName[a]={provider:t[n][l],name:a},this.providerEntries.push(this.providerEntriesByName[a]),this.statusTracker.wrapEventHandler(this.providerEntriesByName[a])}}Object.freeze(this.providerEntries),Object.freeze(this.providerEntriesByName)}initialize(e){return E(this,null,function*(){let t=yield Promise.allSettled(this.providerEntries.map(r=>{var o,n;return(n=(o=r.provider).initialize)==null?void 0:n.call(o,e)}));ae(t,this.providerEntries)})}onClose(){return E(this,null,function*(){let e=yield Promise.allSettled(this.providerEntries.map(t=>{var r,o;return(o=(r=t.provider).onClose)==null?void 0:o.call(r)}));ae(e,this.providerEntries)})}onContextChange(e,t){return E(this,null,function*(){var r,o;for(let n of this.providerEntries)yield(o=(r=n.provider).onContextChange)==null?void 0:o.call(r,e,t)})}resolveBooleanEvaluation(e,t,r){return this.flagResolutionProxy(e,"boolean",t,r)}resolveStringEvaluation(e,t,r){return this.flagResolutionProxy(e,"string",t,r)}resolveNumberEvaluation(e,t,r){return this.flagResolutionProxy(e,"number",t,r)}resolveObjectEvaluation(e,t,r){return this.flagResolutionProxy(e,"object",t,r)}track(e,t,r){var o,n;for(let i of this.providerEntries){if(!i.provider.track)continue;let l={provider:i.provider,providerName:i.name,providerStatus:this.statusTracker.providerStatus(i.name)};if(this.evaluationStrategy.shouldTrackWithThisProvider(l,t,e,r))try{(n=(o=i.provider).track)==null||n.call(o,e,t,r)}catch(a){this.logger.error(`Error tracking event "${e}" with provider "${i.name}":`,a)}}}flagResolutionProxy(e,t,r,o){var v;let n=this.hookContexts.get(o),i=this.hookHints.get(o);if(!n||!i)throw new f("Hook context not available for evaluation");let l=[];for(let u of this.providerEntries){let[P,p]=this.evaluateProviderEntry(e,t,r,u,n,i,o);if(l.push(p),!P)break}let a=l.filter(u=>!!u),d=this.evaluationStrategy.determineFinalResult({flagKey:e,flagType:t},o,a);if((v=d.errors)!=null&&v.length)throw ie(d.errors);if(!d.details)throw new f("No result was returned from any provider");return d.details}evaluateProviderEntry(e,t,r,o,n,i,l){let a,d=o.provider,v={flagKey:e,flagType:t,provider:d,providerName:o.name,providerStatus:this.statusTracker.providerStatus(o.name)};if(!this.evaluationStrategy.shouldEvaluateThisProvider(v,l))return[!0,null];let u;try{a=this.evaluateProviderAndHooks(e,r,d,n,i),u={details:a,provider:d,providerName:o.name}}catch(P){u={thrownError:P,provider:d,providerName:o.name}}return[this.evaluationStrategy.shouldEvaluateNextProvider(v,l,u),u]}evaluateProviderAndHooks(e,t,r,o,n){var l;let i;try{this.hookExecutor.beforeHooks(r.hooks,o,n);let a=this.callProviderResolve(r,e,t,o.context);i=_(m({},a),{flagMetadata:Object.freeze((l=a.flagMetadata)!=null?l:{}),flagKey:e}),this.hookExecutor.afterHooks(r.hooks,o,i,n)}catch(a){this.hookExecutor.errorHooks(r.hooks,o,a,n),i=this.getErrorEvaluationDetails(e,t,a)}return this.hookExecutor.finallyHooks(r.hooks,o,i,n),i}callProviderResolve(e,t,r,o){switch(typeof r){case"string":return e.resolveStringEvaluation(t,r,o,this.logger);case"number":return e.resolveNumberEvaluation(t,r,o,this.logger);case"object":return e.resolveObjectEvaluation(t,r,o,this.logger);case"boolean":return e.resolveBooleanEvaluation(t,r,o,this.logger);default:throw new f("Invalid flag evaluation type")}}get hooks(){return[{before:(e,t)=>(this.hookContexts.set(e.context,e),this.hookHints.set(e.context,t!=null?t:{}),e.context)}]}getErrorEvaluationDetails(e,t,r,o={}){let n=r==null?void 0:r.message;return{errorCode:(r==null?void 0:r.code)||"GENERAL",errorMessage:n,value:t,reason:O.ERROR,flagMetadata:Object.freeze(o),flagKey:e}}};var le=class{constructor(e,t,r,o,n,i,l){this.providerAccessor=e;this.providerStatusAccessor=t;this.emitterAccessor=r;this.apiContextAccessor=o;this.apiHooksAccessor=n;this.globalLogger=i;this.options=l;this._hooks=[]}get metadata(){var e,t;return{name:(e=this.options.domain)!=null?e:this.options.name,domain:(t=this.options.domain)!=null?t:this.options.name,version:this.options.version,providerMetadata:this.providerAccessor().metadata}}get providerStatus(){return this.providerStatusAccessor()}addHandler(e,t,r){var n;if(this.emitterAccessor().addHandler(e,t),$(e,this.providerStatus))try{t({clientName:this.metadata.name,domain:this.metadata.domain,providerName:this._provider.metadata.name})}catch(i){(n=this._logger)==null||n.error("Error running event handler:",i)}r!=null&&r.signal&&typeof r.signal.addEventListener=="function"&&r.signal.addEventListener("abort",()=>{this.removeHandler(e,t)})}removeHandler(e,t){this.emitterAccessor().removeHandler(e,t)}getHandlers(e){return this.emitterAccessor().getHandlers(e)}setLogger(e){return this._clientLogger=new D(e),this}addHooks(...e){return this._hooks=[...this._hooks,...e],this}getHooks(){return this._hooks}clearHooks(){return this._hooks=[],this}getBooleanValue(e,t,r){return this.getBooleanDetails(e,t,r).value}getBooleanDetails(e,t,r){return this.evaluate(e,this._provider.resolveBooleanEvaluation,t,"boolean",r)}getStringValue(e,t,r){return this.getStringDetails(e,t,r).value}getStringDetails(e,t,r){return this.evaluate(e,this._provider.resolveStringEvaluation,t,"string",r)}getNumberValue(e,t,r){return this.getNumberDetails(e,t,r).value}getNumberDetails(e,t,r){return this.evaluate(e,this._provider.resolveNumberEvaluation,t,"number",r)}getObjectValue(e,t,r){return this.getObjectDetails(e,t,r).value}getObjectDetails(e,t,r){return this.evaluate(e,this._provider.resolveObjectEvaluation,t,"object",r)}track(e,t={}){var r,o,n;try{if(this.shortCircuitIfNotReady(),typeof this._provider.track=="function"){let i=Object.freeze(m({},this.apiContextAccessor((r=this==null?void 0:this.options)==null?void 0:r.domain)));return(n=(o=this._provider).track)==null?void 0:n.call(o,e,i,t)}else this._logger.debug("Provider does not support the track function; will no-op.")}catch(i){this._logger.debug("Error recording tracking event.",i)}}evaluate(e,t,r,o,n={}){var u,P;let i=[...this.apiHooksAccessor(),...this.getHooks(),...n.hooks||[],...this._provider.hooks||[]],l=[...i].reverse(),a=m({},this.apiContextAccessor((u=this==null?void 0:this.options)==null?void 0:u.domain)),d=l.map(()=>Object.freeze({flagKey:e,defaultValue:r,flagValueType:o,clientMetadata:this.metadata,providerMetadata:this._provider.metadata,context:a,logger:this._logger,hookData:new B})),v;try{this.beforeHooks(i,d,n),this.shortCircuitIfNotReady();let p=t.call(this._provider,e,r,a,this._logger),h=_(m({},p),{flagMetadata:Object.freeze((P=p.flagMetadata)!=null?P:{}),flagKey:e});if(h.errorCode){let S=ve(h.errorCode,h.errorMessage);this.errorHooks(l,d,S,n),v=this.getErrorEvaluationDetails(e,r,S,h.flagMetadata)}else this.afterHooks(l,d,h,n),v=h}catch(p){this.errorHooks(l,d,p,n),v=this.getErrorEvaluationDetails(e,r,p)}return this.finallyHooks(l,d,v,n),v}beforeHooks(e,t,r){var o;for(let[n,i]of e.entries()){let l=e.length-1-n,a=t[l];Object.freeze(a),Object.freeze(a.context),(o=i==null?void 0:i.before)==null||o.call(i,a,Object.freeze(r.hookHints))}}afterHooks(e,t,r,o){var n;for(let[i,l]of e.entries()){let a=t[i];(n=l==null?void 0:l.after)==null||n.call(l,a,r,o.hookHints)}}errorHooks(e,t,r,o){var n;for(let[i,l]of e.entries())try{let a=t[i];(n=l==null?void 0:l.error)==null||n.call(l,a,r,o.hookHints)}catch(a){this._logger.error(`Unhandled error during 'error' hook: ${a}`),a instanceof Error&&this._logger.error(a.stack),this._logger.error(a==null?void 0:a.stack)}}finallyHooks(e,t,r,o){var n;for(let[i,l]of e.entries())try{let a=t[i];(n=l==null?void 0:l.finally)==null||n.call(l,a,r,o.hookHints)}catch(a){this._logger.error(`Unhandled error during 'finally' hook: ${a}`),a instanceof Error&&this._logger.error(a.stack),this._logger.error(a==null?void 0:a.stack)}}get _provider(){return this.providerAccessor()}get _logger(){return this._clientLogger||this.globalLogger()}shortCircuitIfNotReady(){if(this.providerStatus==="NOT_READY")throw new V("provider has not yet initialized");if(this.providerStatus==="FATAL")throw new L("provider is in an irrecoverable error state")}getErrorEvaluationDetails(e,t,r,o={}){let n=r==null?void 0:r.message;return{errorCode:(r==null?void 0:r.code)||"GENERAL",errorMessage:n,value:t,reason:O.ERROR,flagMetadata:Object.freeze(o),flagKey:e}}};var He=Symbol.for("@openfeature/web-sdk/api"),we=globalThis,de=class s extends X{constructor(){super("client");this._statusEnumType=k;this._apiEmitter=new b;this._defaultProvider=new M(ee,"NOT_READY",this._statusEnumType);this._domainScopedProviders=new Map;this._createEventEmitter=()=>new b}static getInstance(){let t=we[He];if(t)return t;let r=new s;return we[He]=r,r}getProviderStatus(t){var r,o;return t?(o=(r=this._domainScopedProviders.get(t))==null?void 0:r.status)!=null?o:this._defaultProvider.status:this._defaultProvider.status}setProviderAndWait(t,r,o){return E(this,null,function*(){let n=N(t),i=n?R(r):R(t),l=n?R(o):R(r);l&&(n?this._domainScopedContext.set(n,l):this._context=l),yield this.setAwaitableProvider(n,i)})}setProvider(t,r,o){let n=N(t),i=n?R(r):R(t),l=n?R(o):R(r);l&&(n?this._domainScopedContext.set(n,l):this._context=l);let a=this.setAwaitableProvider(n,i);return Promise.resolve(a).catch(d=>{this._logger.error("Error during provider initialization:",d)}),this}getProvider(t){return this.getProviderForClient(t)}setContext(t,r){return E(this,null,function*(){var i,l;let o=N(t),n=(l=(i=R(t))!=null?i:R(r))!=null?l:{};if(o){let a=this._domainScopedProviders.get(o);if(a){let d=this.getContext(o);this._domainScopedContext.set(o,n),yield this.runProviderContextChangeHandler(o,a,d,n)}else this._domainScopedContext.set(o,n)}else{let a=this._context;this._context=n;let d=Array.from(this._domainScopedProviders.entries()).filter(([u])=>!this._domainScopedContext.has(u)).reduce((u,[P,p])=>(u.push({domain:P,wrapper:p}),u),[]),v=[{domain:void 0,wrapper:this._defaultProvider},...d];yield Promise.all(v.map(u=>this.runProviderContextChangeHandler(u.domain,u.wrapper,a,n)))}})}getContext(t){let r=N(t);if(r){let o=this._domainScopedContext.get(r);if(o)return o;this._logger.debug(`Unable to find context for '${r}'.`)}return this._context}clearContext(t){return E(this,null,function*(){let r=N(t);if(r){let o=this._domainScopedProviders.get(r);if(o){let n=this.getContext(r);this._domainScopedContext.delete(r);let i=this.getContext();yield this.runProviderContextChangeHandler(r,o,n,i)}else this._domainScopedContext.delete(r)}else return this.setContext({})})}clearContexts(){return E(this,null,function*(){yield this.clearContext(),yield Promise.allSettled(Array.from(this._domainScopedProviders.keys()).map(t=>this.clearContext(t)))})}getClient(t,r){return new le(()=>this.getProviderForClient(t),()=>this.getProviderStatus(t),()=>this.buildAndCacheEventEmitterForClient(t),o=>this.getContext(o),()=>this.getHooks(),()=>this._logger,{domain:t,version:r})}clearProviders(){return E(this,null,function*(){yield Oe(s.prototype,this,"clearProvidersAndSetDefault").call(this,ee),this._domainScopedContext.clear()})}runProviderContextChangeHandler(t,r,o,n){return E(this,null,function*(){var l,a,d,v,u,P;let i=((a=(l=r.provider)==null?void 0:l.metadata)==null?void 0:a.name)||"unnamed-provider";try{if(typeof r.provider.onContextChange=="function"){let p=r.provider.onContextChange(o,n);p&&typeof(p==null?void 0:p.then)=="function"&&(r.incrementPendingContextChanges(),r.status=this._statusEnumType.RECONCILING,this.getAssociatedEventEmitters(t).forEach(h=>{h==null||h.emit("PROVIDER_RECONCILING",{domain:t,providerName:i})}),(d=this._apiEmitter)==null||d.emit("PROVIDER_RECONCILING",{domain:t,providerName:i}),yield p,r.decrementPendingContextChanges())}r.status=this._statusEnumType.READY,r.allContextChangesSettled&&(this.getAssociatedEventEmitters(t).forEach(p=>{p==null||p.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:i})}),(v=this._apiEmitter)==null||v.emit("PROVIDER_CONTEXT_CHANGED",{clientName:t,domain:t,providerName:i}))}catch(p){if(r.decrementPendingContextChanges(),r.status=this._statusEnumType.ERROR,r.allContextChangesSettled){let h=p,S=`Error running ${i}'s context change handler: ${h==null?void 0:h.message}`;(u=this._logger)==null||u.error(`${S}`,p),this.getAssociatedEventEmitters(t).forEach(G=>{G==null||G.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:i,message:S})}),(P=this._apiEmitter)==null||P.emit("PROVIDER_ERROR",{clientName:t,domain:t,providerName:i,message:S})}}})}},Ze=de.getInstance();return Ke(et);})();
|
|
2
2
|
//# sourceMappingURL=index.min.js.map
|