@openfeature/web-sdk 0.3.5-experimental → 0.3.7-experimental

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
@@ -447,6 +447,7 @@ __export(src_exports, {
447
447
  FlagNotFoundError: () => FlagNotFoundError,
448
448
  GeneralError: () => GeneralError,
449
449
  InvalidContextError: () => InvalidContextError,
450
+ LOG_LEVELS: () => LOG_LEVELS,
450
451
  NOOP_PROVIDER: () => NOOP_PROVIDER,
451
452
  NOOP_TRANSACTION_CONTEXT_PROPAGATOR: () => NOOP_TRANSACTION_CONTEXT_PROPAGATOR,
452
453
  OpenFeature: () => OpenFeature,
@@ -461,11 +462,24 @@ __export(src_exports, {
461
462
  SafeLogger: () => SafeLogger,
462
463
  StandardResolutionReasons: () => StandardResolutionReasons,
463
464
  TargetingKeyMissingError: () => TargetingKeyMissingError,
464
- TypeMismatchError: () => TypeMismatchError
465
+ TypeMismatchError: () => TypeMismatchError,
466
+ isObject: () => isObject,
467
+ isString: () => isString,
468
+ objectOrUndefined: () => objectOrUndefined,
469
+ stringOrUndefined: () => stringOrUndefined
465
470
  });
466
471
  module.exports = __toCommonJS(src_exports);
467
472
 
468
- // ../shared/src/types.ts
473
+ // ../shared/src/errors/open-feature-error-abstract.ts
474
+ var OpenFeatureError = class extends Error {
475
+ constructor(message) {
476
+ super(message);
477
+ Object.setPrototypeOf(this, OpenFeatureError.prototype);
478
+ this.name = "OpenFeatureError";
479
+ }
480
+ };
481
+
482
+ // ../shared/src/evaluation/evaluation.ts
469
483
  var StandardResolutionReasons = {
470
484
  /**
471
485
  * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.
@@ -512,21 +526,6 @@ var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
512
526
  ErrorCode2["GENERAL"] = "GENERAL";
513
527
  return ErrorCode2;
514
528
  })(ErrorCode || {});
515
- var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
516
- ProviderStatus2["NOT_READY"] = "NOT_READY";
517
- ProviderStatus2["READY"] = "READY";
518
- ProviderStatus2["ERROR"] = "ERROR";
519
- return ProviderStatus2;
520
- })(ProviderStatus || {});
521
-
522
- // ../shared/src/errors/open-feature-error-abstract.ts
523
- var OpenFeatureError = class extends Error {
524
- constructor(message) {
525
- super(message);
526
- Object.setPrototypeOf(this, OpenFeatureError.prototype);
527
- this.name = "OpenFeatureError";
528
- }
529
- };
530
529
 
531
530
  // ../shared/src/errors/general-error.ts
532
531
  var GeneralError = class extends OpenFeatureError {
@@ -588,8 +587,16 @@ var InvalidContextError = class extends OpenFeatureError {
588
587
  }
589
588
  };
590
589
 
591
- // ../shared/src/logger.ts
592
- var LOG_LEVELS = ["error", "warn", "info", "debug"];
590
+ // ../shared/src/events/events.ts
591
+ var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
592
+ ProviderEvents2["Ready"] = "PROVIDER_READY";
593
+ ProviderEvents2["Error"] = "PROVIDER_ERROR";
594
+ ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
595
+ ProviderEvents2["Stale"] = "PROVIDER_STALE";
596
+ return ProviderEvents2;
597
+ })(ProviderEvents || {});
598
+
599
+ // ../shared/src/logger/default-logger.ts
593
600
  var DefaultLogger = class {
594
601
  error(...args) {
595
602
  console.error(...args);
@@ -602,6 +609,9 @@ var DefaultLogger = class {
602
609
  debug() {
603
610
  }
604
611
  };
612
+
613
+ // ../shared/src/logger/safe-logger.ts
614
+ var LOG_LEVELS = ["error", "warn", "info", "debug"];
605
615
  var SafeLogger = class {
606
616
  constructor(logger) {
607
617
  this.fallbackLogger = new DefaultLogger();
@@ -639,26 +649,8 @@ var SafeLogger = class {
639
649
  }
640
650
  };
641
651
 
642
- // ../shared/src/no-op-transaction-context-propagator.ts
643
- var NoopTransactionContextPropagator = class {
644
- getTransactionContext() {
645
- return {};
646
- }
647
- setTransactionContext(_, callback) {
648
- callback();
649
- }
650
- };
651
- var NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();
652
-
653
- // ../shared/src/events.ts
652
+ // ../shared/src/events/open-feature-event-emitter.ts
654
653
  var import_events = __toESM(require_events());
655
- var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
656
- ProviderEvents2["Ready"] = "PROVIDER_READY";
657
- ProviderEvents2["Error"] = "PROVIDER_ERROR";
658
- ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
659
- ProviderEvents2["Stale"] = "PROVIDER_STALE";
660
- return ProviderEvents2;
661
- })(ProviderEvents || {});
662
654
  var OpenFeatureEventEmitter = class {
663
655
  constructor(globalLogger) {
664
656
  this.globalLogger = globalLogger;
@@ -706,6 +698,25 @@ var OpenFeatureEventEmitter = class {
706
698
  }
707
699
  };
708
700
 
701
+ // ../shared/src/provider/provider.ts
702
+ var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
703
+ ProviderStatus2["NOT_READY"] = "NOT_READY";
704
+ ProviderStatus2["READY"] = "READY";
705
+ ProviderStatus2["ERROR"] = "ERROR";
706
+ return ProviderStatus2;
707
+ })(ProviderStatus || {});
708
+
709
+ // ../shared/src/transaction-context/no-op-transaction-context-propagator.ts
710
+ var NoopTransactionContextPropagator = class {
711
+ getTransactionContext() {
712
+ return {};
713
+ }
714
+ setTransactionContext(_, callback) {
715
+ callback();
716
+ }
717
+ };
718
+ var NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();
719
+
709
720
  // ../shared/src/type-guards.ts
710
721
  function isString(value) {
711
722
  return typeof value === "string";
@@ -720,9 +731,15 @@ function objectOrUndefined(value) {
720
731
  return isObject(value) ? value : void 0;
721
732
  }
722
733
 
734
+ // ../shared/src/filter.ts
735
+ function isDefined(input) {
736
+ return typeof input !== "undefined" && input !== null;
737
+ }
738
+
723
739
  // ../shared/src/open-feature.ts
724
740
  var OpenFeatureCommonAPI = class {
725
741
  constructor() {
742
+ this._hooks = [];
726
743
  this._transactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;
727
744
  this._context = {};
728
745
  this._logger = new DefaultLogger();
@@ -731,6 +748,17 @@ var OpenFeatureCommonAPI = class {
731
748
  this._clientProviders = /* @__PURE__ */ new Map();
732
749
  this._clientEvents = /* @__PURE__ */ new Map();
733
750
  }
751
+ addHooks(...hooks) {
752
+ this._hooks = [...this._hooks, ...hooks];
753
+ return this;
754
+ }
755
+ getHooks() {
756
+ return this._hooks;
757
+ }
758
+ clearHooks() {
759
+ this._hooks = [];
760
+ return this;
761
+ }
734
762
  setLogger(logger) {
735
763
  this._logger = new SafeLogger(logger);
736
764
  return this;
@@ -742,9 +770,6 @@ var OpenFeatureCommonAPI = class {
742
770
  get providerMetadata() {
743
771
  return this._defaultProvider.metadata;
744
772
  }
745
- getContext() {
746
- return this._context;
747
- }
748
773
  /**
749
774
  * Adds a handler for the given provider event type.
750
775
  * The handlers are called in the order they have been added.
@@ -782,19 +807,25 @@ var OpenFeatureCommonAPI = class {
782
807
  if (oldProvider === provider) {
783
808
  return this;
784
809
  }
785
- const clientEmitter = this.getAndCacheEventEmitterForClient(clientName);
810
+ const emitters = clientName ? [this.getAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
786
811
  if (typeof provider.initialize === "function") {
787
812
  (_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
788
813
  var _a2;
789
- clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
814
+ emitters.forEach((emitter) => {
815
+ emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
816
+ });
790
817
  (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
791
818
  })) == null ? void 0 : _d.catch((error) => {
792
819
  var _a2;
793
- clientEmitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
820
+ emitters.forEach((emitter) => {
821
+ emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
822
+ });
794
823
  (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
795
824
  });
796
825
  } else {
797
- clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
826
+ emitters.forEach((emitter) => {
827
+ emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
828
+ });
798
829
  (_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName });
799
830
  }
800
831
  if (clientName) {
@@ -802,7 +833,7 @@ var OpenFeatureCommonAPI = class {
802
833
  } else {
803
834
  this._defaultProvider = provider;
804
835
  }
805
- this.transferListeners(oldProvider, provider, clientName, clientEmitter);
836
+ this.transferListeners(oldProvider, provider, clientName, emitters);
806
837
  if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
807
838
  (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);
808
839
  }
@@ -833,7 +864,18 @@ var OpenFeatureCommonAPI = class {
833
864
  );
834
865
  return newEmitter;
835
866
  }
836
- transferListeners(oldProvider, newProvider, clientName, clientEmitter) {
867
+ getUnboundEmitters() {
868
+ const namedProviders = [...this._clientProviders.keys()];
869
+ const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
870
+ const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
871
+ return [
872
+ // all unbound, named emitters
873
+ ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),
874
+ // the default emitter
875
+ this._clientEvents.get(void 0)
876
+ ].filter(isDefined);
877
+ }
878
+ transferListeners(oldProvider, newProvider, clientName, emitters) {
837
879
  var _a;
838
880
  (_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
839
881
  var _a2;
@@ -842,7 +884,9 @@ var OpenFeatureCommonAPI = class {
842
884
  const newClientHandlers = Object.values(ProviderEvents).map(
843
885
  (eventType) => {
844
886
  const handler = (details) => __async(this, null, function* () {
845
- clientEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
887
+ emitters.forEach((emitter) => {
888
+ emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
889
+ });
846
890
  this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
847
891
  });
848
892
  return [eventType, handler];
@@ -905,7 +949,7 @@ var OpenFeatureCommonAPI = class {
905
949
  }
906
950
  };
907
951
 
908
- // src/no-op-provider.ts
952
+ // src/provider/no-op-provider.ts
909
953
  var REASON_NO_OP = "No-op";
910
954
  var NoopFeatureProvider = class {
911
955
  constructor() {
@@ -944,7 +988,6 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
944
988
  // eslint-disable-next-line @typescript-eslint/no-empty-function
945
989
  constructor() {
946
990
  super();
947
- this._hooks = [];
948
991
  this._defaultProvider = NOOP_PROVIDER;
949
992
  }
950
993
  /**
@@ -961,21 +1004,6 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
961
1004
  _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;
962
1005
  return instance;
963
1006
  }
964
- setLogger(logger) {
965
- this._logger = new SafeLogger(logger);
966
- return this;
967
- }
968
- addHooks(...hooks) {
969
- this._hooks = [...this._hooks, ...hooks];
970
- return this;
971
- }
972
- getHooks() {
973
- return this._hooks;
974
- }
975
- clearHooks() {
976
- this._hooks = [];
977
- return this;
978
- }
979
1007
  setContext(context) {
980
1008
  return __async(this, null, function* () {
981
1009
  var _a, _b;
@@ -984,6 +1012,9 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
984
1012
  yield (_b = (_a = this._defaultProvider) == null ? void 0 : _a.onContextChange) == null ? void 0 : _b.call(_a, oldContext, context);
985
1013
  });
986
1014
  }
1015
+ getContext() {
1016
+ return this._context;
1017
+ }
987
1018
  /**
988
1019
  * A factory function for creating new named OpenFeature clients. Clients can contain
989
1020
  * their own state (e.g. logger, hook, context). Multiple clients can be used
@@ -1008,7 +1039,7 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
1008
1039
  };
1009
1040
  var OpenFeature = OpenFeatureAPI.getInstance();
1010
1041
 
1011
- // src/client.ts
1042
+ // src/client/open-feature-client.ts
1012
1043
  var OpenFeatureClient = class {
1013
1044
  constructor(providerAccessor, emitterAccessor, globalLogger, options) {
1014
1045
  this.providerAccessor = providerAccessor;