@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 +97 -66
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +97 -66
- package/dist/esm/index.js.map +4 -4
- package/dist/types.d.ts +295 -276
- package/package.json +1 -1
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/
|
|
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/
|
|
592
|
-
var
|
|
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/
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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;
|