@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/esm/index.js CHANGED
@@ -88,22 +88,22 @@ var require_events = __commonJS({
88
88
  var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value) {
89
89
  return value !== value;
90
90
  };
91
- function EventEmitter2() {
92
- EventEmitter2.init.call(this);
91
+ function EventEmitter() {
92
+ EventEmitter.init.call(this);
93
93
  }
94
- module.exports = EventEmitter2;
94
+ module.exports = EventEmitter;
95
95
  module.exports.once = once;
96
- EventEmitter2.EventEmitter = EventEmitter2;
97
- EventEmitter2.prototype._events = void 0;
98
- EventEmitter2.prototype._eventsCount = 0;
99
- EventEmitter2.prototype._maxListeners = void 0;
96
+ EventEmitter.EventEmitter = EventEmitter;
97
+ EventEmitter.prototype._events = void 0;
98
+ EventEmitter.prototype._eventsCount = 0;
99
+ EventEmitter.prototype._maxListeners = void 0;
100
100
  var defaultMaxListeners = 10;
101
101
  function checkListener(listener) {
102
102
  if (typeof listener !== "function") {
103
103
  throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
104
104
  }
105
105
  }
106
- Object.defineProperty(EventEmitter2, "defaultMaxListeners", {
106
+ Object.defineProperty(EventEmitter, "defaultMaxListeners", {
107
107
  enumerable: true,
108
108
  get: function() {
109
109
  return defaultMaxListeners;
@@ -115,14 +115,14 @@ var require_events = __commonJS({
115
115
  defaultMaxListeners = arg;
116
116
  }
117
117
  });
118
- EventEmitter2.init = function() {
118
+ EventEmitter.init = function() {
119
119
  if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
120
120
  this._events = /* @__PURE__ */ Object.create(null);
121
121
  this._eventsCount = 0;
122
122
  }
123
123
  this._maxListeners = this._maxListeners || void 0;
124
124
  };
125
- EventEmitter2.prototype.setMaxListeners = function setMaxListeners(n) {
125
+ EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
126
126
  if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
127
127
  throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
128
128
  }
@@ -131,13 +131,13 @@ var require_events = __commonJS({
131
131
  };
132
132
  function _getMaxListeners(that) {
133
133
  if (that._maxListeners === void 0)
134
- return EventEmitter2.defaultMaxListeners;
134
+ return EventEmitter.defaultMaxListeners;
135
135
  return that._maxListeners;
136
136
  }
137
- EventEmitter2.prototype.getMaxListeners = function getMaxListeners() {
137
+ EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
138
138
  return _getMaxListeners(this);
139
139
  };
140
- EventEmitter2.prototype.emit = function emit(type) {
140
+ EventEmitter.prototype.emit = function emit(type) {
141
141
  var args = [];
142
142
  for (var i = 1; i < arguments.length; i++)
143
143
  args.push(arguments[i]);
@@ -215,11 +215,11 @@ var require_events = __commonJS({
215
215
  }
216
216
  return target;
217
217
  }
218
- EventEmitter2.prototype.addListener = function addListener(type, listener) {
218
+ EventEmitter.prototype.addListener = function addListener(type, listener) {
219
219
  return _addListener(this, type, listener, false);
220
220
  };
221
- EventEmitter2.prototype.on = EventEmitter2.prototype.addListener;
222
- EventEmitter2.prototype.prependListener = function prependListener(type, listener) {
221
+ EventEmitter.prototype.on = EventEmitter.prototype.addListener;
222
+ EventEmitter.prototype.prependListener = function prependListener(type, listener) {
223
223
  return _addListener(this, type, listener, true);
224
224
  };
225
225
  function onceWrapper() {
@@ -238,17 +238,17 @@ var require_events = __commonJS({
238
238
  state.wrapFn = wrapped;
239
239
  return wrapped;
240
240
  }
241
- EventEmitter2.prototype.once = function once2(type, listener) {
241
+ EventEmitter.prototype.once = function once2(type, listener) {
242
242
  checkListener(listener);
243
243
  this.on(type, _onceWrap(this, type, listener));
244
244
  return this;
245
245
  };
246
- EventEmitter2.prototype.prependOnceListener = function prependOnceListener(type, listener) {
246
+ EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
247
247
  checkListener(listener);
248
248
  this.prependListener(type, _onceWrap(this, type, listener));
249
249
  return this;
250
250
  };
251
- EventEmitter2.prototype.removeListener = function removeListener(type, listener) {
251
+ EventEmitter.prototype.removeListener = function removeListener(type, listener) {
252
252
  var list, events, position, i, originalListener;
253
253
  checkListener(listener);
254
254
  events = this._events;
@@ -288,8 +288,8 @@ var require_events = __commonJS({
288
288
  }
289
289
  return this;
290
290
  };
291
- EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
292
- EventEmitter2.prototype.removeAllListeners = function removeAllListeners(type) {
291
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
292
+ EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
293
293
  var listeners, events, i;
294
294
  events = this._events;
295
295
  if (events === void 0)
@@ -341,20 +341,20 @@ var require_events = __commonJS({
341
341
  return unwrap ? [evlistener.listener || evlistener] : [evlistener];
342
342
  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
343
343
  }
344
- EventEmitter2.prototype.listeners = function listeners(type) {
344
+ EventEmitter.prototype.listeners = function listeners(type) {
345
345
  return _listeners(this, type, true);
346
346
  };
347
- EventEmitter2.prototype.rawListeners = function rawListeners(type) {
347
+ EventEmitter.prototype.rawListeners = function rawListeners(type) {
348
348
  return _listeners(this, type, false);
349
349
  };
350
- EventEmitter2.listenerCount = function(emitter, type) {
350
+ EventEmitter.listenerCount = function(emitter, type) {
351
351
  if (typeof emitter.listenerCount === "function") {
352
352
  return emitter.listenerCount(type);
353
353
  } else {
354
354
  return listenerCount.call(emitter, type);
355
355
  }
356
356
  };
357
- EventEmitter2.prototype.listenerCount = listenerCount;
357
+ EventEmitter.prototype.listenerCount = listenerCount;
358
358
  function listenerCount(type) {
359
359
  var events = this._events;
360
360
  if (events !== void 0) {
@@ -367,7 +367,7 @@ var require_events = __commonJS({
367
367
  }
368
368
  return 0;
369
369
  }
370
- EventEmitter2.prototype.eventNames = function eventNames() {
370
+ EventEmitter.prototype.eventNames = function eventNames() {
371
371
  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
372
372
  };
373
373
  function arrayClone(arr, n) {
@@ -433,525 +433,23 @@ var require_events = __commonJS({
433
433
  }
434
434
  });
435
435
 
436
- // ../shared/src/errors/open-feature-error-abstract.ts
437
- var OpenFeatureError = class extends Error {
438
- constructor(message) {
439
- super(message);
440
- Object.setPrototypeOf(this, OpenFeatureError.prototype);
441
- this.name = "OpenFeatureError";
442
- }
443
- };
444
-
445
- // ../shared/src/evaluation/evaluation.ts
446
- var StandardResolutionReasons = {
447
- /**
448
- * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.
449
- */
450
- TARGETING_MATCH: "TARGETING_MATCH",
451
- /**
452
- * The resolved value was the result of pseudorandom assignment.
453
- */
454
- SPLIT: "SPLIT",
455
- /**
456
- * The resolved value was the result of the flag being disabled in the management system.
457
- */
458
- DISABLED: "DISABLED",
459
- /**
460
- * The resolved value was configured statically, or otherwise fell back to a pre-configured value.
461
- */
462
- DEFAULT: "DEFAULT",
463
- /**
464
- * The reason for the resolved value could not be determined.
465
- */
466
- UNKNOWN: "UNKNOWN",
467
- /**
468
- * The resolved value is static (no dynamic evaluation).
469
- */
470
- STATIC: "STATIC",
471
- /**
472
- * The resolved value was retrieved from cache.
473
- */
474
- CACHED: "CACHED",
475
- /**
476
- * The resolved value was the result of an error.
477
- *
478
- * Note: The `errorCode` and `errorMessage` fields may contain additional details of this error.
479
- */
480
- ERROR: "ERROR"
481
- };
482
- var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
483
- ErrorCode2["PROVIDER_NOT_READY"] = "PROVIDER_NOT_READY";
484
- ErrorCode2["FLAG_NOT_FOUND"] = "FLAG_NOT_FOUND";
485
- ErrorCode2["PARSE_ERROR"] = "PARSE_ERROR";
486
- ErrorCode2["TYPE_MISMATCH"] = "TYPE_MISMATCH";
487
- ErrorCode2["TARGETING_KEY_MISSING"] = "TARGETING_KEY_MISSING";
488
- ErrorCode2["INVALID_CONTEXT"] = "INVALID_CONTEXT";
489
- ErrorCode2["GENERAL"] = "GENERAL";
490
- return ErrorCode2;
491
- })(ErrorCode || {});
492
-
493
- // ../shared/src/errors/general-error.ts
494
- var GeneralError = class extends OpenFeatureError {
495
- constructor(message) {
496
- super(message);
497
- Object.setPrototypeOf(this, GeneralError.prototype);
498
- this.name = "GeneralError";
499
- this.code = "GENERAL" /* GENERAL */;
500
- }
501
- };
436
+ // src/index.ts
437
+ var import_events = __toESM(require_events());
502
438
 
503
- // ../shared/src/errors/flag-not-found-error.ts
504
- var FlagNotFoundError = class extends OpenFeatureError {
505
- constructor(message) {
506
- super(message);
507
- Object.setPrototypeOf(this, FlagNotFoundError.prototype);
508
- this.name = "FlagNotFoundError";
509
- this.code = "FLAG_NOT_FOUND" /* FLAG_NOT_FOUND */;
510
- }
511
- };
512
-
513
- // ../shared/src/errors/parse-error.ts
514
- var ParseError = class extends OpenFeatureError {
515
- constructor(message) {
516
- super(message);
517
- Object.setPrototypeOf(this, ParseError.prototype);
518
- this.name = "ParseError";
519
- this.code = "PARSE_ERROR" /* PARSE_ERROR */;
520
- }
521
- };
522
-
523
- // ../shared/src/errors/type-mismatch-error.ts
524
- var TypeMismatchError = class extends OpenFeatureError {
525
- constructor(message) {
526
- super(message);
527
- Object.setPrototypeOf(this, TypeMismatchError.prototype);
528
- this.name = "TypeMismatchError";
529
- this.code = "TYPE_MISMATCH" /* TYPE_MISMATCH */;
530
- }
531
- };
532
-
533
- // ../shared/src/errors/targeting-key-missing-error.ts
534
- var TargetingKeyMissingError = class extends OpenFeatureError {
535
- constructor(message) {
536
- super(message);
537
- Object.setPrototypeOf(this, TargetingKeyMissingError.prototype);
538
- this.name = "TargetingKeyMissingError";
539
- this.code = "TARGETING_KEY_MISSING" /* TARGETING_KEY_MISSING */;
540
- }
541
- };
542
-
543
- // ../shared/src/errors/invalid-context-error.ts
544
- var InvalidContextError = class extends OpenFeatureError {
545
- constructor(message) {
546
- super(message);
547
- Object.setPrototypeOf(this, InvalidContextError.prototype);
548
- this.name = "InvalidContextError";
549
- this.code = "INVALID_CONTEXT" /* INVALID_CONTEXT */;
550
- }
551
- };
552
-
553
- // ../shared/src/provider/provider.ts
554
- var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
555
- ProviderStatus2["NOT_READY"] = "NOT_READY";
556
- ProviderStatus2["READY"] = "READY";
557
- ProviderStatus2["ERROR"] = "ERROR";
558
- ProviderStatus2["STALE"] = "STALE";
559
- return ProviderStatus2;
560
- })(ProviderStatus || {});
561
-
562
- // ../shared/src/events/events.ts
563
- var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
564
- ProviderEvents2["Ready"] = "PROVIDER_READY";
565
- ProviderEvents2["Error"] = "PROVIDER_ERROR";
566
- ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
567
- ProviderEvents2["Stale"] = "PROVIDER_STALE";
568
- return ProviderEvents2;
569
- })(ProviderEvents || {});
570
-
571
- // ../shared/src/events/event-utils.ts
572
- var eventStatusMap = {
573
- ["READY" /* READY */]: "PROVIDER_READY" /* Ready */,
574
- ["ERROR" /* ERROR */]: "PROVIDER_ERROR" /* Error */,
575
- ["STALE" /* STALE */]: "PROVIDER_STALE" /* Stale */,
576
- ["NOT_READY" /* NOT_READY */]: void 0
577
- };
578
- var statusMatchesEvent = (event, status) => {
579
- return !status && event === "PROVIDER_READY" /* Ready */ || eventStatusMap[status] === event;
580
- };
581
-
582
- // ../shared/src/events/open-feature-event-emitter.ts
583
- var import_events2 = __toESM(require_events());
584
-
585
- // ../shared/src/logger/default-logger.ts
586
- var DefaultLogger = class {
587
- error(...args) {
588
- console.error(...args);
589
- }
590
- warn(...args) {
591
- console.warn(...args);
592
- }
593
- info() {
594
- }
595
- debug() {
596
- }
597
- };
598
-
599
- // ../shared/src/logger/safe-logger.ts
600
- var LOG_LEVELS = ["error", "warn", "info", "debug"];
601
- var SafeLogger = class {
602
- constructor(logger) {
603
- this.fallbackLogger = new DefaultLogger();
604
- try {
605
- for (const level of LOG_LEVELS) {
606
- if (!logger[level] || typeof logger[level] !== "function") {
607
- throw new Error(`The provided logger is missing the ${level} method.`);
608
- }
609
- }
610
- this.logger = logger;
611
- } catch (err) {
612
- console.error(err);
613
- console.error("Falling back to the default logger.");
614
- this.logger = this.fallbackLogger;
615
- }
616
- }
617
- error(...args) {
618
- this.log("error", ...args);
619
- }
620
- warn(...args) {
621
- this.log("warn", ...args);
622
- }
623
- info(...args) {
624
- this.log("info", ...args);
625
- }
626
- debug(...args) {
627
- this.log("debug", ...args);
628
- }
629
- log(level, ...args) {
630
- try {
631
- this.logger[level](...args);
632
- } catch (error) {
633
- this.fallbackLogger[level](...args);
634
- }
635
- }
636
- };
637
-
638
- // ../shared/src/events/open-feature-event-emitter.ts
639
- var GenericEventEmitter = class {
640
- constructor(globalLogger) {
641
- this.globalLogger = globalLogger;
642
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
643
- this._handlers = /* @__PURE__ */ new WeakMap();
644
- this.eventEmitter = new import_events2.default({ captureRejections: true });
645
- this.eventEmitter.on("error", (err) => {
646
- var _a;
647
- (_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
648
- });
649
- }
650
- emit(eventType, context) {
651
- this.eventEmitter.emit(eventType, context);
652
- }
653
- addHandler(eventType, handler) {
654
- const asyncHandler = (details) => __async(this, null, function* () {
655
- yield handler(details);
656
- });
657
- this._handlers.set(handler, asyncHandler);
658
- this.eventEmitter.on(eventType, asyncHandler);
659
- }
660
- removeHandler(eventType, handler) {
661
- const asyncHandler = this._handlers.get(handler);
662
- if (!asyncHandler) {
663
- return;
664
- }
665
- this.eventEmitter.removeListener(eventType, asyncHandler);
666
- }
667
- removeAllHandlers(eventType) {
668
- if (eventType) {
669
- this.eventEmitter.removeAllListeners(eventType);
670
- } else {
671
- this.eventEmitter.removeAllListeners();
672
- }
673
- }
674
- getHandlers(eventType) {
675
- return this.eventEmitter.listeners(eventType);
676
- }
677
- setLogger(logger) {
678
- this._eventLogger = new SafeLogger(logger);
679
- return this;
680
- }
681
- get _logger() {
682
- var _a, _b;
683
- return (_b = this._eventLogger) != null ? _b : (_a = this.globalLogger) == null ? void 0 : _a.call(this);
684
- }
685
- };
686
- var OpenFeatureEventEmitter = class extends GenericEventEmitter {
687
- };
688
- var InternalEventEmitter = class extends GenericEventEmitter {
689
- };
690
-
691
- // ../shared/src/type-guards.ts
692
- function isString(value) {
693
- return typeof value === "string";
694
- }
695
- function stringOrUndefined(value) {
696
- return isString(value) ? value : void 0;
697
- }
698
- function isObject(value) {
699
- return typeof value === "object";
700
- }
701
- function objectOrUndefined(value) {
702
- return isObject(value) ? value : void 0;
703
- }
704
-
705
- // ../shared/src/filter.ts
706
- function isDefined(input) {
707
- return typeof input !== "undefined" && input !== null;
708
- }
439
+ // src/client/open-feature-client.ts
440
+ import {
441
+ ErrorCode,
442
+ ProviderEvents,
443
+ ProviderStatus as ProviderStatus2,
444
+ SafeLogger,
445
+ StandardResolutionReasons
446
+ } from "@openfeature/core";
709
447
 
710
- // ../shared/src/open-feature.ts
711
- var OpenFeatureCommonAPI = class {
712
- constructor(category) {
713
- this._hooks = [];
714
- this._context = {};
715
- this._logger = new DefaultLogger();
716
- this._events = new InternalEventEmitter(() => this._logger);
717
- this._clientEventHandlers = /* @__PURE__ */ new Map();
718
- this._clientProviders = /* @__PURE__ */ new Map();
719
- this._clientEvents = /* @__PURE__ */ new Map();
720
- this._runsOn = category;
721
- }
722
- addHooks(...hooks) {
723
- this._hooks = [...this._hooks, ...hooks];
724
- return this;
725
- }
726
- getHooks() {
727
- return this._hooks;
728
- }
729
- clearHooks() {
730
- this._hooks = [];
731
- return this;
732
- }
733
- setLogger(logger) {
734
- this._logger = new SafeLogger(logger);
735
- return this;
736
- }
737
- /**
738
- * Get metadata about registered provider.
739
- * @returns {ProviderMetadata} Provider Metadata
740
- */
741
- get providerMetadata() {
742
- return this._defaultProvider.metadata;
743
- }
744
- /**
745
- * Adds a handler for the given provider event type.
746
- * The handlers are called in the order they have been added.
747
- * API (global) events run for all providers.
748
- * @param {ProviderEvents} eventType The provider event type to listen to
749
- * @param {EventHandler} handler The handler to run on occurrence of the event type
750
- */
751
- addHandler(eventType, handler) {
752
- [.../* @__PURE__ */ new Map([[void 0, this._defaultProvider]]), ...this._clientProviders].forEach((keyProviderTuple) => {
753
- var _a;
754
- const clientName = keyProviderTuple[0];
755
- const provider = keyProviderTuple[1];
756
- const shouldRunNow = statusMatchesEvent(eventType, keyProviderTuple[1].status);
757
- if (shouldRunNow) {
758
- try {
759
- handler({ clientName, providerName: provider.metadata.name });
760
- } catch (err) {
761
- (_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
762
- }
763
- }
764
- });
765
- this._events.addHandler(eventType, handler);
766
- }
767
- /**
768
- * Removes a handler for the given provider event type.
769
- * @param {ProviderEvents} eventType The provider event type to remove the listener for
770
- * @param {EventHandler} handler The handler to remove for the provider event type
771
- */
772
- removeHandler(eventType, handler) {
773
- this._events.removeHandler(eventType, handler);
774
- }
775
- /**
776
- * Gets the current handlers for the given provider event type.
777
- * @param {ProviderEvents} eventType The provider event type to get the current handlers for
778
- * @returns {EventHandler[]} The handlers currently attached to the given provider event type
779
- */
780
- getHandlers(eventType) {
781
- return this._events.getHandlers(eventType);
782
- }
783
- setProviderAndWait(clientOrProvider, providerOrUndefined) {
784
- return __async(this, null, function* () {
785
- yield this.setAwaitableProvider(clientOrProvider, providerOrUndefined);
786
- });
787
- }
788
- setProvider(clientOrProvider, providerOrUndefined) {
789
- const maybePromise = this.setAwaitableProvider(clientOrProvider, providerOrUndefined);
790
- if (maybePromise) {
791
- maybePromise.catch(() => {
792
- });
793
- }
794
- return this;
795
- }
796
- setAwaitableProvider(clientOrProvider, providerOrUndefined) {
797
- var _a, _b, _c, _d, _e, _f;
798
- const clientName = stringOrUndefined(clientOrProvider);
799
- const provider = (_a = objectOrUndefined(clientOrProvider)) != null ? _a : objectOrUndefined(providerOrUndefined);
800
- if (!provider) {
801
- this._logger.debug("No provider defined, ignoring setProvider call");
802
- return;
803
- }
804
- const oldProvider = this.getProviderForClient(clientName);
805
- const providerName = provider.metadata.name;
806
- if (oldProvider === provider) {
807
- this._logger.debug("Provider is already set, ignoring setProvider call");
808
- return;
809
- }
810
- if (!provider.runsOn) {
811
- this._logger.debug(`Provider '${provider.metadata.name}' has not defined its intended use.`);
812
- } else if (provider.runsOn !== this._runsOn) {
813
- throw new GeneralError(`Provider '${provider.metadata.name}' is intended for use on the ${provider.runsOn}.`);
814
- }
815
- const emitters = this.getAssociatedEventEmitters(clientName);
816
- if (typeof provider.initialize === "function" && provider.status === void 0) {
817
- const activeLogger = this._logger || console;
818
- activeLogger.warn(
819
- `Provider ${providerName} implements 'initialize' but not 'status'. Please implement 'status'.`
820
- );
821
- }
822
- let initializationPromise = void 0;
823
- if ((provider == null ? void 0 : provider.status) === "NOT_READY" /* NOT_READY */ && typeof provider.initialize === "function") {
824
- initializationPromise = (_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
825
- var _a2;
826
- this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
827
- emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
828
- });
829
- (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
830
- })) == null ? void 0 : _d.catch((error) => {
831
- var _a2;
832
- this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
833
- emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, providerName, message: error.message });
834
- });
835
- (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, providerName, message: error.message });
836
- throw error;
837
- });
838
- } else {
839
- emitters.forEach((emitter) => {
840
- emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
841
- });
842
- (_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName, providerName });
843
- }
844
- if (clientName) {
845
- this._clientProviders.set(clientName, provider);
846
- } else {
847
- this._defaultProvider = provider;
848
- }
849
- this.transferListeners(oldProvider, provider, clientName, emitters);
850
- if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
851
- (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);
852
- }
853
- return initializationPromise;
854
- }
855
- getProviderForClient(name) {
856
- var _a;
857
- if (!name) {
858
- return this._defaultProvider;
859
- }
860
- return (_a = this._clientProviders.get(name)) != null ? _a : this._defaultProvider;
861
- }
862
- buildAndCacheEventEmitterForClient(name) {
863
- const emitter = this._clientEvents.get(name);
864
- if (emitter) {
865
- return emitter;
866
- }
867
- const newEmitter = new InternalEventEmitter(() => this._logger);
868
- this._clientEvents.set(name, newEmitter);
869
- const clientProvider = this.getProviderForClient(name);
870
- Object.values(ProviderEvents).forEach(
871
- (eventType) => {
872
- var _a;
873
- return (_a = clientProvider.events) == null ? void 0 : _a.addHandler(eventType, (details) => __async(this, null, function* () {
874
- newEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName: name, providerName: clientProvider.metadata.name }));
875
- }));
876
- }
877
- );
878
- return newEmitter;
879
- }
880
- getUnboundEmitters() {
881
- const namedProviders = [...this._clientProviders.keys()];
882
- const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
883
- const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
884
- return [
885
- // all unbound, named emitters
886
- ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),
887
- // the default emitter
888
- this._clientEvents.get(void 0)
889
- ].filter(isDefined);
890
- }
891
- getAssociatedEventEmitters(clientName) {
892
- return clientName ? [this.buildAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
893
- }
894
- transferListeners(oldProvider, newProvider, clientName, emitters) {
895
- var _a;
896
- (_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
897
- var _a2;
898
- return (_a2 = oldProvider.events) == null ? void 0 : _a2.removeHandler(...eventHandler);
899
- });
900
- const newClientHandlers = Object.values(ProviderEvents).map((eventType) => {
901
- const handler = (details) => __async(this, null, function* () {
902
- emitters.forEach((emitter) => {
903
- emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName, providerName: newProvider.metadata.name }));
904
- });
905
- this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName, providerName: newProvider.metadata.name }));
906
- });
907
- return [eventType, handler];
908
- });
909
- this._clientEventHandlers.set(clientName, newClientHandlers);
910
- newClientHandlers.forEach((eventHandler) => {
911
- var _a2;
912
- return (_a2 = newProvider.events) == null ? void 0 : _a2.addHandler(...eventHandler);
913
- });
914
- }
915
- close() {
916
- return __async(this, null, function* () {
917
- var _a, _b;
918
- try {
919
- yield (_b = (_a = this == null ? void 0 : this._defaultProvider) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a);
920
- } catch (err) {
921
- this.handleShutdownError(this._defaultProvider, err);
922
- }
923
- const providers = Array.from(this._clientProviders);
924
- yield Promise.all(
925
- providers.map((_0) => __async(this, [_0], function* ([, provider]) {
926
- var _a2;
927
- try {
928
- yield (_a2 = provider.onClose) == null ? void 0 : _a2.call(provider);
929
- } catch (err) {
930
- this.handleShutdownError(provider, err);
931
- }
932
- }))
933
- );
934
- });
935
- }
936
- clearProvidersAndSetDefault(defaultProvider) {
937
- return __async(this, null, function* () {
938
- try {
939
- yield this.close();
940
- } catch (err) {
941
- this._logger.error("Unable to cleanly close providers. Resetting to the default configuration.");
942
- } finally {
943
- this._clientProviders.clear();
944
- this._defaultProvider = defaultProvider;
945
- }
946
- });
947
- }
948
- handleShutdownError(provider, err) {
949
- this._logger.error(`Error during shutdown of provider ${provider.metadata.name}: ${err}`);
950
- this._logger.error(err == null ? void 0 : err.stack);
951
- }
952
- };
448
+ // src/open-feature.ts
449
+ import { OpenFeatureCommonAPI } from "@openfeature/core";
953
450
 
954
451
  // src/provider/no-op-provider.ts
452
+ import { ProviderStatus } from "@openfeature/core";
955
453
  var REASON_NO_OP = "No-op";
956
454
  var NoopFeatureProvider = class {
957
455
  constructor() {
@@ -960,7 +458,7 @@ var NoopFeatureProvider = class {
960
458
  };
961
459
  }
962
460
  get status() {
963
- return "NOT_READY" /* NOT_READY */;
461
+ return ProviderStatus.NOT_READY;
964
462
  }
965
463
  resolveBooleanEvaluation(_, defaultValue) {
966
464
  return this.noOp(defaultValue);
@@ -1076,8 +574,8 @@ var OpenFeatureClient = class {
1076
574
  addHandler(eventType, handler) {
1077
575
  var _a;
1078
576
  this.emitterAccessor().addHandler(eventType, handler);
1079
- const providerReady = !this._provider.status || this._provider.status === "READY" /* READY */;
1080
- if (eventType === "PROVIDER_READY" /* Ready */ && providerReady) {
577
+ const providerReady = !this._provider.status || this._provider.status === ProviderStatus2.READY;
578
+ if (eventType === ProviderEvents.Ready && providerReady) {
1081
579
  try {
1082
580
  handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });
1083
581
  } catch (err) {
@@ -1174,7 +672,7 @@ var OpenFeatureClient = class {
1174
672
  return evaluationDetails;
1175
673
  } catch (err) {
1176
674
  const errorMessage = err == null ? void 0 : err.message;
1177
- const errorCode = (err == null ? void 0 : err.code) || "GENERAL" /* GENERAL */;
675
+ const errorCode = (err == null ? void 0 : err.code) || ErrorCode.GENERAL;
1178
676
  this.errorHooks(allHooksReversed, hookContext, err, options);
1179
677
  return {
1180
678
  errorCode,
@@ -1237,32 +735,13 @@ var OpenFeatureClient = class {
1237
735
  return this._clientLogger || this.globalLogger();
1238
736
  }
1239
737
  };
738
+
739
+ // src/index.ts
740
+ export * from "@openfeature/core";
1240
741
  export {
1241
- DefaultLogger,
1242
- ErrorCode,
1243
- FlagNotFoundError,
1244
- GeneralError,
1245
- InternalEventEmitter,
1246
- InvalidContextError,
1247
- LOG_LEVELS,
1248
742
  NOOP_PROVIDER,
1249
743
  OpenFeature,
1250
744
  OpenFeatureAPI,
1251
- OpenFeatureClient,
1252
- OpenFeatureCommonAPI,
1253
- OpenFeatureError,
1254
- OpenFeatureEventEmitter,
1255
- ParseError,
1256
- ProviderEvents,
1257
- ProviderStatus,
1258
- SafeLogger,
1259
- StandardResolutionReasons,
1260
- TargetingKeyMissingError,
1261
- TypeMismatchError,
1262
- isObject,
1263
- isString,
1264
- objectOrUndefined,
1265
- statusMatchesEvent,
1266
- stringOrUndefined
745
+ OpenFeatureClient
1267
746
  };
1268
747
  //# sourceMappingURL=index.js.map