@openfeature/web-sdk 0.4.2 → 0.4.3

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 CHANGED
@@ -37,6 +37,7 @@ var __copyProps = (to, from, except, desc) => {
37
37
  }
38
38
  return to;
39
39
  };
40
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
40
41
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
41
42
  // If the importer is in node compatibility mode or this is not an ESM
42
43
  // file that has been converted to a CommonJS file using a Babel-
@@ -94,22 +95,22 @@ var require_events = __commonJS({
94
95
  var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
95
96
  return value !== value;
96
97
  };
97
- function EventEmitter2() {
98
- EventEmitter2.init.call(this);
98
+ function EventEmitter() {
99
+ EventEmitter.init.call(this);
99
100
  }
100
- module2.exports = EventEmitter2;
101
+ module2.exports = EventEmitter;
101
102
  module2.exports.once = once;
102
- EventEmitter2.EventEmitter = EventEmitter2;
103
- EventEmitter2.prototype._events = void 0;
104
- EventEmitter2.prototype._eventsCount = 0;
105
- EventEmitter2.prototype._maxListeners = void 0;
103
+ EventEmitter.EventEmitter = EventEmitter;
104
+ EventEmitter.prototype._events = void 0;
105
+ EventEmitter.prototype._eventsCount = 0;
106
+ EventEmitter.prototype._maxListeners = void 0;
106
107
  var defaultMaxListeners = 10;
107
108
  function checkListener(listener) {
108
109
  if (typeof listener !== "function") {
109
110
  throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
110
111
  }
111
112
  }
112
- Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
113
+ Object.defineProperty(EventEmitter, "defaultMaxListeners", {
113
114
  enumerable: true,
114
115
  get: function() {
115
116
  return defaultMaxListeners;
@@ -121,14 +122,14 @@ var require_events = __commonJS({
121
122
  defaultMaxListeners = arg;
122
123
  }
123
124
  });
124
- EventEmitter2.init = function() {
125
+ EventEmitter.init = function() {
125
126
  if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
126
127
  this._events = /* @__PURE__ */ Object.create(null);
127
128
  this._eventsCount = 0;
128
129
  }
129
130
  this._maxListeners = this._maxListeners || void 0;
130
131
  };
131
- EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) {
132
+ EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
132
133
  if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
133
134
  throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
134
135
  }
@@ -137,13 +138,13 @@ var require_events = __commonJS({
137
138
  };
138
139
  function _getMaxListeners(that) {
139
140
  if (that._maxListeners === void 0)
140
- return EventEmitter2.defaultMaxListeners;
141
+ return EventEmitter.defaultMaxListeners;
141
142
  return that._maxListeners;
142
143
  }
143
- EventEmitter2.prototype.getMaxListeners = function getMaxListeners() {
144
+ EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
144
145
  return _getMaxListeners(this);
145
146
  };
146
- EventEmitter2.prototype.emit = function emit(type) {
147
+ EventEmitter.prototype.emit = function emit(type) {
147
148
  var args = [];
148
149
  for (var i = 1; i < arguments.length; i++)
149
150
  args.push(arguments[i]);
@@ -221,11 +222,11 @@ var require_events = __commonJS({
221
222
  }
222
223
  return target;
223
224
  }
224
- EventEmitter2.prototype.addListener = function addListener(type, listener) {
225
+ EventEmitter.prototype.addListener = function addListener(type, listener) {
225
226
  return _addListener(this, type, listener, false);
226
227
  };
227
- EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
228
- EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
228
+ EventEmitter.prototype.on = EventEmitter.prototype.addListener;
229
+ EventEmitter.prototype.prependListener = function prependListener(type, listener) {
229
230
  return _addListener(this, type, listener, true);
230
231
  };
231
232
  function onceWrapper() {
@@ -244,17 +245,17 @@ var require_events = __commonJS({
244
245
  state.wrapFn = wrapped;
245
246
  return wrapped;
246
247
  }
247
- EventEmitter2.prototype.once = function once2(type, listener) {
248
+ EventEmitter.prototype.once = function once2(type, listener) {
248
249
  checkListener(listener);
249
250
  this.on(type, _onceWrap(this, type, listener));
250
251
  return this;
251
252
  };
252
- EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type, listener) {
253
+ EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
253
254
  checkListener(listener);
254
255
  this.prependListener(type, _onceWrap(this, type, listener));
255
256
  return this;
256
257
  };
257
- EventEmitter2.prototype.removeListener = function removeListener(type, listener) {
258
+ EventEmitter.prototype.removeListener = function removeListener(type, listener) {
258
259
  var list, events, position, i, originalListener;
259
260
  checkListener(listener);
260
261
  events = this._events;
@@ -294,8 +295,8 @@ var require_events = __commonJS({
294
295
  }
295
296
  return this;
296
297
  };
297
- EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
298
- EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type) {
298
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
299
+ EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
299
300
  var listeners, events, i;
300
301
  events = this._events;
301
302
  if (events === void 0)
@@ -347,20 +348,20 @@ var require_events = __commonJS({
347
348
  return unwrap ? [evlistener.listener || evlistener] : [evlistener];
348
349
  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
349
350
  }
350
- EventEmitter2.prototype.listeners = function listeners(type) {
351
+ EventEmitter.prototype.listeners = function listeners(type) {
351
352
  return _listeners(this, type, true);
352
353
  };
353
- EventEmitter2.prototype.rawListeners = function rawListeners(type) {
354
+ EventEmitter.prototype.rawListeners = function rawListeners(type) {
354
355
  return _listeners(this, type, false);
355
356
  };
356
- EventEmitter2.listenerCount = function(emitter, type) {
357
+ EventEmitter.listenerCount = function(emitter, type) {
357
358
  if (typeof emitter.listenerCount === "function") {
358
359
  return emitter.listenerCount(type);
359
360
  } else {
360
361
  return listenerCount.call(emitter, type);
361
362
  }
362
363
  };
363
- EventEmitter2.prototype.listenerCount = listenerCount;
364
+ EventEmitter.prototype.listenerCount = listenerCount;
364
365
  function listenerCount(type) {
365
366
  var events = this._events;
366
367
  if (events !== void 0) {
@@ -373,7 +374,7 @@ var require_events = __commonJS({
373
374
  }
374
375
  return 0;
375
376
  }
376
- EventEmitter2.prototype.eventNames = function eventNames() {
377
+ EventEmitter.prototype.eventNames = function eventNames() {
377
378
  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
378
379
  };
379
380
  function arrayClone(arr, n) {
@@ -442,554 +443,22 @@ var require_events = __commonJS({
442
443
  // src/index.ts
443
444
  var src_exports = {};
444
445
  __export(src_exports, {
445
- DefaultLogger: () => DefaultLogger,
446
- ErrorCode: () => ErrorCode,
447
- FlagNotFoundError: () => FlagNotFoundError,
448
- GeneralError: () => GeneralError,
449
- InternalEventEmitter: () => InternalEventEmitter,
450
- InvalidContextError: () => InvalidContextError,
451
- LOG_LEVELS: () => LOG_LEVELS,
452
446
  NOOP_PROVIDER: () => NOOP_PROVIDER,
453
447
  OpenFeature: () => OpenFeature,
454
448
  OpenFeatureAPI: () => OpenFeatureAPI,
455
- OpenFeatureClient: () => OpenFeatureClient,
456
- OpenFeatureCommonAPI: () => OpenFeatureCommonAPI,
457
- OpenFeatureError: () => OpenFeatureError,
458
- OpenFeatureEventEmitter: () => OpenFeatureEventEmitter,
459
- ParseError: () => ParseError,
460
- ProviderEvents: () => ProviderEvents,
461
- ProviderStatus: () => ProviderStatus,
462
- SafeLogger: () => SafeLogger,
463
- StandardResolutionReasons: () => StandardResolutionReasons,
464
- TargetingKeyMissingError: () => TargetingKeyMissingError,
465
- TypeMismatchError: () => TypeMismatchError,
466
- isObject: () => isObject,
467
- isString: () => isString,
468
- objectOrUndefined: () => objectOrUndefined,
469
- statusMatchesEvent: () => statusMatchesEvent,
470
- stringOrUndefined: () => stringOrUndefined
449
+ OpenFeatureClient: () => OpenFeatureClient
471
450
  });
472
451
  module.exports = __toCommonJS(src_exports);
452
+ var import_events = __toESM(require_events());
473
453
 
474
- // ../shared/src/errors/open-feature-error-abstract.ts
475
- var OpenFeatureError = class extends Error {
476
- constructor(message) {
477
- super(message);
478
- Object.setPrototypeOf(this, OpenFeatureError.prototype);
479
- this.name = "OpenFeatureError";
480
- }
481
- };
482
-
483
- // ../shared/src/evaluation/evaluation.ts
484
- var StandardResolutionReasons = {
485
- /**
486
- * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.
487
- */
488
- TARGETING_MATCH: "TARGETING_MATCH",
489
- /**
490
- * The resolved value was the result of pseudorandom assignment.
491
- */
492
- SPLIT: "SPLIT",
493
- /**
494
- * The resolved value was the result of the flag being disabled in the management system.
495
- */
496
- DISABLED: "DISABLED",
497
- /**
498
- * The resolved value was configured statically, or otherwise fell back to a pre-configured value.
499
- */
500
- DEFAULT: "DEFAULT",
501
- /**
502
- * The reason for the resolved value could not be determined.
503
- */
504
- UNKNOWN: "UNKNOWN",
505
- /**
506
- * The resolved value is static (no dynamic evaluation).
507
- */
508
- STATIC: "STATIC",
509
- /**
510
- * The resolved value was retrieved from cache.
511
- */
512
- CACHED: "CACHED",
513
- /**
514
- * The resolved value was the result of an error.
515
- *
516
- * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.
517
- */
518
- ERROR: "ERROR"
519
- };
520
- var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
521
- ErrorCode2["PROVIDER_NOT_READY"] = "PROVIDER_NOT_READY";
522
- ErrorCode2["FLAG_NOT_FOUND"] = "FLAG_NOT_FOUND";
523
- ErrorCode2["PARSE_ERROR"] = "PARSE_ERROR";
524
- ErrorCode2["TYPE_MISMATCH"] = "TYPE_MISMATCH";
525
- ErrorCode2["TARGETING_KEY_MISSING"] = "TARGETING_KEY_MISSING";
526
- ErrorCode2["INVALID_CONTEXT"] = "INVALID_CONTEXT";
527
- ErrorCode2["GENERAL"] = "GENERAL";
528
- return ErrorCode2;
529
- })(ErrorCode || {});
530
-
531
- // ../shared/src/errors/general-error.ts
532
- var GeneralError = class extends OpenFeatureError {
533
- constructor(message) {
534
- super(message);
535
- Object.setPrototypeOf(this, GeneralError.prototype);
536
- this.name = "GeneralError";
537
- this.code = "GENERAL" /* GENERAL */;
538
- }
539
- };
540
-
541
- // ../shared/src/errors/flag-not-found-error.ts
542
- var FlagNotFoundError = class extends OpenFeatureError {
543
- constructor(message) {
544
- super(message);
545
- Object.setPrototypeOf(this, FlagNotFoundError.prototype);
546
- this.name = "FlagNotFoundError";
547
- this.code = "FLAG_NOT_FOUND" /* FLAG_NOT_FOUND */;
548
- }
549
- };
550
-
551
- // ../shared/src/errors/parse-error.ts
552
- var ParseError = class extends OpenFeatureError {
553
- constructor(message) {
554
- super(message);
555
- Object.setPrototypeOf(this, ParseError.prototype);
556
- this.name = "ParseError";
557
- this.code = "PARSE_ERROR" /* PARSE_ERROR */;
558
- }
559
- };
560
-
561
- // ../shared/src/errors/type-mismatch-error.ts
562
- var TypeMismatchError = class extends OpenFeatureError {
563
- constructor(message) {
564
- super(message);
565
- Object.setPrototypeOf(this, TypeMismatchError.prototype);
566
- this.name = "TypeMismatchError";
567
- this.code = "TYPE_MISMATCH" /* TYPE_MISMATCH */;
568
- }
569
- };
570
-
571
- // ../shared/src/errors/targeting-key-missing-error.ts
572
- var TargetingKeyMissingError = class extends OpenFeatureError {
573
- constructor(message) {
574
- super(message);
575
- Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);
576
- this.name = "TargetingKeyMissingError";
577
- this.code = "TARGETING_KEY_MISSING" /* TARGETING_KEY_MISSING */;
578
- }
579
- };
580
-
581
- // ../shared/src/errors/invalid-context-error.ts
582
- var InvalidContextError = class extends OpenFeatureError {
583
- constructor(message) {
584
- super(message);
585
- Object.setPrototypeOf(this, InvalidContextError.prototype);
586
- this.name = "InvalidContextError";
587
- this.code = "INVALID_CONTEXT" /* INVALID_CONTEXT */;
588
- }
589
- };
590
-
591
- // ../shared/src/provider/provider.ts
592
- var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
593
- ProviderStatus2["NOT_READY"] = "NOT_READY";
594
- ProviderStatus2["READY"] = "READY";
595
- ProviderStatus2["ERROR"] = "ERROR";
596
- ProviderStatus2["STALE"] = "STALE";
597
- return ProviderStatus2;
598
- })(ProviderStatus || {});
599
-
600
- // ../shared/src/events/events.ts
601
- var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
602
- ProviderEvents2["Ready"] = "PROVIDER_READY";
603
- ProviderEvents2["Error"] = "PROVIDER_ERROR";
604
- ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
605
- ProviderEvents2["Stale"] = "PROVIDER_STALE";
606
- return ProviderEvents2;
607
- })(ProviderEvents || {});
608
-
609
- // ../shared/src/events/event-utils.ts
610
- var eventStatusMap = {
611
- ["READY" /* READY */]: "PROVIDER_READY" /* Ready */,
612
- ["ERROR" /* ERROR */]: "PROVIDER_ERROR" /* Error */,
613
- ["STALE" /* STALE */]: "PROVIDER_STALE" /* Stale */,
614
- ["NOT_READY" /* NOT_READY */]: void 0
615
- };
616
- var statusMatchesEvent = (event, status) => {
617
- return !status && event === "PROVIDER_READY" /* Ready */ || eventStatusMap[status] === event;
618
- };
619
-
620
- // ../shared/src/events/open-feature-event-emitter.ts
621
- var import_events2 = __toESM(require_events());
622
-
623
- // ../shared/src/logger/default-logger.ts
624
- var DefaultLogger = class {
625
- error(...args) {
626
- console.error(...args);
627
- }
628
- warn(...args) {
629
- console.warn(...args);
630
- }
631
- info() {
632
- }
633
- debug() {
634
- }
635
- };
636
-
637
- // ../shared/src/logger/safe-logger.ts
638
- var LOG_LEVELS = ["error", "warn", "info", "debug"];
639
- var SafeLogger = class {
640
- constructor(logger) {
641
- this.fallbackLogger = new DefaultLogger();
642
- try {
643
- for (const level of LOG_LEVELS) {
644
- if (!logger[level] || typeof logger[level] !== "function") {
645
- throw new Error(`The provided logger is missing the ${level} method.`);
646
- }
647
- }
648
- this.logger = logger;
649
- } catch (err) {
650
- console.error(err);
651
- console.error("Falling back to the default logger.");
652
- this.logger = this.fallbackLogger;
653
- }
654
- }
655
- error(...args) {
656
- this.log("error", ...args);
657
- }
658
- warn(...args) {
659
- this.log("warn", ...args);
660
- }
661
- info(...args) {
662
- this.log("info", ...args);
663
- }
664
- debug(...args) {
665
- this.log("debug", ...args);
666
- }
667
- log(level, ...args) {
668
- try {
669
- this.logger[level](...args);
670
- } catch (error) {
671
- this.fallbackLogger[level](...args);
672
- }
673
- }
674
- };
675
-
676
- // ../shared/src/events/open-feature-event-emitter.ts
677
- var GenericEventEmitter = class {
678
- constructor(globalLogger) {
679
- this.globalLogger = globalLogger;
680
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
681
- this._handlers = /* @__PURE__ */ new WeakMap();
682
- this.eventEmitter = new import_events2.default({ captureRejections: true });
683
- this.eventEmitter.on("error", (err) => {
684
- var _a;
685
- (_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
686
- });
687
- }
688
- emit(eventType, context) {
689
- this.eventEmitter.emit(eventType, context);
690
- }
691
- addHandler(eventType, handler) {
692
- const asyncHandler = (details) => __async(this, null, function* () {
693
- yield handler(details);
694
- });
695
- this._handlers.set(handler, asyncHandler);
696
- this.eventEmitter.on(eventType, asyncHandler);
697
- }
698
- removeHandler(eventType, handler) {
699
- const asyncHandler = this._handlers.get(handler);
700
- if (!asyncHandler) {
701
- return;
702
- }
703
- this.eventEmitter.removeListener(eventType, asyncHandler);
704
- }
705
- removeAllHandlers(eventType) {
706
- if (eventType) {
707
- this.eventEmitter.removeAllListeners(eventType);
708
- } else {
709
- this.eventEmitter.removeAllListeners();
710
- }
711
- }
712
- getHandlers(eventType) {
713
- return this.eventEmitter.listeners(eventType);
714
- }
715
- setLogger(logger) {
716
- this._eventLogger = new SafeLogger(logger);
717
- return this;
718
- }
719
- get _logger() {
720
- var _a, _b;
721
- return (_b = this._eventLogger) != null ? _b : (_a = this.globalLogger) == null ? void 0 : _a.call(this);
722
- }
723
- };
724
- var OpenFeatureEventEmitter = class extends GenericEventEmitter {
725
- };
726
- var InternalEventEmitter = class extends GenericEventEmitter {
727
- };
728
-
729
- // ../shared/src/type-guards.ts
730
- function isString(value) {
731
- return typeof value === "string";
732
- }
733
- function stringOrUndefined(value) {
734
- return isString(value) ? value : void 0;
735
- }
736
- function isObject(value) {
737
- return typeof value === "object";
738
- }
739
- function objectOrUndefined(value) {
740
- return isObject(value) ? value : void 0;
741
- }
742
-
743
- // ../shared/src/filter.ts
744
- function isDefined(input) {
745
- return typeof input !== "undefined" && input !== null;
746
- }
454
+ // src/client/open-feature-client.ts
455
+ var import_core3 = require("@openfeature/core");
747
456
 
748
- // ../shared/src/open-feature.ts
749
- var OpenFeatureCommonAPI = class {
750
- constructor(category) {
751
- this._hooks = [];
752
- this._context = {};
753
- this._logger = new DefaultLogger();
754
- this._events = new InternalEventEmitter(() => this._logger);
755
- this._clientEventHandlers = /* @__PURE__ */ new Map();
756
- this._clientProviders = /* @__PURE__ */ new Map();
757
- this._clientEvents = /* @__PURE__ */ new Map();
758
- this._runsOn = category;
759
- }
760
- addHooks(...hooks) {
761
- this._hooks = [...this._hooks, ...hooks];
762
- return this;
763
- }
764
- getHooks() {
765
- return this._hooks;
766
- }
767
- clearHooks() {
768
- this._hooks = [];
769
- return this;
770
- }
771
- setLogger(logger) {
772
- this._logger = new SafeLogger(logger);
773
- return this;
774
- }
775
- /**
776
- * Get metadata about registered provider.
777
- * @returns {ProviderMetadata} Provider Metadata
778
- */
779
- get providerMetadata() {
780
- return this._defaultProvider.metadata;
781
- }
782
- /**
783
- * Adds a handler for the given provider event type.
784
- * The handlers are called in the order they have been added.
785
- * API (global) events run for all providers.
786
- * @param {ProviderEvents} eventType The provider event type to listen to
787
- * @param {EventHandler} handler The handler to run on occurrence of the event type
788
- */
789
- addHandler(eventType, handler) {
790
- [.../* @__PURE__ */ new Map([[void 0, this._defaultProvider]]), ...this._clientProviders].forEach((keyProviderTuple) => {
791
- var _a;
792
- const clientName = keyProviderTuple[0];
793
- const provider = keyProviderTuple[1];
794
- const shouldRunNow = statusMatchesEvent(eventType, keyProviderTuple[1].status);
795
- if (shouldRunNow) {
796
- try {
797
- handler({ clientName, providerName: provider.metadata.name });
798
- } catch (err) {
799
- (_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
800
- }
801
- }
802
- });
803
- this._events.addHandler(eventType, handler);
804
- }
805
- /**
806
- * Removes a handler for the given provider event type.
807
- * @param {ProviderEvents} eventType The provider event type to remove the listener for
808
- * @param {EventHandler} handler The handler to remove for the provider event type
809
- */
810
- removeHandler(eventType, handler) {
811
- this._events.removeHandler(eventType, handler);
812
- }
813
- /**
814
- * Gets the current handlers for the given provider event type.
815
- * @param {ProviderEvents} eventType The provider event type to get the current handlers for
816
- * @returns {EventHandler[]} The handlers currently attached to the given provider event type
817
- */
818
- getHandlers(eventType) {
819
- return this._events.getHandlers(eventType);
820
- }
821
- setProviderAndWait(clientOrProvider, providerOrUndefined) {
822
- return __async(this, null, function* () {
823
- yield this.setAwaitableProvider(clientOrProvider, providerOrUndefined);
824
- });
825
- }
826
- setProvider(clientOrProvider, providerOrUndefined) {
827
- const maybePromise = this.setAwaitableProvider(clientOrProvider, providerOrUndefined);
828
- if (maybePromise) {
829
- maybePromise.catch(() => {
830
- });
831
- }
832
- return this;
833
- }
834
- setAwaitableProvider(clientOrProvider, providerOrUndefined) {
835
- var _a, _b, _c, _d, _e, _f;
836
- const clientName = stringOrUndefined(clientOrProvider);
837
- const provider = (_a = objectOrUndefined(clientOrProvider)) != null ? _a : objectOrUndefined(providerOrUndefined);
838
- if (!provider) {
839
- this._logger.debug("No provider defined, ignoring setProvider call");
840
- return;
841
- }
842
- const oldProvider = this.getProviderForClient(clientName);
843
- const providerName = provider.metadata.name;
844
- if (oldProvider === provider) {
845
- this._logger.debug("Provider is already set, ignoring setProvider call");
846
- return;
847
- }
848
- if (!provider.runsOn) {
849
- this._logger.debug(`Provider '${provider.metadata.name}' has not defined its intended use.`);
850
- } else if (provider.runsOn !== this._runsOn) {
851
- throw new GeneralError(`Provider '${provider.metadata.name}' is intended for use on the ${provider.runsOn}.`);
852
- }
853
- const emitters = this.getAssociatedEventEmitters(clientName);
854
- if (typeof provider.initialize === "function" && provider.status === void 0) {
855
- const activeLogger = this._logger || console;
856
- activeLogger.warn(
857
- `Provider ${providerName} implements 'initialize' but not 'status'. Please implement 'status'.`
858
- );
859
- }
860
- let initializationPromise = void 0;
861
- if ((provider == null ? void 0 : provider.status) === "NOT_READY" /* NOT_READY */ && typeof provider.initialize === "function") {
862
- initializationPromise = (_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
863
- var _a2;
864
- this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
865
- emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
866
- });
867
- (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
868
- })) == null ? void 0 : _d.catch((error) => {
869
- var _a2;
870
- this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
871
- emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, providerName, message: error.message });
872
- });
873
- (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, providerName, message: error.message });
874
- throw error;
875
- });
876
- } else {
877
- emitters.forEach((emitter) => {
878
- emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
879
- });
880
- (_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
881
- }
882
- if (clientName) {
883
- this._clientProviders.set(clientName, provider);
884
- } else {
885
- this._defaultProvider = provider;
886
- }
887
- this.transferListeners(oldProvider, provider, clientName, emitters);
888
- if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
889
- (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);
890
- }
891
- return initializationPromise;
892
- }
893
- getProviderForClient(name) {
894
- var _a;
895
- if (!name) {
896
- return this._defaultProvider;
897
- }
898
- return (_a = this._clientProviders.get(name)) != null ? _a : this._defaultProvider;
899
- }
900
- buildAndCacheEventEmitterForClient(name) {
901
- const emitter = this._clientEvents.get(name);
902
- if (emitter) {
903
- return emitter;
904
- }
905
- const newEmitter = new InternalEventEmitter(() => this._logger);
906
- this._clientEvents.set(name, newEmitter);
907
- const clientProvider = this.getProviderForClient(name);
908
- Object.values(ProviderEvents).forEach(
909
- (eventType) => {
910
- var _a;
911
- return (_a = clientProvider.events) == null ? void 0 : _a.addHandler(eventType, (details) => __async(this, null, function* () {
912
- newEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName: name, providerName: clientProvider.metadata.name }));
913
- }));
914
- }
915
- );
916
- return newEmitter;
917
- }
918
- getUnboundEmitters() {
919
- const namedProviders = [...this._clientProviders.keys()];
920
- const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
921
- const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
922
- return [
923
- // all unbound, named emitters
924
- ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),
925
- // the default emitter
926
- this._clientEvents.get(void 0)
927
- ].filter(isDefined);
928
- }
929
- getAssociatedEventEmitters(clientName) {
930
- return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
931
- }
932
- transferListeners(oldProvider, newProvider, clientName, emitters) {
933
- var _a;
934
- (_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
935
- var _a2;
936
- return (_a2 = oldProvider.events) == null ? void 0 : _a2.removeHandler(...eventHandler);
937
- });
938
- const newClientHandlers = Object.values(ProviderEvents).map((eventType) => {
939
- const handler = (details) => __async(this, null, function* () {
940
- emitters.forEach((emitter) => {
941
- emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName, providerName: newProvider.metadata.name }));
942
- });
943
- this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName, providerName: newProvider.metadata.name }));
944
- });
945
- return [eventType, handler];
946
- });
947
- this._clientEventHandlers.set(clientName, newClientHandlers);
948
- newClientHandlers.forEach((eventHandler) => {
949
- var _a2;
950
- return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(...eventHandler);
951
- });
952
- }
953
- close() {
954
- return __async(this, null, function* () {
955
- var _a, _b;
956
- try {
957
- yield (_b = (_a = this == null ? void 0 : this._defaultProvider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
958
- } catch (err) {
959
- this.handleShutdownError(this._defaultProvider, err);
960
- }
961
- const providers = Array.from(this._clientProviders);
962
- yield Promise.all(
963
- providers.map((_0) => __async(this, [_0], function* ([, provider]) {
964
- var _a2;
965
- try {
966
- yield (_a2 = provider.onClose) == null ? void 0 : _a2.call(provider);
967
- } catch (err) {
968
- this.handleShutdownError(provider, err);
969
- }
970
- }))
971
- );
972
- });
973
- }
974
- clearProvidersAndSetDefault(defaultProvider) {
975
- return __async(this, null, function* () {
976
- try {
977
- yield this.close();
978
- } catch (err) {
979
- this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.");
980
- } finally {
981
- this._clientProviders.clear();
982
- this._defaultProvider = defaultProvider;
983
- }
984
- });
985
- }
986
- handleShutdownError(provider, err) {
987
- this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);
988
- this._logger.error(err == null ? void 0 : err.stack);
989
- }
990
- };
457
+ // src/open-feature.ts
458
+ var import_core2 = require("@openfeature/core");
991
459
 
992
460
  // src/provider/no-op-provider.ts
461
+ var import_core = require("@openfeature/core");
993
462
  var REASON_NO_OP = "No-op";
994
463
  var NoopFeatureProvider = class {
995
464
  constructor() {
@@ -998,7 +467,7 @@ var NoopFeatureProvider = class {
998
467
  };
999
468
  }
1000
469
  get status() {
1001
- return "NOT_READY" /* NOT_READY */;
470
+ return import_core.ProviderStatus.NOT_READY;
1002
471
  }
1003
472
  resolveBooleanEvaluation(_, defaultValue) {
1004
473
  return this.noOp(defaultValue);
@@ -1024,7 +493,7 @@ var NOOP_PROVIDER = new NoopFeatureProvider();
1024
493
  // src/open-feature.ts
1025
494
  var GLOBAL_OPENFEATURE_API_KEY = Symbol.for("@openfeature/web-sdk/api");
1026
495
  var _globalThis = globalThis;
1027
- var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
496
+ var OpenFeatureAPI = class extends import_core2.OpenFeatureCommonAPI {
1028
497
  // eslint-disable-next-line @typescript-eslint/no-empty-function
1029
498
  constructor() {
1030
499
  super("client");
@@ -1114,8 +583,8 @@ var OpenFeatureClient = class {
1114
583
  addHandler(eventType, handler) {
1115
584
  var _a;
1116
585
  this.emitterAccessor().addHandler(eventType, handler);
1117
- const providerReady = !this._provider.status || this._provider.status === "READY" /* READY */;
1118
- if (eventType === "PROVIDER_READY" /* Ready */ && providerReady) {
586
+ const providerReady = !this._provider.status || this._provider.status === import_core3.ProviderStatus.READY;
587
+ if (eventType === import_core3.ProviderEvents.Ready && providerReady) {
1119
588
  try {
1120
589
  handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });
1121
590
  } catch (err) {
@@ -1130,7 +599,7 @@ var OpenFeatureClient = class {
1130
599
  return this.emitterAccessor().getHandlers(eventType);
1131
600
  }
1132
601
  setLogger(logger) {
1133
- this._clientLogger = new SafeLogger(logger);
602
+ this._clientLogger = new import_core3.SafeLogger(logger);
1134
603
  return this;
1135
604
  }
1136
605
  addHooks(...hooks) {
@@ -1212,13 +681,13 @@ var OpenFeatureClient = class {
1212
681
  return evaluationDetails;
1213
682
  } catch (err) {
1214
683
  const errorMessage = err == null ? void 0 : err.message;
1215
- const errorCode = (err == null ? void 0 : err.code) || "GENERAL" /* GENERAL */;
684
+ const errorCode = (err == null ? void 0 : err.code) || import_core3.ErrorCode.GENERAL;
1216
685
  this.errorHooks(allHooksReversed, hookContext, err, options);
1217
686
  return {
1218
687
  errorCode,
1219
688
  errorMessage,
1220
689
  value: defaultValue,
1221
- reason: StandardResolutionReasons.ERROR,
690
+ reason: import_core3.StandardResolutionReasons.ERROR,
1222
691
  flagMetadata: Object.freeze({}),
1223
692
  flagKey
1224
693
  };
@@ -1275,4 +744,7 @@ var OpenFeatureClient = class {
1275
744
  return this._clientLogger || this.globalLogger();
1276
745
  }
1277
746
  };
747
+
748
+ // src/index.ts
749
+ __reExport(src_exports, require("@openfeature/core"), module.exports);
1278
750
  //# sourceMappingURL=index.js.map