@openfeature/web-sdk 0.4.9 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../node_modules/events/events.js", "../../src/client/open-feature-client.ts", "../../src/open-feature.ts", "../../src/events/open-feature-event-emitter.ts", "../../src/events/events.ts", "../../src/provider/no-op-provider.ts", "../../src/provider/in-memory-provider/in-memory-provider.ts", "../../src/provider/in-memory-provider/variant-not-found-error.ts", "../../src/index.ts"],
4
- "sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "import {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n statusMatchesEvent\n} from '@openfeature/core';\nimport { FlagEvaluationOptions } from '../evaluation';\nimport { ProviderEvents } from '../events';\nimport { InternalEventEmitter } from '../events/internal/internal-event-emitter';\nimport { Hook } from '../hooks';\nimport { OpenFeature } from '../open-feature';\nimport { Provider } from '../provider';\nimport { Client } from './client';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\nexport class OpenFeatureClient implements Client {\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n\n constructor(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n private readonly providerAccessor: () => Provider,\n private readonly emitterAccessor: () => InternalEventEmitter,\n private readonly globalLogger: () => Logger,\n private readonly options: OpenFeatureClientOptions,\n ) {}\n\n get metadata(): ClientMetadata {\n return {\n name: this.options.name,\n version: this.options.version,\n providerMetadata: this.providerAccessor().metadata,\n };\n }\n\n get providerStatus(): ProviderStatus {\n return this.providerAccessor()?.status || ProviderStatus.READY;\n }\n\n addHandler(eventType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const shouldRunNow = statusMatchesEvent(eventType, this._provider.status);\n\n if (shouldRunNow) {\n // run immediately, we're in the matching state\n try {\n handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler(notificationType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().removeHandler(notificationType, handler);\n }\n\n getHandlers(eventType: ProviderEvents) {\n return this.emitterAccessor().getHandlers(eventType);\n }\n\n setLogger(logger: Logger): this {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(flagKey, this._provider.resolveBooleanEvaluation, defaultValue, 'boolean', options);\n }\n\n getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getStringDetails<T>(flagKey, defaultValue, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n options,\n );\n }\n\n getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getNumberDetails(flagKey, defaultValue, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n options,\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n options: FlagEvaluationOptions = {},\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n const context = {\n ...OpenFeature.getContext(),\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context,\n logger: this._logger,\n };\n\n try {\n this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagMetadata: Object.freeze(resolution.flagMetadata ?? {}),\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagMetadata: Object.freeze({}),\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n Object.freeze(hookContext);\n Object.freeze(hookContext.context);\n\n for (const hook of hooks) {\n hook?.before?.(hookContext, Object.freeze(options.hookHints));\n }\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions,\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n}\n", "import {\n EvaluationContext,\n GenericEventEmitter,\n ManageContext,\n OpenFeatureCommonAPI,\n objectOrUndefined,\n stringOrUndefined,\n} from '@openfeature/core';\nimport { Client, OpenFeatureClient } from './client';\nimport { OpenFeatureEventEmitter, ProviderEvents } from './events';\nimport { Hook } from './hooks';\nimport { NOOP_PROVIDER, Provider } from './provider';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/web-sdk/api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implements ManageContext<Promise<void>> {\n protected _events: GenericEventEmitter<ProviderEvents> = new OpenFeatureEventEmitter();\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n protected _createEventEmitter = () => new OpenFeatureEventEmitter();\n protected _namedProviderContext: Map<string, EvaluationContext> = new Map();\n\n private constructor() {\n super('client');\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Sets the evaluation context globally.\n * This will be used by all providers that have not been overridden with a named client.\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext({ region: \"us\" });\n */\n async setContext(context: EvaluationContext): Promise<void>;\n /**\n * Sets the evaluation context for a specific provider.\n * This will only affect providers with a matching client name.\n * @param {string} clientName The name to identify the client\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext(\"test\", { scope: \"provider\" });\n * OpenFeature.setProvider(new MyProvider()) // Uses the default context\n * OpenFeature.setProvider(\"test\", new MyProvider()) // Uses context: { scope: \"provider\" }\n */\n async setContext(clientName: string, context: EvaluationContext): Promise<void>;\n async setContext<T extends EvaluationContext>(nameOrContext: T | string, contextOrUndefined?: T): Promise<void> {\n const clientName = stringOrUndefined(nameOrContext);\n const context = objectOrUndefined<T>(nameOrContext) ?? objectOrUndefined(contextOrUndefined) ?? {};\n\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.set(clientName, context);\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, context);\n } else {\n this._namedProviderContext.set(clientName, context);\n }\n } else {\n const oldContext = this._context;\n this._context = context;\n\n const providersWithoutContextOverride = Array.from(this._clientProviders.entries())\n .filter(([name]) => !this._namedProviderContext.has(name))\n .reduce<Provider[]>((acc, [, provider]) => {\n acc.push(provider);\n return acc;\n }, []);\n\n const allProviders = [this._defaultProvider, ...providersWithoutContextOverride];\n await Promise.all(\n allProviders.map((provider) => this.runProviderContextChangeHandler(undefined, provider, oldContext, context)),\n );\n }\n }\n\n /**\n * Access the global evaluation context.\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n /**\n * Access the evaluation context for a specific named client.\n * The global evaluation context is returned if a matching named client is not found.\n * @param {string} clientName The name to identify the client\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(clientName: string): EvaluationContext;\n getContext(nameOrUndefined?: string): EvaluationContext {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const context = this._namedProviderContext.get(clientName);\n if (context) {\n return context;\n } else {\n this._logger.debug(`Unable to find context for '${clientName}'.`);\n }\n }\n return this._context;\n }\n\n /**\n * Resets the global evaluation context to an empty object.\n */\n clearContext(): Promise<void>;\n /**\n * Removes the evaluation context for a specific named client.\n * @param {string} clientName The name to identify the client\n */\n clearContext(clientName: string): Promise<void>;\n async clearContext(nameOrUndefined?: string): Promise<void> {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.delete(clientName);\n const newContext = this.getContext();\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, newContext);\n } else {\n this._namedProviderContext.delete(clientName);\n }\n } else {\n return this.setContext({});\n }\n }\n\n /**\n * Resets the global evaluation context and removes the evaluation context for\n * all named clients.\n */\n async clearContexts(): Promise<void> {\n // Default context must be cleared first to avoid calling the onContextChange\n // handler multiple times for named clients.\n await this.clearContext();\n\n // Use allSettled so a promise rejection doesn't affect others\n await Promise.allSettled(Array.from(this._clientProviders.keys()).map((name) => this.clearContext(name)));\n }\n\n /**\n * A factory function for creating new named OpenFeature clients. Clients can contain\n * their own state (e.g. logger, hook, context). Multiple clients can be used\n * to segment feature flag configuration.\n *\n * If there is already a provider bound to this name via {@link this.setProvider setProvider}, this provider will be used.\n * Otherwise, the default provider is used until a provider is assigned to that name.\n * @param {string} name The name of the client\n * @param {string} version The version of the client (only used for metadata)\n * @returns {Client} OpenFeature Client\n */\n getClient(name?: string, version?: string): Client {\n return new OpenFeatureClient(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n () => this.getProviderForClient(name),\n () => this.buildAndCacheEventEmitterForClient(name),\n () => this._logger,\n { name, version },\n );\n }\n\n /**\n * Clears all registered providers and resets the default provider.\n * @returns {Promise<void>}\n */\n async clearProviders(): Promise<void> {\n await super.clearProvidersAndSetDefault(NOOP_PROVIDER);\n this._namedProviderContext.clear();\n }\n\n private async runProviderContextChangeHandler(\n clientName: string | undefined,\n provider: Provider,\n oldContext: EvaluationContext,\n newContext: EvaluationContext,\n ): Promise<void> {\n const providerName = provider.metadata.name;\n return provider.onContextChange?.(oldContext, newContext).then(() => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n });\n this._events?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n }).catch((err) => {\n this._logger?.error(`Error running ${provider.metadata.name}'s context change handler:`, err);\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, providerName, message: err?.message, });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, providerName, message: err?.message, });\n });\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { GenericEventEmitter } from '@openfeature/core';\nimport EventEmitter from 'events';\nimport { ProviderEmittableEvents } from './events';\n/**\n * The OpenFeatureEventEmitter can be used by provider developers to emit\n * events at various parts of the provider lifecycle.\n *\n * NOTE: Ready and error events are automatically emitted by the SDK based on\n * the result of the initialize method.\n */\nexport class OpenFeatureEventEmitter extends GenericEventEmitter<ProviderEmittableEvents> {\n protected readonly eventEmitter = new EventEmitter({ captureRejections: true });\n\n constructor() {\n super();\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n}\n", "import { ClientProviderEvents } from '@openfeature/core';\n\nexport { ClientProviderEvents as ProviderEvents};\n\n/**\n * A subset of events that can be directly emitted by providers.\n */\nexport type ProviderEmittableEvents = Exclude<ClientProviderEvents, ClientProviderEvents.ContextChanged>;", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/core';\nimport { Provider } from './provider';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n get status(): ProviderStatus {\n /**\n * This is due to the NoopProvider not being a real provider.\n * We do not want it to trigger the Ready event handlers, so we never set this to ready.\n * With the NoopProvider assigned, the client can be assumed to be uninitialized.\n * https://github.com/open-feature/js-sdk/pull/429#discussion_r1202642654\n */\n return ProviderStatus.NOT_READY;\n }\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import {\n EvaluationContext,\n FlagNotFoundError,\n FlagValueType,\n GeneralError,\n JsonValue,\n Logger,\n OpenFeatureError,\n ResolutionDetails,\n StandardResolutionReasons,\n TypeMismatchError,\n ProviderStatus,\n} from '@openfeature/core';\nimport { Provider } from '../provider';\nimport { OpenFeatureEventEmitter, ProviderEvents } from '../../events';\nimport { FlagConfiguration, Flag } from './flag-configuration';\nimport { VariantNotFoundError } from './variant-not-found-error';\n\n/**\n * A simple OpenFeature provider intended for demos and as a test stub.\n */\nexport class InMemoryProvider implements Provider {\n public readonly events = new OpenFeatureEventEmitter();\n public readonly runsOn = 'client';\n status: ProviderStatus = ProviderStatus.NOT_READY;\n readonly metadata = {\n name: 'in-memory',\n } as const;\n private _flagConfiguration: FlagConfiguration;\n private _context: EvaluationContext | undefined;\n\n constructor(flagConfiguration: FlagConfiguration = {}) {\n this._flagConfiguration = { ...flagConfiguration };\n }\n\n async initialize(context?: EvaluationContext | undefined): Promise<void> {\n try {\n\n for (const key in this._flagConfiguration) {\n this.resolveFlagWithReason(key, context);\n }\n\n this._context = context;\n // set the provider's state, but don't emit events manually;\n // the SDK does this based on the resolution/rejection of the init promise\n this.status = ProviderStatus.READY;\n } catch (error) {\n this.status = ProviderStatus.ERROR;\n throw error;\n }\n }\n\n /**\n * Overwrites the configured flags.\n * @param { FlagConfiguration } flagConfiguration new flag configuration\n */\n async putConfiguration(flagConfiguration: FlagConfiguration) {\n const flagsChanged = Object.entries(flagConfiguration)\n .filter(([key, value]) => this._flagConfiguration[key] !== value)\n .map(([key]) => key);\n\n this.status = ProviderStatus.STALE;\n this.events.emit(ProviderEvents.Stale);\n\n this._flagConfiguration = { ...flagConfiguration };\n this.events.emit(ProviderEvents.ConfigurationChanged, { flagsChanged });\n\n try {\n await this.initialize(this._context);\n // we need to emit our own events in this case, since it's not part of the init flow.\n this.events.emit(ProviderEvents.Ready);\n } catch (err) {\n this.events.emit(ProviderEvents.Error);\n throw err;\n }\n }\n\n resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<boolean> {\n return this.resolveAndCheckFlag<boolean>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<number> {\n return this.resolveAndCheckFlag<number>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<string> {\n return this.resolveAndCheckFlag<string>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<T> {\n return this.resolveAndCheckFlag<T>(flagKey, defaultValue, context || this._context, logger);\n }\n\n private resolveAndCheckFlag<T extends JsonValue | FlagValueType>(flagKey: string,\n defaultValue: T, context?: EvaluationContext, logger?: Logger): ResolutionDetails<T> {\n if (!(flagKey in this._flagConfiguration)) {\n const message = `no flag found with key ${flagKey}`;\n logger?.debug(message);\n throw new FlagNotFoundError(message);\n }\n\n if (this._flagConfiguration[flagKey].disabled) {\n return { value: defaultValue, reason: StandardResolutionReasons.DISABLED };\n }\n\n const resolvedFlag = this.resolveFlagWithReason(flagKey, context) as ResolutionDetails<T>;\n\n if (resolvedFlag.value === undefined) {\n const message = `no value associated with variant provided for ${flagKey} found`;\n logger?.error(message);\n throw new VariantNotFoundError(message);\n }\n\n if (typeof resolvedFlag.value != typeof defaultValue) {\n throw new TypeMismatchError();\n }\n\n return resolvedFlag;\n }\n\n private resolveFlagWithReason<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n try {\n const resolutionResult = this.lookupFlagValue<T>(flagKey, ctx);\n\n return resolutionResult;\n } catch (error: unknown) {\n if (!(error instanceof OpenFeatureError)) {\n throw new GeneralError((error as Error)?.message || 'unknown error');\n }\n throw error;\n }\n }\n\n private lookupFlagValue<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n const flagSpec: Flag = this._flagConfiguration[flagKey];\n\n const isContextEval = ctx && flagSpec?.contextEvaluator;\n const variant = isContextEval ? flagSpec.contextEvaluator?.(ctx) : flagSpec.defaultVariant;\n\n const value = variant && flagSpec?.variants[variant];\n\n const evalReason = isContextEval ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.STATIC;\n\n const reason = this.status === ProviderStatus.STALE ? StandardResolutionReasons.CACHED : evalReason;\n\n return {\n value: value as T,\n ...(variant && { variant }),\n reason,\n };\n }\n}\n", "import { ErrorCode, OpenFeatureError } from '@openfeature/core';\n\n/**\n * A custom error for the in-memory provider.\n * Indicates the resolved or default variant doesn't exist.\n */\nexport class VariantNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, VariantNotFoundError.prototype);\n this.name = 'VariantNotFoundError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from './events';\nexport * from './hooks';\nexport * from '@openfeature/core';\n"],
5
- "mappings": "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",
6
- "names": ["ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "ErrorCode", "ProviderStatus", "StandardResolutionReasons", "EventEmitter", "OpenFeatureError", "ProviderStatus", "ProviderStatus", "OpenFeatureError", "_a", "ProviderStatus", "ErrorCode", "StandardResolutionReasons", "err"]
4
+ "sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "import {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n statusMatchesEvent\n} from '@openfeature/core';\nimport { FlagEvaluationOptions } from '../evaluation';\nimport { ProviderEvents } from '../events';\nimport { InternalEventEmitter } from '../events/internal/internal-event-emitter';\nimport { Hook } from '../hooks';\nimport { OpenFeature } from '../open-feature';\nimport { Provider } from '../provider';\nimport { Client } from './client';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\nexport class OpenFeatureClient implements Client {\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n\n constructor(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n private readonly providerAccessor: () => Provider,\n private readonly emitterAccessor: () => InternalEventEmitter,\n private readonly globalLogger: () => Logger,\n private readonly options: OpenFeatureClientOptions,\n ) {}\n\n get metadata(): ClientMetadata {\n return {\n name: this.options.name,\n version: this.options.version,\n providerMetadata: this.providerAccessor().metadata,\n };\n }\n\n get providerStatus(): ProviderStatus {\n return this.providerAccessor()?.status || ProviderStatus.READY;\n }\n\n addHandler(eventType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const shouldRunNow = statusMatchesEvent(eventType, this._provider.status);\n\n if (shouldRunNow) {\n // run immediately, we're in the matching state\n try {\n handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler(notificationType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().removeHandler(notificationType, handler);\n }\n\n getHandlers(eventType: ProviderEvents) {\n return this.emitterAccessor().getHandlers(eventType);\n }\n\n setLogger(logger: Logger): this {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(flagKey, this._provider.resolveBooleanEvaluation, defaultValue, 'boolean', options);\n }\n\n getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getStringDetails<T>(flagKey, defaultValue, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n options,\n );\n }\n\n getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getNumberDetails(flagKey, defaultValue, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n options,\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n options: FlagEvaluationOptions = {},\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n const context = {\n ...OpenFeature.getContext(this?.options?.name),\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context,\n logger: this._logger,\n };\n\n try {\n this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagMetadata: Object.freeze(resolution.flagMetadata ?? {}),\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagMetadata: Object.freeze({}),\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n Object.freeze(hookContext);\n Object.freeze(hookContext.context);\n\n for (const hook of hooks) {\n hook?.before?.(hookContext, Object.freeze(options.hookHints));\n }\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions,\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n}\n", "import {\n EvaluationContext,\n GenericEventEmitter,\n ManageContext,\n OpenFeatureCommonAPI,\n objectOrUndefined,\n stringOrUndefined,\n} from '@openfeature/core';\nimport { Client, OpenFeatureClient } from './client';\nimport { OpenFeatureEventEmitter, ProviderEvents } from './events';\nimport { Hook } from './hooks';\nimport { NOOP_PROVIDER, Provider } from './provider';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/web-sdk/api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\ntype NameProviderRecord = {\n name?: string;\n provider: Provider;\n}\n\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implements ManageContext<Promise<void>> {\n protected _events: GenericEventEmitter<ProviderEvents> = new OpenFeatureEventEmitter();\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n protected _createEventEmitter = () => new OpenFeatureEventEmitter();\n protected _namedProviderContext: Map<string, EvaluationContext> = new Map();\n\n private constructor() {\n super('client');\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Sets the evaluation context globally.\n * This will be used by all providers that have not been overridden with a named client.\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext({ region: \"us\" });\n */\n async setContext(context: EvaluationContext): Promise<void>;\n /**\n * Sets the evaluation context for a specific provider.\n * This will only affect providers with a matching client name.\n * @param {string} clientName The name to identify the client\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext(\"test\", { scope: \"provider\" });\n * OpenFeature.setProvider(new MyProvider()) // Uses the default context\n * OpenFeature.setProvider(\"test\", new MyProvider()) // Uses context: { scope: \"provider\" }\n */\n async setContext(clientName: string, context: EvaluationContext): Promise<void>;\n async setContext<T extends EvaluationContext>(nameOrContext: T | string, contextOrUndefined?: T): Promise<void> {\n const clientName = stringOrUndefined(nameOrContext);\n const context = objectOrUndefined<T>(nameOrContext) ?? objectOrUndefined(contextOrUndefined) ?? {};\n\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.set(clientName, context);\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, context);\n } else {\n this._namedProviderContext.set(clientName, context);\n }\n } else {\n const oldContext = this._context;\n this._context = context;\n\n // collect all providers that are using the default context (not mapped to a name)\n const defaultContextNameProviders: NameProviderRecord[] = Array.from(this._clientProviders.entries())\n .filter(([name]) => !this._namedProviderContext.has(name))\n .reduce<NameProviderRecord[]>((acc, [name, provider]) => {\n acc.push({ name, provider });\n return acc;\n }, []);\n\n const allProviders: NameProviderRecord[] = [\n // add in the default (no name)\n { name: undefined, provider: this._defaultProvider },\n ...defaultContextNameProviders,\n ];\n await Promise.all(\n allProviders.map((tuple) =>\n this.runProviderContextChangeHandler(tuple.name, tuple.provider, oldContext, context),\n ),\n );\n }\n }\n\n /**\n * Access the global evaluation context.\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n /**\n * Access the evaluation context for a specific named client.\n * The global evaluation context is returned if a matching named client is not found.\n * @param {string} clientName The name to identify the client\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(clientName?: string): EvaluationContext;\n getContext(nameOrUndefined?: string): EvaluationContext {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const context = this._namedProviderContext.get(clientName);\n if (context) {\n return context;\n } else {\n this._logger.debug(`Unable to find context for '${clientName}'.`);\n }\n }\n return this._context;\n }\n\n /**\n * Resets the global evaluation context to an empty object.\n */\n clearContext(): Promise<void>;\n /**\n * Removes the evaluation context for a specific named client.\n * @param {string} clientName The name to identify the client\n */\n clearContext(clientName: string): Promise<void>;\n async clearContext(nameOrUndefined?: string): Promise<void> {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.delete(clientName);\n const newContext = this.getContext();\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, newContext);\n } else {\n this._namedProviderContext.delete(clientName);\n }\n } else {\n return this.setContext({});\n }\n }\n\n /**\n * Resets the global evaluation context and removes the evaluation context for\n * all named clients.\n */\n async clearContexts(): Promise<void> {\n // Default context must be cleared first to avoid calling the onContextChange\n // handler multiple times for named clients.\n await this.clearContext();\n\n // Use allSettled so a promise rejection doesn't affect others\n await Promise.allSettled(Array.from(this._clientProviders.keys()).map((name) => this.clearContext(name)));\n }\n\n /**\n * A factory function for creating new named OpenFeature clients. Clients can contain\n * their own state (e.g. logger, hook, context). Multiple clients can be used\n * to segment feature flag configuration.\n *\n * If there is already a provider bound to this name via {@link this.setProvider setProvider}, this provider will be used.\n * Otherwise, the default provider is used until a provider is assigned to that name.\n * @param {string} name The name of the client\n * @param {string} version The version of the client (only used for metadata)\n * @returns {Client} OpenFeature Client\n */\n getClient(name?: string, version?: string): Client {\n return new OpenFeatureClient(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n () => this.getProviderForClient(name),\n () => this.buildAndCacheEventEmitterForClient(name),\n () => this._logger,\n { name, version },\n );\n }\n\n /**\n * Clears all registered providers and resets the default provider.\n * @returns {Promise<void>}\n */\n async clearProviders(): Promise<void> {\n await super.clearProvidersAndSetDefault(NOOP_PROVIDER);\n this._namedProviderContext.clear();\n }\n\n private async runProviderContextChangeHandler(\n clientName: string | undefined,\n provider: Provider,\n oldContext: EvaluationContext,\n newContext: EvaluationContext,\n ): Promise<void> {\n const providerName = provider.metadata.name;\n try {\n await provider.onContextChange?.(oldContext, newContext);\n\n // only run the event handlers if the onContextChange method succeeded\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n });\n this._events?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n } catch (err) {\n // run error handlers instead\n const error = err as Error | undefined;\n const message = `Error running ${provider?.metadata?.name}'s context change handler: ${error?.message}`;\n this._logger?.error(`${message}`, err);\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, providerName, message });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, providerName, message });\n }\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { GenericEventEmitter } from '@openfeature/core';\nimport EventEmitter from 'events';\nimport { ProviderEmittableEvents } from './events';\n/**\n * The OpenFeatureEventEmitter can be used by provider developers to emit\n * events at various parts of the provider lifecycle.\n *\n * NOTE: Ready and error events are automatically emitted by the SDK based on\n * the result of the initialize method.\n */\nexport class OpenFeatureEventEmitter extends GenericEventEmitter<ProviderEmittableEvents> {\n protected readonly eventEmitter = new EventEmitter({ captureRejections: true });\n\n constructor() {\n super();\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n}\n", "import { ClientProviderEvents } from '@openfeature/core';\n\nexport { ClientProviderEvents as ProviderEvents};\n\n/**\n * A subset of events that can be directly emitted by providers.\n */\nexport type ProviderEmittableEvents = Exclude<ClientProviderEvents, ClientProviderEvents.ContextChanged>;", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/core';\nimport { Provider } from './provider';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n get status(): ProviderStatus {\n /**\n * This is due to the NoopProvider not being a real provider.\n * We do not want it to trigger the Ready event handlers, so we never set this to ready.\n * With the NoopProvider assigned, the client can be assumed to be uninitialized.\n * https://github.com/open-feature/js-sdk/pull/429#discussion_r1202642654\n */\n return ProviderStatus.NOT_READY;\n }\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import {\n EvaluationContext,\n FlagNotFoundError,\n FlagValueType,\n GeneralError,\n JsonValue,\n Logger,\n OpenFeatureError,\n ResolutionDetails,\n StandardResolutionReasons,\n TypeMismatchError,\n ProviderStatus,\n} from '@openfeature/core';\nimport { Provider } from '../provider';\nimport { OpenFeatureEventEmitter, ProviderEvents } from '../../events';\nimport { FlagConfiguration, Flag } from './flag-configuration';\nimport { VariantNotFoundError } from './variant-not-found-error';\n\n/**\n * A simple OpenFeature provider intended for demos and as a test stub.\n */\nexport class InMemoryProvider implements Provider {\n public readonly events = new OpenFeatureEventEmitter();\n public readonly runsOn = 'client';\n status: ProviderStatus = ProviderStatus.NOT_READY;\n readonly metadata = {\n name: 'in-memory',\n } as const;\n private _flagConfiguration: FlagConfiguration;\n private _context: EvaluationContext | undefined;\n\n constructor(flagConfiguration: FlagConfiguration = {}) {\n this._flagConfiguration = { ...flagConfiguration };\n }\n\n async initialize(context?: EvaluationContext | undefined): Promise<void> {\n try {\n\n for (const key in this._flagConfiguration) {\n this.resolveFlagWithReason(key, context);\n }\n\n this._context = context;\n // set the provider's state, but don't emit events manually;\n // the SDK does this based on the resolution/rejection of the init promise\n this.status = ProviderStatus.READY;\n } catch (error) {\n this.status = ProviderStatus.ERROR;\n throw error;\n }\n }\n\n /**\n * Overwrites the configured flags.\n * @param { FlagConfiguration } flagConfiguration new flag configuration\n */\n async putConfiguration(flagConfiguration: FlagConfiguration) {\n const flagsChanged = Object.entries(flagConfiguration)\n .filter(([key, value]) => this._flagConfiguration[key] !== value)\n .map(([key]) => key);\n\n this.status = ProviderStatus.STALE;\n this.events.emit(ProviderEvents.Stale);\n\n this._flagConfiguration = { ...flagConfiguration };\n this.events.emit(ProviderEvents.ConfigurationChanged, { flagsChanged });\n\n try {\n await this.initialize(this._context);\n // we need to emit our own events in this case, since it's not part of the init flow.\n this.events.emit(ProviderEvents.Ready);\n } catch (err) {\n this.events.emit(ProviderEvents.Error);\n throw err;\n }\n }\n\n resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<boolean> {\n return this.resolveAndCheckFlag<boolean>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<number> {\n return this.resolveAndCheckFlag<number>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<string> {\n return this.resolveAndCheckFlag<string>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<T> {\n return this.resolveAndCheckFlag<T>(flagKey, defaultValue, context || this._context, logger);\n }\n\n private resolveAndCheckFlag<T extends JsonValue | FlagValueType>(flagKey: string,\n defaultValue: T, context?: EvaluationContext, logger?: Logger): ResolutionDetails<T> {\n if (!(flagKey in this._flagConfiguration)) {\n const message = `no flag found with key ${flagKey}`;\n logger?.debug(message);\n throw new FlagNotFoundError(message);\n }\n\n if (this._flagConfiguration[flagKey].disabled) {\n return { value: defaultValue, reason: StandardResolutionReasons.DISABLED };\n }\n\n const resolvedFlag = this.resolveFlagWithReason(flagKey, context) as ResolutionDetails<T>;\n\n if (resolvedFlag.value === undefined) {\n const message = `no value associated with variant provided for ${flagKey} found`;\n logger?.error(message);\n throw new VariantNotFoundError(message);\n }\n\n if (typeof resolvedFlag.value != typeof defaultValue) {\n throw new TypeMismatchError();\n }\n\n return resolvedFlag;\n }\n\n private resolveFlagWithReason<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n try {\n const resolutionResult = this.lookupFlagValue<T>(flagKey, ctx);\n\n return resolutionResult;\n } catch (error: unknown) {\n if (!(error instanceof OpenFeatureError)) {\n throw new GeneralError((error as Error)?.message || 'unknown error');\n }\n throw error;\n }\n }\n\n private lookupFlagValue<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n const flagSpec: Flag = this._flagConfiguration[flagKey];\n\n const isContextEval = ctx && flagSpec?.contextEvaluator;\n const variant = isContextEval ? flagSpec.contextEvaluator?.(ctx) : flagSpec.defaultVariant;\n\n const value = variant && flagSpec?.variants[variant];\n\n const evalReason = isContextEval ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.STATIC;\n\n const reason = this.status === ProviderStatus.STALE ? StandardResolutionReasons.CACHED : evalReason;\n\n return {\n value: value as T,\n ...(variant && { variant }),\n reason,\n };\n }\n}\n", "import { ErrorCode, OpenFeatureError } from '@openfeature/core';\n\n/**\n * A custom error for the in-memory provider.\n * Indicates the resolved or default variant doesn't exist.\n */\nexport class VariantNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, VariantNotFoundError.prototype);\n this.name = 'VariantNotFoundError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from './events';\nexport * from './hooks';\nexport * from '@openfeature/core';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAuBA,QAAI,IAAI,OAAO,YAAY,WAAW,UAAU;AAChD,QAAI,eAAe,KAAK,OAAO,EAAE,UAAU,aACvC,EAAE,QACF,SAASA,cAAa,QAAQ,UAAU,MAAM;AAC9C,aAAO,SAAS,UAAU,MAAM,KAAK,QAAQ,UAAU,IAAI;AAAA,IAC7D;AAEF,QAAI;AACJ,QAAI,KAAK,OAAO,EAAE,YAAY,YAAY;AACxC,uBAAiB,EAAE;AAAA,IACrB,WAAW,OAAO,uBAAuB;AACvC,uBAAiB,SAASC,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM,EACrC,OAAO,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAChD;AAAA,IACF,OAAO;AACL,uBAAiB,SAASA,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM;AAAA,MAC1C;AAAA,IACF;AAEA,aAAS,mBAAmB,SAAS;AACnC,UAAI,WAAW,QAAQ;AAAM,gBAAQ,KAAK,OAAO;AAAA,IACnD;AAEA,QAAI,cAAc,OAAO,SAAS,SAASC,aAAY,OAAO;AAC5D,aAAO,UAAU;AAAA,IACnB;AAEA,aAASC,gBAAe;AACtB,MAAAA,cAAa,KAAK,KAAK,IAAI;AAAA,IAC7B;AACA,WAAO,UAAUA;AACjB,WAAO,QAAQ,OAAO;AAGtB,IAAAA,cAAa,eAAeA;AAE5B,IAAAA,cAAa,UAAU,UAAU;AACjC,IAAAA,cAAa,UAAU,eAAe;AACtC,IAAAA,cAAa,UAAU,gBAAgB;AAIvC,QAAI,sBAAsB;AAE1B,aAAS,cAAc,UAAU;AAC/B,UAAI,OAAO,aAAa,YAAY;AAClC,cAAM,IAAI,UAAU,qEAAqE,OAAO,QAAQ;AAAA,MAC1G;AAAA,IACF;AAEA,WAAO,eAAeA,eAAc,uBAAuB;AAAA,MACzD,YAAY;AAAA,MACZ,KAAK,WAAW;AACd,eAAO;AAAA,MACT;AAAA,MACA,KAAK,SAAS,KAAK;AACjB,YAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,YAAY,GAAG,GAAG;AAC1D,gBAAM,IAAI,WAAW,oGAAoG,MAAM,GAAG;AAAA,QACpI;AACA,8BAAsB;AAAA,MACxB;AAAA,IACF,CAAC;AAED,IAAAA,cAAa,OAAO,WAAW;AAE7B,UAAI,KAAK,YAAY,UACjB,KAAK,YAAY,OAAO,eAAe,IAAI,EAAE,SAAS;AACxD,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AAAA,MACtB;AAEA,WAAK,gBAAgB,KAAK,iBAAiB;AAAA,IAC7C;AAIA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,gBAAgB,GAAG;AACnE,UAAI,OAAO,MAAM,YAAY,IAAI,KAAK,YAAY,CAAC,GAAG;AACpD,cAAM,IAAI,WAAW,kFAAkF,IAAI,GAAG;AAAA,MAChH;AACA,WAAK,gBAAgB;AACrB,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB,MAAM;AAC9B,UAAI,KAAK,kBAAkB;AACzB,eAAOA,cAAa;AACtB,aAAO,KAAK;AAAA,IACd;AAEA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,kBAAkB;AAClE,aAAO,iBAAiB,IAAI;AAAA,IAC9B;AAEA,IAAAA,cAAa,UAAU,OAAO,SAAS,KAAK,MAAM;AAChD,UAAI,OAAO,CAAC;AACZ,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ;AAAK,aAAK,KAAK,UAAU,CAAC,CAAC;AACjE,UAAI,UAAW,SAAS;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,WAAW;AACb,kBAAW,WAAW,OAAO,UAAU;AAAA,eAChC,CAAC;AACR,eAAO;AAGT,UAAI,SAAS;AACX,YAAI;AACJ,YAAI,KAAK,SAAS;AAChB,eAAK,KAAK,CAAC;AACb,YAAI,cAAc,OAAO;AAGvB,gBAAM;AAAA,QACR;AAEA,YAAI,MAAM,IAAI,MAAM,sBAAsB,KAAK,OAAO,GAAG,UAAU,MAAM,GAAG;AAC5E,YAAI,UAAU;AACd,cAAM;AAAA,MACR;AAEA,UAAI,UAAU,OAAO,IAAI;AAEzB,UAAI,YAAY;AACd,eAAO;AAET,UAAI,OAAO,YAAY,YAAY;AACjC,qBAAa,SAAS,MAAM,IAAI;AAAA,MAClC,OAAO;AACL,YAAI,MAAM,QAAQ;AAClB,YAAI,YAAY,WAAW,SAAS,GAAG;AACvC,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE;AACzB,uBAAa,UAAU,CAAC,GAAG,MAAM,IAAI;AAAA,MACzC;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,QAAQ,MAAM,UAAU,SAAS;AACrD,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,oBAAc,QAAQ;AAEtB,eAAS,OAAO;AAChB,UAAI,WAAW,QAAW;AACxB,iBAAS,OAAO,UAAU,uBAAO,OAAO,IAAI;AAC5C,eAAO,eAAe;AAAA,MACxB,OAAO;AAGL,YAAI,OAAO,gBAAgB,QAAW;AACpC,iBAAO;AAAA,YAAK;AAAA,YAAe;AAAA,YACf,SAAS,WAAW,SAAS,WAAW;AAAA,UAAQ;AAI5D,mBAAS,OAAO;AAAA,QAClB;AACA,mBAAW,OAAO,IAAI;AAAA,MACxB;AAEA,UAAI,aAAa,QAAW;AAE1B,mBAAW,OAAO,IAAI,IAAI;AAC1B,UAAE,OAAO;AAAA,MACX,OAAO;AACL,YAAI,OAAO,aAAa,YAAY;AAElC,qBAAW,OAAO,IAAI,IACpB,UAAU,CAAC,UAAU,QAAQ,IAAI,CAAC,UAAU,QAAQ;AAAA,QAExD,WAAW,SAAS;AAClB,mBAAS,QAAQ,QAAQ;AAAA,QAC3B,OAAO;AACL,mBAAS,KAAK,QAAQ;AAAA,QACxB;AAGA,YAAI,iBAAiB,MAAM;AAC3B,YAAI,IAAI,KAAK,SAAS,SAAS,KAAK,CAAC,SAAS,QAAQ;AACpD,mBAAS,SAAS;AAGlB,cAAI,IAAI,IAAI,MAAM,iDACE,SAAS,SAAS,MAAM,OAAO,IAAI,IAAI,mEAEvB;AACpC,YAAE,OAAO;AACT,YAAE,UAAU;AACZ,YAAE,OAAO;AACT,YAAE,QAAQ,SAAS;AACnB,6BAAmB,CAAC;AAAA,QACtB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,cAAc,SAAS,YAAY,MAAM,UAAU;AACxE,aAAO,aAAa,MAAM,MAAM,UAAU,KAAK;AAAA,IACjD;AAEA,IAAAA,cAAa,UAAU,KAAKA,cAAa,UAAU;AAEnD,IAAAA,cAAa,UAAU,kBACnB,SAAS,gBAAgB,MAAM,UAAU;AACvC,aAAO,aAAa,MAAM,MAAM,UAAU,IAAI;AAAA,IAChD;AAEJ,aAAS,cAAc;AACrB,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,OAAO,eAAe,KAAK,MAAM,KAAK,MAAM;AACjD,aAAK,QAAQ;AACb,YAAI,UAAU,WAAW;AACvB,iBAAO,KAAK,SAAS,KAAK,KAAK,MAAM;AACvC,eAAO,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,MACnD;AAAA,IACF;AAEA,aAAS,UAAU,QAAQ,MAAM,UAAU;AACzC,UAAI,QAAQ,EAAE,OAAO,OAAO,QAAQ,QAAW,QAAgB,MAAY,SAAmB;AAC9F,UAAI,UAAU,YAAY,KAAK,KAAK;AACpC,cAAQ,WAAW;AACnB,YAAM,SAAS;AACf,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,OAAO,SAASC,MAAK,MAAM,UAAU;AAC1D,oBAAc,QAAQ;AACtB,WAAK,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC7C,aAAO;AAAA,IACT;AAEA,IAAAD,cAAa,UAAU,sBACnB,SAAS,oBAAoB,MAAM,UAAU;AAC3C,oBAAc,QAAQ;AACtB,WAAK,gBAAgB,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC1D,aAAO;AAAA,IACT;AAGJ,IAAAA,cAAa,UAAU,iBACnB,SAAS,eAAe,MAAM,UAAU;AACtC,UAAI,MAAM,QAAQ,UAAU,GAAG;AAE/B,oBAAc,QAAQ;AAEtB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAET,aAAO,OAAO,IAAI;AAClB,UAAI,SAAS;AACX,eAAO;AAET,UAAI,SAAS,YAAY,KAAK,aAAa,UAAU;AACnD,YAAI,EAAE,KAAK,iBAAiB;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AAAA,aAC9B;AACH,iBAAO,OAAO,IAAI;AAClB,cAAI,OAAO;AACT,iBAAK,KAAK,kBAAkB,MAAM,KAAK,YAAY,QAAQ;AAAA,QAC/D;AAAA,MACF,WAAW,OAAO,SAAS,YAAY;AACrC,mBAAW;AAEX,aAAK,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACrC,cAAI,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,EAAE,aAAa,UAAU;AACzD,+BAAmB,KAAK,CAAC,EAAE;AAC3B,uBAAW;AACX;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW;AACb,iBAAO;AAET,YAAI,aAAa;AACf,eAAK,MAAM;AAAA,aACR;AACH,oBAAU,MAAM,QAAQ;AAAA,QAC1B;AAEA,YAAI,KAAK,WAAW;AAClB,iBAAO,IAAI,IAAI,KAAK,CAAC;AAEvB,YAAI,OAAO,mBAAmB;AAC5B,eAAK,KAAK,kBAAkB,MAAM,oBAAoB,QAAQ;AAAA,MAClE;AAEA,aAAO;AAAA,IACT;AAEJ,IAAAA,cAAa,UAAU,MAAMA,cAAa,UAAU;AAEpD,IAAAA,cAAa,UAAU,qBACnB,SAAS,mBAAmB,MAAM;AAChC,UAAI,WAAW,QAAQ;AAEvB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAGT,UAAI,OAAO,mBAAmB,QAAW;AACvC,YAAI,UAAU,WAAW,GAAG;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,eAAK,eAAe;AAAA,QACtB,WAAW,OAAO,IAAI,MAAM,QAAW;AACrC,cAAI,EAAE,KAAK,iBAAiB;AAC1B,iBAAK,UAAU,uBAAO,OAAO,IAAI;AAAA;AAEjC,mBAAO,OAAO,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACT;AAGA,UAAI,UAAU,WAAW,GAAG;AAC1B,YAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAChC,gBAAM,KAAK,CAAC;AACZ,cAAI,QAAQ;AAAkB;AAC9B,eAAK,mBAAmB,GAAG;AAAA,QAC7B;AACA,aAAK,mBAAmB,gBAAgB;AACxC,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AACpB,eAAO;AAAA,MACT;AAEA,kBAAY,OAAO,IAAI;AAEvB,UAAI,OAAO,cAAc,YAAY;AACnC,aAAK,eAAe,MAAM,SAAS;AAAA,MACrC,WAAW,cAAc,QAAW;AAElC,aAAK,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,eAAK,eAAe,MAAM,UAAU,CAAC,CAAC;AAAA,QACxC;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEJ,aAAS,WAAW,QAAQ,MAAM,QAAQ;AACxC,UAAI,SAAS,OAAO;AAEpB,UAAI,WAAW;AACb,eAAO,CAAC;AAEV,UAAI,aAAa,OAAO,IAAI;AAC5B,UAAI,eAAe;AACjB,eAAO,CAAC;AAEV,UAAI,OAAO,eAAe;AACxB,eAAO,SAAS,CAAC,WAAW,YAAY,UAAU,IAAI,CAAC,UAAU;AAEnE,aAAO,SACL,gBAAgB,UAAU,IAAI,WAAW,YAAY,WAAW,MAAM;AAAA,IAC1E;AAEA,IAAAA,cAAa,UAAU,YAAY,SAAS,UAAU,MAAM;AAC1D,aAAO,WAAW,MAAM,MAAM,IAAI;AAAA,IACpC;AAEA,IAAAA,cAAa,UAAU,eAAe,SAAS,aAAa,MAAM;AAChE,aAAO,WAAW,MAAM,MAAM,KAAK;AAAA,IACrC;AAEA,IAAAA,cAAa,gBAAgB,SAAS,SAAS,MAAM;AACnD,UAAI,OAAO,QAAQ,kBAAkB,YAAY;AAC/C,eAAO,QAAQ,cAAc,IAAI;AAAA,MACnC,OAAO;AACL,eAAO,cAAc,KAAK,SAAS,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,IAAAA,cAAa,UAAU,gBAAgB;AACvC,aAAS,cAAc,MAAM;AAC3B,UAAI,SAAS,KAAK;AAElB,UAAI,WAAW,QAAW;AACxB,YAAI,aAAa,OAAO,IAAI;AAE5B,YAAI,OAAO,eAAe,YAAY;AACpC,iBAAO;AAAA,QACT,WAAW,eAAe,QAAW;AACnC,iBAAO,WAAW;AAAA,QACpB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,aAAa,SAAS,aAAa;AACxD,aAAO,KAAK,eAAe,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC;AAAA,IACjE;AAEA,aAAS,WAAW,KAAK,GAAG;AAC1B,UAAI,OAAO,IAAI,MAAM,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,EAAE;AACvB,aAAK,CAAC,IAAI,IAAI,CAAC;AACjB,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,MAAM,OAAO;AAC9B,aAAO,QAAQ,IAAI,KAAK,QAAQ;AAC9B,aAAK,KAAK,IAAI,KAAK,QAAQ,CAAC;AAC9B,WAAK,IAAI;AAAA,IACX;AAEA,aAAS,gBAAgB,KAAK;AAC5B,UAAI,MAAM,IAAI,MAAM,IAAI,MAAM;AAC9B,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,YAAI,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,KAAK,SAAS,MAAM;AAC3B,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAC5C,iBAAS,cAAc,KAAK;AAC1B,kBAAQ,eAAe,MAAM,QAAQ;AACrC,iBAAO,GAAG;AAAA,QACZ;AAEA,iBAAS,WAAW;AAClB,cAAI,OAAO,QAAQ,mBAAmB,YAAY;AAChD,oBAAQ,eAAe,SAAS,aAAa;AAAA,UAC/C;AACA,kBAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;AAAA,QAClC;AAAC;AAED,uCAA+B,SAAS,MAAM,UAAU,EAAE,MAAM,KAAK,CAAC;AACtE,YAAI,SAAS,SAAS;AACpB,wCAA8B,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,8BAA8B,SAAS,SAAS,OAAO;AAC9D,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,uCAA+B,SAAS,SAAS,SAAS,KAAK;AAAA,MACjE;AAAA,IACF;AAEA,aAAS,+BAA+B,SAAS,MAAM,UAAU,OAAO;AACtE,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,YAAI,MAAM,MAAM;AACd,kBAAQ,KAAK,MAAM,QAAQ;AAAA,QAC7B,OAAO;AACL,kBAAQ,GAAG,MAAM,QAAQ;AAAA,QAC3B;AAAA,MACF,WAAW,OAAO,QAAQ,qBAAqB,YAAY;AAGzD,gBAAQ,iBAAiB,MAAM,SAAS,aAAa,KAAK;AAGxD,cAAI,MAAM,MAAM;AACd,oBAAQ,oBAAoB,MAAM,YAAY;AAAA,UAChD;AACA,mBAAS,GAAG;AAAA,QACd,CAAC;AAAA,MACH,OAAO;AACL,cAAM,IAAI,UAAU,wEAAwE,OAAO,OAAO;AAAA,MAC5G;AAAA,IACF;AAAA;AAAA;;;AChfA;AAAA,EAEE,aAAAE;AAAA,EAUA,kBAAAC;AAAA,EAEA;AAAA,EACA,6BAAAC;AAAA,EACA;AAAA,OACK;;;ACjBP;AAAA,EAIE;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACNP,oBAAyB;AADzB,SAAS,2BAA2B;AAU7B,IAAM,0BAAN,cAAsC,oBAA6C;AAAA,EACrE,eAAe,IAAI,cAAAC,QAAa,EAAE,mBAAmB,KAAK,CAAC;AAAA,EAE9E,cAAc;AACZ,UAAM;AACN,SAAK,aAAa,GAAG,SAAS,CAAC,QAAQ;AACrC,WAAK,SAAS,MAAM,gCAAgC,GAAG;AAAA,IACzD,CAAC;AAAA,EACH;AACF;;;ACnBA,SAAS,4BAA4B;;;ACArC,SAAoB,sBAAyC;AAG7D,IAAM,eAAe;AAKrB,IAAM,sBAAN,MAA8C;AAAA,EACnC,WAAW;AAAA,IAClB,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,SAAyB;AAO3B,WAAO,eAAe;AAAA,EACxB;AAAA,EAEA,yBAAyB,GAAW,cAAmD;AACrF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAAwB,GAAW,cAAiD;AAClF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAAwB,GAAW,cAAiD;AAClF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAA6C,GAAW,cAAuC;AAC7F,WAAO,KAAK,KAAQ,YAAY;AAAA,EAClC;AAAA,EAEQ,KAAQ,cAAiB;AAC/B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB,IAAI,oBAAoB;;;AC/CrD;AAAA,EAEE;AAAA,EAEA;AAAA,EAGA,oBAAAC;AAAA,EAEA;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,OACK;;;ACZP,SAAS,WAAW,wBAAwB;AAMrC,IAAM,uBAAN,cAAmC,iBAAiB;AAAA,EACzD;AAAA,EACA,YAAY,SAAkB;AAC5B,UAAM,OAAO;AACb,WAAO,eAAe,MAAM,qBAAqB,SAAS;AAC1D,SAAK,OAAO;AACZ,SAAK,OAAO,UAAU;AAAA,EACxB;AACF;;;ADOO,IAAM,mBAAN,MAA2C;AAAA,EAChC,SAAS,IAAI,wBAAwB;AAAA,EACrC,SAAS;AAAA,EACzB,SAAyBC,gBAAe;AAAA,EAC/B,WAAW;AAAA,IAClB,MAAM;AAAA,EACR;AAAA,EACQ;AAAA,EACA;AAAA,EAER,YAAY,oBAAuC,CAAC,GAAG;AACrD,SAAK,qBAAqB,EAAE,GAAG,kBAAkB;AAAA,EACnD;AAAA,EAEA,MAAM,WAAW,SAAwD;AACvE,QAAI;AAEF,iBAAW,OAAO,KAAK,oBAAoB;AACzC,aAAK,sBAAsB,KAAK,OAAO;AAAA,MACzC;AAEA,WAAK,WAAW;AAGhB,WAAK,SAASA,gBAAe;AAAA,IAC/B,SAAS,OAAP;AACA,WAAK,SAASA,gBAAe;AAC7B,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,mBAAsC;AAC3D,UAAM,eAAe,OAAO,QAAQ,iBAAiB,EAClD,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,mBAAmB,GAAG,MAAM,KAAK,EAC/D,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG;AAErB,SAAK,SAASA,gBAAe;AAC7B,SAAK,OAAO,KAAK,qBAAe,KAAK;AAErC,SAAK,qBAAqB,EAAE,GAAG,kBAAkB;AACjD,SAAK,OAAO,KAAK,qBAAe,sBAAsB,EAAE,aAAa,CAAC;AAEtE,QAAI;AACF,YAAM,KAAK,WAAW,KAAK,QAAQ;AAEnC,WAAK,OAAO,KAAK,qBAAe,KAAK;AAAA,IACvC,SAAS,KAAP;AACA,WAAK,OAAO,KAAK,qBAAe,KAAK;AACrC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,yBACE,SACA,cACA,SACA,QAC4B;AAC5B,WAAO,KAAK,oBAA6B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EAClG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QAC2B;AAC3B,WAAO,KAAK,oBAA4B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EACjG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QAC2B;AAC3B,WAAO,KAAK,oBAA4B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EACjG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QACsB;AACtB,WAAO,KAAK,oBAAuB,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EAC5F;AAAA,EAEQ,oBAAyD,SAC/D,cAAiB,SAA6B,QAAuC;AACrF,QAAI,EAAE,WAAW,KAAK,qBAAqB;AACzC,YAAM,UAAU,0BAA0B;AAC1C,cAAQ,MAAM,OAAO;AACrB,YAAM,IAAI,kBAAkB,OAAO;AAAA,IACrC;AAEA,QAAI,KAAK,mBAAmB,OAAO,EAAE,UAAU;AAC7C,aAAO,EAAE,OAAO,cAAc,QAAQ,0BAA0B,SAAS;AAAA,IAC3E;AAEA,UAAM,eAAe,KAAK,sBAAsB,SAAS,OAAO;AAEhE,QAAI,aAAa,UAAU,QAAW;AACpC,YAAM,UAAU,iDAAiD;AACjE,cAAQ,MAAM,OAAO;AACrB,YAAM,IAAI,qBAAqB,OAAO;AAAA,IACxC;AAEA,QAAI,OAAO,aAAa,SAAS,OAAO,cAAc;AACpD,YAAM,IAAI,kBAAkB;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,sBACN,SACA,KACsB;AACtB,QAAI;AACF,YAAM,mBAAmB,KAAK,gBAAmB,SAAS,GAAG;AAE7D,aAAO;AAAA,IACT,SAAS,OAAP;AACA,UAAI,EAAE,iBAAiBC,oBAAmB;AACxC,cAAM,IAAI,aAAc,OAAiB,WAAW,eAAe;AAAA,MACrE;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,gBACN,SACA,KACsB;AACtB,UAAM,WAAiB,KAAK,mBAAmB,OAAO;AAEtD,UAAM,gBAAgB,OAAO,UAAU;AACvC,UAAM,UAAU,gBAAgB,SAAS,mBAAmB,GAAG,IAAI,SAAS;AAE5E,UAAM,QAAQ,WAAW,UAAU,SAAS,OAAO;AAEnD,UAAM,aAAa,gBAAgB,0BAA0B,kBAAkB,0BAA0B;AAEzG,UAAM,SAAS,KAAK,WAAWD,gBAAe,QAAQ,0BAA0B,SAAS;AAEzF,WAAO;AAAA,MACL;AAAA,MACA,GAAI,WAAW,EAAE,QAAQ;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;AJnKA,IAAM,6BAA6B,OAAO,IAAI,0BAA0B;AAUxE,IAAM,cAAc;AAEb,IAAM,iBAAN,cAA6B,qBAA6E;AAAA,EACrG,UAA+C,IAAI,wBAAwB;AAAA,EAC3E,mBAA6B;AAAA,EAC7B,sBAAsB,MAAM,IAAI,wBAAwB;AAAA,EACxD,wBAAwD,oBAAI,IAAI;AAAA,EAElE,cAAc;AACpB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAA8B;AACnC,UAAM,YAAY,YAAY,0BAA0B;AACxD,QAAI,WAAW;AACb,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,gBAAY,0BAA0B,IAAI;AAC1C,WAAO;AAAA,EACT;AAAA,EAqBA,MAAM,WAAwC,eAA2B,oBAAuC;AAC9G,UAAM,aAAa,kBAAkB,aAAa;AAClD,UAAM,UAAU,kBAAqB,aAAa,KAAK,kBAAkB,kBAAkB,KAAK,CAAC;AAEjG,QAAI,YAAY;AACd,YAAM,WAAW,KAAK,iBAAiB,IAAI,UAAU;AACrD,UAAI,UAAU;AACZ,cAAM,aAAa,KAAK,WAAW,UAAU;AAC7C,aAAK,sBAAsB,IAAI,YAAY,OAAO;AAClD,cAAM,KAAK,gCAAgC,YAAY,UAAU,YAAY,OAAO;AAAA,MACtF,OAAO;AACL,aAAK,sBAAsB,IAAI,YAAY,OAAO;AAAA,MACpD;AAAA,IACF,OAAO;AACL,YAAM,aAAa,KAAK;AACxB,WAAK,WAAW;AAGhB,YAAM,8BAAoD,MAAM,KAAK,KAAK,iBAAiB,QAAQ,CAAC,EACjG,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,sBAAsB,IAAI,IAAI,CAAC,EACxD,OAA6B,CAAC,KAAK,CAAC,MAAM,QAAQ,MAAM;AACvD,YAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3B,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAEP,YAAM,eAAqC;AAAA;AAAA,QAEzC,EAAE,MAAM,QAAW,UAAU,KAAK,iBAAiB;AAAA,QACnD,GAAG;AAAA,MACL;AACA,YAAM,QAAQ;AAAA,QACZ,aAAa;AAAA,UAAI,CAAC,UAChB,KAAK,gCAAgC,MAAM,MAAM,MAAM,UAAU,YAAY,OAAO;AAAA,QACtF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAcA,WAAW,iBAA6C;AACtD,UAAM,aAAa,kBAAkB,eAAe;AACpD,QAAI,YAAY;AACd,YAAM,UAAU,KAAK,sBAAsB,IAAI,UAAU;AACzD,UAAI,SAAS;AACX,eAAO;AAAA,MACT,OAAO;AACL,aAAK,QAAQ,MAAM,+BAA+B,cAAc;AAAA,MAClE;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAWA,MAAM,aAAa,iBAAyC;AAC1D,UAAM,aAAa,kBAAkB,eAAe;AACpD,QAAI,YAAY;AACd,YAAM,WAAW,KAAK,iBAAiB,IAAI,UAAU;AACrD,UAAI,UAAU;AACZ,cAAM,aAAa,KAAK,WAAW,UAAU;AAC7C,aAAK,sBAAsB,OAAO,UAAU;AAC5C,cAAM,aAAa,KAAK,WAAW;AACnC,cAAM,KAAK,gCAAgC,YAAY,UAAU,YAAY,UAAU;AAAA,MACzF,OAAO;AACL,aAAK,sBAAsB,OAAO,UAAU;AAAA,MAC9C;AAAA,IACF,OAAO;AACL,aAAO,KAAK,WAAW,CAAC,CAAC;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAA+B;AAGnC,UAAM,KAAK,aAAa;AAGxB,UAAM,QAAQ,WAAW,MAAM,KAAK,KAAK,iBAAiB,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,CAAC;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,UAAU,MAAe,SAA0B;AACjD,WAAO,IAAI;AAAA;AAAA;AAAA,MAGT,MAAM,KAAK,qBAAqB,IAAI;AAAA,MACpC,MAAM,KAAK,mCAAmC,IAAI;AAAA,MAClD,MAAM,KAAK;AAAA,MACX,EAAE,MAAM,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAgC;AACpC,UAAM,MAAM,4BAA4B,aAAa;AACrD,SAAK,sBAAsB,MAAM;AAAA,EACnC;AAAA,EAEA,MAAc,gCACZ,YACA,UACA,YACA,YACe;AACf,UAAM,eAAe,SAAS,SAAS;AACvC,QAAI;AACF,YAAM,SAAS,kBAAkB,YAAY,UAAU;AAGvD,WAAK,2BAA2B,UAAU,EAAE,QAAQ,CAAC,YAAY;AAC/D,iBAAS,KAAK,qBAAe,gBAAgB,EAAE,YAAY,aAAa,CAAC;AAAA,MAC3E,CAAC;AACD,WAAK,SAAS,KAAK,qBAAe,gBAAgB,EAAE,YAAY,aAAa,CAAC;AAAA,IAChF,SAAS,KAAP;AAEA,YAAM,QAAQ;AACd,YAAM,UAAU,iBAAiB,UAAU,UAAU,kCAAkC,OAAO;AAC9F,WAAK,SAAS,MAAM,GAAG,WAAW,GAAG;AACrC,WAAK,2BAA2B,UAAU,EAAE,QAAQ,CAAC,YAAY;AAC/D,iBAAS,KAAK,qBAAe,OAAO,EAAE,YAAY,cAAc,QAAQ,CAAC;AAAA,MAC3E,CAAC;AACD,WAAK,SAAS,KAAK,qBAAe,OAAO,EAAE,YAAY,cAAc,QAAQ,CAAC;AAAA,IAChF;AAAA,EACF;AACF;AAMO,IAAM,cAAc,eAAe,YAAY;;;AD7M/C,IAAM,oBAAN,MAA0C;AAAA,EAI/C,YAGmB,kBACA,iBACA,cACA,SACjB;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAVK,SAAiB,CAAC;AAAA,EAClB;AAAA,EAWR,IAAI,WAA2B;AAC7B,WAAO;AAAA,MACL,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS,KAAK,QAAQ;AAAA,MACtB,kBAAkB,KAAK,iBAAiB,EAAE;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,IAAI,iBAAiC;AACnC,WAAO,KAAK,iBAAiB,GAAG,UAAUE,gBAAe;AAAA,EAC3D;AAAA,EAEA,WAAW,WAA2B,SAA6B;AACjE,SAAK,gBAAgB,EAAE,WAAW,WAAW,OAAO;AACpD,UAAM,eAAe,mBAAmB,WAAW,KAAK,UAAU,MAAM;AAExE,QAAI,cAAc;AAEhB,UAAI;AACF,gBAAQ,EAAE,YAAY,KAAK,SAAS,MAAM,cAAc,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,MACxF,SAAS,KAAP;AACA,aAAK,SAAS,MAAM,gCAAgC,GAAG;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,kBAAkC,SAA6B;AAC3E,SAAK,gBAAgB,EAAE,cAAc,kBAAkB,OAAO;AAAA,EAChE;AAAA,EAEA,YAAY,WAA2B;AACrC,WAAO,KAAK,gBAAgB,EAAE,YAAY,SAAS;AAAA,EACrD;AAAA,EAEA,UAAU,QAAsB;AAC9B,SAAK,gBAAgB,IAAI,WAAW,MAAM;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAqB;AAC/B,SAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,KAAK;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAmB;AACjB,SAAK,SAAS,CAAC;AACf,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAAiB,cAAuB,SAA0C;AAChG,WAAO,KAAK,kBAAkB,SAAS,cAAc,OAAO,EAAE;AAAA,EAChE;AAAA,EAEA,kBACE,SACA,cACA,SAC4B;AAC5B,WAAO,KAAK,SAAkB,SAAS,KAAK,UAAU,0BAA0B,cAAc,WAAW,OAAO;AAAA,EAClH;AAAA,EAEA,eAA0C,SAAiB,cAAiB,SAAoC;AAC9G,WAAO,KAAK,iBAAoB,SAAS,cAAc,OAAO,EAAE;AAAA,EAClE;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK;AAAA,MACV;AAAA;AAAA,MAEA,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAA0C,SAAiB,cAAiB,SAAoC;AAC9G,WAAO,KAAK,iBAAiB,SAAS,cAAc,OAAO,EAAE;AAAA,EAC/D;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK;AAAA,MACV;AAAA;AAAA,MAEA,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eACE,SACA,cACA,SACG;AACH,WAAO,KAAK,iBAAiB,SAAS,cAAc,OAAO,EAAE;AAAA,EAC/D;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK,SAAY,SAAS,KAAK,UAAU,yBAAyB,cAAc,UAAU,OAAO;AAAA,EAC1G;AAAA,EAEQ,SACN,SACA,UACA,cACA,UACA,UAAiC,CAAC,GACZ;AAGtB,UAAM,WAAW;AAAA,MACf,GAAG,YAAY,SAAS;AAAA,MACxB,GAAG,KAAK,SAAS;AAAA,MACjB,GAAI,QAAQ,SAAS,CAAC;AAAA,MACtB,GAAI,KAAK,UAAU,SAAS,CAAC;AAAA,IAC/B;AACA,UAAM,mBAAmB,CAAC,GAAG,QAAQ,EAAE,QAAQ;AAE/C,UAAM,UAAU;AAAA,MACd,GAAG,YAAY,WAAW,MAAM,SAAS,IAAI;AAAA,IAC/C;AAIA,UAAM,cAAqC;AAAA,MACzC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,gBAAgB,KAAK;AAAA,MACrB,kBAAkB,YAAY;AAAA,MAC9B;AAAA,MACA,QAAQ,KAAK;AAAA,IACf;AAEA,QAAI;AACF,WAAK,YAAY,UAAU,aAAa,OAAO;AAG/C,YAAM,aAAa,SAAS,KAAK,KAAK,WAAW,SAAS,cAAc,SAAS,KAAK,OAAO;AAE7F,YAAM,oBAAoB;AAAA,QACxB,GAAG;AAAA,QACH,cAAc,OAAO,OAAO,WAAW,gBAAgB,CAAC,CAAC;AAAA,QACzD;AAAA,MACF;AAEA,WAAK,WAAW,kBAAkB,aAAa,mBAAmB,OAAO;AAEzE,aAAO;AAAA,IACT,SAAS,KAAP;AACA,YAAM,eAAwB,KAAe;AAC7C,YAAM,YAAwB,KAA0B,QAAQC,WAAU;AAE1E,WAAK,WAAW,kBAAkB,aAAa,KAAK,OAAO;AAE3D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,QAAQC,2BAA0B;AAAA,QAClC,cAAc,OAAO,OAAO,CAAC,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,aAAa,kBAAkB,aAAa,OAAO;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,YAAY,OAAe,aAA0B,SAAgC;AAC3F,WAAO,OAAO,WAAW;AACzB,WAAO,OAAO,YAAY,OAAO;AAEjC,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,aAAa,OAAO,OAAO,QAAQ,SAAS,CAAC;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,WACN,OACA,aACA,mBACA,SACA;AAEA,eAAW,QAAQ,OAAO;AACxB,YAAM,QAAQ,aAAa,mBAAmB,QAAQ,SAAS;AAAA,IACjE;AAAA,EACF;AAAA,EAEQ,WAAW,OAAe,aAA0B,KAAc,SAAgC;AAExG,eAAW,QAAQ,OAAO;AACxB,UAAI;AACF,cAAM,QAAQ,aAAa,KAAK,QAAQ,SAAS;AAAA,MACnD,SAASC,MAAP;AACA,aAAK,QAAQ,MAAM,wCAAwCA,MAAK;AAChE,YAAIA,gBAAe,OAAO;AACxB,eAAK,QAAQ,MAAMA,KAAI,KAAK;AAAA,QAC9B;AACA,aAAK,QAAQ,MAAOA,MAAe,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,OAAe,aAA0B,SAAgC;AAE5F,eAAW,QAAQ,OAAO;AACxB,UAAI;AACF,cAAM,UAAU,aAAa,QAAQ,SAAS;AAAA,MAChD,SAAS,KAAP;AACA,aAAK,QAAQ,MAAM,0CAA0C,KAAK;AAClE,YAAI,eAAe,OAAO;AACxB,eAAK,QAAQ,MAAM,IAAI,KAAK;AAAA,QAC9B;AACA,aAAK,QAAQ,MAAO,KAAe,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAY,YAAsB;AAChC,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAY,UAAU;AACpB,WAAO,KAAK,iBAAiB,KAAK,aAAa;AAAA,EACjD;AACF;;;AO1RA,cAAc;",
6
+ "names": ["ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "ErrorCode", "ProviderStatus", "StandardResolutionReasons", "EventEmitter", "OpenFeatureError", "ProviderStatus", "ProviderStatus", "OpenFeatureError", "ProviderStatus", "ErrorCode", "StandardResolutionReasons", "err"]
7
7
  }
package/dist/types.d.ts CHANGED
@@ -471,42 +471,42 @@ interface EvaluationLifeCycle<T> {
471
471
 
472
472
  declare abstract class OpenFeatureError extends Error {
473
473
  abstract code: ErrorCode;
474
- constructor(message?: string);
474
+ constructor(message?: string, options?: ErrorOptions);
475
475
  }
476
476
 
477
477
  declare class GeneralError extends OpenFeatureError {
478
478
  code: ErrorCode;
479
- constructor(message?: string);
479
+ constructor(message?: string, options?: ErrorOptions);
480
480
  }
481
481
 
482
482
  declare class FlagNotFoundError extends OpenFeatureError {
483
483
  code: ErrorCode;
484
- constructor(message?: string);
484
+ constructor(message?: string, options?: ErrorOptions);
485
485
  }
486
486
 
487
487
  declare class ParseError extends OpenFeatureError {
488
488
  code: ErrorCode;
489
- constructor(message?: string);
489
+ constructor(message?: string, options?: ErrorOptions);
490
490
  }
491
491
 
492
492
  declare class TypeMismatchError extends OpenFeatureError {
493
493
  code: ErrorCode;
494
- constructor(message?: string);
494
+ constructor(message?: string, options?: ErrorOptions);
495
495
  }
496
496
 
497
497
  declare class TargetingKeyMissingError extends OpenFeatureError {
498
498
  code: ErrorCode;
499
- constructor(message?: string);
499
+ constructor(message?: string, options?: ErrorOptions);
500
500
  }
501
501
 
502
502
  declare class InvalidContextError extends OpenFeatureError {
503
503
  code: ErrorCode;
504
- constructor(message?: string);
504
+ constructor(message?: string, options?: ErrorOptions);
505
505
  }
506
506
 
507
507
  declare class ProviderNotReadyError extends OpenFeatureError {
508
508
  code: ErrorCode;
509
- constructor(message?: string);
509
+ constructor(message?: string, options?: ErrorOptions);
510
510
  }
511
511
 
512
512
  /**
@@ -576,6 +576,10 @@ declare abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonPro
576
576
  * @param {EventHandler} handler The handler to remove for the provider event type
577
577
  */
578
578
  removeHandler<T extends AnyProviderEvent>(eventType: T, handler: EventHandler): void;
579
+ /**
580
+ * Removes all event handlers.
581
+ */
582
+ clearHandlers(): void;
579
583
  /**
580
584
  * Gets the current handlers for the given provider event type.
581
585
  * @param {AnyProviderEvent} eventType The provider event type to get the current handlers for
@@ -947,7 +951,7 @@ declare class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implem
947
951
  * @param {string} clientName The name to identify the client
948
952
  * @returns {EvaluationContext} Evaluation context
949
953
  */
950
- getContext(clientName: string): EvaluationContext;
954
+ getContext(clientName?: string): EvaluationContext;
951
955
  /**
952
956
  * Resets the global evaluation context to an empty object.
953
957
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfeature/web-sdk",
3
- "version": "0.4.9",
3
+ "version": "0.4.11",
4
4
  "description": "OpenFeature SDK for Web",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "files": [
@@ -17,8 +17,8 @@
17
17
  "test": "jest --verbose",
18
18
  "lint": "eslint ./",
19
19
  "clean": "shx rm -rf ./dist",
20
- "build:web-esm": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2016 --platform=browser --format=esm --outfile=./dist/esm/index.js --analyze",
21
- "build:web-cjs": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2016 --platform=browser --format=cjs --outfile=./dist/cjs/index.js --analyze",
20
+ "build:web-esm": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2022 --platform=browser --format=esm --outfile=./dist/esm/index.js --analyze",
21
+ "build:web-cjs": "esbuild src/index.ts --bundle --external:@openfeature/core --sourcemap --target=es2022 --platform=browser --format=cjs --outfile=./dist/cjs/index.js --analyze",
22
22
  "build:rollup-types": "rollup -c ../../rollup.config.mjs",
23
23
  "build": "npm run clean && npm run build:web-esm && npm run build:web-cjs && npm run build:rollup-types",
24
24
  "postbuild": "shx cp ./../../package.esm.json ./dist/esm/package.json",
@@ -46,9 +46,9 @@
46
46
  },
47
47
  "homepage": "https://github.com/open-feature/js-sdk#readme",
48
48
  "peerDependencies": {
49
- "@openfeature/core": "0.0.22"
49
+ "@openfeature/core": "0.0.24"
50
50
  },
51
51
  "devDependencies": {
52
- "@openfeature/core": "0.0.22"
52
+ "@openfeature/core": "0.0.24"
53
53
  }
54
54
  }