@openfeature/web-sdk 0.3.9-experimental → 0.3.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.
- package/dist/cjs/index.js +12 -6
- package/dist/cjs/index.js.map +2 -2
- package/dist/esm/index.js +12 -6
- package/dist/esm/index.js.map +2 -2
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -803,7 +803,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
803
803
|
return this._events.getHandlers(eventType);
|
|
804
804
|
}
|
|
805
805
|
setProvider(clientOrProvider, providerOrUndefined) {
|
|
806
|
-
var _a, _b, _c, _d, _e, _f;
|
|
806
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
807
807
|
const clientName = stringOrUndefined(clientOrProvider);
|
|
808
808
|
const provider = (_a = objectOrUndefined(clientOrProvider)) != null ? _a : objectOrUndefined(providerOrUndefined);
|
|
809
809
|
if (!provider) {
|
|
@@ -814,14 +814,20 @@ var OpenFeatureCommonAPI = class {
|
|
|
814
814
|
return this;
|
|
815
815
|
}
|
|
816
816
|
const emitters = this.getAssociatedEventEmitters(clientName);
|
|
817
|
-
if (typeof provider.initialize === "function") {
|
|
818
|
-
|
|
817
|
+
if (typeof provider.initialize === "function" && provider.status === void 0) {
|
|
818
|
+
const activeLogger = this._logger || console;
|
|
819
|
+
activeLogger.warn(
|
|
820
|
+
`Provider ${(_b = provider == null ? void 0 : provider.metadata) == null ? void 0 : _b.name} implements 'initialize' but not 'status'. Please implement 'status'.`
|
|
821
|
+
);
|
|
822
|
+
}
|
|
823
|
+
if ((provider == null ? void 0 : provider.status) === "NOT_READY" /* NOT_READY */ && typeof provider.initialize === "function") {
|
|
824
|
+
(_e = (_d = (_c = provider.initialize) == null ? void 0 : _c.call(provider, this._context)) == null ? void 0 : _d.then(() => {
|
|
819
825
|
var _a2;
|
|
820
826
|
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
821
827
|
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
822
828
|
});
|
|
823
829
|
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
824
|
-
})) == null ? void 0 :
|
|
830
|
+
})) == null ? void 0 : _e.catch((error) => {
|
|
825
831
|
var _a2;
|
|
826
832
|
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
827
833
|
emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
|
|
@@ -832,7 +838,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
832
838
|
emitters.forEach((emitter) => {
|
|
833
839
|
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
834
840
|
});
|
|
835
|
-
(
|
|
841
|
+
(_f = this._events) == null ? void 0 : _f.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
836
842
|
}
|
|
837
843
|
if (clientName) {
|
|
838
844
|
this._clientProviders.set(clientName, provider);
|
|
@@ -841,7 +847,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
841
847
|
}
|
|
842
848
|
this.transferListeners(oldProvider, provider, clientName, emitters);
|
|
843
849
|
if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
|
|
844
|
-
(
|
|
850
|
+
(_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider);
|
|
845
851
|
}
|
|
846
852
|
return this;
|
|
847
853
|
}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../node_modules/events/events.js", "../../src/index.ts", "../../../shared/src/errors/open-feature-error-abstract.ts", "../../../shared/src/evaluation/evaluation.ts", "../../../shared/src/errors/general-error.ts", "../../../shared/src/errors/flag-not-found-error.ts", "../../../shared/src/errors/parse-error.ts", "../../../shared/src/errors/type-mismatch-error.ts", "../../../shared/src/errors/targeting-key-missing-error.ts", "../../../shared/src/errors/invalid-context-error.ts", "../../../shared/src/events/events.ts", "../../../shared/src/logger/default-logger.ts", "../../../shared/src/logger/safe-logger.ts", "../../../shared/src/events/open-feature-event-emitter.ts", "../../../shared/src/provider/provider.ts", "../../../shared/src/transaction-context/no-op-transaction-context-propagator.ts", "../../../shared/src/type-guards.ts", "../../../shared/src/filter.ts", "../../../shared/src/open-feature.ts", "../../src/provider/no-op-provider.ts", "../../src/open-feature.ts", "../../src/client/open-feature-client.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", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from '@openfeature/shared';\n", "import { ErrorCode } from '../evaluation';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "export type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\nexport type PrimitiveValue = null | boolean | string | number;\nexport type JsonObject = { [key: string]: JsonValue };\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\n/**\n * A structure which supports definition of arbitrary properties, with keys of type string, and values of type boolean, string, or number.\n *\n * This structure is populated by a provider for use by an Application Author (via the Evaluation API) or an Application Integrator (via hooks).\n */\nexport type FlagMetadata = Record<string, string | number | boolean>;\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n flagMetadata?: FlagMetadata;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n flagMetadata: Readonly<FlagMetadata>;\n} & ResolutionDetails<T>;\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * The resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n\n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n\n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "export enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n\n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n\n /**\n * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.\n */\n Stale = 'PROVIDER_STALE',\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { Logger } from './logger';\n\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n\n info(): void {}\n\n debug(): void {}\n}\n", "import { Logger } from './logger';\nimport { DefaultLogger } from './default-logger';\n\nexport const LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { Logger, ManageLogger, SafeLogger } from '../logger';\nimport EventEmitter from 'events';\nimport { ProviderEvents } from './events';\nimport { EventContext, EventDetails, EventHandler, CommonEventDetails } from './eventing';\n\nabstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>>\n implements ManageLogger<GenericEventEmitter<AdditionalContext>>\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _handlers = new WeakMap<EventHandler<any>, EventHandler<any>>();\n private readonly eventEmitter = new EventEmitter({ captureRejections: true });\n private _eventLogger?: Logger;\n\n constructor(private readonly globalLogger?: () => Logger) {\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n\n emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void {\n this.eventEmitter.emit(eventType, context);\n }\n\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // The handlers have to be wrapped with an async function because if a synchronous functions throws an error,\n // the other handlers will not run.\n const asyncHandler = async (context?: EventDetails<T>) => {\n await handler(context);\n };\n // The async handler has to be written to the map, because we need to get the wrapper function when deleting a listener\n this._handlers.set(handler, asyncHandler);\n this.eventEmitter.on(eventType, asyncHandler);\n }\n\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // Get the wrapper function for this handler, to delete it from the event emitter\n const asyncHandler = this._handlers.get(handler) as EventHandler<T> | undefined;\n\n if (!asyncHandler) {\n return;\n }\n\n this.eventEmitter.removeListener(eventType, asyncHandler);\n }\n\n removeAllHandlers(eventType?: ProviderEvents): void {\n // If giving undefined, the listeners are not removed, so we have to check explicitly\n if (eventType) {\n this.eventEmitter.removeAllListeners(eventType);\n } else {\n this.eventEmitter.removeAllListeners();\n }\n }\n\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this.eventEmitter.listeners(eventType) as EventHandler<T>[];\n }\n\n setLogger(logger: Logger): this {\n this._eventLogger = new SafeLogger(logger);\n return this;\n }\n\n private get _logger() {\n return this._eventLogger ?? this.globalLogger?.();\n }\n}\n\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 {};\n\n/**\n * The InternalEventEmitter should only be used within the SDK. It extends the\n * OpenFeatureEventEmitter to include additional properties that can be included\n * in the event details.\n */\nexport class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {};", "import { OpenFeatureEventEmitter } from '../events';\nimport { Metadata } from '../types';\nimport { EvaluationContext } from '../evaluation';\n\n/**\n * The state of the provider.\n */\nexport enum ProviderStatus {\n /**\n * The provider has not been initialized and cannot yet evaluate flags.\n */\n NOT_READY = 'NOT_READY',\n\n /**\n * The provider is ready to resolve flags.\n */\n READY = 'READY',\n\n /**\n * The provider is in an error state and unable to evaluate flags.\n */\n ERROR = 'ERROR',\n}\n\n/**\n * Static data about the provider.\n */\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n\n /**\n * Returns a representation of the current readiness of the provider.\n * If the provider needs to be initialized, it should return {@link ProviderStatus.READY}.\n * If the provider is in an error state, it should return {@link ProviderStatus.ERROR}.\n * If the provider is functioning normally, it should return {@link ProviderStatus.NOT_READY}.\n * \n * _Providers which do not implement this method are assumed to be ready immediately._\n */\n readonly status?: ProviderStatus;\n\n /**\n * An event emitter for ProviderEvents.\n * @see ProviderEvents\n */\n events?: OpenFeatureEventEmitter;\n\n /**\n * A function used to shut down the provider.\n * Called when this provider is replaced with a new one, or when the OpenFeature is shut down.\n */\n onClose?(): Promise<void>;\n\n /**\n * A function used to setup the provider.\n * Called by the SDK after the provider is set if the provider's status is {@link ProviderStatus.NOT_READY}.\n * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.\n * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.\n * Use this function to perform any context-dependent setup within the provider.\n * @param context\n */\n initialize?(context?: EvaluationContext): Promise<void>;\n}", "import { EvaluationContext } from '../evaluation';\nimport { TransactionContextPropagator } from './transaction-context';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "/**\n * Checks whether the parameter is a string.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Returns the parameter if it is a string, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {string|undefined} The parameter if it is a string, otherwise undefined\n */\nexport function stringOrUndefined(value: unknown): string | undefined {\n return isString(value) ? value : undefined;\n}\n\n/**\n * Checks whether the parameter is an object.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is an object\n */\nexport function isObject<T extends object>(value: unknown): value is T {\n return typeof value === 'object';\n}\n\n/**\n * Returns the parameter if it is an object, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {object|undefined} The parameter if it is an object, otherwise undefined\n */\nexport function objectOrUndefined<T extends object>(value: unknown): T | undefined {\n return isObject<T>(value) ? value : undefined;\n}\n", "/**\n * Checks if a value is not null or undefined and returns it as type assertion\n * @template T\n * @param {T} input The value to check\n * @returns If the value is not null or undefined\n */\nexport function isDefined<T>(input?: T | null | undefined): input is T {\n return typeof input !== 'undefined' && input !== null;\n}\n", "import { EvaluationContext, FlagValue } from './evaluation';\nimport { EventDetails, EventHandler, Eventing, ProviderEvents } from './events';\nimport { InternalEventEmitter } from './events/open-feature-event-emitter';\nimport { isDefined } from './filter';\nimport { EvaluationLifeCycle, Hook } from './hooks';\nimport { DefaultLogger, Logger, ManageLogger, SafeLogger } from './logger';\nimport { CommonProvider, ProviderMetadata } from './provider';\nimport {\n ManageTransactionContextPropagator,\n NOOP_TRANSACTION_CONTEXT_PROPAGATOR,\n TransactionContext,\n TransactionContextPropagator,\n} from './transaction-context';\nimport { objectOrUndefined, stringOrUndefined } from './type-guards';\n\nexport abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider>\n implements\n Eventing,\n EvaluationLifeCycle<OpenFeatureCommonAPI<P>>,\n ManageLogger<OpenFeatureCommonAPI<P>>,\n ManageTransactionContextPropagator<OpenFeatureCommonAPI<P>>\n{\n protected _hooks: Hook[] = [];\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n protected abstract _defaultProvider: P;\n\n private readonly _events = new InternalEventEmitter(() => this._logger);\n private readonly _clientEventHandlers: Map<string | undefined, [ProviderEvents, EventHandler<ProviderEvents>][]> =\n new Map();\n protected _clientProviders: Map<string, P> = new Map();\n protected _clientEvents: Map<string | undefined, InternalEventEmitter> = new Map();\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n /**\n * Get metadata about registered provider.\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._defaultProvider.metadata;\n }\n\n /**\n * Adds a handler for the given provider event type.\n * The handlers are called in the order they have been added.\n * When changing the provider, the currently attached handlers will listen to the events of the new provider.\n * @param {ProviderEvents} eventType The provider event type to listen to\n * @param {EventHandler} handler The handler to run on occurrence of the event type\n */\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.addHandler(eventType, handler);\n }\n\n /**\n * Removes a handler for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to remove the listener for\n * @param {EventHandler} handler The handler to remove for the provider event type\n */\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.removeHandler(eventType, handler);\n }\n\n /**\n * Gets the current handlers for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to get the current handlers for\n * @returns {EventHandler[]} The handlers currently attached to the given provider event type\n */\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this._events.getHandlers(eventType);\n }\n\n /**\n * Sets the default provider for flag evaluations.\n * This provider will be used by unnamed clients and named clients to which no provider is bound.\n * Setting a provider supersedes the current provider used in new and existing clients without a name.\n * @template P\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {OpenFeatureCommonAPI} OpenFeature API\n */\n setProvider(provider: P): this;\n /**\n * Sets the provider that OpenFeature will use for flag evaluations of providers with the given name.\n * Setting a provider supersedes the current provider used in new and existing clients with that name.\n * @template P\n * @param {string} clientName The name to identify the client\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {this} OpenFeature API\n */\n setProvider(clientName: string, provider: P): this;\n setProvider(clientOrProvider?: string | P, providerOrUndefined?: P): this {\n const clientName = stringOrUndefined(clientOrProvider);\n const provider = objectOrUndefined<P>(clientOrProvider) ?? objectOrUndefined<P>(providerOrUndefined);\n\n if (!provider) {\n return this;\n }\n\n const oldProvider = this.getProviderForClient(clientName);\n\n // ignore no-ops\n if (oldProvider === provider) {\n return this;\n }\n\n const emitters = this.getAssociatedEventEmitters(clientName);\n\n if (typeof provider.initialize === 'function') {\n provider\n .initialize?.(this._context)\n ?.then(() => {\n // fetch the most recent event emitters, some may have been added during init\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n })\n ?.catch((error) => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n } else {\n emitters.forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n }\n\n if (clientName) {\n this._clientProviders.set(clientName, provider);\n } else {\n this._defaultProvider = provider;\n }\n\n this.transferListeners(oldProvider, provider, clientName, emitters);\n\n // Do not close a provider that is bound to any client\n if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {\n oldProvider?.onClose?.();\n }\n\n return this;\n }\n\n protected getProviderForClient(name?: string): P {\n if (!name) {\n return this._defaultProvider;\n }\n\n return this._clientProviders.get(name) ?? this._defaultProvider;\n }\n\n protected buildAndCacheEventEmitterForClient(name?: string): InternalEventEmitter {\n const emitter = this._clientEvents.get(name);\n\n if (emitter) {\n return emitter;\n }\n\n // lazily add the event emitters\n const newEmitter = new InternalEventEmitter(() => this._logger);\n this._clientEvents.set(name, newEmitter);\n\n const clientProvider = this.getProviderForClient(name);\n Object.values<ProviderEvents>(ProviderEvents).forEach((eventType) =>\n clientProvider.events?.addHandler(eventType, async (details) => {\n newEmitter.emit(eventType, { ...details, clientName: name });\n })\n );\n\n return newEmitter;\n }\n\n private getUnboundEmitters(): InternalEventEmitter[] {\n const namedProviders = [...this._clientProviders.keys()];\n const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);\n const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));\n return [\n // all unbound, named emitters\n ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),\n // the default emitter\n this._clientEvents.get(undefined),\n ].filter(isDefined);\n }\n\n private getAssociatedEventEmitters(clientName: string | undefined) {\n return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();\n }\n\n private transferListeners(\n oldProvider: P,\n newProvider: P,\n clientName: string | undefined,\n emitters: (InternalEventEmitter | undefined)[]\n ) {\n this._clientEventHandlers\n .get(clientName)\n ?.forEach((eventHandler) => oldProvider.events?.removeHandler(...eventHandler));\n\n // iterate over the event types\n const newClientHandlers = Object.values<ProviderEvents>(ProviderEvents).map<\n [ProviderEvents, EventHandler<ProviderEvents>]\n >((eventType) => {\n const handler = async (details?: EventDetails<ProviderEvents>) => {\n // on each event type, fire the associated handlers\n emitters.forEach((emitter) => {\n emitter?.emit(eventType, { ...details, clientName });\n });\n this._events.emit(eventType, { ...details, clientName });\n };\n\n return [eventType, handler];\n });\n\n this._clientEventHandlers.set(clientName, newClientHandlers);\n newClientHandlers.forEach((eventHandler) => newProvider.events?.addHandler(...eventHandler));\n }\n\n async close(): Promise<void> {\n try {\n await this?._defaultProvider?.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n\n const providers = Array.from(this._clientProviders);\n\n await Promise.all(\n providers.map(async ([, provider]) => {\n try {\n await provider.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n })\n );\n }\n\n private handleShutdownError(provider: P, err: unknown) {\n this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);\n this._logger.error((err as Error)?.stack);\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI<P> {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}\n", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/shared';\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 { EvaluationContext, ManageContext, OpenFeatureCommonAPI } from '@openfeature/shared';\nimport { Client, OpenFeatureClient } from './client';\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> implements ManageContext<Promise<void>> {\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\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 async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n\n const allProviders = [this._defaultProvider, ...this._clientProviders.values()];\n await Promise.all(\n allProviders.map(async (provider) => {\n try {\n return await provider.onContextChange?.(oldContext, context);\n } catch (err) {\n this._logger?.error(`Error running context change handler of provider ${provider.metadata.name}:`, err);\n }\n })\n );\n }\n\n getContext(): EvaluationContext {\n return this._context;\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/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { Client } from './client';\nimport { Provider } from '../provider';\nimport {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n Hook,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n OpenFeatureEventEmitter,\n ProviderEvents,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n} from '@openfeature/shared';\nimport { OpenFeature } from '../open-feature';\nimport { FlagEvaluationOptions } from '../evaluation';\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: () => OpenFeatureEventEmitter,\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 addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const providerReady = !this._provider.status || this._provider.status === ProviderStatus.READY;\n\n if (eventType === ProviderEvents.Ready && providerReady) {\n // run immediately, we're ready.\n try {\n handler({ clientName: this.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): 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<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\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 for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\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"],
|
|
5
|
-
"mappings": "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",
|
|
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", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from '@openfeature/shared';\n", "import { ErrorCode } from '../evaluation';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "export type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\nexport type PrimitiveValue = null | boolean | string | number;\nexport type JsonObject = { [key: string]: JsonValue };\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\n/**\n * A structure which supports definition of arbitrary properties, with keys of type string, and values of type boolean, string, or number.\n *\n * This structure is populated by a provider for use by an Application Author (via the Evaluation API) or an Application Integrator (via hooks).\n */\nexport type FlagMetadata = Record<string, string | number | boolean>;\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n flagMetadata?: FlagMetadata;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n flagMetadata: Readonly<FlagMetadata>;\n} & ResolutionDetails<T>;\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * The resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n\n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n\n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "export enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n\n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n\n /**\n * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.\n */\n Stale = 'PROVIDER_STALE',\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { Logger } from './logger';\n\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n\n info(): void {}\n\n debug(): void {}\n}\n", "import { Logger } from './logger';\nimport { DefaultLogger } from './default-logger';\n\nexport const LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { Logger, ManageLogger, SafeLogger } from '../logger';\nimport EventEmitter from 'events';\nimport { ProviderEvents } from './events';\nimport { EventContext, EventDetails, EventHandler, CommonEventDetails } from './eventing';\n\nabstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>>\n implements ManageLogger<GenericEventEmitter<AdditionalContext>>\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _handlers = new WeakMap<EventHandler<any>, EventHandler<any>>();\n private readonly eventEmitter = new EventEmitter({ captureRejections: true });\n private _eventLogger?: Logger;\n\n constructor(private readonly globalLogger?: () => Logger) {\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n\n emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void {\n this.eventEmitter.emit(eventType, context);\n }\n\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // The handlers have to be wrapped with an async function because if a synchronous functions throws an error,\n // the other handlers will not run.\n const asyncHandler = async (context?: EventDetails<T>) => {\n await handler(context);\n };\n // The async handler has to be written to the map, because we need to get the wrapper function when deleting a listener\n this._handlers.set(handler, asyncHandler);\n this.eventEmitter.on(eventType, asyncHandler);\n }\n\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // Get the wrapper function for this handler, to delete it from the event emitter\n const asyncHandler = this._handlers.get(handler) as EventHandler<T> | undefined;\n\n if (!asyncHandler) {\n return;\n }\n\n this.eventEmitter.removeListener(eventType, asyncHandler);\n }\n\n removeAllHandlers(eventType?: ProviderEvents): void {\n // If giving undefined, the listeners are not removed, so we have to check explicitly\n if (eventType) {\n this.eventEmitter.removeAllListeners(eventType);\n } else {\n this.eventEmitter.removeAllListeners();\n }\n }\n\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this.eventEmitter.listeners(eventType) as EventHandler<T>[];\n }\n\n setLogger(logger: Logger): this {\n this._eventLogger = new SafeLogger(logger);\n return this;\n }\n\n private get _logger() {\n return this._eventLogger ?? this.globalLogger?.();\n }\n}\n\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 {};\n\n/**\n * The InternalEventEmitter should only be used within the SDK. It extends the\n * OpenFeatureEventEmitter to include additional properties that can be included\n * in the event details.\n */\nexport class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {};", "import { OpenFeatureEventEmitter } from '../events';\nimport { Metadata } from '../types';\nimport { EvaluationContext } from '../evaluation';\n\n/**\n * The state of the provider.\n */\nexport enum ProviderStatus {\n /**\n * The provider has not been initialized and cannot yet evaluate flags.\n */\n NOT_READY = 'NOT_READY',\n\n /**\n * The provider is ready to resolve flags.\n */\n READY = 'READY',\n\n /**\n * The provider is in an error state and unable to evaluate flags.\n */\n ERROR = 'ERROR',\n}\n\n/**\n * Static data about the provider.\n */\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n\n /**\n * Returns a representation of the current readiness of the provider.\n * If the provider needs to be initialized, it should return {@link ProviderStatus.READY}.\n * If the provider is in an error state, it should return {@link ProviderStatus.ERROR}.\n * If the provider is functioning normally, it should return {@link ProviderStatus.NOT_READY}.\n * \n * _Providers which do not implement this method are assumed to be ready immediately._\n */\n readonly status?: ProviderStatus;\n\n /**\n * An event emitter for ProviderEvents.\n * @see ProviderEvents\n */\n events?: OpenFeatureEventEmitter;\n\n /**\n * A function used to shut down the provider.\n * Called when this provider is replaced with a new one, or when the OpenFeature is shut down.\n */\n onClose?(): Promise<void>;\n\n /**\n * A function used to setup the provider.\n * Called by the SDK after the provider is set if the provider's status is {@link ProviderStatus.NOT_READY}.\n * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.\n * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.\n * Use this function to perform any context-dependent setup within the provider.\n * @param context\n */\n initialize?(context?: EvaluationContext): Promise<void>;\n}", "import { EvaluationContext } from '../evaluation';\nimport { TransactionContextPropagator } from './transaction-context';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "/**\n * Checks whether the parameter is a string.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Returns the parameter if it is a string, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {string|undefined} The parameter if it is a string, otherwise undefined\n */\nexport function stringOrUndefined(value: unknown): string | undefined {\n return isString(value) ? value : undefined;\n}\n\n/**\n * Checks whether the parameter is an object.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is an object\n */\nexport function isObject<T extends object>(value: unknown): value is T {\n return typeof value === 'object';\n}\n\n/**\n * Returns the parameter if it is an object, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {object|undefined} The parameter if it is an object, otherwise undefined\n */\nexport function objectOrUndefined<T extends object>(value: unknown): T | undefined {\n return isObject<T>(value) ? value : undefined;\n}\n", "/**\n * Checks if a value is not null or undefined and returns it as type assertion\n * @template T\n * @param {T} input The value to check\n * @returns If the value is not null or undefined\n */\nexport function isDefined<T>(input?: T | null | undefined): input is T {\n return typeof input !== 'undefined' && input !== null;\n}\n", "import { EvaluationContext, FlagValue } from './evaluation';\nimport { EventDetails, EventHandler, Eventing, ProviderEvents } from './events';\nimport { InternalEventEmitter } from './events/open-feature-event-emitter';\nimport { isDefined } from './filter';\nimport { EvaluationLifeCycle, Hook } from './hooks';\nimport { DefaultLogger, Logger, ManageLogger, SafeLogger } from './logger';\nimport { CommonProvider, ProviderMetadata, ProviderStatus } from './provider';\nimport {\n ManageTransactionContextPropagator,\n NOOP_TRANSACTION_CONTEXT_PROPAGATOR,\n TransactionContext,\n TransactionContextPropagator,\n} from './transaction-context';\nimport { objectOrUndefined, stringOrUndefined } from './type-guards';\n\nexport abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider>\n implements\n Eventing,\n EvaluationLifeCycle<OpenFeatureCommonAPI<P>>,\n ManageLogger<OpenFeatureCommonAPI<P>>,\n ManageTransactionContextPropagator<OpenFeatureCommonAPI<P>>\n{\n protected _hooks: Hook[] = [];\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n protected abstract _defaultProvider: P;\n\n private readonly _events = new InternalEventEmitter(() => this._logger);\n private readonly _clientEventHandlers: Map<string | undefined, [ProviderEvents, EventHandler<ProviderEvents>][]> =\n new Map();\n protected _clientProviders: Map<string, P> = new Map();\n protected _clientEvents: Map<string | undefined, InternalEventEmitter> = new Map();\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n /**\n * Get metadata about registered provider.\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._defaultProvider.metadata;\n }\n\n /**\n * Adds a handler for the given provider event type.\n * The handlers are called in the order they have been added.\n * When changing the provider, the currently attached handlers will listen to the events of the new provider.\n * @param {ProviderEvents} eventType The provider event type to listen to\n * @param {EventHandler} handler The handler to run on occurrence of the event type\n */\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.addHandler(eventType, handler);\n }\n\n /**\n * Removes a handler for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to remove the listener for\n * @param {EventHandler} handler The handler to remove for the provider event type\n */\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.removeHandler(eventType, handler);\n }\n\n /**\n * Gets the current handlers for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to get the current handlers for\n * @returns {EventHandler[]} The handlers currently attached to the given provider event type\n */\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this._events.getHandlers(eventType);\n }\n\n /**\n * Sets the default provider for flag evaluations.\n * This provider will be used by unnamed clients and named clients to which no provider is bound.\n * Setting a provider supersedes the current provider used in new and existing clients without a name.\n * @template P\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {OpenFeatureCommonAPI} OpenFeature API\n */\n setProvider(provider: P): this;\n /**\n * Sets the provider that OpenFeature will use for flag evaluations of providers with the given name.\n * Setting a provider supersedes the current provider used in new and existing clients with that name.\n * @template P\n * @param {string} clientName The name to identify the client\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {this} OpenFeature API\n */\n setProvider(clientName: string, provider: P): this;\n setProvider(clientOrProvider?: string | P, providerOrUndefined?: P): this {\n const clientName = stringOrUndefined(clientOrProvider);\n const provider = objectOrUndefined<P>(clientOrProvider) ?? objectOrUndefined<P>(providerOrUndefined);\n\n if (!provider) {\n return this;\n }\n\n const oldProvider = this.getProviderForClient(clientName);\n\n // ignore no-ops\n if (oldProvider === provider) {\n return this;\n }\n\n const emitters = this.getAssociatedEventEmitters(clientName);\n\n // warn of improper implementations\n if (typeof provider.initialize === 'function' && provider.status === undefined) {\n const activeLogger = this._logger || console;\n activeLogger.warn(\n `Provider ${provider?.metadata?.name} implements 'initialize' but not 'status'. Please implement 'status'.`\n );\n }\n\n if (provider?.status === ProviderStatus.NOT_READY && typeof provider.initialize === 'function') {\n provider\n .initialize?.(this._context)\n ?.then(() => {\n // fetch the most recent event emitters, some may have been added during init\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n })\n ?.catch((error) => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n } else {\n emitters.forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n }\n\n if (clientName) {\n this._clientProviders.set(clientName, provider);\n } else {\n this._defaultProvider = provider;\n }\n\n this.transferListeners(oldProvider, provider, clientName, emitters);\n\n // Do not close a provider that is bound to any client\n if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {\n oldProvider?.onClose?.();\n }\n\n return this;\n }\n\n protected getProviderForClient(name?: string): P {\n if (!name) {\n return this._defaultProvider;\n }\n\n return this._clientProviders.get(name) ?? this._defaultProvider;\n }\n\n protected buildAndCacheEventEmitterForClient(name?: string): InternalEventEmitter {\n const emitter = this._clientEvents.get(name);\n\n if (emitter) {\n return emitter;\n }\n\n // lazily add the event emitters\n const newEmitter = new InternalEventEmitter(() => this._logger);\n this._clientEvents.set(name, newEmitter);\n\n const clientProvider = this.getProviderForClient(name);\n Object.values<ProviderEvents>(ProviderEvents).forEach((eventType) =>\n clientProvider.events?.addHandler(eventType, async (details) => {\n newEmitter.emit(eventType, { ...details, clientName: name });\n })\n );\n\n return newEmitter;\n }\n\n private getUnboundEmitters(): InternalEventEmitter[] {\n const namedProviders = [...this._clientProviders.keys()];\n const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);\n const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));\n return [\n // all unbound, named emitters\n ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),\n // the default emitter\n this._clientEvents.get(undefined),\n ].filter(isDefined);\n }\n\n private getAssociatedEventEmitters(clientName: string | undefined) {\n return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();\n }\n\n private transferListeners(\n oldProvider: P,\n newProvider: P,\n clientName: string | undefined,\n emitters: (InternalEventEmitter | undefined)[]\n ) {\n this._clientEventHandlers\n .get(clientName)\n ?.forEach((eventHandler) => oldProvider.events?.removeHandler(...eventHandler));\n\n // iterate over the event types\n const newClientHandlers = Object.values<ProviderEvents>(ProviderEvents).map<\n [ProviderEvents, EventHandler<ProviderEvents>]\n >((eventType) => {\n const handler = async (details?: EventDetails<ProviderEvents>) => {\n // on each event type, fire the associated handlers\n emitters.forEach((emitter) => {\n emitter?.emit(eventType, { ...details, clientName });\n });\n this._events.emit(eventType, { ...details, clientName });\n };\n\n return [eventType, handler];\n });\n\n this._clientEventHandlers.set(clientName, newClientHandlers);\n newClientHandlers.forEach((eventHandler) => newProvider.events?.addHandler(...eventHandler));\n }\n\n async close(): Promise<void> {\n try {\n await this?._defaultProvider?.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n\n const providers = Array.from(this._clientProviders);\n\n await Promise.all(\n providers.map(async ([, provider]) => {\n try {\n await provider.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n })\n );\n }\n\n private handleShutdownError(provider: P, err: unknown) {\n this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);\n this._logger.error((err as Error)?.stack);\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI<P> {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}\n", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/shared';\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 { EvaluationContext, ManageContext, OpenFeatureCommonAPI } from '@openfeature/shared';\nimport { Client, OpenFeatureClient } from './client';\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> implements ManageContext<Promise<void>> {\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\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 async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n\n const allProviders = [this._defaultProvider, ...this._clientProviders.values()];\n await Promise.all(\n allProviders.map(async (provider) => {\n try {\n return await provider.onContextChange?.(oldContext, context);\n } catch (err) {\n this._logger?.error(`Error running context change handler of provider ${provider.metadata.name}:`, err);\n }\n })\n );\n }\n\n getContext(): EvaluationContext {\n return this._context;\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/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { Client } from './client';\nimport { Provider } from '../provider';\nimport {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n Hook,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n OpenFeatureEventEmitter,\n ProviderEvents,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n} from '@openfeature/shared';\nimport { OpenFeature } from '../open-feature';\nimport { FlagEvaluationOptions } from '../evaluation';\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: () => OpenFeatureEventEmitter,\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 addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const providerReady = !this._provider.status || this._provider.status === ProviderStatus.READY;\n\n if (eventType === ProviderEvents.Ready && providerReady) {\n // run immediately, we're ready.\n try {\n handler({ clientName: this.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): 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<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\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 for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["module", "ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "ErrorCode", "ProviderEvents", "EventEmitter", "ProviderStatus", "_a", "err"]
|
|
7
7
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -765,7 +765,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
765
765
|
return this._events.getHandlers(eventType);
|
|
766
766
|
}
|
|
767
767
|
setProvider(clientOrProvider, providerOrUndefined) {
|
|
768
|
-
var _a, _b, _c, _d, _e, _f;
|
|
768
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
769
769
|
const clientName = stringOrUndefined(clientOrProvider);
|
|
770
770
|
const provider = (_a = objectOrUndefined(clientOrProvider)) != null ? _a : objectOrUndefined(providerOrUndefined);
|
|
771
771
|
if (!provider) {
|
|
@@ -776,14 +776,20 @@ var OpenFeatureCommonAPI = class {
|
|
|
776
776
|
return this;
|
|
777
777
|
}
|
|
778
778
|
const emitters = this.getAssociatedEventEmitters(clientName);
|
|
779
|
-
if (typeof provider.initialize === "function") {
|
|
780
|
-
|
|
779
|
+
if (typeof provider.initialize === "function" && provider.status === void 0) {
|
|
780
|
+
const activeLogger = this._logger || console;
|
|
781
|
+
activeLogger.warn(
|
|
782
|
+
`Provider ${(_b = provider == null ? void 0 : provider.metadata) == null ? void 0 : _b.name} implements 'initialize' but not 'status'. Please implement 'status'.`
|
|
783
|
+
);
|
|
784
|
+
}
|
|
785
|
+
if ((provider == null ? void 0 : provider.status) === "NOT_READY" /* NOT_READY */ && typeof provider.initialize === "function") {
|
|
786
|
+
(_e = (_d = (_c = provider.initialize) == null ? void 0 : _c.call(provider, this._context)) == null ? void 0 : _d.then(() => {
|
|
781
787
|
var _a2;
|
|
782
788
|
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
783
789
|
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
784
790
|
});
|
|
785
791
|
(_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
786
|
-
})) == null ? void 0 :
|
|
792
|
+
})) == null ? void 0 : _e.catch((error) => {
|
|
787
793
|
var _a2;
|
|
788
794
|
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
789
795
|
emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
|
|
@@ -794,7 +800,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
794
800
|
emitters.forEach((emitter) => {
|
|
795
801
|
emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
796
802
|
});
|
|
797
|
-
(
|
|
803
|
+
(_f = this._events) == null ? void 0 : _f.emit("PROVIDER_READY" /* Ready */, { clientName });
|
|
798
804
|
}
|
|
799
805
|
if (clientName) {
|
|
800
806
|
this._clientProviders.set(clientName, provider);
|
|
@@ -803,7 +809,7 @@ var OpenFeatureCommonAPI = class {
|
|
|
803
809
|
}
|
|
804
810
|
this.transferListeners(oldProvider, provider, clientName, emitters);
|
|
805
811
|
if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
|
|
806
|
-
(
|
|
812
|
+
(_g = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _g.call(oldProvider);
|
|
807
813
|
}
|
|
808
814
|
return this;
|
|
809
815
|
}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../node_modules/events/events.js", "../../../shared/src/errors/open-feature-error-abstract.ts", "../../../shared/src/evaluation/evaluation.ts", "../../../shared/src/errors/general-error.ts", "../../../shared/src/errors/flag-not-found-error.ts", "../../../shared/src/errors/parse-error.ts", "../../../shared/src/errors/type-mismatch-error.ts", "../../../shared/src/errors/targeting-key-missing-error.ts", "../../../shared/src/errors/invalid-context-error.ts", "../../../shared/src/events/events.ts", "../../../shared/src/logger/default-logger.ts", "../../../shared/src/logger/safe-logger.ts", "../../../shared/src/events/open-feature-event-emitter.ts", "../../../shared/src/provider/provider.ts", "../../../shared/src/transaction-context/no-op-transaction-context-propagator.ts", "../../../shared/src/type-guards.ts", "../../../shared/src/filter.ts", "../../../shared/src/open-feature.ts", "../../src/provider/no-op-provider.ts", "../../src/open-feature.ts", "../../src/client/open-feature-client.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 { ErrorCode } from '../evaluation';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "export type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\nexport type PrimitiveValue = null | boolean | string | number;\nexport type JsonObject = { [key: string]: JsonValue };\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\n/**\n * A structure which supports definition of arbitrary properties, with keys of type string, and values of type boolean, string, or number.\n *\n * This structure is populated by a provider for use by an Application Author (via the Evaluation API) or an Application Integrator (via hooks).\n */\nexport type FlagMetadata = Record<string, string | number | boolean>;\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n flagMetadata?: FlagMetadata;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n flagMetadata: Readonly<FlagMetadata>;\n} & ResolutionDetails<T>;\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * The resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n\n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n\n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "export enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n\n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n\n /**\n * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.\n */\n Stale = 'PROVIDER_STALE',\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { Logger } from './logger';\n\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n\n info(): void {}\n\n debug(): void {}\n}\n", "import { Logger } from './logger';\nimport { DefaultLogger } from './default-logger';\n\nexport const LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { Logger, ManageLogger, SafeLogger } from '../logger';\nimport EventEmitter from 'events';\nimport { ProviderEvents } from './events';\nimport { EventContext, EventDetails, EventHandler, CommonEventDetails } from './eventing';\n\nabstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>>\n implements ManageLogger<GenericEventEmitter<AdditionalContext>>\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _handlers = new WeakMap<EventHandler<any>, EventHandler<any>>();\n private readonly eventEmitter = new EventEmitter({ captureRejections: true });\n private _eventLogger?: Logger;\n\n constructor(private readonly globalLogger?: () => Logger) {\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n\n emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void {\n this.eventEmitter.emit(eventType, context);\n }\n\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // The handlers have to be wrapped with an async function because if a synchronous functions throws an error,\n // the other handlers will not run.\n const asyncHandler = async (context?: EventDetails<T>) => {\n await handler(context);\n };\n // The async handler has to be written to the map, because we need to get the wrapper function when deleting a listener\n this._handlers.set(handler, asyncHandler);\n this.eventEmitter.on(eventType, asyncHandler);\n }\n\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // Get the wrapper function for this handler, to delete it from the event emitter\n const asyncHandler = this._handlers.get(handler) as EventHandler<T> | undefined;\n\n if (!asyncHandler) {\n return;\n }\n\n this.eventEmitter.removeListener(eventType, asyncHandler);\n }\n\n removeAllHandlers(eventType?: ProviderEvents): void {\n // If giving undefined, the listeners are not removed, so we have to check explicitly\n if (eventType) {\n this.eventEmitter.removeAllListeners(eventType);\n } else {\n this.eventEmitter.removeAllListeners();\n }\n }\n\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this.eventEmitter.listeners(eventType) as EventHandler<T>[];\n }\n\n setLogger(logger: Logger): this {\n this._eventLogger = new SafeLogger(logger);\n return this;\n }\n\n private get _logger() {\n return this._eventLogger ?? this.globalLogger?.();\n }\n}\n\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 {};\n\n/**\n * The InternalEventEmitter should only be used within the SDK. It extends the\n * OpenFeatureEventEmitter to include additional properties that can be included\n * in the event details.\n */\nexport class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {};", "import { OpenFeatureEventEmitter } from '../events';\nimport { Metadata } from '../types';\nimport { EvaluationContext } from '../evaluation';\n\n/**\n * The state of the provider.\n */\nexport enum ProviderStatus {\n /**\n * The provider has not been initialized and cannot yet evaluate flags.\n */\n NOT_READY = 'NOT_READY',\n\n /**\n * The provider is ready to resolve flags.\n */\n READY = 'READY',\n\n /**\n * The provider is in an error state and unable to evaluate flags.\n */\n ERROR = 'ERROR',\n}\n\n/**\n * Static data about the provider.\n */\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n\n /**\n * Returns a representation of the current readiness of the provider.\n * If the provider needs to be initialized, it should return {@link ProviderStatus.READY}.\n * If the provider is in an error state, it should return {@link ProviderStatus.ERROR}.\n * If the provider is functioning normally, it should return {@link ProviderStatus.NOT_READY}.\n * \n * _Providers which do not implement this method are assumed to be ready immediately._\n */\n readonly status?: ProviderStatus;\n\n /**\n * An event emitter for ProviderEvents.\n * @see ProviderEvents\n */\n events?: OpenFeatureEventEmitter;\n\n /**\n * A function used to shut down the provider.\n * Called when this provider is replaced with a new one, or when the OpenFeature is shut down.\n */\n onClose?(): Promise<void>;\n\n /**\n * A function used to setup the provider.\n * Called by the SDK after the provider is set if the provider's status is {@link ProviderStatus.NOT_READY}.\n * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.\n * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.\n * Use this function to perform any context-dependent setup within the provider.\n * @param context\n */\n initialize?(context?: EvaluationContext): Promise<void>;\n}", "import { EvaluationContext } from '../evaluation';\nimport { TransactionContextPropagator } from './transaction-context';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "/**\n * Checks whether the parameter is a string.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Returns the parameter if it is a string, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {string|undefined} The parameter if it is a string, otherwise undefined\n */\nexport function stringOrUndefined(value: unknown): string | undefined {\n return isString(value) ? value : undefined;\n}\n\n/**\n * Checks whether the parameter is an object.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is an object\n */\nexport function isObject<T extends object>(value: unknown): value is T {\n return typeof value === 'object';\n}\n\n/**\n * Returns the parameter if it is an object, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {object|undefined} The parameter if it is an object, otherwise undefined\n */\nexport function objectOrUndefined<T extends object>(value: unknown): T | undefined {\n return isObject<T>(value) ? value : undefined;\n}\n", "/**\n * Checks if a value is not null or undefined and returns it as type assertion\n * @template T\n * @param {T} input The value to check\n * @returns If the value is not null or undefined\n */\nexport function isDefined<T>(input?: T | null | undefined): input is T {\n return typeof input !== 'undefined' && input !== null;\n}\n", "import { EvaluationContext, FlagValue } from './evaluation';\nimport { EventDetails, EventHandler, Eventing, ProviderEvents } from './events';\nimport { InternalEventEmitter } from './events/open-feature-event-emitter';\nimport { isDefined } from './filter';\nimport { EvaluationLifeCycle, Hook } from './hooks';\nimport { DefaultLogger, Logger, ManageLogger, SafeLogger } from './logger';\nimport { CommonProvider, ProviderMetadata } from './provider';\nimport {\n ManageTransactionContextPropagator,\n NOOP_TRANSACTION_CONTEXT_PROPAGATOR,\n TransactionContext,\n TransactionContextPropagator,\n} from './transaction-context';\nimport { objectOrUndefined, stringOrUndefined } from './type-guards';\n\nexport abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider>\n implements\n Eventing,\n EvaluationLifeCycle<OpenFeatureCommonAPI<P>>,\n ManageLogger<OpenFeatureCommonAPI<P>>,\n ManageTransactionContextPropagator<OpenFeatureCommonAPI<P>>\n{\n protected _hooks: Hook[] = [];\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n protected abstract _defaultProvider: P;\n\n private readonly _events = new InternalEventEmitter(() => this._logger);\n private readonly _clientEventHandlers: Map<string | undefined, [ProviderEvents, EventHandler<ProviderEvents>][]> =\n new Map();\n protected _clientProviders: Map<string, P> = new Map();\n protected _clientEvents: Map<string | undefined, InternalEventEmitter> = new Map();\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n /**\n * Get metadata about registered provider.\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._defaultProvider.metadata;\n }\n\n /**\n * Adds a handler for the given provider event type.\n * The handlers are called in the order they have been added.\n * When changing the provider, the currently attached handlers will listen to the events of the new provider.\n * @param {ProviderEvents} eventType The provider event type to listen to\n * @param {EventHandler} handler The handler to run on occurrence of the event type\n */\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.addHandler(eventType, handler);\n }\n\n /**\n * Removes a handler for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to remove the listener for\n * @param {EventHandler} handler The handler to remove for the provider event type\n */\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.removeHandler(eventType, handler);\n }\n\n /**\n * Gets the current handlers for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to get the current handlers for\n * @returns {EventHandler[]} The handlers currently attached to the given provider event type\n */\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this._events.getHandlers(eventType);\n }\n\n /**\n * Sets the default provider for flag evaluations.\n * This provider will be used by unnamed clients and named clients to which no provider is bound.\n * Setting a provider supersedes the current provider used in new and existing clients without a name.\n * @template P\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {OpenFeatureCommonAPI} OpenFeature API\n */\n setProvider(provider: P): this;\n /**\n * Sets the provider that OpenFeature will use for flag evaluations of providers with the given name.\n * Setting a provider supersedes the current provider used in new and existing clients with that name.\n * @template P\n * @param {string} clientName The name to identify the client\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {this} OpenFeature API\n */\n setProvider(clientName: string, provider: P): this;\n setProvider(clientOrProvider?: string | P, providerOrUndefined?: P): this {\n const clientName = stringOrUndefined(clientOrProvider);\n const provider = objectOrUndefined<P>(clientOrProvider) ?? objectOrUndefined<P>(providerOrUndefined);\n\n if (!provider) {\n return this;\n }\n\n const oldProvider = this.getProviderForClient(clientName);\n\n // ignore no-ops\n if (oldProvider === provider) {\n return this;\n }\n\n const emitters = this.getAssociatedEventEmitters(clientName);\n\n if (typeof provider.initialize === 'function') {\n provider\n .initialize?.(this._context)\n ?.then(() => {\n // fetch the most recent event emitters, some may have been added during init\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n })\n ?.catch((error) => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n } else {\n emitters.forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n }\n\n if (clientName) {\n this._clientProviders.set(clientName, provider);\n } else {\n this._defaultProvider = provider;\n }\n\n this.transferListeners(oldProvider, provider, clientName, emitters);\n\n // Do not close a provider that is bound to any client\n if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {\n oldProvider?.onClose?.();\n }\n\n return this;\n }\n\n protected getProviderForClient(name?: string): P {\n if (!name) {\n return this._defaultProvider;\n }\n\n return this._clientProviders.get(name) ?? this._defaultProvider;\n }\n\n protected buildAndCacheEventEmitterForClient(name?: string): InternalEventEmitter {\n const emitter = this._clientEvents.get(name);\n\n if (emitter) {\n return emitter;\n }\n\n // lazily add the event emitters\n const newEmitter = new InternalEventEmitter(() => this._logger);\n this._clientEvents.set(name, newEmitter);\n\n const clientProvider = this.getProviderForClient(name);\n Object.values<ProviderEvents>(ProviderEvents).forEach((eventType) =>\n clientProvider.events?.addHandler(eventType, async (details) => {\n newEmitter.emit(eventType, { ...details, clientName: name });\n })\n );\n\n return newEmitter;\n }\n\n private getUnboundEmitters(): InternalEventEmitter[] {\n const namedProviders = [...this._clientProviders.keys()];\n const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);\n const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));\n return [\n // all unbound, named emitters\n ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),\n // the default emitter\n this._clientEvents.get(undefined),\n ].filter(isDefined);\n }\n\n private getAssociatedEventEmitters(clientName: string | undefined) {\n return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();\n }\n\n private transferListeners(\n oldProvider: P,\n newProvider: P,\n clientName: string | undefined,\n emitters: (InternalEventEmitter | undefined)[]\n ) {\n this._clientEventHandlers\n .get(clientName)\n ?.forEach((eventHandler) => oldProvider.events?.removeHandler(...eventHandler));\n\n // iterate over the event types\n const newClientHandlers = Object.values<ProviderEvents>(ProviderEvents).map<\n [ProviderEvents, EventHandler<ProviderEvents>]\n >((eventType) => {\n const handler = async (details?: EventDetails<ProviderEvents>) => {\n // on each event type, fire the associated handlers\n emitters.forEach((emitter) => {\n emitter?.emit(eventType, { ...details, clientName });\n });\n this._events.emit(eventType, { ...details, clientName });\n };\n\n return [eventType, handler];\n });\n\n this._clientEventHandlers.set(clientName, newClientHandlers);\n newClientHandlers.forEach((eventHandler) => newProvider.events?.addHandler(...eventHandler));\n }\n\n async close(): Promise<void> {\n try {\n await this?._defaultProvider?.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n\n const providers = Array.from(this._clientProviders);\n\n await Promise.all(\n providers.map(async ([, provider]) => {\n try {\n await provider.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n })\n );\n }\n\n private handleShutdownError(provider: P, err: unknown) {\n this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);\n this._logger.error((err as Error)?.stack);\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI<P> {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}\n", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/shared';\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 { EvaluationContext, ManageContext, OpenFeatureCommonAPI } from '@openfeature/shared';\nimport { Client, OpenFeatureClient } from './client';\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> implements ManageContext<Promise<void>> {\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\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 async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n\n const allProviders = [this._defaultProvider, ...this._clientProviders.values()];\n await Promise.all(\n allProviders.map(async (provider) => {\n try {\n return await provider.onContextChange?.(oldContext, context);\n } catch (err) {\n this._logger?.error(`Error running context change handler of provider ${provider.metadata.name}:`, err);\n }\n })\n );\n }\n\n getContext(): EvaluationContext {\n return this._context;\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/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { Client } from './client';\nimport { Provider } from '../provider';\nimport {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n Hook,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n OpenFeatureEventEmitter,\n ProviderEvents,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n} from '@openfeature/shared';\nimport { OpenFeature } from '../open-feature';\nimport { FlagEvaluationOptions } from '../evaluation';\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: () => OpenFeatureEventEmitter,\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 addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const providerReady = !this._provider.status || this._provider.status === ProviderStatus.READY;\n\n if (eventType === ProviderEvents.Ready && providerReady) {\n // run immediately, we're ready.\n try {\n handler({ clientName: this.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): 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<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\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 for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\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"],
|
|
5
|
-
"mappings": "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",
|
|
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 { ErrorCode } from '../evaluation';\n\nexport abstract class OpenFeatureError extends Error {\n abstract code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, OpenFeatureError.prototype);\n this.name = 'OpenFeatureError';\n }\n}\n", "export type FlagValueType = 'boolean' | 'string' | 'number' | 'object';\n\nexport type PrimitiveValue = null | boolean | string | number;\nexport type JsonObject = { [key: string]: JsonValue };\nexport type JsonArray = JsonValue[];\n\n/**\n * Represents a JSON node value.\n */\nexport type JsonValue = PrimitiveValue | JsonObject | JsonArray;\n\n/**\n * Represents a JSON node value, or Date.\n */\nexport type FlagValue = boolean | string | number | JsonValue;\n\nexport type ResolutionReason = keyof typeof StandardResolutionReasons | (string & Record<never, never>);\n\n/**\n * A structure which supports definition of arbitrary properties, with keys of type string, and values of type boolean, string, or number.\n *\n * This structure is populated by a provider for use by an Application Author (via the Evaluation API) or an Application Integrator (via hooks).\n */\nexport type FlagMetadata = Record<string, string | number | boolean>;\n\nexport type ResolutionDetails<U> = {\n value: U;\n variant?: string;\n flagMetadata?: FlagMetadata;\n reason?: ResolutionReason;\n errorCode?: ErrorCode;\n errorMessage?: string;\n};\n\nexport type EvaluationDetails<T extends FlagValue> = {\n flagKey: string;\n flagMetadata: Readonly<FlagMetadata>;\n} & ResolutionDetails<T>;\n\nexport const StandardResolutionReasons = {\n /**\n * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.\n */\n TARGETING_MATCH: 'TARGETING_MATCH',\n\n /**\n * The resolved value was the result of pseudorandom assignment.\n */\n SPLIT: 'SPLIT',\n\n /**\n * The resolved value was the result of the flag being disabled in the management system.\n */\n DISABLED: 'DISABLED',\n\n /**\n * The resolved value was configured statically, or otherwise fell back to a pre-configured value.\n */\n DEFAULT: 'DEFAULT',\n\n /**\n * The reason for the resolved value could not be determined.\n */\n UNKNOWN: 'UNKNOWN',\n\n /**\n * The resolved value is static (no dynamic evaluation).\n */\n STATIC: 'STATIC',\n\n /**\n * The resolved value was retrieved from cache.\n */\n CACHED: 'CACHED',\n\n /**\n * The resolved value was the result of an error.\n *\n * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.\n */\n ERROR: 'ERROR',\n} as const;\n\nexport enum ErrorCode {\n /**\n * The value was resolved before the provider was ready.\n */\n PROVIDER_NOT_READY = 'PROVIDER_NOT_READY',\n\n /**\n * The flag could not be found.\n */\n FLAG_NOT_FOUND = 'FLAG_NOT_FOUND',\n\n /**\n * An error was encountered parsing data, such as a flag configuration.\n */\n PARSE_ERROR = 'PARSE_ERROR',\n\n /**\n * The type of the flag value does not match the expected type.\n */\n TYPE_MISMATCH = 'TYPE_MISMATCH',\n\n /**\n * The provider requires a targeting key and one was not provided in the evaluation context.\n */\n TARGETING_KEY_MISSING = 'TARGETING_KEY_MISSING',\n\n /**\n * The evaluation context does not meet provider requirements.\n */\n INVALID_CONTEXT = 'INVALID_CONTEXT',\n\n /**\n * An error with an unspecified code.\n */\n GENERAL = 'GENERAL',\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class GeneralError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, GeneralError.prototype);\n this.name = 'GeneralError';\n this.code = ErrorCode.GENERAL;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class FlagNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, FlagNotFoundError.prototype);\n this.name = 'FlagNotFoundError';\n this.code = ErrorCode.FLAG_NOT_FOUND;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class ParseError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n this.name = 'ParseError';\n this.code = ErrorCode.PARSE_ERROR;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TypeMismatchError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TypeMismatchError.prototype);\n this.name = 'TypeMismatchError';\n this.code = ErrorCode.TYPE_MISMATCH;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class TargetingKeyMissingError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);\n this.name = 'TargetingKeyMissingError';\n this.code = ErrorCode.TARGETING_KEY_MISSING;\n }\n}\n", "import { OpenFeatureError } from './open-feature-error-abstract';\nimport { ErrorCode } from '../evaluation';\n\nexport class InvalidContextError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, InvalidContextError.prototype);\n this.name = 'InvalidContextError';\n this.code = ErrorCode.INVALID_CONTEXT;\n }\n}\n", "export enum ProviderEvents {\n /**\n * The provider is ready to evaluate flags.\n */\n Ready = 'PROVIDER_READY',\n\n /**\n * The provider is in an error state.\n */\n Error = 'PROVIDER_ERROR',\n\n /**\n * The flag configuration in the source-of-truth has changed.\n */\n ConfigurationChanged = 'PROVIDER_CONFIGURATION_CHANGED',\n\n /**\n * The provider's cached state is no longer valid and may not be up-to-date with the source of truth.\n */\n Stale = 'PROVIDER_STALE',\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { Logger } from './logger';\n\nexport class DefaultLogger implements Logger {\n error(...args: unknown[]): void {\n console.error(...args);\n }\n\n warn(...args: unknown[]): void {\n console.warn(...args);\n }\n\n info(): void {}\n\n debug(): void {}\n}\n", "import { Logger } from './logger';\nimport { DefaultLogger } from './default-logger';\n\nexport const LOG_LEVELS: Array<keyof Logger> = ['error', 'warn', 'info', 'debug'];\n\nexport class SafeLogger implements Logger {\n private readonly logger: Logger;\n private readonly fallbackLogger = new DefaultLogger();\n\n constructor(logger: Logger) {\n try {\n for (const level of LOG_LEVELS) {\n if (!logger[level] || typeof logger[level] !== 'function') {\n throw new Error(`The provided logger is missing the ${level} method.`);\n }\n }\n this.logger = logger;\n } catch (err) {\n console.error(err);\n console.error('Falling back to the default logger.');\n this.logger = this.fallbackLogger;\n }\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n private log(level: keyof Logger, ...args: unknown[]) {\n try {\n this.logger[level](...args);\n } catch (error) {\n this.fallbackLogger[level](...args);\n }\n }\n}\n", "import { Logger, ManageLogger, SafeLogger } from '../logger';\nimport EventEmitter from 'events';\nimport { ProviderEvents } from './events';\nimport { EventContext, EventDetails, EventHandler, CommonEventDetails } from './eventing';\n\nabstract class GenericEventEmitter<AdditionalContext extends Record<string, unknown> = Record<string, unknown>>\n implements ManageLogger<GenericEventEmitter<AdditionalContext>>\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _handlers = new WeakMap<EventHandler<any>, EventHandler<any>>();\n private readonly eventEmitter = new EventEmitter({ captureRejections: true });\n private _eventLogger?: Logger;\n\n constructor(private readonly globalLogger?: () => Logger) {\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n\n emit<T extends ProviderEvents>(eventType: T, context?: EventContext<T, AdditionalContext>): void {\n this.eventEmitter.emit(eventType, context);\n }\n\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // The handlers have to be wrapped with an async function because if a synchronous functions throws an error,\n // the other handlers will not run.\n const asyncHandler = async (context?: EventDetails<T>) => {\n await handler(context);\n };\n // The async handler has to be written to the map, because we need to get the wrapper function when deleting a listener\n this._handlers.set(handler, asyncHandler);\n this.eventEmitter.on(eventType, asyncHandler);\n }\n\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n // Get the wrapper function for this handler, to delete it from the event emitter\n const asyncHandler = this._handlers.get(handler) as EventHandler<T> | undefined;\n\n if (!asyncHandler) {\n return;\n }\n\n this.eventEmitter.removeListener(eventType, asyncHandler);\n }\n\n removeAllHandlers(eventType?: ProviderEvents): void {\n // If giving undefined, the listeners are not removed, so we have to check explicitly\n if (eventType) {\n this.eventEmitter.removeAllListeners(eventType);\n } else {\n this.eventEmitter.removeAllListeners();\n }\n }\n\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this.eventEmitter.listeners(eventType) as EventHandler<T>[];\n }\n\n setLogger(logger: Logger): this {\n this._eventLogger = new SafeLogger(logger);\n return this;\n }\n\n private get _logger() {\n return this._eventLogger ?? this.globalLogger?.();\n }\n}\n\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 {};\n\n/**\n * The InternalEventEmitter should only be used within the SDK. It extends the\n * OpenFeatureEventEmitter to include additional properties that can be included\n * in the event details.\n */\nexport class InternalEventEmitter extends GenericEventEmitter<CommonEventDetails> {};", "import { OpenFeatureEventEmitter } from '../events';\nimport { Metadata } from '../types';\nimport { EvaluationContext } from '../evaluation';\n\n/**\n * The state of the provider.\n */\nexport enum ProviderStatus {\n /**\n * The provider has not been initialized and cannot yet evaluate flags.\n */\n NOT_READY = 'NOT_READY',\n\n /**\n * The provider is ready to resolve flags.\n */\n READY = 'READY',\n\n /**\n * The provider is in an error state and unable to evaluate flags.\n */\n ERROR = 'ERROR',\n}\n\n/**\n * Static data about the provider.\n */\nexport interface ProviderMetadata extends Metadata {\n readonly name: string;\n}\n\nexport interface CommonProvider {\n readonly metadata: ProviderMetadata;\n\n /**\n * Returns a representation of the current readiness of the provider.\n * If the provider needs to be initialized, it should return {@link ProviderStatus.READY}.\n * If the provider is in an error state, it should return {@link ProviderStatus.ERROR}.\n * If the provider is functioning normally, it should return {@link ProviderStatus.NOT_READY}.\n * \n * _Providers which do not implement this method are assumed to be ready immediately._\n */\n readonly status?: ProviderStatus;\n\n /**\n * An event emitter for ProviderEvents.\n * @see ProviderEvents\n */\n events?: OpenFeatureEventEmitter;\n\n /**\n * A function used to shut down the provider.\n * Called when this provider is replaced with a new one, or when the OpenFeature is shut down.\n */\n onClose?(): Promise<void>;\n\n /**\n * A function used to setup the provider.\n * Called by the SDK after the provider is set if the provider's status is {@link ProviderStatus.NOT_READY}.\n * When the returned promise resolves, the SDK fires the ProviderEvents.Ready event.\n * If the returned promise rejects, the SDK fires the ProviderEvents.Error event.\n * Use this function to perform any context-dependent setup within the provider.\n * @param context\n */\n initialize?(context?: EvaluationContext): Promise<void>;\n}", "import { EvaluationContext } from '../evaluation';\nimport { TransactionContextPropagator } from './transaction-context';\n\nclass NoopTransactionContextPropagator implements TransactionContextPropagator {\n getTransactionContext(): EvaluationContext {\n return {};\n }\n\n setTransactionContext(_: EvaluationContext, callback: () => void): void {\n callback();\n }\n}\n\nexport const NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();\n", "/**\n * Checks whether the parameter is a string.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Returns the parameter if it is a string, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {string|undefined} The parameter if it is a string, otherwise undefined\n */\nexport function stringOrUndefined(value: unknown): string | undefined {\n return isString(value) ? value : undefined;\n}\n\n/**\n * Checks whether the parameter is an object.\n * @param {unknown} value The value to check\n * @returns {value is string} True if the value is an object\n */\nexport function isObject<T extends object>(value: unknown): value is T {\n return typeof value === 'object';\n}\n\n/**\n * Returns the parameter if it is an object, otherwise returns undefined.\n * @param {unknown} value The value to check\n * @returns {object|undefined} The parameter if it is an object, otherwise undefined\n */\nexport function objectOrUndefined<T extends object>(value: unknown): T | undefined {\n return isObject<T>(value) ? value : undefined;\n}\n", "/**\n * Checks if a value is not null or undefined and returns it as type assertion\n * @template T\n * @param {T} input The value to check\n * @returns If the value is not null or undefined\n */\nexport function isDefined<T>(input?: T | null | undefined): input is T {\n return typeof input !== 'undefined' && input !== null;\n}\n", "import { EvaluationContext, FlagValue } from './evaluation';\nimport { EventDetails, EventHandler, Eventing, ProviderEvents } from './events';\nimport { InternalEventEmitter } from './events/open-feature-event-emitter';\nimport { isDefined } from './filter';\nimport { EvaluationLifeCycle, Hook } from './hooks';\nimport { DefaultLogger, Logger, ManageLogger, SafeLogger } from './logger';\nimport { CommonProvider, ProviderMetadata, ProviderStatus } from './provider';\nimport {\n ManageTransactionContextPropagator,\n NOOP_TRANSACTION_CONTEXT_PROPAGATOR,\n TransactionContext,\n TransactionContextPropagator,\n} from './transaction-context';\nimport { objectOrUndefined, stringOrUndefined } from './type-guards';\n\nexport abstract class OpenFeatureCommonAPI<P extends CommonProvider = CommonProvider>\n implements\n Eventing,\n EvaluationLifeCycle<OpenFeatureCommonAPI<P>>,\n ManageLogger<OpenFeatureCommonAPI<P>>,\n ManageTransactionContextPropagator<OpenFeatureCommonAPI<P>>\n{\n protected _hooks: Hook[] = [];\n protected _transactionContextPropagator: TransactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;\n protected _context: EvaluationContext = {};\n protected _logger: Logger = new DefaultLogger();\n\n protected abstract _defaultProvider: P;\n\n private readonly _events = new InternalEventEmitter(() => this._logger);\n private readonly _clientEventHandlers: Map<string | undefined, [ProviderEvents, EventHandler<ProviderEvents>][]> =\n new Map();\n protected _clientProviders: Map<string, P> = new Map();\n protected _clientEvents: Map<string | undefined, InternalEventEmitter> = new Map();\n\n addHooks(...hooks: Hook<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n setLogger(logger: Logger): this {\n this._logger = new SafeLogger(logger);\n return this;\n }\n\n /**\n * Get metadata about registered provider.\n * @returns {ProviderMetadata} Provider Metadata\n */\n get providerMetadata(): ProviderMetadata {\n return this._defaultProvider.metadata;\n }\n\n /**\n * Adds a handler for the given provider event type.\n * The handlers are called in the order they have been added.\n * When changing the provider, the currently attached handlers will listen to the events of the new provider.\n * @param {ProviderEvents} eventType The provider event type to listen to\n * @param {EventHandler} handler The handler to run on occurrence of the event type\n */\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.addHandler(eventType, handler);\n }\n\n /**\n * Removes a handler for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to remove the listener for\n * @param {EventHandler} handler The handler to remove for the provider event type\n */\n removeHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this._events.removeHandler(eventType, handler);\n }\n\n /**\n * Gets the current handlers for the given provider event type.\n * @param {ProviderEvents} eventType The provider event type to get the current handlers for\n * @returns {EventHandler[]} The handlers currently attached to the given provider event type\n */\n getHandlers<T extends ProviderEvents>(eventType: T): EventHandler<T>[] {\n return this._events.getHandlers(eventType);\n }\n\n /**\n * Sets the default provider for flag evaluations.\n * This provider will be used by unnamed clients and named clients to which no provider is bound.\n * Setting a provider supersedes the current provider used in new and existing clients without a name.\n * @template P\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {OpenFeatureCommonAPI} OpenFeature API\n */\n setProvider(provider: P): this;\n /**\n * Sets the provider that OpenFeature will use for flag evaluations of providers with the given name.\n * Setting a provider supersedes the current provider used in new and existing clients with that name.\n * @template P\n * @param {string} clientName The name to identify the client\n * @param {P} provider The provider responsible for flag evaluations.\n * @returns {this} OpenFeature API\n */\n setProvider(clientName: string, provider: P): this;\n setProvider(clientOrProvider?: string | P, providerOrUndefined?: P): this {\n const clientName = stringOrUndefined(clientOrProvider);\n const provider = objectOrUndefined<P>(clientOrProvider) ?? objectOrUndefined<P>(providerOrUndefined);\n\n if (!provider) {\n return this;\n }\n\n const oldProvider = this.getProviderForClient(clientName);\n\n // ignore no-ops\n if (oldProvider === provider) {\n return this;\n }\n\n const emitters = this.getAssociatedEventEmitters(clientName);\n\n // warn of improper implementations\n if (typeof provider.initialize === 'function' && provider.status === undefined) {\n const activeLogger = this._logger || console;\n activeLogger.warn(\n `Provider ${provider?.metadata?.name} implements 'initialize' but not 'status'. Please implement 'status'.`\n );\n }\n\n if (provider?.status === ProviderStatus.NOT_READY && typeof provider.initialize === 'function') {\n provider\n .initialize?.(this._context)\n ?.then(() => {\n // fetch the most recent event emitters, some may have been added during init\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n })\n ?.catch((error) => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, message: error.message });\n });\n } else {\n emitters.forEach((emitter) => {\n emitter?.emit(ProviderEvents.Ready, { clientName });\n });\n this._events?.emit(ProviderEvents.Ready, { clientName });\n }\n\n if (clientName) {\n this._clientProviders.set(clientName, provider);\n } else {\n this._defaultProvider = provider;\n }\n\n this.transferListeners(oldProvider, provider, clientName, emitters);\n\n // Do not close a provider that is bound to any client\n if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {\n oldProvider?.onClose?.();\n }\n\n return this;\n }\n\n protected getProviderForClient(name?: string): P {\n if (!name) {\n return this._defaultProvider;\n }\n\n return this._clientProviders.get(name) ?? this._defaultProvider;\n }\n\n protected buildAndCacheEventEmitterForClient(name?: string): InternalEventEmitter {\n const emitter = this._clientEvents.get(name);\n\n if (emitter) {\n return emitter;\n }\n\n // lazily add the event emitters\n const newEmitter = new InternalEventEmitter(() => this._logger);\n this._clientEvents.set(name, newEmitter);\n\n const clientProvider = this.getProviderForClient(name);\n Object.values<ProviderEvents>(ProviderEvents).forEach((eventType) =>\n clientProvider.events?.addHandler(eventType, async (details) => {\n newEmitter.emit(eventType, { ...details, clientName: name });\n })\n );\n\n return newEmitter;\n }\n\n private getUnboundEmitters(): InternalEventEmitter[] {\n const namedProviders = [...this._clientProviders.keys()];\n const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);\n const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));\n return [\n // all unbound, named emitters\n ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),\n // the default emitter\n this._clientEvents.get(undefined),\n ].filter(isDefined);\n }\n\n private getAssociatedEventEmitters(clientName: string | undefined) {\n return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();\n }\n\n private transferListeners(\n oldProvider: P,\n newProvider: P,\n clientName: string | undefined,\n emitters: (InternalEventEmitter | undefined)[]\n ) {\n this._clientEventHandlers\n .get(clientName)\n ?.forEach((eventHandler) => oldProvider.events?.removeHandler(...eventHandler));\n\n // iterate over the event types\n const newClientHandlers = Object.values<ProviderEvents>(ProviderEvents).map<\n [ProviderEvents, EventHandler<ProviderEvents>]\n >((eventType) => {\n const handler = async (details?: EventDetails<ProviderEvents>) => {\n // on each event type, fire the associated handlers\n emitters.forEach((emitter) => {\n emitter?.emit(eventType, { ...details, clientName });\n });\n this._events.emit(eventType, { ...details, clientName });\n };\n\n return [eventType, handler];\n });\n\n this._clientEventHandlers.set(clientName, newClientHandlers);\n newClientHandlers.forEach((eventHandler) => newProvider.events?.addHandler(...eventHandler));\n }\n\n async close(): Promise<void> {\n try {\n await this?._defaultProvider?.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n\n const providers = Array.from(this._clientProviders);\n\n await Promise.all(\n providers.map(async ([, provider]) => {\n try {\n await provider.onClose?.();\n } catch (err) {\n this.handleShutdownError(this._defaultProvider, err);\n }\n })\n );\n }\n\n private handleShutdownError(provider: P, err: unknown) {\n this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);\n this._logger.error((err as Error)?.stack);\n }\n\n setTransactionContextPropagator(transactionContextPropagator: TransactionContextPropagator): OpenFeatureCommonAPI<P> {\n const baseMessage = 'Invalid TransactionContextPropagator, will not be set: ';\n if (typeof transactionContextPropagator?.getTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: getTransactionContext is not a function.`);\n } else if (typeof transactionContextPropagator?.setTransactionContext !== 'function') {\n this._logger.error(`${baseMessage}: setTransactionContext is not a function.`);\n } else {\n this._transactionContextPropagator = transactionContextPropagator;\n }\n return this;\n }\n\n setTransactionContext<R>(\n transactionContext: TransactionContext,\n callback: (...args: unknown[]) => R,\n ...args: unknown[]\n ): void {\n this._transactionContextPropagator.setTransactionContext(transactionContext, callback, ...args);\n }\n\n getTransactionContext(): TransactionContext {\n try {\n return this._transactionContextPropagator.getTransactionContext();\n } catch (err: unknown) {\n const error = err as Error | undefined;\n this._logger.error(`Error getting transaction context: ${error?.message}, returning empty context.`);\n this._logger.error(error?.stack);\n return {};\n }\n }\n}\n", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/shared';\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 { EvaluationContext, ManageContext, OpenFeatureCommonAPI } from '@openfeature/shared';\nimport { Client, OpenFeatureClient } from './client';\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> implements ManageContext<Promise<void>> {\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private constructor() {\n super();\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 async setContext(context: EvaluationContext): Promise<void> {\n const oldContext = this._context;\n this._context = context;\n\n const allProviders = [this._defaultProvider, ...this._clientProviders.values()];\n await Promise.all(\n allProviders.map(async (provider) => {\n try {\n return await provider.onContextChange?.(oldContext, context);\n } catch (err) {\n this._logger?.error(`Error running context change handler of provider ${provider.metadata.name}:`, err);\n }\n })\n );\n }\n\n getContext(): EvaluationContext {\n return this._context;\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/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { Client } from './client';\nimport { Provider } from '../provider';\nimport {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n Hook,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n OpenFeatureEventEmitter,\n ProviderEvents,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n} from '@openfeature/shared';\nimport { OpenFeature } from '../open-feature';\nimport { FlagEvaluationOptions } from '../evaluation';\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: () => OpenFeatureEventEmitter,\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 addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const providerReady = !this._provider.status || this._provider.status === ProviderStatus.READY;\n\n if (eventType === ProviderEvents.Ready && providerReady) {\n // run immediately, we're ready.\n try {\n handler({ clientName: this.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): 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<FlagValue>[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook<FlagValue>[] {\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 for (const hook of hooks) {\n // freeze the hookContext\n Object.freeze(hookContext);\n\n // use Object.assign to avoid modification of frozen hookContext\n Object.assign(hookContext.context, {\n ...hookContext.context,\n ...hook?.before?.(hookContext, Object.freeze(options.hookHints)),\n });\n }\n\n // after before hooks, freeze the EvaluationContext.\n return Object.freeze(hookContext.context);\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "ErrorCode", "ProviderEvents", "EventEmitter", "ProviderStatus", "_a", "err"]
|
|
7
7
|
}
|