@openfeature/web-sdk 0.4.8 → 0.4.9
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/README.md +2 -2
- package/dist/cjs/index.js +72 -58
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/index.js +43 -30
- package/dist/esm/index.js.map +4 -4
- package/dist/types.d.ts +100 -53
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
<img alt="Specification" src="https://img.shields.io/static/v1?label=specification&message=v0.7.0&color=yellow&style=for-the-badge" />
|
|
17
17
|
</a>
|
|
18
18
|
<!-- x-release-please-start-version -->
|
|
19
|
-
<a href="https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v0.4.
|
|
20
|
-
<img alt="Release" src="https://img.shields.io/static/v1?label=release&message=v0.4.
|
|
19
|
+
<a href="https://github.com/open-feature/js-sdk/releases/tag/web-sdk-v0.4.9">
|
|
20
|
+
<img alt="Release" src="https://img.shields.io/static/v1?label=release&message=v0.4.9&color=blue&style=for-the-badge" />
|
|
21
21
|
</a>
|
|
22
22
|
<!-- x-release-please-end -->
|
|
23
23
|
<br/>
|
package/dist/cjs/index.js
CHANGED
|
@@ -450,18 +450,36 @@ __export(src_exports, {
|
|
|
450
450
|
OpenFeature: () => OpenFeature,
|
|
451
451
|
OpenFeatureAPI: () => OpenFeatureAPI,
|
|
452
452
|
OpenFeatureClient: () => OpenFeatureClient,
|
|
453
|
-
OpenFeatureEventEmitter: () => OpenFeatureEventEmitter
|
|
453
|
+
OpenFeatureEventEmitter: () => OpenFeatureEventEmitter,
|
|
454
|
+
ProviderEvents: () => import_core2.ClientProviderEvents
|
|
454
455
|
});
|
|
455
456
|
module.exports = __toCommonJS(src_exports);
|
|
456
457
|
|
|
457
458
|
// src/client/open-feature-client.ts
|
|
458
|
-
var
|
|
459
|
+
var import_core7 = require("@openfeature/core");
|
|
459
460
|
|
|
460
461
|
// src/open-feature.ts
|
|
461
|
-
var
|
|
462
|
+
var import_core6 = require("@openfeature/core");
|
|
462
463
|
|
|
463
|
-
// src/
|
|
464
|
+
// src/events/open-feature-event-emitter.ts
|
|
464
465
|
var import_core = require("@openfeature/core");
|
|
466
|
+
var import_events = __toESM(require_events());
|
|
467
|
+
var OpenFeatureEventEmitter = class extends import_core.GenericEventEmitter {
|
|
468
|
+
constructor() {
|
|
469
|
+
super();
|
|
470
|
+
this.eventEmitter = new import_events.default({ captureRejections: true });
|
|
471
|
+
this.eventEmitter.on("error", (err) => {
|
|
472
|
+
var _a;
|
|
473
|
+
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
// src/events/events.ts
|
|
479
|
+
var import_core2 = require("@openfeature/core");
|
|
480
|
+
|
|
481
|
+
// src/provider/no-op-provider.ts
|
|
482
|
+
var import_core3 = require("@openfeature/core");
|
|
465
483
|
var REASON_NO_OP = "No-op";
|
|
466
484
|
var NoopFeatureProvider = class {
|
|
467
485
|
constructor() {
|
|
@@ -470,7 +488,7 @@ var NoopFeatureProvider = class {
|
|
|
470
488
|
};
|
|
471
489
|
}
|
|
472
490
|
get status() {
|
|
473
|
-
return
|
|
491
|
+
return import_core3.ProviderStatus.NOT_READY;
|
|
474
492
|
}
|
|
475
493
|
resolveBooleanEvaluation(_, defaultValue) {
|
|
476
494
|
return this.noOp(defaultValue);
|
|
@@ -494,30 +512,16 @@ var NoopFeatureProvider = class {
|
|
|
494
512
|
var NOOP_PROVIDER = new NoopFeatureProvider();
|
|
495
513
|
|
|
496
514
|
// src/provider/in-memory-provider/in-memory-provider.ts
|
|
497
|
-
var
|
|
498
|
-
|
|
499
|
-
// src/events/open-feature-event-emitter.ts
|
|
500
|
-
var import_core2 = require("@openfeature/core");
|
|
501
|
-
var import_events = __toESM(require_events());
|
|
502
|
-
var OpenFeatureEventEmitter = class extends import_core2.GenericEventEmitter {
|
|
503
|
-
constructor() {
|
|
504
|
-
super();
|
|
505
|
-
this.eventEmitter = new import_events.default({ captureRejections: true });
|
|
506
|
-
this.eventEmitter.on("error", (err) => {
|
|
507
|
-
var _a;
|
|
508
|
-
(_a = this._logger) == null ? void 0 : _a.error("Error running event handler:", err);
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
};
|
|
515
|
+
var import_core5 = require("@openfeature/core");
|
|
512
516
|
|
|
513
517
|
// src/provider/in-memory-provider/variant-not-found-error.ts
|
|
514
|
-
var
|
|
515
|
-
var VariantNotFoundError = class extends
|
|
518
|
+
var import_core4 = require("@openfeature/core");
|
|
519
|
+
var VariantNotFoundError = class extends import_core4.OpenFeatureError {
|
|
516
520
|
constructor(message) {
|
|
517
521
|
super(message);
|
|
518
522
|
Object.setPrototypeOf(this, VariantNotFoundError.prototype);
|
|
519
523
|
this.name = "VariantNotFoundError";
|
|
520
|
-
this.code =
|
|
524
|
+
this.code = import_core4.ErrorCode.GENERAL;
|
|
521
525
|
}
|
|
522
526
|
};
|
|
523
527
|
|
|
@@ -526,7 +530,7 @@ var InMemoryProvider = class {
|
|
|
526
530
|
constructor(flagConfiguration = {}) {
|
|
527
531
|
this.events = new OpenFeatureEventEmitter();
|
|
528
532
|
this.runsOn = "client";
|
|
529
|
-
this.status =
|
|
533
|
+
this.status = import_core5.ProviderStatus.NOT_READY;
|
|
530
534
|
this.metadata = {
|
|
531
535
|
name: "in-memory"
|
|
532
536
|
};
|
|
@@ -539,9 +543,9 @@ var InMemoryProvider = class {
|
|
|
539
543
|
this.resolveFlagWithReason(key, context);
|
|
540
544
|
}
|
|
541
545
|
this._context = context;
|
|
542
|
-
this.status =
|
|
546
|
+
this.status = import_core5.ProviderStatus.READY;
|
|
543
547
|
} catch (error) {
|
|
544
|
-
this.status =
|
|
548
|
+
this.status = import_core5.ProviderStatus.ERROR;
|
|
545
549
|
throw error;
|
|
546
550
|
}
|
|
547
551
|
});
|
|
@@ -553,15 +557,15 @@ var InMemoryProvider = class {
|
|
|
553
557
|
putConfiguration(flagConfiguration) {
|
|
554
558
|
return __async(this, null, function* () {
|
|
555
559
|
const flagsChanged = Object.entries(flagConfiguration).filter(([key, value]) => this._flagConfiguration[key] !== value).map(([key]) => key);
|
|
556
|
-
this.status =
|
|
557
|
-
this.events.emit(
|
|
560
|
+
this.status = import_core5.ProviderStatus.STALE;
|
|
561
|
+
this.events.emit(import_core2.ClientProviderEvents.Stale);
|
|
558
562
|
this._flagConfiguration = __spreadValues({}, flagConfiguration);
|
|
559
|
-
this.events.emit(
|
|
563
|
+
this.events.emit(import_core2.ClientProviderEvents.ConfigurationChanged, { flagsChanged });
|
|
560
564
|
try {
|
|
561
565
|
yield this.initialize(this._context);
|
|
562
|
-
this.events.emit(
|
|
566
|
+
this.events.emit(import_core2.ClientProviderEvents.Ready);
|
|
563
567
|
} catch (err) {
|
|
564
|
-
this.events.emit(
|
|
568
|
+
this.events.emit(import_core2.ClientProviderEvents.Error);
|
|
565
569
|
throw err;
|
|
566
570
|
}
|
|
567
571
|
});
|
|
@@ -582,10 +586,10 @@ var InMemoryProvider = class {
|
|
|
582
586
|
if (!(flagKey in this._flagConfiguration)) {
|
|
583
587
|
const message = `no flag found with key ${flagKey}`;
|
|
584
588
|
logger == null ? void 0 : logger.debug(message);
|
|
585
|
-
throw new
|
|
589
|
+
throw new import_core5.FlagNotFoundError(message);
|
|
586
590
|
}
|
|
587
591
|
if (this._flagConfiguration[flagKey].disabled) {
|
|
588
|
-
return { value: defaultValue, reason:
|
|
592
|
+
return { value: defaultValue, reason: import_core5.StandardResolutionReasons.DISABLED };
|
|
589
593
|
}
|
|
590
594
|
const resolvedFlag = this.resolveFlagWithReason(flagKey, context);
|
|
591
595
|
if (resolvedFlag.value === void 0) {
|
|
@@ -594,7 +598,7 @@ var InMemoryProvider = class {
|
|
|
594
598
|
throw new VariantNotFoundError(message);
|
|
595
599
|
}
|
|
596
600
|
if (typeof resolvedFlag.value != typeof defaultValue) {
|
|
597
|
-
throw new
|
|
601
|
+
throw new import_core5.TypeMismatchError();
|
|
598
602
|
}
|
|
599
603
|
return resolvedFlag;
|
|
600
604
|
}
|
|
@@ -603,8 +607,8 @@ var InMemoryProvider = class {
|
|
|
603
607
|
const resolutionResult = this.lookupFlagValue(flagKey, ctx);
|
|
604
608
|
return resolutionResult;
|
|
605
609
|
} catch (error) {
|
|
606
|
-
if (!(error instanceof
|
|
607
|
-
throw new
|
|
610
|
+
if (!(error instanceof import_core5.OpenFeatureError)) {
|
|
611
|
+
throw new import_core5.GeneralError((error == null ? void 0 : error.message) || "unknown error");
|
|
608
612
|
}
|
|
609
613
|
throw error;
|
|
610
614
|
}
|
|
@@ -615,8 +619,8 @@ var InMemoryProvider = class {
|
|
|
615
619
|
const isContextEval = ctx && (flagSpec == null ? void 0 : flagSpec.contextEvaluator);
|
|
616
620
|
const variant = isContextEval ? (_a = flagSpec.contextEvaluator) == null ? void 0 : _a.call(flagSpec, ctx) : flagSpec.defaultVariant;
|
|
617
621
|
const value = variant && (flagSpec == null ? void 0 : flagSpec.variants[variant]);
|
|
618
|
-
const evalReason = isContextEval ?
|
|
619
|
-
const reason = this.status ===
|
|
622
|
+
const evalReason = isContextEval ? import_core5.StandardResolutionReasons.TARGETING_MATCH : import_core5.StandardResolutionReasons.STATIC;
|
|
623
|
+
const reason = this.status === import_core5.ProviderStatus.STALE ? import_core5.StandardResolutionReasons.CACHED : evalReason;
|
|
620
624
|
return __spreadProps(__spreadValues({
|
|
621
625
|
value
|
|
622
626
|
}, variant && { variant }), {
|
|
@@ -628,7 +632,7 @@ var InMemoryProvider = class {
|
|
|
628
632
|
// src/open-feature.ts
|
|
629
633
|
var GLOBAL_OPENFEATURE_API_KEY = Symbol.for("@openfeature/web-sdk/api");
|
|
630
634
|
var _globalThis = globalThis;
|
|
631
|
-
var OpenFeatureAPI = class extends
|
|
635
|
+
var OpenFeatureAPI = class extends import_core6.OpenFeatureCommonAPI {
|
|
632
636
|
constructor() {
|
|
633
637
|
super("client");
|
|
634
638
|
this._events = new OpenFeatureEventEmitter();
|
|
@@ -653,14 +657,14 @@ var OpenFeatureAPI = class extends import_core5.OpenFeatureCommonAPI {
|
|
|
653
657
|
setContext(nameOrContext, contextOrUndefined) {
|
|
654
658
|
return __async(this, null, function* () {
|
|
655
659
|
var _a, _b;
|
|
656
|
-
const clientName = (0,
|
|
657
|
-
const context = (_b = (_a = (0,
|
|
660
|
+
const clientName = (0, import_core6.stringOrUndefined)(nameOrContext);
|
|
661
|
+
const context = (_b = (_a = (0, import_core6.objectOrUndefined)(nameOrContext)) != null ? _a : (0, import_core6.objectOrUndefined)(contextOrUndefined)) != null ? _b : {};
|
|
658
662
|
if (clientName) {
|
|
659
663
|
const provider = this._clientProviders.get(clientName);
|
|
660
664
|
if (provider) {
|
|
661
665
|
const oldContext = this.getContext(clientName);
|
|
662
666
|
this._namedProviderContext.set(clientName, context);
|
|
663
|
-
yield this.runProviderContextChangeHandler(provider, oldContext, context);
|
|
667
|
+
yield this.runProviderContextChangeHandler(clientName, provider, oldContext, context);
|
|
664
668
|
} else {
|
|
665
669
|
this._namedProviderContext.set(clientName, context);
|
|
666
670
|
}
|
|
@@ -673,13 +677,13 @@ var OpenFeatureAPI = class extends import_core5.OpenFeatureCommonAPI {
|
|
|
673
677
|
}, []);
|
|
674
678
|
const allProviders = [this._defaultProvider, ...providersWithoutContextOverride];
|
|
675
679
|
yield Promise.all(
|
|
676
|
-
allProviders.map((provider) => this.runProviderContextChangeHandler(provider, oldContext, context))
|
|
680
|
+
allProviders.map((provider) => this.runProviderContextChangeHandler(void 0, provider, oldContext, context))
|
|
677
681
|
);
|
|
678
682
|
}
|
|
679
683
|
});
|
|
680
684
|
}
|
|
681
685
|
getContext(nameOrUndefined) {
|
|
682
|
-
const clientName = (0,
|
|
686
|
+
const clientName = (0, import_core6.stringOrUndefined)(nameOrUndefined);
|
|
683
687
|
if (clientName) {
|
|
684
688
|
const context = this._namedProviderContext.get(clientName);
|
|
685
689
|
if (context) {
|
|
@@ -692,14 +696,14 @@ var OpenFeatureAPI = class extends import_core5.OpenFeatureCommonAPI {
|
|
|
692
696
|
}
|
|
693
697
|
clearContext(nameOrUndefined) {
|
|
694
698
|
return __async(this, null, function* () {
|
|
695
|
-
const clientName = (0,
|
|
699
|
+
const clientName = (0, import_core6.stringOrUndefined)(nameOrUndefined);
|
|
696
700
|
if (clientName) {
|
|
697
701
|
const provider = this._clientProviders.get(clientName);
|
|
698
702
|
if (provider) {
|
|
699
703
|
const oldContext = this.getContext(clientName);
|
|
700
704
|
this._namedProviderContext.delete(clientName);
|
|
701
705
|
const newContext = this.getContext();
|
|
702
|
-
yield this.runProviderContextChangeHandler(provider, oldContext, newContext);
|
|
706
|
+
yield this.runProviderContextChangeHandler(clientName, provider, oldContext, newContext);
|
|
703
707
|
} else {
|
|
704
708
|
this._namedProviderContext.delete(clientName);
|
|
705
709
|
}
|
|
@@ -749,14 +753,24 @@ var OpenFeatureAPI = class extends import_core5.OpenFeatureCommonAPI {
|
|
|
749
753
|
this._namedProviderContext.clear();
|
|
750
754
|
});
|
|
751
755
|
}
|
|
752
|
-
runProviderContextChangeHandler(provider, oldContext, newContext) {
|
|
756
|
+
runProviderContextChangeHandler(clientName, provider, oldContext, newContext) {
|
|
753
757
|
return __async(this, null, function* () {
|
|
754
|
-
var _a
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
758
|
+
var _a;
|
|
759
|
+
const providerName = provider.metadata.name;
|
|
760
|
+
return (_a = provider.onContextChange) == null ? void 0 : _a.call(provider, oldContext, newContext).then(() => {
|
|
761
|
+
var _a2;
|
|
762
|
+
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
763
|
+
emitter == null ? void 0 : emitter.emit(import_core2.ClientProviderEvents.ContextChanged, { clientName, providerName });
|
|
764
|
+
});
|
|
765
|
+
(_a2 = this._events) == null ? void 0 : _a2.emit(import_core2.ClientProviderEvents.ContextChanged, { clientName, providerName });
|
|
766
|
+
}).catch((err) => {
|
|
767
|
+
var _a2, _b;
|
|
768
|
+
(_a2 = this._logger) == null ? void 0 : _a2.error(`Error running ${provider.metadata.name}'s context change handler:`, err);
|
|
769
|
+
this.getAssociatedEventEmitters(clientName).forEach((emitter) => {
|
|
770
|
+
emitter == null ? void 0 : emitter.emit(import_core2.ClientProviderEvents.Error, { clientName, providerName, message: err == null ? void 0 : err.message });
|
|
771
|
+
});
|
|
772
|
+
(_b = this._events) == null ? void 0 : _b.emit(import_core2.ClientProviderEvents.Error, { clientName, providerName, message: err == null ? void 0 : err.message });
|
|
773
|
+
});
|
|
760
774
|
});
|
|
761
775
|
}
|
|
762
776
|
};
|
|
@@ -780,12 +794,12 @@ var OpenFeatureClient = class {
|
|
|
780
794
|
}
|
|
781
795
|
get providerStatus() {
|
|
782
796
|
var _a;
|
|
783
|
-
return ((_a = this.providerAccessor()) == null ? void 0 : _a.status) ||
|
|
797
|
+
return ((_a = this.providerAccessor()) == null ? void 0 : _a.status) || import_core7.ProviderStatus.READY;
|
|
784
798
|
}
|
|
785
799
|
addHandler(eventType, handler) {
|
|
786
800
|
var _a;
|
|
787
801
|
this.emitterAccessor().addHandler(eventType, handler);
|
|
788
|
-
const shouldRunNow = (0,
|
|
802
|
+
const shouldRunNow = (0, import_core7.statusMatchesEvent)(eventType, this._provider.status);
|
|
789
803
|
if (shouldRunNow) {
|
|
790
804
|
try {
|
|
791
805
|
handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });
|
|
@@ -801,7 +815,7 @@ var OpenFeatureClient = class {
|
|
|
801
815
|
return this.emitterAccessor().getHandlers(eventType);
|
|
802
816
|
}
|
|
803
817
|
setLogger(logger) {
|
|
804
|
-
this._clientLogger = new
|
|
818
|
+
this._clientLogger = new import_core7.SafeLogger(logger);
|
|
805
819
|
return this;
|
|
806
820
|
}
|
|
807
821
|
addHooks(...hooks) {
|
|
@@ -883,13 +897,13 @@ var OpenFeatureClient = class {
|
|
|
883
897
|
return evaluationDetails;
|
|
884
898
|
} catch (err) {
|
|
885
899
|
const errorMessage = err == null ? void 0 : err.message;
|
|
886
|
-
const errorCode = (err == null ? void 0 : err.code) ||
|
|
900
|
+
const errorCode = (err == null ? void 0 : err.code) || import_core7.ErrorCode.GENERAL;
|
|
887
901
|
this.errorHooks(allHooksReversed, hookContext, err, options);
|
|
888
902
|
return {
|
|
889
903
|
errorCode,
|
|
890
904
|
errorMessage,
|
|
891
905
|
value: defaultValue,
|
|
892
|
-
reason:
|
|
906
|
+
reason: import_core7.StandardResolutionReasons.ERROR,
|
|
893
907
|
flagMetadata: Object.freeze({}),
|
|
894
908
|
flagKey
|
|
895
909
|
};
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../node_modules/events/events.js", "../../src/index.ts", "../../src/client/open-feature-client.ts", "../../src/open-feature.ts", "../../src/
|
|
4
|
-
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from './events';\nexport * from './hooks';\nexport * from '@openfeature/core';\n", "import {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n ProviderEvents,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n statusMatchesEvent\n} from '@openfeature/core';\nimport { FlagEvaluationOptions } from '../evaluation';\nimport { InternalEventEmitter } from '../events/internal/internal-event-emitter';\nimport { Hook } from '../hooks';\nimport { OpenFeature } from '../open-feature';\nimport { Provider } from '../provider';\nimport { Client } from './client';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\nexport class OpenFeatureClient implements Client {\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n\n constructor(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n private readonly providerAccessor: () => Provider,\n private readonly emitterAccessor: () => InternalEventEmitter,\n private readonly globalLogger: () => Logger,\n private readonly options: OpenFeatureClientOptions,\n ) {}\n\n get metadata(): ClientMetadata {\n return {\n name: this.options.name,\n version: this.options.version,\n providerMetadata: this.providerAccessor().metadata,\n };\n }\n\n get providerStatus(): ProviderStatus {\n return this.providerAccessor()?.status || ProviderStatus.READY;\n }\n\n addHandler<T extends ProviderEvents>(eventType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const shouldRunNow = statusMatchesEvent(eventType, this._provider.status);\n\n if (shouldRunNow) {\n // run immediately, we're in the matching state\n try {\n handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler<T extends ProviderEvents>(notificationType: T, handler: EventHandler<T>): void {\n this.emitterAccessor().removeHandler(notificationType, handler);\n }\n\n getHandlers(eventType: ProviderEvents) {\n return this.emitterAccessor().getHandlers(eventType);\n }\n\n setLogger(logger: Logger): this {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(flagKey, this._provider.resolveBooleanEvaluation, defaultValue, 'boolean', options);\n }\n\n getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getStringDetails<T>(flagKey, defaultValue, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n options,\n );\n }\n\n getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getNumberDetails(flagKey, defaultValue, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n options,\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n options: FlagEvaluationOptions = {},\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n const context = {\n ...OpenFeature.getContext(),\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context,\n logger: this._logger,\n };\n\n try {\n this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagMetadata: Object.freeze(resolution.flagMetadata ?? {}),\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagMetadata: Object.freeze({}),\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n Object.freeze(hookContext);\n Object.freeze(hookContext.context);\n\n for (const hook of hooks) {\n hook?.before?.(hookContext, Object.freeze(options.hookHints));\n }\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions,\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n}\n", "import {\n EvaluationContext,\n ManageContext,\n OpenFeatureCommonAPI,\n objectOrUndefined,\n stringOrUndefined,\n} from '@openfeature/core';\nimport { Client, OpenFeatureClient } from './client';\nimport { NOOP_PROVIDER, Provider } from './provider';\nimport { OpenFeatureEventEmitter } from './events';\nimport { Hook } from './hooks';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/web-sdk/api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implements ManageContext<Promise<void>> {\n protected _events = new OpenFeatureEventEmitter();\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n protected _createEventEmitter = () => new OpenFeatureEventEmitter();\n protected _namedProviderContext: Map<string, EvaluationContext> = new Map();\n\n private constructor() {\n super('client');\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Sets the evaluation context globally.\n * This will be used by all providers that have not been overridden with a named client.\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext({ region: \"us\" });\n */\n async setContext(context: EvaluationContext): Promise<void>;\n /**\n * Sets the evaluation context for a specific provider.\n * This will only affect providers with a matching client name.\n * @param {string} clientName The name to identify the client\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext(\"test\", { scope: \"provider\" });\n * OpenFeature.setProvider(new MyProvider()) // Uses the default context\n * OpenFeature.setProvider(\"test\", new MyProvider()) // Uses context: { scope: \"provider\" }\n */\n async setContext(clientName: string, context: EvaluationContext): Promise<void>;\n async setContext<T extends EvaluationContext>(nameOrContext: T | string, contextOrUndefined?: T): Promise<void> {\n const clientName = stringOrUndefined(nameOrContext);\n const context = objectOrUndefined<T>(nameOrContext) ?? objectOrUndefined(contextOrUndefined) ?? {};\n\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.set(clientName, context);\n await this.runProviderContextChangeHandler(provider, oldContext, context);\n } else {\n this._namedProviderContext.set(clientName, context);\n }\n } else {\n const oldContext = this._context;\n this._context = context;\n\n const providersWithoutContextOverride = Array.from(this._clientProviders.entries())\n .filter(([name]) => !this._namedProviderContext.has(name))\n .reduce<Provider[]>((acc, [, provider]) => {\n acc.push(provider);\n return acc;\n }, []);\n\n const allProviders = [this._defaultProvider, ...providersWithoutContextOverride];\n await Promise.all(\n allProviders.map((provider) => this.runProviderContextChangeHandler(provider, oldContext, context)),\n );\n }\n }\n\n /**\n * Access the global evaluation context.\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n /**\n * Access the evaluation context for a specific named client.\n * The global evaluation context is returned if a matching named client is not found.\n * @param {string} clientName The name to identify the client\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(clientName: string): EvaluationContext;\n getContext(nameOrUndefined?: string): EvaluationContext {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const context = this._namedProviderContext.get(clientName);\n if (context) {\n return context;\n } else {\n this._logger.debug(`Unable to find context for '${clientName}'.`);\n }\n }\n return this._context;\n }\n\n /**\n * Resets the global evaluation context to an empty object.\n */\n clearContext(): Promise<void>;\n /**\n * Removes the evaluation context for a specific named client.\n * @param {string} clientName The name to identify the client\n */\n clearContext(clientName: string): Promise<void>;\n async clearContext(nameOrUndefined?: string): Promise<void> {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.delete(clientName);\n const newContext = this.getContext();\n await this.runProviderContextChangeHandler(provider, oldContext, newContext);\n } else {\n this._namedProviderContext.delete(clientName);\n }\n } else {\n return this.setContext({});\n }\n }\n\n /**\n * Resets the global evaluation context and removes the evaluation context for\n * all named clients.\n */\n async clearContexts(): Promise<void> {\n // Default context must be cleared first to avoid calling the onContextChange\n // handler multiple times for named clients.\n await this.clearContext();\n\n // Use allSettled so a promise rejection doesn't affect others\n await Promise.allSettled(Array.from(this._clientProviders.keys()).map((name) => this.clearContext(name)));\n }\n\n /**\n * A factory function for creating new named OpenFeature clients. Clients can contain\n * their own state (e.g. logger, hook, context). Multiple clients can be used\n * to segment feature flag configuration.\n *\n * If there is already a provider bound to this name via {@link this.setProvider setProvider}, this provider will be used.\n * Otherwise, the default provider is used until a provider is assigned to that name.\n * @param {string} name The name of the client\n * @param {string} version The version of the client (only used for metadata)\n * @returns {Client} OpenFeature Client\n */\n getClient(name?: string, version?: string): Client {\n return new OpenFeatureClient(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n () => this.getProviderForClient(name),\n () => this.buildAndCacheEventEmitterForClient(name),\n () => this._logger,\n { name, version },\n );\n }\n\n /**\n * Clears all registered providers and resets the default provider.\n * @returns {Promise<void>}\n */\n async clearProviders(): Promise<void> {\n await super.clearProvidersAndSetDefault(NOOP_PROVIDER);\n this._namedProviderContext.clear();\n }\n\n private async runProviderContextChangeHandler(\n provider: Provider,\n oldContext: EvaluationContext,\n newContext: EvaluationContext,\n ): Promise<void> {\n try {\n return await provider.onContextChange?.(oldContext, newContext);\n } catch (err) {\n this._logger?.error(`Error running ${provider.metadata.name}'s context change handler:`, err);\n }\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/core';\nimport { Provider } from './provider';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n get status(): ProviderStatus {\n /**\n * This is due to the NoopProvider not being a real provider.\n * We do not want it to trigger the Ready event handlers, so we never set this to ready.\n * With the NoopProvider assigned, the client can be assumed to be uninitialized.\n * https://github.com/open-feature/js-sdk/pull/429#discussion_r1202642654\n */\n return ProviderStatus.NOT_READY;\n }\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import {\n EvaluationContext,\n FlagNotFoundError,\n FlagValueType,\n GeneralError,\n JsonValue,\n Logger,\n OpenFeatureError,\n ProviderEvents,\n ResolutionDetails,\n StandardResolutionReasons,\n TypeMismatchError,\n ProviderStatus,\n} from '@openfeature/core';\nimport { Provider } from '../provider';\nimport { OpenFeatureEventEmitter } from '../../events';\nimport { FlagConfiguration, Flag } from './flag-configuration';\nimport { VariantNotFoundError } from './variant-not-found-error';\n\n/**\n * A simple OpenFeature provider intended for demos and as a test stub.\n */\nexport class InMemoryProvider implements Provider {\n public readonly events = new OpenFeatureEventEmitter();\n public readonly runsOn = 'client';\n status: ProviderStatus = ProviderStatus.NOT_READY;\n readonly metadata = {\n name: 'in-memory',\n } as const;\n private _flagConfiguration: FlagConfiguration;\n private _context: EvaluationContext | undefined;\n\n constructor(flagConfiguration: FlagConfiguration = {}) {\n this._flagConfiguration = { ...flagConfiguration };\n }\n\n async initialize(context?: EvaluationContext | undefined): Promise<void> {\n try {\n\n for (const key in this._flagConfiguration) {\n this.resolveFlagWithReason(key, context);\n }\n\n this._context = context;\n // set the provider's state, but don't emit events manually;\n // the SDK does this based on the resolution/rejection of the init promise\n this.status = ProviderStatus.READY;\n } catch (error) {\n this.status = ProviderStatus.ERROR;\n throw error;\n }\n }\n\n /**\n * Overwrites the configured flags.\n * @param { FlagConfiguration } flagConfiguration new flag configuration\n */\n async putConfiguration(flagConfiguration: FlagConfiguration) {\n const flagsChanged = Object.entries(flagConfiguration)\n .filter(([key, value]) => this._flagConfiguration[key] !== value)\n .map(([key]) => key);\n\n this.status = ProviderStatus.STALE;\n this.events.emit(ProviderEvents.Stale);\n\n this._flagConfiguration = { ...flagConfiguration };\n this.events.emit(ProviderEvents.ConfigurationChanged, { flagsChanged });\n\n try {\n await this.initialize(this._context);\n // we need to emit our own events in this case, since it's not part of the init flow.\n this.events.emit(ProviderEvents.Ready);\n } catch (err) {\n this.events.emit(ProviderEvents.Error);\n throw err;\n }\n }\n\n resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<boolean> {\n return this.resolveAndCheckFlag<boolean>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<number> {\n return this.resolveAndCheckFlag<number>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<string> {\n return this.resolveAndCheckFlag<string>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<T> {\n return this.resolveAndCheckFlag<T>(flagKey, defaultValue, context || this._context, logger);\n }\n\n private resolveAndCheckFlag<T extends JsonValue | FlagValueType>(flagKey: string,\n defaultValue: T, context?: EvaluationContext, logger?: Logger): ResolutionDetails<T> {\n if (!(flagKey in this._flagConfiguration)) {\n const message = `no flag found with key ${flagKey}`;\n logger?.debug(message);\n throw new FlagNotFoundError(message);\n }\n\n if (this._flagConfiguration[flagKey].disabled) {\n return { value: defaultValue, reason: StandardResolutionReasons.DISABLED };\n }\n\n const resolvedFlag = this.resolveFlagWithReason(flagKey, context) as ResolutionDetails<T>;\n\n if (resolvedFlag.value === undefined) {\n const message = `no value associated with variant provided for ${flagKey} found`;\n logger?.error(message);\n throw new VariantNotFoundError(message);\n }\n\n if (typeof resolvedFlag.value != typeof defaultValue) {\n throw new TypeMismatchError();\n }\n\n return resolvedFlag;\n }\n\n private resolveFlagWithReason<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n try {\n const resolutionResult = this.lookupFlagValue<T>(flagKey, ctx);\n\n return resolutionResult;\n } catch (error: unknown) {\n if (!(error instanceof OpenFeatureError)) {\n throw new GeneralError((error as Error)?.message || 'unknown error');\n }\n throw error;\n }\n }\n\n private lookupFlagValue<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n const flagSpec: Flag = this._flagConfiguration[flagKey];\n\n const isContextEval = ctx && flagSpec?.contextEvaluator;\n const variant = isContextEval ? flagSpec.contextEvaluator?.(ctx) : flagSpec.defaultVariant;\n\n const value = variant && flagSpec?.variants[variant];\n\n const evalReason = isContextEval ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.STATIC;\n\n const reason = this.status === ProviderStatus.STALE ? StandardResolutionReasons.CACHED : evalReason;\n\n return {\n value: value as T,\n ...(variant && { variant }),\n reason,\n };\n }\n}\n", "import { GenericEventEmitter } from '@openfeature/core';\nimport EventEmitter from 'events';\n\n/**\n * The OpenFeatureEventEmitter can be used by provider developers to emit\n * events at various parts of the provider lifecycle.\n *\n * NOTE: Ready and error events are automatically emitted by the SDK based on\n * the result of the initialize method.\n */\nexport class OpenFeatureEventEmitter extends GenericEventEmitter {\n protected readonly eventEmitter = new EventEmitter({ captureRejections: true });\n\n constructor() {\n super();\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n}\n", "import { ErrorCode, OpenFeatureError } from '@openfeature/core';\n\n/**\n * A custom error for the in-memory provider.\n * Indicates the resolved or default variant doesn't exist.\n */\nexport class VariantNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, VariantNotFoundError.prototype);\n this.name = 'VariantNotFoundError';\n this.code = ErrorCode.GENERAL;\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,iDAAAA,SAAA;AAAA;AAuBA,QAAI,IAAI,OAAO,YAAY,WAAW,UAAU;AAChD,QAAI,eAAe,KAAK,OAAO,EAAE,UAAU,aACvC,EAAE,QACF,SAASC,cAAa,QAAQ,UAAU,MAAM;AAC9C,aAAO,SAAS,UAAU,MAAM,KAAK,QAAQ,UAAU,IAAI;AAAA,IAC7D;AAEF,QAAI;AACJ,QAAI,KAAK,OAAO,EAAE,YAAY,YAAY;AACxC,uBAAiB,EAAE;AAAA,IACrB,WAAW,OAAO,uBAAuB;AACvC,uBAAiB,SAASC,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM,EACrC,OAAO,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAChD;AAAA,IACF,OAAO;AACL,uBAAiB,SAASA,gBAAe,QAAQ;AAC/C,eAAO,OAAO,oBAAoB,MAAM;AAAA,MAC1C;AAAA,IACF;AAEA,aAAS,mBAAmB,SAAS;AACnC,UAAI,WAAW,QAAQ;AAAM,gBAAQ,KAAK,OAAO;AAAA,IACnD;AAEA,QAAI,cAAc,OAAO,SAAS,SAASC,aAAY,OAAO;AAC5D,aAAO,UAAU;AAAA,IACnB;AAEA,aAASC,gBAAe;AACtB,MAAAA,cAAa,KAAK,KAAK,IAAI;AAAA,IAC7B;AACA,IAAAJ,QAAO,UAAUI;AACjB,IAAAJ,QAAO,QAAQ,OAAO;AAGtB,IAAAI,cAAa,eAAeA;AAE5B,IAAAA,cAAa,UAAU,UAAU;AACjC,IAAAA,cAAa,UAAU,eAAe;AACtC,IAAAA,cAAa,UAAU,gBAAgB;AAIvC,QAAI,sBAAsB;AAE1B,aAAS,cAAc,UAAU;AAC/B,UAAI,OAAO,aAAa,YAAY;AAClC,cAAM,IAAI,UAAU,qEAAqE,OAAO,QAAQ;AAAA,MAC1G;AAAA,IACF;AAEA,WAAO,eAAeA,eAAc,uBAAuB;AAAA,MACzD,YAAY;AAAA,MACZ,KAAK,WAAW;AACd,eAAO;AAAA,MACT;AAAA,MACA,KAAK,SAAS,KAAK;AACjB,YAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,YAAY,GAAG,GAAG;AAC1D,gBAAM,IAAI,WAAW,oGAAoG,MAAM,GAAG;AAAA,QACpI;AACA,8BAAsB;AAAA,MACxB;AAAA,IACF,CAAC;AAED,IAAAA,cAAa,OAAO,WAAW;AAE7B,UAAI,KAAK,YAAY,UACjB,KAAK,YAAY,OAAO,eAAe,IAAI,EAAE,SAAS;AACxD,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AAAA,MACtB;AAEA,WAAK,gBAAgB,KAAK,iBAAiB;AAAA,IAC7C;AAIA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,gBAAgB,GAAG;AACnE,UAAI,OAAO,MAAM,YAAY,IAAI,KAAK,YAAY,CAAC,GAAG;AACpD,cAAM,IAAI,WAAW,kFAAkF,IAAI,GAAG;AAAA,MAChH;AACA,WAAK,gBAAgB;AACrB,aAAO;AAAA,IACT;AAEA,aAAS,iBAAiB,MAAM;AAC9B,UAAI,KAAK,kBAAkB;AACzB,eAAOA,cAAa;AACtB,aAAO,KAAK;AAAA,IACd;AAEA,IAAAA,cAAa,UAAU,kBAAkB,SAAS,kBAAkB;AAClE,aAAO,iBAAiB,IAAI;AAAA,IAC9B;AAEA,IAAAA,cAAa,UAAU,OAAO,SAAS,KAAK,MAAM;AAChD,UAAI,OAAO,CAAC;AACZ,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ;AAAK,aAAK,KAAK,UAAU,CAAC,CAAC;AACjE,UAAI,UAAW,SAAS;AAExB,UAAI,SAAS,KAAK;AAClB,UAAI,WAAW;AACb,kBAAW,WAAW,OAAO,UAAU;AAAA,eAChC,CAAC;AACR,eAAO;AAGT,UAAI,SAAS;AACX,YAAI;AACJ,YAAI,KAAK,SAAS;AAChB,eAAK,KAAK,CAAC;AACb,YAAI,cAAc,OAAO;AAGvB,gBAAM;AAAA,QACR;AAEA,YAAI,MAAM,IAAI,MAAM,sBAAsB,KAAK,OAAO,GAAG,UAAU,MAAM,GAAG;AAC5E,YAAI,UAAU;AACd,cAAM;AAAA,MACR;AAEA,UAAI,UAAU,OAAO,IAAI;AAEzB,UAAI,YAAY;AACd,eAAO;AAET,UAAI,OAAO,YAAY,YAAY;AACjC,qBAAa,SAAS,MAAM,IAAI;AAAA,MAClC,OAAO;AACL,YAAI,MAAM,QAAQ;AAClB,YAAI,YAAY,WAAW,SAAS,GAAG;AACvC,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE;AACzB,uBAAa,UAAU,CAAC,GAAG,MAAM,IAAI;AAAA,MACzC;AAEA,aAAO;AAAA,IACT;AAEA,aAAS,aAAa,QAAQ,MAAM,UAAU,SAAS;AACrD,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,oBAAc,QAAQ;AAEtB,eAAS,OAAO;AAChB,UAAI,WAAW,QAAW;AACxB,iBAAS,OAAO,UAAU,uBAAO,OAAO,IAAI;AAC5C,eAAO,eAAe;AAAA,MACxB,OAAO;AAGL,YAAI,OAAO,gBAAgB,QAAW;AACpC,iBAAO;AAAA,YAAK;AAAA,YAAe;AAAA,YACf,SAAS,WAAW,SAAS,WAAW;AAAA,UAAQ;AAI5D,mBAAS,OAAO;AAAA,QAClB;AACA,mBAAW,OAAO,IAAI;AAAA,MACxB;AAEA,UAAI,aAAa,QAAW;AAE1B,mBAAW,OAAO,IAAI,IAAI;AAC1B,UAAE,OAAO;AAAA,MACX,OAAO;AACL,YAAI,OAAO,aAAa,YAAY;AAElC,qBAAW,OAAO,IAAI,IACpB,UAAU,CAAC,UAAU,QAAQ,IAAI,CAAC,UAAU,QAAQ;AAAA,QAExD,WAAW,SAAS;AAClB,mBAAS,QAAQ,QAAQ;AAAA,QAC3B,OAAO;AACL,mBAAS,KAAK,QAAQ;AAAA,QACxB;AAGA,YAAI,iBAAiB,MAAM;AAC3B,YAAI,IAAI,KAAK,SAAS,SAAS,KAAK,CAAC,SAAS,QAAQ;AACpD,mBAAS,SAAS;AAGlB,cAAI,IAAI,IAAI,MAAM,iDACE,SAAS,SAAS,MAAM,OAAO,IAAI,IAAI,mEAEvB;AACpC,YAAE,OAAO;AACT,YAAE,UAAU;AACZ,YAAE,OAAO;AACT,YAAE,QAAQ,SAAS;AACnB,6BAAmB,CAAC;AAAA,QACtB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,cAAc,SAAS,YAAY,MAAM,UAAU;AACxE,aAAO,aAAa,MAAM,MAAM,UAAU,KAAK;AAAA,IACjD;AAEA,IAAAA,cAAa,UAAU,KAAKA,cAAa,UAAU;AAEnD,IAAAA,cAAa,UAAU,kBACnB,SAAS,gBAAgB,MAAM,UAAU;AACvC,aAAO,aAAa,MAAM,MAAM,UAAU,IAAI;AAAA,IAChD;AAEJ,aAAS,cAAc;AACrB,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,OAAO,eAAe,KAAK,MAAM,KAAK,MAAM;AACjD,aAAK,QAAQ;AACb,YAAI,UAAU,WAAW;AACvB,iBAAO,KAAK,SAAS,KAAK,KAAK,MAAM;AACvC,eAAO,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS;AAAA,MACnD;AAAA,IACF;AAEA,aAAS,UAAU,QAAQ,MAAM,UAAU;AACzC,UAAI,QAAQ,EAAE,OAAO,OAAO,QAAQ,QAAW,QAAgB,MAAY,SAAmB;AAC9F,UAAI,UAAU,YAAY,KAAK,KAAK;AACpC,cAAQ,WAAW;AACnB,YAAM,SAAS;AACf,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,OAAO,SAASC,MAAK,MAAM,UAAU;AAC1D,oBAAc,QAAQ;AACtB,WAAK,GAAG,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC7C,aAAO;AAAA,IACT;AAEA,IAAAD,cAAa,UAAU,sBACnB,SAAS,oBAAoB,MAAM,UAAU;AAC3C,oBAAc,QAAQ;AACtB,WAAK,gBAAgB,MAAM,UAAU,MAAM,MAAM,QAAQ,CAAC;AAC1D,aAAO;AAAA,IACT;AAGJ,IAAAA,cAAa,UAAU,iBACnB,SAAS,eAAe,MAAM,UAAU;AACtC,UAAI,MAAM,QAAQ,UAAU,GAAG;AAE/B,oBAAc,QAAQ;AAEtB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAET,aAAO,OAAO,IAAI;AAClB,UAAI,SAAS;AACX,eAAO;AAET,UAAI,SAAS,YAAY,KAAK,aAAa,UAAU;AACnD,YAAI,EAAE,KAAK,iBAAiB;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AAAA,aAC9B;AACH,iBAAO,OAAO,IAAI;AAClB,cAAI,OAAO;AACT,iBAAK,KAAK,kBAAkB,MAAM,KAAK,YAAY,QAAQ;AAAA,QAC/D;AAAA,MACF,WAAW,OAAO,SAAS,YAAY;AACrC,mBAAW;AAEX,aAAK,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACrC,cAAI,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,EAAE,aAAa,UAAU;AACzD,+BAAmB,KAAK,CAAC,EAAE;AAC3B,uBAAW;AACX;AAAA,UACF;AAAA,QACF;AAEA,YAAI,WAAW;AACb,iBAAO;AAET,YAAI,aAAa;AACf,eAAK,MAAM;AAAA,aACR;AACH,oBAAU,MAAM,QAAQ;AAAA,QAC1B;AAEA,YAAI,KAAK,WAAW;AAClB,iBAAO,IAAI,IAAI,KAAK,CAAC;AAEvB,YAAI,OAAO,mBAAmB;AAC5B,eAAK,KAAK,kBAAkB,MAAM,oBAAoB,QAAQ;AAAA,MAClE;AAEA,aAAO;AAAA,IACT;AAEJ,IAAAA,cAAa,UAAU,MAAMA,cAAa,UAAU;AAEpD,IAAAA,cAAa,UAAU,qBACnB,SAAS,mBAAmB,MAAM;AAChC,UAAI,WAAW,QAAQ;AAEvB,eAAS,KAAK;AACd,UAAI,WAAW;AACb,eAAO;AAGT,UAAI,OAAO,mBAAmB,QAAW;AACvC,YAAI,UAAU,WAAW,GAAG;AAC1B,eAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,eAAK,eAAe;AAAA,QACtB,WAAW,OAAO,IAAI,MAAM,QAAW;AACrC,cAAI,EAAE,KAAK,iBAAiB;AAC1B,iBAAK,UAAU,uBAAO,OAAO,IAAI;AAAA;AAEjC,mBAAO,OAAO,IAAI;AAAA,QACtB;AACA,eAAO;AAAA,MACT;AAGA,UAAI,UAAU,WAAW,GAAG;AAC1B,YAAI,OAAO,OAAO,KAAK,MAAM;AAC7B,YAAI;AACJ,aAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAChC,gBAAM,KAAK,CAAC;AACZ,cAAI,QAAQ;AAAkB;AAC9B,eAAK,mBAAmB,GAAG;AAAA,QAC7B;AACA,aAAK,mBAAmB,gBAAgB;AACxC,aAAK,UAAU,uBAAO,OAAO,IAAI;AACjC,aAAK,eAAe;AACpB,eAAO;AAAA,MACT;AAEA,kBAAY,OAAO,IAAI;AAEvB,UAAI,OAAO,cAAc,YAAY;AACnC,aAAK,eAAe,MAAM,SAAS;AAAA,MACrC,WAAW,cAAc,QAAW;AAElC,aAAK,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,eAAK,eAAe,MAAM,UAAU,CAAC,CAAC;AAAA,QACxC;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEJ,aAAS,WAAW,QAAQ,MAAM,QAAQ;AACxC,UAAI,SAAS,OAAO;AAEpB,UAAI,WAAW;AACb,eAAO,CAAC;AAEV,UAAI,aAAa,OAAO,IAAI;AAC5B,UAAI,eAAe;AACjB,eAAO,CAAC;AAEV,UAAI,OAAO,eAAe;AACxB,eAAO,SAAS,CAAC,WAAW,YAAY,UAAU,IAAI,CAAC,UAAU;AAEnE,aAAO,SACL,gBAAgB,UAAU,IAAI,WAAW,YAAY,WAAW,MAAM;AAAA,IAC1E;AAEA,IAAAA,cAAa,UAAU,YAAY,SAAS,UAAU,MAAM;AAC1D,aAAO,WAAW,MAAM,MAAM,IAAI;AAAA,IACpC;AAEA,IAAAA,cAAa,UAAU,eAAe,SAAS,aAAa,MAAM;AAChE,aAAO,WAAW,MAAM,MAAM,KAAK;AAAA,IACrC;AAEA,IAAAA,cAAa,gBAAgB,SAAS,SAAS,MAAM;AACnD,UAAI,OAAO,QAAQ,kBAAkB,YAAY;AAC/C,eAAO,QAAQ,cAAc,IAAI;AAAA,MACnC,OAAO;AACL,eAAO,cAAc,KAAK,SAAS,IAAI;AAAA,MACzC;AAAA,IACF;AAEA,IAAAA,cAAa,UAAU,gBAAgB;AACvC,aAAS,cAAc,MAAM;AAC3B,UAAI,SAAS,KAAK;AAElB,UAAI,WAAW,QAAW;AACxB,YAAI,aAAa,OAAO,IAAI;AAE5B,YAAI,OAAO,eAAe,YAAY;AACpC,iBAAO;AAAA,QACT,WAAW,eAAe,QAAW;AACnC,iBAAO,WAAW;AAAA,QACpB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,cAAa,UAAU,aAAa,SAAS,aAAa;AACxD,aAAO,KAAK,eAAe,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC;AAAA,IACjE;AAEA,aAAS,WAAW,KAAK,GAAG;AAC1B,UAAI,OAAO,IAAI,MAAM,CAAC;AACtB,eAAS,IAAI,GAAG,IAAI,GAAG,EAAE;AACvB,aAAK,CAAC,IAAI,IAAI,CAAC;AACjB,aAAO;AAAA,IACT;AAEA,aAAS,UAAU,MAAM,OAAO;AAC9B,aAAO,QAAQ,IAAI,KAAK,QAAQ;AAC9B,aAAK,KAAK,IAAI,KAAK,QAAQ,CAAC;AAC9B,WAAK,IAAI;AAAA,IACX;AAEA,aAAS,gBAAgB,KAAK;AAC5B,UAAI,MAAM,IAAI,MAAM,IAAI,MAAM;AAC9B,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,YAAI,CAAC,IAAI,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAEA,aAAS,KAAK,SAAS,MAAM;AAC3B,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAC5C,iBAAS,cAAc,KAAK;AAC1B,kBAAQ,eAAe,MAAM,QAAQ;AACrC,iBAAO,GAAG;AAAA,QACZ;AAEA,iBAAS,WAAW;AAClB,cAAI,OAAO,QAAQ,mBAAmB,YAAY;AAChD,oBAAQ,eAAe,SAAS,aAAa;AAAA,UAC/C;AACA,kBAAQ,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;AAAA,QAClC;AAAC;AAED,uCAA+B,SAAS,MAAM,UAAU,EAAE,MAAM,KAAK,CAAC;AACtE,YAAI,SAAS,SAAS;AACpB,wCAA8B,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,QACtE;AAAA,MACF,CAAC;AAAA,IACH;AAEA,aAAS,8BAA8B,SAAS,SAAS,OAAO;AAC9D,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,uCAA+B,SAAS,SAAS,SAAS,KAAK;AAAA,MACjE;AAAA,IACF;AAEA,aAAS,+BAA+B,SAAS,MAAM,UAAU,OAAO;AACtE,UAAI,OAAO,QAAQ,OAAO,YAAY;AACpC,YAAI,MAAM,MAAM;AACd,kBAAQ,KAAK,MAAM,QAAQ;AAAA,QAC7B,OAAO;AACL,kBAAQ,GAAG,MAAM,QAAQ;AAAA,QAC3B;AAAA,MACF,WAAW,OAAO,QAAQ,qBAAqB,YAAY;AAGzD,gBAAQ,iBAAiB,MAAM,SAAS,aAAa,KAAK;AAGxD,cAAI,MAAM,MAAM;AACd,oBAAQ,oBAAoB,MAAM,YAAY;AAAA,UAChD;AACA,mBAAS,GAAG;AAAA,QACd,CAAC;AAAA,MACH,OAAO;AACL,cAAM,IAAI,UAAU,wEAAwE,OAAO,OAAO;AAAA,MAC5G;AAAA,IACF;AAAA;AAAA;;;AChfA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAE,eAkBO;;;AClBP,IAAAC,eAMO;;;ACNP,kBAA6D;AAG7D,IAAM,eAAe;AAKrB,IAAM,sBAAN,MAA8C;AAAA,EAA9C;AACE,SAAS,WAAW;AAAA,MAClB,MAAM;AAAA,IACR;AAAA;AAAA,EAEA,IAAI,SAAyB;AAO3B,WAAO,2BAAe;AAAA,EACxB;AAAA,EAEA,yBAAyB,GAAW,cAAmD;AACrF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAAwB,GAAW,cAAiD;AAClF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAAwB,GAAW,cAAiD;AAClF,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,wBAA6C,GAAW,cAAuC;AAC7F,WAAO,KAAK,KAAQ,YAAY;AAAA,EAClC;AAAA,EAEQ,KAAQ,cAAiB;AAC/B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB,IAAI,oBAAoB;;;AC/CrD,IAAAC,eAaO;;;ACbP,IAAAC,eAAoC;AACpC,oBAAyB;AASlB,IAAM,0BAAN,cAAsC,iCAAoB;AAAA,EAG/D,cAAc;AACZ,UAAM;AAHR,SAAmB,eAAe,IAAI,cAAAC,QAAa,EAAE,mBAAmB,KAAK,CAAC;AAI5E,SAAK,aAAa,GAAG,SAAS,CAAC,QAAQ;AAf3C;AAgBM,iBAAK,YAAL,mBAAc,MAAM,gCAAgC;AAAA,IACtD,CAAC;AAAA,EACH;AACF;;;ACnBA,IAAAC,eAA4C;AAMrC,IAAM,uBAAN,cAAmC,8BAAiB;AAAA,EAEzD,YAAY,SAAkB;AAC5B,UAAM,OAAO;AACb,WAAO,eAAe,MAAM,qBAAqB,SAAS;AAC1D,SAAK,OAAO;AACZ,SAAK,OAAO,uBAAU;AAAA,EACxB;AACF;;;AFQO,IAAM,mBAAN,MAA2C;AAAA,EAUhD,YAAY,oBAAuC,CAAC,GAAG;AATvD,SAAgB,SAAS,IAAI,wBAAwB;AACrD,SAAgB,SAAS;AACzB,kBAAyB,4BAAe;AACxC,SAAS,WAAW;AAAA,MAClB,MAAM;AAAA,IACR;AAKE,SAAK,qBAAqB,mBAAK;AAAA,EACjC;AAAA,EAEM,WAAW,SAAwD;AAAA;AACvE,UAAI;AAEF,mBAAW,OAAO,KAAK,oBAAoB;AACzC,eAAK,sBAAsB,KAAK,OAAO;AAAA,QACzC;AAEA,aAAK,WAAW;AAGhB,aAAK,SAAS,4BAAe;AAAA,MAC/B,SAAS,OAAP;AACA,aAAK,SAAS,4BAAe;AAC7B,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMM,iBAAiB,mBAAsC;AAAA;AAC3D,YAAM,eAAe,OAAO,QAAQ,iBAAiB,EAClD,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,mBAAmB,GAAG,MAAM,KAAK,EAC/D,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG;AAErB,WAAK,SAAS,4BAAe;AAC7B,WAAK,OAAO,KAAK,4BAAe,KAAK;AAErC,WAAK,qBAAqB,mBAAK;AAC/B,WAAK,OAAO,KAAK,4BAAe,sBAAsB,EAAE,aAAa,CAAC;AAEtE,UAAI;AACF,cAAM,KAAK,WAAW,KAAK,QAAQ;AAEnC,aAAK,OAAO,KAAK,4BAAe,KAAK;AAAA,MACvC,SAAS,KAAP;AACA,aAAK,OAAO,KAAK,4BAAe,KAAK;AACrC,cAAM;AAAA,MACR;AAAA,IACF;AAAA;AAAA,EAEA,yBACE,SACA,cACA,SACA,QAC4B;AAC5B,WAAO,KAAK,oBAA6B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EAClG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QAC2B;AAC3B,WAAO,KAAK,oBAA4B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EACjG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QAC2B;AAC3B,WAAO,KAAK,oBAA4B,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EACjG;AAAA,EAEA,wBACE,SACA,cACA,SACA,QACsB;AACtB,WAAO,KAAK,oBAAuB,SAAS,cAAc,WAAW,KAAK,UAAU,MAAM;AAAA,EAC5F;AAAA,EAEQ,oBAAyD,SAC/D,cAAiB,SAA6B,QAAuC;AACrF,QAAI,EAAE,WAAW,KAAK,qBAAqB;AACzC,YAAM,UAAU,0BAA0B;AAC1C,uCAAQ,MAAM;AACd,YAAM,IAAI,+BAAkB,OAAO;AAAA,IACrC;AAEA,QAAI,KAAK,mBAAmB,OAAO,EAAE,UAAU;AAC7C,aAAO,EAAE,OAAO,cAAc,QAAQ,uCAA0B,SAAS;AAAA,IAC3E;AAEA,UAAM,eAAe,KAAK,sBAAsB,SAAS,OAAO;AAEhE,QAAI,aAAa,UAAU,QAAW;AACpC,YAAM,UAAU,iDAAiD;AACjE,uCAAQ,MAAM;AACd,YAAM,IAAI,qBAAqB,OAAO;AAAA,IACxC;AAEA,QAAI,OAAO,aAAa,SAAS,OAAO,cAAc;AACpD,YAAM,IAAI,+BAAkB;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,sBACN,SACA,KACsB;AACtB,QAAI;AACF,YAAM,mBAAmB,KAAK,gBAAmB,SAAS,GAAG;AAE7D,aAAO;AAAA,IACT,SAAS,OAAP;AACA,UAAI,EAAE,iBAAiB,gCAAmB;AACxC,cAAM,IAAI,2BAAc,+BAAiB,YAAW,eAAe;AAAA,MACrE;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,gBACN,SACA,KACsB;AAhK1B;AAiKI,UAAM,WAAiB,KAAK,mBAAmB,OAAO;AAEtD,UAAM,gBAAgB,QAAO,qCAAU;AACvC,UAAM,UAAU,iBAAgB,cAAS,qBAAT,kCAA4B,OAAO,SAAS;AAE5E,UAAM,QAAQ,YAAW,qCAAU,SAAS;AAE5C,UAAM,aAAa,gBAAgB,uCAA0B,kBAAkB,uCAA0B;AAEzG,UAAM,SAAS,KAAK,WAAW,4BAAe,QAAQ,uCAA0B,SAAS;AAEzF,WAAO;AAAA,MACL;AAAA,OACI,WAAW,EAAE,QAAQ,IAFpB;AAAA,MAGL;AAAA,IACF;AAAA,EACF;AACF;;;AFrKA,IAAM,6BAA6B,OAAO,IAAI,0BAA0B;AAKxE,IAAM,cAAc;AAEb,IAAM,iBAAN,cAA6B,kCAA6E;AAAA,EAMvG,cAAc;AACpB,UAAM,QAAQ;AANhB,SAAU,UAAU,IAAI,wBAAwB;AAChD,SAAU,mBAA6B;AACvC,SAAU,sBAAsB,MAAM,IAAI,wBAAwB;AAClE,SAAU,wBAAwD,oBAAI,IAAI;AAAA,EAI1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cAA8B;AACnC,UAAM,YAAY,YAAY,0BAA0B;AACxD,QAAI,WAAW;AACb,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,IAAI,eAAe;AACpC,gBAAY,0BAA0B,IAAI;AAC1C,WAAO;AAAA,EACT;AAAA,EAqBM,WAAwC,eAA2B,oBAAuC;AAAA;AAjElH;AAkEI,YAAM,iBAAa,gCAAkB,aAAa;AAClD,YAAM,WAAU,+CAAqB,aAAa,MAAlC,gBAAuC,gCAAkB,kBAAkB,MAA3E,YAAgF,CAAC;AAEjG,UAAI,YAAY;AACd,cAAM,WAAW,KAAK,iBAAiB,IAAI,UAAU;AACrD,YAAI,UAAU;AACZ,gBAAM,aAAa,KAAK,WAAW,UAAU;AAC7C,eAAK,sBAAsB,IAAI,YAAY,OAAO;AAClD,gBAAM,KAAK,gCAAgC,UAAU,YAAY,OAAO;AAAA,QAC1E,OAAO;AACL,eAAK,sBAAsB,IAAI,YAAY,OAAO;AAAA,QACpD;AAAA,MACF,OAAO;AACL,cAAM,aAAa,KAAK;AACxB,aAAK,WAAW;AAEhB,cAAM,kCAAkC,MAAM,KAAK,KAAK,iBAAiB,QAAQ,CAAC,EAC/E,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,sBAAsB,IAAI,IAAI,CAAC,EACxD,OAAmB,CAAC,KAAK,CAAC,EAAE,QAAQ,MAAM;AACzC,cAAI,KAAK,QAAQ;AACjB,iBAAO;AAAA,QACT,GAAG,CAAC,CAAC;AAEP,cAAM,eAAe,CAAC,KAAK,kBAAkB,GAAG,+BAA+B;AAC/E,cAAM,QAAQ;AAAA,UACZ,aAAa,IAAI,CAAC,aAAa,KAAK,gCAAgC,UAAU,YAAY,OAAO,CAAC;AAAA,QACpG;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAcA,WAAW,iBAA6C;AACtD,UAAM,iBAAa,gCAAkB,eAAe;AACpD,QAAI,YAAY;AACd,YAAM,UAAU,KAAK,sBAAsB,IAAI,UAAU;AACzD,UAAI,SAAS;AACX,eAAO;AAAA,MACT,OAAO;AACL,aAAK,QAAQ,MAAM,+BAA+B,cAAc;AAAA,MAClE;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAWM,aAAa,iBAAyC;AAAA;AAC1D,YAAM,iBAAa,gCAAkB,eAAe;AACpD,UAAI,YAAY;AACd,cAAM,WAAW,KAAK,iBAAiB,IAAI,UAAU;AACrD,YAAI,UAAU;AACZ,gBAAM,aAAa,KAAK,WAAW,UAAU;AAC7C,eAAK,sBAAsB,OAAO,UAAU;AAC5C,gBAAM,aAAa,KAAK,WAAW;AACnC,gBAAM,KAAK,gCAAgC,UAAU,YAAY,UAAU;AAAA,QAC7E,OAAO;AACL,eAAK,sBAAsB,OAAO,UAAU;AAAA,QAC9C;AAAA,MACF,OAAO;AACL,eAAO,KAAK,WAAW,CAAC,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMM,gBAA+B;AAAA;AAGnC,YAAM,KAAK,aAAa;AAGxB,YAAM,QAAQ,WAAW,MAAM,KAAK,KAAK,iBAAiB,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,CAAC;AAAA,IAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,UAAU,MAAe,SAA0B;AACjD,WAAO,IAAI;AAAA;AAAA;AAAA,MAGT,MAAM,KAAK,qBAAqB,IAAI;AAAA,MACpC,MAAM,KAAK,mCAAmC,IAAI;AAAA,MAClD,MAAM,KAAK;AAAA,MACX,EAAE,MAAM,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMM,iBAAgC;AAAA;AACpC,YAAM,2CAAM,oCAAN,MAAkC,aAAa;AACrD,WAAK,sBAAsB,MAAM;AAAA,IACnC;AAAA;AAAA,EAEc,gCACZ,UACA,YACA,YACe;AAAA;AAnMnB;AAoMI,UAAI;AACF,eAAO,OAAM,cAAS,oBAAT,kCAA2B,YAAY;AAAA,MACtD,SAAS,KAAP;AACA,mBAAK,YAAL,mBAAc,MAAM,iBAAiB,SAAS,SAAS,kCAAkC;AAAA,MAC3F;AAAA,IACF;AAAA;AACF;AAMO,IAAM,cAAc,eAAe,YAAY;;;ADjL/C,IAAM,oBAAN,MAA0C;AAAA,EAI/C,YAGmB,kBACA,iBACA,cACA,SACjB;AAJiB;AACA;AACA;AACA;AATnB,SAAQ,SAAiB,CAAC;AAAA,EAUvB;AAAA,EAEH,IAAI,WAA2B;AAC7B,WAAO;AAAA,MACL,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS,KAAK,QAAQ;AAAA,MACtB,kBAAkB,KAAK,iBAAiB,EAAE;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,IAAI,iBAAiC;AApDvC;AAqDI,aAAO,UAAK,iBAAiB,MAAtB,mBAAyB,WAAU,4BAAe;AAAA,EAC3D;AAAA,EAEA,WAAqC,WAAc,SAAgC;AAxDrF;AAyDI,SAAK,gBAAgB,EAAE,WAAW,WAAW,OAAO;AACpD,UAAM,mBAAe,iCAAmB,WAAW,KAAK,UAAU,MAAM;AAExE,QAAI,cAAc;AAEhB,UAAI;AACF,gBAAQ,EAAE,YAAY,KAAK,SAAS,MAAM,cAAc,KAAK,UAAU,SAAS,KAAK,CAAC;AAAA,MACxF,SAAS,KAAP;AACA,mBAAK,YAAL,mBAAc,MAAM,gCAAgC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAwC,kBAAqB,SAAgC;AAC3F,SAAK,gBAAgB,EAAE,cAAc,kBAAkB,OAAO;AAAA,EAChE;AAAA,EAEA,YAAY,WAA2B;AACrC,WAAO,KAAK,gBAAgB,EAAE,YAAY,SAAS;AAAA,EACrD;AAAA,EAEA,UAAU,QAAsB;AAC9B,SAAK,gBAAgB,IAAI,wBAAW,MAAM;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,OAAqB;AAC/B,SAAK,SAAS,CAAC,GAAG,KAAK,QAAQ,GAAG,KAAK;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAmB;AACjB,SAAK,SAAS,CAAC;AACf,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAAiB,cAAuB,SAA0C;AAChG,WAAO,KAAK,kBAAkB,SAAS,cAAc,OAAO,EAAE;AAAA,EAChE;AAAA,EAEA,kBACE,SACA,cACA,SAC4B;AAC5B,WAAO,KAAK,SAAkB,SAAS,KAAK,UAAU,0BAA0B,cAAc,WAAW,OAAO;AAAA,EAClH;AAAA,EAEA,eAA0C,SAAiB,cAAiB,SAAoC;AAC9G,WAAO,KAAK,iBAAoB,SAAS,cAAc,OAAO,EAAE;AAAA,EAClE;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK;AAAA,MACV;AAAA;AAAA,MAEA,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAA0C,SAAiB,cAAiB,SAAoC;AAC9G,WAAO,KAAK,iBAAiB,SAAS,cAAc,OAAO,EAAE;AAAA,EAC/D;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK;AAAA,MACV;AAAA;AAAA,MAEA,KAAK,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eACE,SACA,cACA,SACG;AACH,WAAO,KAAK,iBAAiB,SAAS,cAAc,OAAO,EAAE;AAAA,EAC/D;AAAA,EAEA,iBACE,SACA,cACA,SACsB;AACtB,WAAO,KAAK,SAAY,SAAS,KAAK,UAAU,yBAAyB,cAAc,UAAU,OAAO;AAAA,EAC1G;AAAA,EAEQ,SACN,SACA,UACA,cACA,UACA,UAAiC,CAAC,GACZ;AAzK1B;AA4KI,UAAM,WAAW;AAAA,MACf,GAAG,YAAY,SAAS;AAAA,MACxB,GAAG,KAAK,SAAS;AAAA,MACjB,GAAI,QAAQ,SAAS,CAAC;AAAA,MACtB,GAAI,KAAK,UAAU,SAAS,CAAC;AAAA,IAC/B;AACA,UAAM,mBAAmB,CAAC,GAAG,QAAQ,EAAE,QAAQ;AAE/C,UAAM,UAAU,mBACX,YAAY,WAAW;AAK5B,UAAM,cAAqC;AAAA,MACzC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,gBAAgB,KAAK;AAAA,MACrB,kBAAkB,YAAY;AAAA,MAC9B;AAAA,MACA,QAAQ,KAAK;AAAA,IACf;AAEA,QAAI;AACF,WAAK,YAAY,UAAU,aAAa,OAAO;AAG/C,YAAM,aAAa,SAAS,KAAK,KAAK,WAAW,SAAS,cAAc,SAAS,KAAK,OAAO;AAE7F,YAAM,oBAAoB,iCACrB,aADqB;AAAA,QAExB,cAAc,OAAO,QAAO,gBAAW,iBAAX,YAA2B,CAAC,CAAC;AAAA,QACzD;AAAA,MACF;AAEA,WAAK,WAAW,kBAAkB,aAAa,mBAAmB,OAAO;AAEzE,aAAO;AAAA,IACT,SAAS,KAAP;AACA,YAAM,eAAwB,2BAAe;AAC7C,YAAM,aAAwB,2BAA0B,SAAQ,uBAAU;AAE1E,WAAK,WAAW,kBAAkB,aAAa,KAAK,OAAO;AAE3D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,QAAQ,uCAA0B;AAAA,QAClC,cAAc,OAAO,OAAO,CAAC,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,aAAa,kBAAkB,aAAa,OAAO;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,YAAY,OAAe,aAA0B,SAAgC;AAtO/F;AAuOI,WAAO,OAAO,WAAW;AACzB,WAAO,OAAO,YAAY,OAAO;AAEjC,eAAW,QAAQ,OAAO;AACxB,yCAAM,WAAN,8BAAe,aAAa,OAAO,OAAO,QAAQ,SAAS;AAAA,IAC7D;AAAA,EACF;AAAA,EAEQ,WACN,OACA,aACA,mBACA,SACA;AApPJ;AAsPI,eAAW,QAAQ,OAAO;AACxB,yCAAM,UAAN,8BAAc,aAAa,mBAAmB,QAAQ;AAAA,IACxD;AAAA,EACF;AAAA,EAEQ,WAAW,OAAe,aAA0B,KAAc,SAAgC;AA3P5G;AA6PI,eAAW,QAAQ,OAAO;AACxB,UAAI;AACF,2CAAM,UAAN,8BAAc,aAAa,KAAK,QAAQ;AAAA,MAC1C,SAASC,MAAP;AACA,aAAK,QAAQ,MAAM,wCAAwCA,MAAK;AAChE,YAAIA,gBAAe,OAAO;AACxB,eAAK,QAAQ,MAAMA,KAAI,KAAK;AAAA,QAC9B;AACA,aAAK,QAAQ,MAAOA,QAAA,gBAAAA,KAAe,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,OAAe,aAA0B,SAAgC;AA1QhG;AA4QI,eAAW,QAAQ,OAAO;AACxB,UAAI;AACF,2CAAM,YAAN,8BAAgB,aAAa,QAAQ;AAAA,MACvC,SAAS,KAAP;AACA,aAAK,QAAQ,MAAM,0CAA0C,KAAK;AAClE,YAAI,eAAe,OAAO;AACxB,eAAK,QAAQ,MAAM,IAAI,KAAK;AAAA,QAC9B;AACA,aAAK,QAAQ,MAAO,2BAAe,KAAK;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAY,YAAsB;AAChC,WAAO,KAAK,iBAAiB;AAAA,EAC/B;AAAA,EAEA,IAAY,UAAU;AACpB,WAAO,KAAK,iBAAiB,KAAK,aAAa;AAAA,EACjD;AACF;;;AD1RA,wBAAc,8BANd;",
|
|
6
|
-
"names": ["module", "ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "import_core", "import_core", "import_core", "import_core", "
|
|
3
|
+
"sources": ["../../../../node_modules/events/events.js", "../../src/index.ts", "../../src/client/open-feature-client.ts", "../../src/open-feature.ts", "../../src/events/open-feature-event-emitter.ts", "../../src/events/events.ts", "../../src/provider/no-op-provider.ts", "../../src/provider/in-memory-provider/in-memory-provider.ts", "../../src/provider/in-memory-provider/variant-not-found-error.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "export * from './client';\nexport * from './provider';\nexport * from './evaluation';\nexport * from './open-feature';\nexport * from './events';\nexport * from './hooks';\nexport * from '@openfeature/core';\n", "import {\n ClientMetadata,\n ErrorCode,\n EvaluationContext,\n EvaluationDetails,\n EventHandler,\n FlagValue,\n FlagValueType,\n HookContext,\n JsonValue,\n Logger,\n OpenFeatureError,\n ProviderStatus,\n ResolutionDetails,\n SafeLogger,\n StandardResolutionReasons,\n statusMatchesEvent\n} from '@openfeature/core';\nimport { FlagEvaluationOptions } from '../evaluation';\nimport { ProviderEvents } from '../events';\nimport { InternalEventEmitter } from '../events/internal/internal-event-emitter';\nimport { Hook } from '../hooks';\nimport { OpenFeature } from '../open-feature';\nimport { Provider } from '../provider';\nimport { Client } from './client';\n\ntype OpenFeatureClientOptions = {\n name?: string;\n version?: string;\n};\n\nexport class OpenFeatureClient implements Client {\n private _hooks: Hook[] = [];\n private _clientLogger?: Logger;\n\n constructor(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n private readonly providerAccessor: () => Provider,\n private readonly emitterAccessor: () => InternalEventEmitter,\n private readonly globalLogger: () => Logger,\n private readonly options: OpenFeatureClientOptions,\n ) {}\n\n get metadata(): ClientMetadata {\n return {\n name: this.options.name,\n version: this.options.version,\n providerMetadata: this.providerAccessor().metadata,\n };\n }\n\n get providerStatus(): ProviderStatus {\n return this.providerAccessor()?.status || ProviderStatus.READY;\n }\n\n addHandler(eventType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().addHandler(eventType, handler);\n const shouldRunNow = statusMatchesEvent(eventType, this._provider.status);\n\n if (shouldRunNow) {\n // run immediately, we're in the matching state\n try {\n handler({ clientName: this.metadata.name, providerName: this._provider.metadata.name });\n } catch (err) {\n this._logger?.error('Error running event handler:', err);\n }\n }\n }\n\n removeHandler(notificationType: ProviderEvents, handler: EventHandler): void {\n this.emitterAccessor().removeHandler(notificationType, handler);\n }\n\n getHandlers(eventType: ProviderEvents) {\n return this.emitterAccessor().getHandlers(eventType);\n }\n\n setLogger(logger: Logger): this {\n this._clientLogger = new SafeLogger(logger);\n return this;\n }\n\n addHooks(...hooks: Hook[]): this {\n this._hooks = [...this._hooks, ...hooks];\n return this;\n }\n\n getHooks(): Hook[] {\n return this._hooks;\n }\n\n clearHooks(): this {\n this._hooks = [];\n return this;\n }\n\n getBooleanValue(flagKey: string, defaultValue: boolean, options?: FlagEvaluationOptions): boolean {\n return this.getBooleanDetails(flagKey, defaultValue, options).value;\n }\n\n getBooleanDetails(\n flagKey: string,\n defaultValue: boolean,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<boolean> {\n return this.evaluate<boolean>(flagKey, this._provider.resolveBooleanEvaluation, defaultValue, 'boolean', options);\n }\n\n getStringValue<T extends string = string>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getStringDetails<T>(flagKey, defaultValue, options).value;\n }\n\n getStringDetails<T extends string = string>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted string generic argument.\n this._provider.resolveStringEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'string',\n options,\n );\n }\n\n getNumberValue<T extends number = number>(flagKey: string, defaultValue: T, options?: FlagEvaluationOptions): T {\n return this.getNumberDetails(flagKey, defaultValue, options).value;\n }\n\n getNumberDetails<T extends number = number>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(\n flagKey,\n // this isolates providers from our restricted number generic argument.\n this._provider.resolveNumberEvaluation as () => EvaluationDetails<T>,\n defaultValue,\n 'number',\n options,\n );\n }\n\n getObjectValue<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): T {\n return this.getObjectDetails(flagKey, defaultValue, options).value;\n }\n\n getObjectDetails<T extends JsonValue = JsonValue>(\n flagKey: string,\n defaultValue: T,\n options?: FlagEvaluationOptions,\n ): EvaluationDetails<T> {\n return this.evaluate<T>(flagKey, this._provider.resolveObjectEvaluation, defaultValue, 'object', options);\n }\n\n private evaluate<T extends FlagValue>(\n flagKey: string,\n resolver: (flagKey: string, defaultValue: T, context: EvaluationContext, logger: Logger) => ResolutionDetails<T>,\n defaultValue: T,\n flagType: FlagValueType,\n options: FlagEvaluationOptions = {},\n ): EvaluationDetails<T> {\n // merge global, client, and evaluation context\n\n const allHooks = [\n ...OpenFeature.getHooks(),\n ...this.getHooks(),\n ...(options.hooks || []),\n ...(this._provider.hooks || []),\n ];\n const allHooksReversed = [...allHooks].reverse();\n\n const context = {\n ...OpenFeature.getContext(),\n };\n\n // this reference cannot change during the course of evaluation\n // it may be used as a key in WeakMaps\n const hookContext: Readonly<HookContext> = {\n flagKey,\n defaultValue,\n flagValueType: flagType,\n clientMetadata: this.metadata,\n providerMetadata: OpenFeature.providerMetadata,\n context,\n logger: this._logger,\n };\n\n try {\n this.beforeHooks(allHooks, hookContext, options);\n\n // run the referenced resolver, binding the provider.\n const resolution = resolver.call(this._provider, flagKey, defaultValue, context, this._logger);\n\n const evaluationDetails = {\n ...resolution,\n flagMetadata: Object.freeze(resolution.flagMetadata ?? {}),\n flagKey,\n };\n\n this.afterHooks(allHooksReversed, hookContext, evaluationDetails, options);\n\n return evaluationDetails;\n } catch (err: unknown) {\n const errorMessage: string = (err as Error)?.message;\n const errorCode: ErrorCode = (err as OpenFeatureError)?.code || ErrorCode.GENERAL;\n\n this.errorHooks(allHooksReversed, hookContext, err, options);\n\n return {\n errorCode,\n errorMessage,\n value: defaultValue,\n reason: StandardResolutionReasons.ERROR,\n flagMetadata: Object.freeze({}),\n flagKey,\n };\n } finally {\n this.finallyHooks(allHooksReversed, hookContext, options);\n }\n }\n\n private beforeHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n Object.freeze(hookContext);\n Object.freeze(hookContext.context);\n\n for (const hook of hooks) {\n hook?.before?.(hookContext, Object.freeze(options.hookHints));\n }\n }\n\n private afterHooks(\n hooks: Hook[],\n hookContext: HookContext,\n evaluationDetails: EvaluationDetails<FlagValue>,\n options: FlagEvaluationOptions,\n ) {\n // run \"after\" hooks sequentially\n for (const hook of hooks) {\n hook?.after?.(hookContext, evaluationDetails, options.hookHints);\n }\n }\n\n private errorHooks(hooks: Hook[], hookContext: HookContext, err: unknown, options: FlagEvaluationOptions) {\n // run \"error\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.error?.(hookContext, err, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'error' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private finallyHooks(hooks: Hook[], hookContext: HookContext, options: FlagEvaluationOptions) {\n // run \"finally\" hooks sequentially\n for (const hook of hooks) {\n try {\n hook?.finally?.(hookContext, options.hookHints);\n } catch (err) {\n this._logger.error(`Unhandled error during 'finally' hook: ${err}`);\n if (err instanceof Error) {\n this._logger.error(err.stack);\n }\n this._logger.error((err as Error)?.stack);\n }\n }\n }\n\n private get _provider(): Provider {\n return this.providerAccessor();\n }\n\n private get _logger() {\n return this._clientLogger || this.globalLogger();\n }\n}\n", "import {\n EvaluationContext,\n GenericEventEmitter,\n ManageContext,\n OpenFeatureCommonAPI,\n objectOrUndefined,\n stringOrUndefined,\n} from '@openfeature/core';\nimport { Client, OpenFeatureClient } from './client';\nimport { OpenFeatureEventEmitter, ProviderEvents } from './events';\nimport { Hook } from './hooks';\nimport { NOOP_PROVIDER, Provider } from './provider';\n\n// use a symbol as a key for the global singleton\nconst GLOBAL_OPENFEATURE_API_KEY = Symbol.for('@openfeature/web-sdk/api');\n\ntype OpenFeatureGlobal = {\n [GLOBAL_OPENFEATURE_API_KEY]?: OpenFeatureAPI;\n};\nconst _globalThis = globalThis as OpenFeatureGlobal;\n\nexport class OpenFeatureAPI extends OpenFeatureCommonAPI<Provider, Hook> implements ManageContext<Promise<void>> {\n protected _events: GenericEventEmitter<ProviderEvents> = new OpenFeatureEventEmitter();\n protected _defaultProvider: Provider = NOOP_PROVIDER;\n protected _createEventEmitter = () => new OpenFeatureEventEmitter();\n protected _namedProviderContext: Map<string, EvaluationContext> = new Map();\n\n private constructor() {\n super('client');\n }\n\n /**\n * Gets a singleton instance of the OpenFeature API.\n * @ignore\n * @returns {OpenFeatureAPI} OpenFeature API\n */\n static getInstance(): OpenFeatureAPI {\n const globalApi = _globalThis[GLOBAL_OPENFEATURE_API_KEY];\n if (globalApi) {\n return globalApi;\n }\n\n const instance = new OpenFeatureAPI();\n _globalThis[GLOBAL_OPENFEATURE_API_KEY] = instance;\n return instance;\n }\n\n /**\n * Sets the evaluation context globally.\n * This will be used by all providers that have not been overridden with a named client.\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext({ region: \"us\" });\n */\n async setContext(context: EvaluationContext): Promise<void>;\n /**\n * Sets the evaluation context for a specific provider.\n * This will only affect providers with a matching client name.\n * @param {string} clientName The name to identify the client\n * @param {EvaluationContext} context Evaluation context\n * @example\n * await OpenFeature.setContext(\"test\", { scope: \"provider\" });\n * OpenFeature.setProvider(new MyProvider()) // Uses the default context\n * OpenFeature.setProvider(\"test\", new MyProvider()) // Uses context: { scope: \"provider\" }\n */\n async setContext(clientName: string, context: EvaluationContext): Promise<void>;\n async setContext<T extends EvaluationContext>(nameOrContext: T | string, contextOrUndefined?: T): Promise<void> {\n const clientName = stringOrUndefined(nameOrContext);\n const context = objectOrUndefined<T>(nameOrContext) ?? objectOrUndefined(contextOrUndefined) ?? {};\n\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.set(clientName, context);\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, context);\n } else {\n this._namedProviderContext.set(clientName, context);\n }\n } else {\n const oldContext = this._context;\n this._context = context;\n\n const providersWithoutContextOverride = Array.from(this._clientProviders.entries())\n .filter(([name]) => !this._namedProviderContext.has(name))\n .reduce<Provider[]>((acc, [, provider]) => {\n acc.push(provider);\n return acc;\n }, []);\n\n const allProviders = [this._defaultProvider, ...providersWithoutContextOverride];\n await Promise.all(\n allProviders.map((provider) => this.runProviderContextChangeHandler(undefined, provider, oldContext, context)),\n );\n }\n }\n\n /**\n * Access the global evaluation context.\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(): EvaluationContext;\n /**\n * Access the evaluation context for a specific named client.\n * The global evaluation context is returned if a matching named client is not found.\n * @param {string} clientName The name to identify the client\n * @returns {EvaluationContext} Evaluation context\n */\n getContext(clientName: string): EvaluationContext;\n getContext(nameOrUndefined?: string): EvaluationContext {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const context = this._namedProviderContext.get(clientName);\n if (context) {\n return context;\n } else {\n this._logger.debug(`Unable to find context for '${clientName}'.`);\n }\n }\n return this._context;\n }\n\n /**\n * Resets the global evaluation context to an empty object.\n */\n clearContext(): Promise<void>;\n /**\n * Removes the evaluation context for a specific named client.\n * @param {string} clientName The name to identify the client\n */\n clearContext(clientName: string): Promise<void>;\n async clearContext(nameOrUndefined?: string): Promise<void> {\n const clientName = stringOrUndefined(nameOrUndefined);\n if (clientName) {\n const provider = this._clientProviders.get(clientName);\n if (provider) {\n const oldContext = this.getContext(clientName);\n this._namedProviderContext.delete(clientName);\n const newContext = this.getContext();\n await this.runProviderContextChangeHandler(clientName, provider, oldContext, newContext);\n } else {\n this._namedProviderContext.delete(clientName);\n }\n } else {\n return this.setContext({});\n }\n }\n\n /**\n * Resets the global evaluation context and removes the evaluation context for\n * all named clients.\n */\n async clearContexts(): Promise<void> {\n // Default context must be cleared first to avoid calling the onContextChange\n // handler multiple times for named clients.\n await this.clearContext();\n\n // Use allSettled so a promise rejection doesn't affect others\n await Promise.allSettled(Array.from(this._clientProviders.keys()).map((name) => this.clearContext(name)));\n }\n\n /**\n * A factory function for creating new named OpenFeature clients. Clients can contain\n * their own state (e.g. logger, hook, context). Multiple clients can be used\n * to segment feature flag configuration.\n *\n * If there is already a provider bound to this name via {@link this.setProvider setProvider}, this provider will be used.\n * Otherwise, the default provider is used until a provider is assigned to that name.\n * @param {string} name The name of the client\n * @param {string} version The version of the client (only used for metadata)\n * @returns {Client} OpenFeature Client\n */\n getClient(name?: string, version?: string): Client {\n return new OpenFeatureClient(\n // functions are passed here to make sure that these values are always up to date,\n // and so we don't have to make these public properties on the API class.\n () => this.getProviderForClient(name),\n () => this.buildAndCacheEventEmitterForClient(name),\n () => this._logger,\n { name, version },\n );\n }\n\n /**\n * Clears all registered providers and resets the default provider.\n * @returns {Promise<void>}\n */\n async clearProviders(): Promise<void> {\n await super.clearProvidersAndSetDefault(NOOP_PROVIDER);\n this._namedProviderContext.clear();\n }\n\n private async runProviderContextChangeHandler(\n clientName: string | undefined,\n provider: Provider,\n oldContext: EvaluationContext,\n newContext: EvaluationContext,\n ): Promise<void> {\n const providerName = provider.metadata.name;\n return provider.onContextChange?.(oldContext, newContext).then(() => {\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n });\n this._events?.emit(ProviderEvents.ContextChanged, { clientName, providerName });\n }).catch((err) => {\n this._logger?.error(`Error running ${provider.metadata.name}'s context change handler:`, err);\n this.getAssociatedEventEmitters(clientName).forEach((emitter) => {\n emitter?.emit(ProviderEvents.Error, { clientName, providerName, message: err?.message, });\n });\n this._events?.emit(ProviderEvents.Error, { clientName, providerName, message: err?.message, });\n });\n }\n}\n\n/**\n * A singleton instance of the OpenFeature API.\n * @returns {OpenFeatureAPI} OpenFeature API\n */\nexport const OpenFeature = OpenFeatureAPI.getInstance();\n", "import { GenericEventEmitter } from '@openfeature/core';\nimport EventEmitter from 'events';\nimport { ProviderEmittableEvents } from './events';\n/**\n * The OpenFeatureEventEmitter can be used by provider developers to emit\n * events at various parts of the provider lifecycle.\n *\n * NOTE: Ready and error events are automatically emitted by the SDK based on\n * the result of the initialize method.\n */\nexport class OpenFeatureEventEmitter extends GenericEventEmitter<ProviderEmittableEvents> {\n protected readonly eventEmitter = new EventEmitter({ captureRejections: true });\n\n constructor() {\n super();\n this.eventEmitter.on('error', (err) => {\n this._logger?.error('Error running event handler:', err);\n });\n }\n}\n", "import { ClientProviderEvents } from '@openfeature/core';\n\nexport { ClientProviderEvents as ProviderEvents};\n\n/**\n * A subset of events that can be directly emitted by providers.\n */\nexport type ProviderEmittableEvents = Exclude<ClientProviderEvents, ClientProviderEvents.ContextChanged>;", "import { JsonValue, ProviderStatus, ResolutionDetails } from '@openfeature/core';\nimport { Provider } from './provider';\n\nconst REASON_NO_OP = 'No-op';\n\n/**\n * The No-op provider is set by default, and simply always returns the default value.\n */\nclass NoopFeatureProvider implements Provider {\n readonly metadata = {\n name: 'No-op Provider',\n } as const;\n\n get status(): ProviderStatus {\n /**\n * This is due to the NoopProvider not being a real provider.\n * We do not want it to trigger the Ready event handlers, so we never set this to ready.\n * With the NoopProvider assigned, the client can be assumed to be uninitialized.\n * https://github.com/open-feature/js-sdk/pull/429#discussion_r1202642654\n */\n return ProviderStatus.NOT_READY;\n }\n\n resolveBooleanEvaluation(_: string, defaultValue: boolean): ResolutionDetails<boolean> {\n return this.noOp(defaultValue);\n }\n\n resolveStringEvaluation(_: string, defaultValue: string): ResolutionDetails<string> {\n return this.noOp(defaultValue);\n }\n\n resolveNumberEvaluation(_: string, defaultValue: number): ResolutionDetails<number> {\n return this.noOp(defaultValue);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(_: string, defaultValue: T): ResolutionDetails<T> {\n return this.noOp<T>(defaultValue);\n }\n\n private noOp<T>(defaultValue: T) {\n return {\n value: defaultValue,\n reason: REASON_NO_OP,\n };\n }\n}\n\nexport const NOOP_PROVIDER = new NoopFeatureProvider();\n", "import {\n EvaluationContext,\n FlagNotFoundError,\n FlagValueType,\n GeneralError,\n JsonValue,\n Logger,\n OpenFeatureError,\n ResolutionDetails,\n StandardResolutionReasons,\n TypeMismatchError,\n ProviderStatus,\n} from '@openfeature/core';\nimport { Provider } from '../provider';\nimport { OpenFeatureEventEmitter, ProviderEvents } from '../../events';\nimport { FlagConfiguration, Flag } from './flag-configuration';\nimport { VariantNotFoundError } from './variant-not-found-error';\n\n/**\n * A simple OpenFeature provider intended for demos and as a test stub.\n */\nexport class InMemoryProvider implements Provider {\n public readonly events = new OpenFeatureEventEmitter();\n public readonly runsOn = 'client';\n status: ProviderStatus = ProviderStatus.NOT_READY;\n readonly metadata = {\n name: 'in-memory',\n } as const;\n private _flagConfiguration: FlagConfiguration;\n private _context: EvaluationContext | undefined;\n\n constructor(flagConfiguration: FlagConfiguration = {}) {\n this._flagConfiguration = { ...flagConfiguration };\n }\n\n async initialize(context?: EvaluationContext | undefined): Promise<void> {\n try {\n\n for (const key in this._flagConfiguration) {\n this.resolveFlagWithReason(key, context);\n }\n\n this._context = context;\n // set the provider's state, but don't emit events manually;\n // the SDK does this based on the resolution/rejection of the init promise\n this.status = ProviderStatus.READY;\n } catch (error) {\n this.status = ProviderStatus.ERROR;\n throw error;\n }\n }\n\n /**\n * Overwrites the configured flags.\n * @param { FlagConfiguration } flagConfiguration new flag configuration\n */\n async putConfiguration(flagConfiguration: FlagConfiguration) {\n const flagsChanged = Object.entries(flagConfiguration)\n .filter(([key, value]) => this._flagConfiguration[key] !== value)\n .map(([key]) => key);\n\n this.status = ProviderStatus.STALE;\n this.events.emit(ProviderEvents.Stale);\n\n this._flagConfiguration = { ...flagConfiguration };\n this.events.emit(ProviderEvents.ConfigurationChanged, { flagsChanged });\n\n try {\n await this.initialize(this._context);\n // we need to emit our own events in this case, since it's not part of the init flow.\n this.events.emit(ProviderEvents.Ready);\n } catch (err) {\n this.events.emit(ProviderEvents.Error);\n throw err;\n }\n }\n\n resolveBooleanEvaluation(\n flagKey: string,\n defaultValue: boolean,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<boolean> {\n return this.resolveAndCheckFlag<boolean>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveNumberEvaluation(\n flagKey: string,\n defaultValue: number,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<number> {\n return this.resolveAndCheckFlag<number>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveStringEvaluation(\n flagKey: string,\n defaultValue: string,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<string> {\n return this.resolveAndCheckFlag<string>(flagKey, defaultValue, context || this._context, logger);\n }\n\n resolveObjectEvaluation<T extends JsonValue>(\n flagKey: string,\n defaultValue: T,\n context?: EvaluationContext,\n logger?: Logger,\n ): ResolutionDetails<T> {\n return this.resolveAndCheckFlag<T>(flagKey, defaultValue, context || this._context, logger);\n }\n\n private resolveAndCheckFlag<T extends JsonValue | FlagValueType>(flagKey: string,\n defaultValue: T, context?: EvaluationContext, logger?: Logger): ResolutionDetails<T> {\n if (!(flagKey in this._flagConfiguration)) {\n const message = `no flag found with key ${flagKey}`;\n logger?.debug(message);\n throw new FlagNotFoundError(message);\n }\n\n if (this._flagConfiguration[flagKey].disabled) {\n return { value: defaultValue, reason: StandardResolutionReasons.DISABLED };\n }\n\n const resolvedFlag = this.resolveFlagWithReason(flagKey, context) as ResolutionDetails<T>;\n\n if (resolvedFlag.value === undefined) {\n const message = `no value associated with variant provided for ${flagKey} found`;\n logger?.error(message);\n throw new VariantNotFoundError(message);\n }\n\n if (typeof resolvedFlag.value != typeof defaultValue) {\n throw new TypeMismatchError();\n }\n\n return resolvedFlag;\n }\n\n private resolveFlagWithReason<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n try {\n const resolutionResult = this.lookupFlagValue<T>(flagKey, ctx);\n\n return resolutionResult;\n } catch (error: unknown) {\n if (!(error instanceof OpenFeatureError)) {\n throw new GeneralError((error as Error)?.message || 'unknown error');\n }\n throw error;\n }\n }\n\n private lookupFlagValue<T extends JsonValue | FlagValueType>(\n flagKey: string,\n ctx?: EvaluationContext,\n ): ResolutionDetails<T> {\n const flagSpec: Flag = this._flagConfiguration[flagKey];\n\n const isContextEval = ctx && flagSpec?.contextEvaluator;\n const variant = isContextEval ? flagSpec.contextEvaluator?.(ctx) : flagSpec.defaultVariant;\n\n const value = variant && flagSpec?.variants[variant];\n\n const evalReason = isContextEval ? StandardResolutionReasons.TARGETING_MATCH : StandardResolutionReasons.STATIC;\n\n const reason = this.status === ProviderStatus.STALE ? StandardResolutionReasons.CACHED : evalReason;\n\n return {\n value: value as T,\n ...(variant && { variant }),\n reason,\n };\n }\n}\n", "import { ErrorCode, OpenFeatureError } from '@openfeature/core';\n\n/**\n * A custom error for the in-memory provider.\n * Indicates the resolved or default variant doesn't exist.\n */\nexport class VariantNotFoundError extends OpenFeatureError {\n code: ErrorCode;\n constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, VariantNotFoundError.prototype);\n this.name = 'VariantNotFoundError';\n this.code = ErrorCode.GENERAL;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["module", "ReflectApply", "ReflectOwnKeys", "NumberIsNaN", "EventEmitter", "once", "import_core", "import_core", "EventEmitter", "import_core", "import_core", "import_core", "import_core", "_a", "err"]
|
|
7
7
|
}
|