@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/esm/index.js CHANGED
@@ -433,7 +433,16 @@ var require_events = __commonJS({
433
433
  }
434
434
  });
435
435
 
436
- // ../shared/src/types.ts
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
437
446
  var StandardResolutionReasons = {
438
447
  /**
439
448
  * The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.
@@ -480,21 +489,6 @@ var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
480
489
  ErrorCode2["GENERAL"] = "GENERAL";
481
490
  return ErrorCode2;
482
491
  })(ErrorCode || {});
483
- var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
484
- ProviderStatus2["NOT_READY"] = "NOT_READY";
485
- ProviderStatus2["READY"] = "READY";
486
- ProviderStatus2["ERROR"] = "ERROR";
487
- return ProviderStatus2;
488
- })(ProviderStatus || {});
489
-
490
- // ../shared/src/errors/open-feature-error-abstract.ts
491
- var OpenFeatureError = class extends Error {
492
- constructor(message) {
493
- super(message);
494
- Object.setPrototypeOf(this, OpenFeatureError.prototype);
495
- this.name = "OpenFeatureError";
496
- }
497
- };
498
492
 
499
493
  // ../shared/src/errors/general-error.ts
500
494
  var GeneralError = class extends OpenFeatureError {
@@ -556,8 +550,16 @@ var InvalidContextError = class extends OpenFeatureError {
556
550
  }
557
551
  };
558
552
 
559
- // ../shared/src/logger.ts
560
- var LOG_LEVELS = ["error", "warn", "info", "debug"];
553
+ // ../shared/src/events/events.ts
554
+ var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
555
+ ProviderEvents2["Ready"] = "PROVIDER_READY";
556
+ ProviderEvents2["Error"] = "PROVIDER_ERROR";
557
+ ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
558
+ ProviderEvents2["Stale"] = "PROVIDER_STALE";
559
+ return ProviderEvents2;
560
+ })(ProviderEvents || {});
561
+
562
+ // ../shared/src/logger/default-logger.ts
561
563
  var DefaultLogger = class {
562
564
  error(...args) {
563
565
  console.error(...args);
@@ -570,6 +572,9 @@ var DefaultLogger = class {
570
572
  debug() {
571
573
  }
572
574
  };
575
+
576
+ // ../shared/src/logger/safe-logger.ts
577
+ var LOG_LEVELS = ["error", "warn", "info", "debug"];
573
578
  var SafeLogger = class {
574
579
  constructor(logger) {
575
580
  this.fallbackLogger = new DefaultLogger();
@@ -607,26 +612,8 @@ var SafeLogger = class {
607
612
  }
608
613
  };
609
614
 
610
- // ../shared/src/no-op-transaction-context-propagator.ts
611
- var NoopTransactionContextPropagator = class {
612
- getTransactionContext() {
613
- return {};
614
- }
615
- setTransactionContext(_, callback) {
616
- callback();
617
- }
618
- };
619
- var NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();
620
-
621
- // ../shared/src/events.ts
615
+ // ../shared/src/events/open-feature-event-emitter.ts
622
616
  var import_events = __toESM(require_events());
623
- var ProviderEvents = /* @__PURE__ */ ((ProviderEvents2) => {
624
- ProviderEvents2["Ready"] = "PROVIDER_READY";
625
- ProviderEvents2["Error"] = "PROVIDER_ERROR";
626
- ProviderEvents2["ConfigurationChanged"] = "PROVIDER_CONFIGURATION_CHANGED";
627
- ProviderEvents2["Stale"] = "PROVIDER_STALE";
628
- return ProviderEvents2;
629
- })(ProviderEvents || {});
630
617
  var OpenFeatureEventEmitter = class {
631
618
  constructor(globalLogger) {
632
619
  this.globalLogger = globalLogger;
@@ -674,6 +661,25 @@ var OpenFeatureEventEmitter = class {
674
661
  }
675
662
  };
676
663
 
664
+ // ../shared/src/provider/provider.ts
665
+ var ProviderStatus = /* @__PURE__ */ ((ProviderStatus2) => {
666
+ ProviderStatus2["NOT_READY"] = "NOT_READY";
667
+ ProviderStatus2["READY"] = "READY";
668
+ ProviderStatus2["ERROR"] = "ERROR";
669
+ return ProviderStatus2;
670
+ })(ProviderStatus || {});
671
+
672
+ // ../shared/src/transaction-context/no-op-transaction-context-propagator.ts
673
+ var NoopTransactionContextPropagator = class {
674
+ getTransactionContext() {
675
+ return {};
676
+ }
677
+ setTransactionContext(_, callback) {
678
+ callback();
679
+ }
680
+ };
681
+ var NOOP_TRANSACTION_CONTEXT_PROPAGATOR = new NoopTransactionContextPropagator();
682
+
677
683
  // ../shared/src/type-guards.ts
678
684
  function isString(value) {
679
685
  return typeof value === "string";
@@ -688,9 +694,15 @@ function objectOrUndefined(value) {
688
694
  return isObject(value) ? value : void 0;
689
695
  }
690
696
 
697
+ // ../shared/src/filter.ts
698
+ function isDefined(input) {
699
+ return typeof input !== "undefined" && input !== null;
700
+ }
701
+
691
702
  // ../shared/src/open-feature.ts
692
703
  var OpenFeatureCommonAPI = class {
693
704
  constructor() {
705
+ this._hooks = [];
694
706
  this._transactionContextPropagator = NOOP_TRANSACTION_CONTEXT_PROPAGATOR;
695
707
  this._context = {};
696
708
  this._logger = new DefaultLogger();
@@ -699,6 +711,17 @@ var OpenFeatureCommonAPI = class {
699
711
  this._clientProviders = /* @__PURE__ */ new Map();
700
712
  this._clientEvents = /* @__PURE__ */ new Map();
701
713
  }
714
+ addHooks(...hooks) {
715
+ this._hooks = [...this._hooks, ...hooks];
716
+ return this;
717
+ }
718
+ getHooks() {
719
+ return this._hooks;
720
+ }
721
+ clearHooks() {
722
+ this._hooks = [];
723
+ return this;
724
+ }
702
725
  setLogger(logger) {
703
726
  this._logger = new SafeLogger(logger);
704
727
  return this;
@@ -710,9 +733,6 @@ var OpenFeatureCommonAPI = class {
710
733
  get providerMetadata() {
711
734
  return this._defaultProvider.metadata;
712
735
  }
713
- getContext() {
714
- return this._context;
715
- }
716
736
  /**
717
737
  * Adds a handler for the given provider event type.
718
738
  * The handlers are called in the order they have been added.
@@ -750,19 +770,25 @@ var OpenFeatureCommonAPI = class {
750
770
  if (oldProvider === provider) {
751
771
  return this;
752
772
  }
753
- const clientEmitter = this.getAndCacheEventEmitterForClient(clientName);
773
+ const emitters = clientName ? [this.getAndCacheEventEmitterForClient(clientName)] : this.getUnboundEmitters();
754
774
  if (typeof provider.initialize === "function") {
755
775
  (_d = (_c = (_b = provider.initialize) == null ? void 0 : _b.call(provider, this._context)) == null ? void 0 : _c.then(() => {
756
776
  var _a2;
757
- clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
777
+ emitters.forEach((emitter) => {
778
+ emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
779
+ });
758
780
  (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_READY" /* Ready */, { clientName });
759
781
  })) == null ? void 0 : _d.catch((error) => {
760
782
  var _a2;
761
- clientEmitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
783
+ emitters.forEach((emitter) => {
784
+ emitter == null ? void 0 : emitter.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
785
+ });
762
786
  (_a2 = this._events) == null ? void 0 : _a2.emit("PROVIDER_ERROR" /* Error */, { clientName, message: error.message });
763
787
  });
764
788
  } else {
765
- clientEmitter.emit("PROVIDER_READY" /* Ready */, { clientName });
789
+ emitters.forEach((emitter) => {
790
+ emitter == null ? void 0 : emitter.emit("PROVIDER_READY" /* Ready */, { clientName });
791
+ });
766
792
  (_e = this._events) == null ? void 0 : _e.emit("PROVIDER_READY" /* Ready */, { clientName });
767
793
  }
768
794
  if (clientName) {
@@ -770,7 +796,7 @@ var OpenFeatureCommonAPI = class {
770
796
  } else {
771
797
  this._defaultProvider = provider;
772
798
  }
773
- this.transferListeners(oldProvider, provider, clientName, clientEmitter);
799
+ this.transferListeners(oldProvider, provider, clientName, emitters);
774
800
  if (![...this._clientProviders.values(), this._defaultProvider].includes(oldProvider)) {
775
801
  (_f = oldProvider == null ? void 0 : oldProvider.onClose) == null ? void 0 : _f.call(oldProvider);
776
802
  }
@@ -801,7 +827,18 @@ var OpenFeatureCommonAPI = class {
801
827
  );
802
828
  return newEmitter;
803
829
  }
804
- transferListeners(oldProvider, newProvider, clientName, clientEmitter) {
830
+ getUnboundEmitters() {
831
+ const namedProviders = [...this._clientProviders.keys()];
832
+ const eventEmitterNames = [...this._clientEvents.keys()].filter(isDefined);
833
+ const unboundEmitterNames = eventEmitterNames.filter((name) => !namedProviders.includes(name));
834
+ return [
835
+ // all unbound, named emitters
836
+ ...unboundEmitterNames.map((name) => this._clientEvents.get(name)),
837
+ // the default emitter
838
+ this._clientEvents.get(void 0)
839
+ ].filter(isDefined);
840
+ }
841
+ transferListeners(oldProvider, newProvider, clientName, emitters) {
805
842
  var _a;
806
843
  (_a = this._clientEventHandlers.get(clientName)) == null ? void 0 : _a.forEach((eventHandler) => {
807
844
  var _a2;
@@ -810,7 +847,9 @@ var OpenFeatureCommonAPI = class {
810
847
  const newClientHandlers = Object.values(ProviderEvents).map(
811
848
  (eventType) => {
812
849
  const handler = (details) => __async(this, null, function* () {
813
- clientEmitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
850
+ emitters.forEach((emitter) => {
851
+ emitter == null ? void 0 : emitter.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
852
+ });
814
853
  this._events.emit(eventType, __spreadProps(__spreadValues({}, details), { clientName }));
815
854
  });
816
855
  return [eventType, handler];
@@ -873,7 +912,7 @@ var OpenFeatureCommonAPI = class {
873
912
  }
874
913
  };
875
914
 
876
- // src/no-op-provider.ts
915
+ // src/provider/no-op-provider.ts
877
916
  var REASON_NO_OP = "No-op";
878
917
  var NoopFeatureProvider = class {
879
918
  constructor() {
@@ -912,7 +951,6 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
912
951
  // eslint-disable-next-line @typescript-eslint/no-empty-function
913
952
  constructor() {
914
953
  super();
915
- this._hooks = [];
916
954
  this._defaultProvider = NOOP_PROVIDER;
917
955
  }
918
956
  /**
@@ -929,21 +967,6 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
929
967
  _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;
930
968
  return instance;
931
969
  }
932
- setLogger(logger) {
933
- this._logger = new SafeLogger(logger);
934
- return this;
935
- }
936
- addHooks(...hooks) {
937
- this._hooks = [...this._hooks, ...hooks];
938
- return this;
939
- }
940
- getHooks() {
941
- return this._hooks;
942
- }
943
- clearHooks() {
944
- this._hooks = [];
945
- return this;
946
- }
947
970
  setContext(context) {
948
971
  return __async(this, null, function* () {
949
972
  var _a, _b;
@@ -952,6 +975,9 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
952
975
  yield (_b = (_a = this._defaultProvider) == null ? void 0 : _a.onContextChange) == null ? void 0 : _b.call(_a, oldContext, context);
953
976
  });
954
977
  }
978
+ getContext() {
979
+ return this._context;
980
+ }
955
981
  /**
956
982
  * A factory function for creating new named OpenFeature clients. Clients can contain
957
983
  * their own state (e.g. logger, hook, context). Multiple clients can be used
@@ -976,7 +1002,7 @@ var OpenFeatureAPI = class extends OpenFeatureCommonAPI {
976
1002
  };
977
1003
  var OpenFeature = OpenFeatureAPI.getInstance();
978
1004
 
979
- // src/client.ts
1005
+ // src/client/open-feature-client.ts
980
1006
  var OpenFeatureClient = class {
981
1007
  constructor(providerAccessor, emitterAccessor, globalLogger, options) {
982
1008
  this.providerAccessor = providerAccessor;
@@ -1162,6 +1188,7 @@ export {
1162
1188
  FlagNotFoundError,
1163
1189
  GeneralError,
1164
1190
  InvalidContextError,
1191
+ LOG_LEVELS,
1165
1192
  NOOP_PROVIDER,
1166
1193
  NOOP_TRANSACTION_CONTEXT_PROPAGATOR,
1167
1194
  OpenFeature,
@@ -1176,6 +1203,10 @@ export {
1176
1203
  SafeLogger,
1177
1204
  StandardResolutionReasons,
1178
1205
  TargetingKeyMissingError,
1179
- TypeMismatchError
1206
+ TypeMismatchError,
1207
+ isObject,
1208
+ isString,
1209
+ objectOrUndefined,
1210
+ stringOrUndefined
1180
1211
  };
1181
1212
  //# sourceMappingURL=index.js.map