@statsig/angular-bindings 3.6.1 → 3.6.2-beta.2

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.
@@ -0,0 +1,21 @@
1
+ import { OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
2
+ import { FeatureGateOptions } from './statsig.module';
3
+ import { StatsigService } from './statsig.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class CheckGateDirective implements OnInit {
6
+ private _templateRef;
7
+ private _viewContainer;
8
+ private _statsigService;
9
+ private _gate;
10
+ private _isHidden;
11
+ private _options;
12
+ set stgCheckGate(val: string);
13
+ set stgCheckGateOptions(val: FeatureGateOptions);
14
+ constructor(_templateRef: TemplateRef<unknown>, _viewContainer: ViewContainerRef, _statsigService: StatsigService);
15
+ ngOnInit(): void;
16
+ private _updateView;
17
+ private _checkGate;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckGateDirective, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<CheckGateDirective, "[stgCheckGate]", never, { "stgCheckGate": { "alias": "stgCheckGate"; "required": false; }; "stgCheckGateOptions": { "alias": "stgCheckGateOptions"; "required": false; }; }, {}, never, never, false, never>;
20
+ }
21
+ //# sourceMappingURL=checkGate.directive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkGate.directive.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/checkGate.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EACN,WAAW,EACX,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;;AAEnD,qBAGa,kBAAmB,YAAW,MAAM;IAsB7C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,eAAe;IAvBzB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAA0B;IAE1C,IAAa,YAAY,CAAC,GAAG,EAAE,MAAM,EAMpC;IAED,IAAa,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,EAMvD;gBAGS,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,EAClC,cAAc,EAAE,gBAAgB,EAChC,eAAe,EAAE,cAAc;IAOzC,QAAQ,IAAI,IAAI;IAMhB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;yCAlDP,kBAAkB;2CAAlB,kBAAkB;CAuD9B"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckGateDirective = void 0;
4
+ const core_1 = require("@angular/core");
5
+ const client_core_1 = require("@statsig/client-core");
6
+ const statsig_service_1 = require("./statsig.service");
7
+ const i0 = require("@angular/core");
8
+ const i1 = require("./statsig.service");
9
+ class CheckGateDirective {
10
+ _templateRef;
11
+ _viewContainer;
12
+ _statsigService;
13
+ _gate = '';
14
+ _isHidden = true;
15
+ _options = {};
16
+ set stgCheckGate(val) {
17
+ client_core_1.Log.debug('Setting gate', val);
18
+ if (val) {
19
+ this._gate = val;
20
+ this._updateView();
21
+ }
22
+ }
23
+ set stgCheckGateOptions(val) {
24
+ client_core_1.Log.debug('Setting options', val);
25
+ if (val) {
26
+ this._options = val;
27
+ this._updateView();
28
+ }
29
+ }
30
+ constructor(_templateRef, _viewContainer, _statsigService) {
31
+ this._templateRef = _templateRef;
32
+ this._viewContainer = _viewContainer;
33
+ this._statsigService = _statsigService;
34
+ _statsigService.getClient().$on('values_updated', () => {
35
+ this._updateView();
36
+ });
37
+ }
38
+ ngOnInit() {
39
+ if (this._gate) {
40
+ this._updateView();
41
+ }
42
+ }
43
+ _updateView() {
44
+ if (this._checkGate()) {
45
+ if (this._isHidden) {
46
+ client_core_1.Log.debug('Feature flag is enabled, showing the template');
47
+ this._viewContainer.createEmbeddedView(this._templateRef);
48
+ this._isHidden = false;
49
+ }
50
+ }
51
+ else {
52
+ this._viewContainer.clear();
53
+ this._isHidden = true;
54
+ }
55
+ }
56
+ _checkGate() {
57
+ return (this._gate && this._statsigService.checkGate(this._gate, this._options));
58
+ }
59
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CheckGateDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.StatsigService }], target: i0.ɵɵFactoryTarget.Directive });
60
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: CheckGateDirective, selector: "[stgCheckGate]", inputs: { stgCheckGate: "stgCheckGate", stgCheckGateOptions: "stgCheckGateOptions" }, ngImport: i0 });
61
+ }
62
+ exports.CheckGateDirective = CheckGateDirective;
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CheckGateDirective, decorators: [{
64
+ type: core_1.Directive,
65
+ args: [{
66
+ selector: '[stgCheckGate]',
67
+ }]
68
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.StatsigService }], propDecorators: { stgCheckGate: [{
69
+ type: core_1.Input
70
+ }], stgCheckGateOptions: [{
71
+ type: core_1.Input
72
+ }] } });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tHYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItYmluZGluZ3Mvc3JjL2NoZWNrR2F0ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0NBTXVCO0FBRXZCLHNEQUEyQztBQUczQyx1REFBbUQ7OztBQUVuRCxNQUdhLGtCQUFrQjtJQXNCbkI7SUFDQTtJQUNBO0lBdkJGLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLFFBQVEsR0FBdUIsRUFBRSxDQUFDO0lBRTFDLElBQWEsWUFBWSxDQUFDLEdBQVc7UUFDbkMsaUJBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFhLG1CQUFtQixDQUFDLEdBQXVCO1FBQ3RELGlCQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRCxZQUNVLFlBQWtDLEVBQ2xDLGNBQWdDLEVBQ2hDLGVBQStCO1FBRi9CLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBa0I7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBRXZDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLGlCQUFHLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEUsQ0FBQztJQUNKLENBQUM7dUdBdERVLGtCQUFrQjsyRkFBbEIsa0JBQWtCOztBQUgvQixnREEwREM7MkZBdkRZLGtCQUFrQjtrQkFIOUIsZ0JBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7NElBTWMsWUFBWTtzQkFBeEIsWUFBSztnQkFRTyxtQkFBbUI7c0JBQS9CLFlBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnQHN0YXRzaWcvY2xpZW50LWNvcmUnO1xuXG5pbXBvcnQgeyBGZWF0dXJlR2F0ZU9wdGlvbnMgfSBmcm9tICcuL3N0YXRzaWcubW9kdWxlJztcbmltcG9ydCB7IFN0YXRzaWdTZXJ2aWNlIH0gZnJvbSAnLi9zdGF0c2lnLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc3RnQ2hlY2tHYXRlXScsXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrR2F0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2dhdGUgPSAnJztcbiAgcHJpdmF0ZSBfaXNIaWRkZW4gPSB0cnVlO1xuICBwcml2YXRlIF9vcHRpb25zOiBGZWF0dXJlR2F0ZU9wdGlvbnMgPSB7fTtcblxuICBASW5wdXQoKSBzZXQgc3RnQ2hlY2tHYXRlKHZhbDogc3RyaW5nKSB7XG4gICAgTG9nLmRlYnVnKCdTZXR0aW5nIGdhdGUnLCB2YWwpO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuX2dhdGUgPSB2YWw7XG4gICAgICB0aGlzLl91cGRhdGVWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgc2V0IHN0Z0NoZWNrR2F0ZU9wdGlvbnModmFsOiBGZWF0dXJlR2F0ZU9wdGlvbnMpIHtcbiAgICBMb2cuZGVidWcoJ1NldHRpbmcgb3B0aW9ucycsIHZhbCk7XG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IHZhbDtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4sXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9zdGF0c2lnU2VydmljZTogU3RhdHNpZ1NlcnZpY2UsXG4gICkge1xuICAgIF9zdGF0c2lnU2VydmljZS5nZXRDbGllbnQoKS4kb24oJ3ZhbHVlc191cGRhdGVkJywgKCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlVmlldygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2dhdGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaWV3KCkge1xuICAgIGlmICh0aGlzLl9jaGVja0dhdGUoKSkge1xuICAgICAgaWYgKHRoaXMuX2lzSGlkZGVuKSB7XG4gICAgICAgIExvZy5kZWJ1ZygnRmVhdHVyZSBmbGFnIGlzIGVuYWJsZWQsIHNob3dpbmcgdGhlIHRlbXBsYXRlJyk7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKTtcbiAgICAgICAgdGhpcy5faXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgICAgdGhpcy5faXNIaWRkZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrR2F0ZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZ2F0ZSAmJiB0aGlzLl9zdGF0c2lnU2VydmljZS5jaGVja0dhdGUodGhpcy5fZ2F0ZSwgdGhpcy5fb3B0aW9ucylcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckGateDirective = exports.StatsigService = exports.STATSIG_INIT_CONFIG = exports.StatsigModule = void 0;
4
+ var statsig_module_1 = require("./statsig.module");
5
+ Object.defineProperty(exports, "StatsigModule", { enumerable: true, get: function () { return statsig_module_1.StatsigModule; } });
6
+ Object.defineProperty(exports, "STATSIG_INIT_CONFIG", { enumerable: true, get: function () { return statsig_module_1.STATSIG_INIT_CONFIG; } });
7
+ var statsig_service_1 = require("./statsig.service");
8
+ Object.defineProperty(exports, "StatsigService", { enumerable: true, get: function () { return statsig_service_1.StatsigService; } });
9
+ var checkGate_directive_1 = require("./checkGate.directive");
10
+ Object.defineProperty(exports, "CheckGateDirective", { enumerable: true, get: function () { return checkGate_directive_1.CheckGateDirective; } });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLWJpbmRpbmdzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBc0U7QUFBN0QsK0dBQUEsYUFBYSxPQUFBO0FBQUUscUhBQUEsbUJBQW1CLE9BQUE7QUFDM0MscURBQW1EO0FBQTFDLGlIQUFBLGNBQWMsT0FBQTtBQUN2Qiw2REFBMkQ7QUFBbEQseUhBQUEsa0JBQWtCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTdGF0c2lnTW9kdWxlLCBTVEFUU0lHX0lOSVRfQ09ORklHIH0gZnJvbSAnLi9zdGF0c2lnLm1vZHVsZSc7XG5leHBvcnQgeyBTdGF0c2lnU2VydmljZSB9IGZyb20gJy4vc3RhdHNpZy5zZXJ2aWNlJztcbmV4cG9ydCB7IENoZWNrR2F0ZURpcmVjdGl2ZSB9IGZyb20gJy4vY2hlY2tHYXRlLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Memoize = void 0;
4
+ function Memoize(keyGenerator) {
5
+ return function (_target, _propertyKey, descriptor) {
6
+ const orignal = descriptor.value;
7
+ const cache = new Map();
8
+ descriptor.value = function (...args) {
9
+ const key = keyGenerator(...args);
10
+ if (cache.has(key)) {
11
+ return cache.get(key);
12
+ }
13
+ const result = orignal.apply(this, args);
14
+ cache.set(key, result);
15
+ return result;
16
+ };
17
+ return descriptor;
18
+ };
19
+ }
20
+ exports.Memoize = Memoize;
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb2l6ZURlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItYmluZGluZ3Mvc3JjL21lbW9pemVEZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsT0FBTyxDQUNyQixZQUE0QztJQUU1QyxPQUFPLFVBQ0wsT0FBZSxFQUNmLFlBQTZCLEVBQzdCLFVBQThCO1FBRTlCLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUF3QyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBRXpDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLElBQWU7WUFDN0MsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFbEMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXpCRCwwQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gTWVtb2l6ZShcbiAga2V5R2VuZXJhdG9yOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBzdHJpbmcsXG4pOiBNZXRob2REZWNvcmF0b3Ige1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIF90YXJnZXQ6IG9iamVjdCxcbiAgICBfcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4gICkge1xuICAgIGNvbnN0IG9yaWduYWwgPSBkZXNjcmlwdG9yLnZhbHVlIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gICAgY29uc3QgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlHZW5lcmF0b3IoLi4uYXJncyk7XG5cbiAgICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWduYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Generated bundle index. Do not edit.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./index"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHNpZy1hbmd1bGFyLWJpbmRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1iaW5kaW5ncy9zcmMvc3RhdHNpZy1hbmd1bGFyLWJpbmRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatsigModule = exports.STATSIG_INIT_CONFIG = void 0;
4
+ const core_1 = require("@angular/core");
5
+ const checkGate_directive_1 = require("./checkGate.directive");
6
+ const i0 = require("@angular/core");
7
+ exports.STATSIG_INIT_CONFIG = new core_1.InjectionToken('StatsigProvider');
8
+ class StatsigModule {
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: StatsigModule, declarations: [checkGate_directive_1.CheckGateDirective], exports: [checkGate_directive_1.CheckGateDirective] });
11
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigModule });
12
+ }
13
+ exports.StatsigModule = StatsigModule;
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigModule, decorators: [{
15
+ type: core_1.NgModule,
16
+ args: [{
17
+ declarations: [checkGate_directive_1.CheckGateDirective],
18
+ exports: [checkGate_directive_1.CheckGateDirective],
19
+ providers: [],
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHNpZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLWJpbmRpbmdzL3NyYy9zdGF0c2lnLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3Q0FBeUQ7QUFTekQsK0RBQTJEOztBQWE5QyxRQUFBLG1CQUFtQixHQUFHLElBQUkscUJBQWMsQ0FFbkQsaUJBQWlCLENBQUMsQ0FBQztBQUlyQixNQUthLGFBQWE7dUdBQWIsYUFBYTt3R0FBYixhQUFhLGlCQUpULHdDQUFrQixhQUN2Qix3Q0FBa0I7d0dBR2pCLGFBQWE7O0FBTDFCLHNDQUs2QjsyRkFBaEIsYUFBYTtrQkFMekIsZUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyx3Q0FBa0IsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsd0NBQWtCLENBQUM7b0JBQzdCLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEZlYXR1cmVHYXRlRXZhbHVhdGlvbk9wdGlvbnMsXG4gIFN0YXRzaWdDbGllbnQsXG4gIFN0YXRzaWdPcHRpb25zLFxuICBTdGF0c2lnVXNlcixcbn0gZnJvbSAnQHN0YXRzaWcvanMtY2xpZW50JztcblxuaW1wb3J0IHsgQ2hlY2tHYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9jaGVja0dhdGUuZGlyZWN0aXZlJztcblxudHlwZSBXaXRoQ2xpZW50PFQgZXh0ZW5kcyBTdGF0c2lnQ2xpZW50PiA9IHsgY2xpZW50OiBUIH07XG50eXBlIFdpdGhDb25maWd1cmF0aW9uID0ge1xuICBzZGtLZXk6IHN0cmluZztcbiAgdXNlcjogU3RhdHNpZ1VzZXI7XG4gIG9wdGlvbnM/OiBTdGF0c2lnT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIFN0YXRzaWdJbml0Q29uZmlnPFQgZXh0ZW5kcyBTdGF0c2lnQ2xpZW50PiA9XG4gIHwgV2l0aENsaWVudDxUPlxuICB8IFdpdGhDb25maWd1cmF0aW9uO1xuXG5leHBvcnQgY29uc3QgU1RBVFNJR19JTklUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxcbiAgU3RhdHNpZ0luaXRDb25maWc8U3RhdHNpZ0NsaWVudD5cbj4oJ1N0YXRzaWdQcm92aWRlcicpO1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlR2F0ZU9wdGlvbnMgPSBGZWF0dXJlR2F0ZUV2YWx1YXRpb25PcHRpb25zO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtDaGVja0dhdGVEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbQ2hlY2tHYXRlRGlyZWN0aXZlXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RhdHNpZ01vZHVsZSB7fVxuIl19
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StatsigService = void 0;
13
+ const core_1 = require("@angular/core");
14
+ const rxjs_1 = require("rxjs");
15
+ const client_core_1 = require("@statsig/client-core");
16
+ const js_client_1 = require("@statsig/js-client");
17
+ const memoizeDecorator_1 = require("./memoizeDecorator");
18
+ const statsig_module_1 = require("./statsig.module");
19
+ const i0 = require("@angular/core");
20
+ class StatsigService {
21
+ _renderVersion = 0;
22
+ _client;
23
+ _isLoadingSubject = new rxjs_1.BehaviorSubject(true);
24
+ isLoading$ = this._isLoadingSubject.asObservable();
25
+ constructor(provider) {
26
+ if ('client' in provider) {
27
+ this._client = provider.client;
28
+ }
29
+ else if ('sdkKey' in provider && 'user' in provider) {
30
+ this._client = new js_client_1.StatsigClient(provider.sdkKey, provider.user, provider.options);
31
+ this._client
32
+ .initializeAsync()
33
+ .catch((error) => {
34
+ client_core_1.Log.error('Error initializing StatsigClient', error);
35
+ })
36
+ .finally(() => {
37
+ this._isLoadingSubject.next(false);
38
+ });
39
+ }
40
+ else {
41
+ client_core_1.Log.error('Must provide a client or sdkKey and user to initialize StatsigService');
42
+ this._client = new js_client_1.StatsigClient('', {});
43
+ }
44
+ client_core_1.Log.debug('StatsigService created', this._client);
45
+ this._checkAndEmitLoadingStatus();
46
+ this._client.$on('values_updated', this._onValuesUpdated);
47
+ client_core_1.SDKType._setBindingType('angular');
48
+ }
49
+ ngOnDestroy() {
50
+ this._client.shutdown().catch((error) => {
51
+ client_core_1.Log.error('An error occured during shutdown', error);
52
+ });
53
+ this._client.off('values_updated', this._onValuesUpdated);
54
+ }
55
+ checkGate(gateName, options) {
56
+ client_core_1.Log.debug(`checkGate caled for ${gateName}, rv: ${this._renderVersion}`);
57
+ return this._checkGateImpl(this._renderVersion, gateName, options);
58
+ }
59
+ getDynamicConfig(configName, options) {
60
+ client_core_1.Log.debug(`getDynamicConfig called for ${configName}, rv: ${this._renderVersion}`);
61
+ return this._getDynamicConfigImpl(this._renderVersion, configName, options);
62
+ }
63
+ getExperiment(experimentName, options) {
64
+ client_core_1.Log.debug(`getExperiment caled for ${experimentName}, rv: ${this._renderVersion}`);
65
+ return this._getExperimentImpl(this._renderVersion, experimentName, options);
66
+ }
67
+ getLayer(layerName, options) {
68
+ client_core_1.Log.debug(`getLayer caled for ${layerName}, rv: ${this._renderVersion}`);
69
+ return this._getLayerImpl(this._renderVersion, layerName, options);
70
+ }
71
+ logEvent(eventName, value, metadata) {
72
+ this._client.logEvent(eventName, value, metadata);
73
+ }
74
+ updateUserAsync(user, options) {
75
+ return this._client.updateUserAsync(user, options);
76
+ }
77
+ updateUserSync(user, options) {
78
+ this._client.updateUserSync(user, options);
79
+ }
80
+ getClient() {
81
+ return this._client;
82
+ }
83
+ _checkGateImpl(_rv, gateName, options) {
84
+ return this._client.checkGate(gateName, options);
85
+ }
86
+ _getDynamicConfigImpl(_rv, configName, options) {
87
+ return this._client.getDynamicConfig(configName, options);
88
+ }
89
+ _getExperimentImpl(_rv, experimentName, options) {
90
+ return this._client.getExperiment(experimentName, options);
91
+ }
92
+ _getLayerImpl(_rv, layerName, options) {
93
+ return this._client.getLayer(layerName, options);
94
+ }
95
+ _checkAndEmitLoadingStatus() {
96
+ const isReady = _isReady(this._client);
97
+ if (isReady) {
98
+ this._isLoadingSubject.next(false);
99
+ client_core_1.Log.debug('Client is now ready, loading status set to false');
100
+ }
101
+ else {
102
+ this._isLoadingSubject.next(true);
103
+ client_core_1.Log.debug('Client is not ready, loading status set to true');
104
+ }
105
+ }
106
+ _onValuesUpdated = () => {
107
+ this._renderVersion++;
108
+ client_core_1.Log.debug('Values updated', this._renderVersion);
109
+ this._checkAndEmitLoadingStatus();
110
+ };
111
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigService, deps: [{ token: statsig_module_1.STATSIG_INIT_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
112
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigService, providedIn: 'root' });
113
+ }
114
+ exports.StatsigService = StatsigService;
115
+ __decorate([
116
+ (0, memoizeDecorator_1.Memoize)((...args) => {
117
+ const [rv, gn, opt] = args;
118
+ return `${rv}-${gn}-${JSON.stringify(opt)}`;
119
+ }),
120
+ __metadata("design:type", Function),
121
+ __metadata("design:paramtypes", [Number, String, Object]),
122
+ __metadata("design:returntype", Boolean)
123
+ ], StatsigService.prototype, "_checkGateImpl", null);
124
+ __decorate([
125
+ (0, memoizeDecorator_1.Memoize)((...args) => {
126
+ const [rv, gn, opt] = args;
127
+ return `${rv}-${gn}-${JSON.stringify(opt)}`;
128
+ }),
129
+ __metadata("design:type", Function),
130
+ __metadata("design:paramtypes", [Number, String, Object]),
131
+ __metadata("design:returntype", Object)
132
+ ], StatsigService.prototype, "_getDynamicConfigImpl", null);
133
+ __decorate([
134
+ (0, memoizeDecorator_1.Memoize)((...args) => {
135
+ const [rv, en, opt] = args;
136
+ return `${rv}-${en}-${JSON.stringify(opt)}`;
137
+ }),
138
+ __metadata("design:type", Function),
139
+ __metadata("design:paramtypes", [Number, String, Object]),
140
+ __metadata("design:returntype", Object)
141
+ ], StatsigService.prototype, "_getExperimentImpl", null);
142
+ __decorate([
143
+ (0, memoizeDecorator_1.Memoize)((...args) => {
144
+ const [rv, ln, opt] = args;
145
+ return `${rv}-${ln}-${JSON.stringify(opt)}`;
146
+ }),
147
+ __metadata("design:type", Function),
148
+ __metadata("design:paramtypes", [Number, String, Object]),
149
+ __metadata("design:returntype", Object)
150
+ ], StatsigService.prototype, "_getLayerImpl", null);
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: StatsigService, decorators: [{
152
+ type: core_1.Injectable,
153
+ args: [{
154
+ providedIn: 'root',
155
+ }]
156
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
157
+ type: core_1.Inject,
158
+ args: [statsig_module_1.STATSIG_INIT_CONFIG]
159
+ }] }], propDecorators: { _checkGateImpl: [], _getDynamicConfigImpl: [], _getExperimentImpl: [], _getLayerImpl: [] } });
160
+ function _isReady(client) {
161
+ return client.loadingStatus === 'Ready';
162
+ }
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHNpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1iaW5kaW5ncy9zcmMvc3RhdHNpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHdDQUE4RDtBQUM5RCwrQkFBbUQ7QUFFbkQsc0RBYzhCO0FBQzlCLGtEQUFtRDtBQUVuRCx5REFBNkM7QUFDN0MscURBQTBFOztBQUUxRSxNQUdhLGNBQWM7SUFDakIsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQWdCO0lBRXZCLGlCQUFpQixHQUFHLElBQUksc0JBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUMvRCxVQUFVLEdBQXdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV4RSxZQUMrQixRQUEwQztRQUV2RSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDakMsQ0FBQzthQUFNLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHlCQUFhLENBQzlCLFFBQVEsQ0FBQyxNQUFNLEVBQ2YsUUFBUSxDQUFDLElBQUksRUFDYixRQUFRLENBQUMsT0FBTyxDQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU87aUJBQ1QsZUFBZSxFQUFFO2lCQUNqQixLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixpQkFBRyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUM7aUJBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxD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RCxDQUFDO1FBQ3ZFLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxDQUFDLENBQUM7Ozs7bURBT0Q7MkZBaktVLGNBQWM7a0JBSDFCLGlCQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU0ksYUFBTTsyQkFBQyxvQ0FBbUI7eUNBMkdyQixjQUFjLE1BZ0JkLHFCQUFxQixNQVlyQixrQkFBa0IsTUFZbEIsYUFBYTtBQTBCdkIsU0FBUyxRQUFRLENBQUMsTUFBcUI7SUFDckMsT0FBTyxNQUFNLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBEYXRhQWRhcHRlckFzeW5jT3B0aW9ucyxcbiAgRGF0YUFkYXB0ZXJTeW5jT3B0aW9ucyxcbiAgRHluYW1pY0NvbmZpZyxcbiAgRHluYW1pY0NvbmZpZ0V2YWx1YXRpb25PcHRpb25zLFxuICBFeHBlcmltZW50LFxuICBFeHBlcmltZW50RXZhbHVhdGlvbk9wdGlvbnMsXG4gIEZlYXR1cmVHYXRlRXZhbHVhdGlvbk9wdGlvbnMsXG4gIExheWVyLFxuICBMYXllckV2YWx1YXRpb25PcHRpb25zLFxuICBMb2csXG4gIFNES1R5cGUsXG4gIFN0YXRzaWdFdmVudCxcbiAgU3RhdHNpZ1VzZXIsXG59IGZyb20gJ0BzdGF0c2lnL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFN0YXRzaWdDbGllbnQgfSBmcm9tICdAc3RhdHNpZy9qcy1jbGllbnQnO1xuXG5pbXBvcnQgeyBNZW1vaXplIH0gZnJvbSAnLi9tZW1vaXplRGVjb3JhdG9yJztcbmltcG9ydCB7IFNUQVRTSUdfSU5JVF9DT05GSUcsIFN0YXRzaWdJbml0Q29uZmlnIH0gZnJvbSAnLi9zdGF0c2lnLm1vZHVsZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTdGF0c2lnU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3JlbmRlclZlcnNpb24gPSAwO1xuICBwcml2YXRlIF9jbGllbnQ6IFN0YXRzaWdDbGllbnQ7XG5cbiAgcHJpdmF0ZSBfaXNMb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9pc0xvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoU1RBVFNJR19JTklUX0NPTkZJRykgcHJvdmlkZXI6IFN0YXRzaWdJbml0Q29uZmlnPFN0YXRzaWdDbGllbnQ+LFxuICApIHtcbiAgICBpZiAoJ2NsaWVudCcgaW4gcHJvdmlkZXIpIHtcbiAgICAgIHRoaXMuX2NsaWVudCA9IHByb3ZpZGVyLmNsaWVudDtcbiAgICB9IGVsc2UgaWYgKCdzZGtLZXknIGluIHByb3ZpZGVyICYmICd1c2VyJyBpbiBwcm92aWRlcikge1xuICAgICAgdGhpcy5fY2xpZW50ID0gbmV3IFN0YXRzaWdDbGllbnQoXG4gICAgICAgIHByb3ZpZGVyLnNka0tleSxcbiAgICAgICAgcHJvdmlkZXIudXNlcixcbiAgICAgICAgcHJvdmlkZXIub3B0aW9ucyxcbiAgICAgICk7XG4gICAgICB0aGlzLl9jbGllbnRcbiAgICAgICAgLmluaXRpYWxpemVBc3luYygpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBMb2cuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBTdGF0c2lnQ2xpZW50JywgZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5faXNMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIExvZy5lcnJvcihcbiAgICAgICAgJ011c3QgcHJvdmlkZSBhIGNsaWVudCBvciBzZGtLZXkgYW5kIHVzZXIgdG8gaW5pdGlhbGl6ZSBTdGF0c2lnU2VydmljZScsXG4gICAgICApO1xuICAgICAgdGhpcy5fY2xpZW50ID0gbmV3IFN0YXRzaWdDbGllbnQoJycsIHt9KTtcbiAgICB9XG4gICAgTG9nLmRlYnVnKCdTdGF0c2lnU2VydmljZSBjcmVhdGVkJywgdGhpcy5fY2xpZW50KTtcbiAgICB0aGlzLl9jaGVja0FuZEVtaXRMb2FkaW5nU3RhdHVzKCk7XG4gICAgdGhpcy5fY2xpZW50LiRvbigndmFsdWVzX3VwZGF0ZWQnLCB0aGlzLl9vblZhbHVlc1VwZGF0ZWQpO1xuXG4gICAgU0RLVHlwZS5fc2V0QmluZGluZ1R5cGUoJ2FuZ3VsYXInKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NsaWVudC5zaHV0ZG93bigpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgTG9nLmVycm9yKCdBbiBlcnJvciBvY2N1cmVkIGR1cmluZyBzaHV0ZG93bicsIGVycm9yKTtcbiAgICB9KTtcbiAgICB0aGlzLl9jbGllbnQub2ZmKCd2YWx1ZXNfdXBkYXRlZCcsIHRoaXMuX29uVmFsdWVzVXBkYXRlZCk7XG4gIH1cblxuICBjaGVja0dhdGUoZ2F0ZU5hbWU6IHN0cmluZywgb3B0aW9ucz86IEZlYXR1cmVHYXRlRXZhbHVhdGlvbk9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBMb2cuZGVidWcoYGNoZWNrR2F0ZSBjYWxlZCBmb3IgJHtnYXRlTmFtZX0sIHJ2OiAke3RoaXMuX3JlbmRlclZlcnNpb259YCk7XG5cbiAgICByZXR1cm4gdGhpcy5fY2hlY2tHYXRlSW1wbCh0aGlzLl9yZW5kZXJWZXJzaW9uLCBnYXRlTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXREeW5hbWljQ29uZmlnKFxuICAgIGNvbmZpZ05hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogRHluYW1pY0NvbmZpZ0V2YWx1YXRpb25PcHRpb25zLFxuICApOiBEeW5hbWljQ29uZmlnIHtcbiAgICBMb2cuZGVidWcoXG4gICAgICBgZ2V0RHluYW1pY0NvbmZpZyBjYWxsZWQgZm9yICR7Y29uZmlnTmFtZX0sIHJ2OiAke3RoaXMuX3JlbmRlclZlcnNpb259YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldER5bmFtaWNDb25maWdJbXBsKHRoaXMuX3JlbmRlclZlcnNpb24sIGNvbmZpZ05hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0RXhwZXJpbWVudChcbiAgICBleHBlcmltZW50TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFeHBlcmltZW50RXZhbHVhdGlvbk9wdGlvbnMsXG4gICk6IEV4cGVyaW1lbnQge1xuICAgIExvZy5kZWJ1ZyhcbiAgICAgIGBnZXRFeHBlcmltZW50IGNhbGVkIGZvciAke2V4cGVyaW1lbnROYW1lfSwgcnY6ICR7dGhpcy5fcmVuZGVyVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0RXhwZXJpbWVudEltcGwoXG4gICAgICB0aGlzLl9yZW5kZXJWZXJzaW9uLFxuICAgICAgZXhwZXJpbWVudE5hbWUsXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gIH1cblxuICBnZXRMYXllcihsYXllck5hbWU6IHN0cmluZywgb3B0aW9ucz86IExheWVyRXZhbHVhdGlvbk9wdGlvbnMpOiBMYXllciB7XG4gICAgTG9nLmRlYnVnKGBnZXRMYXllciBjYWxlZCBmb3IgJHtsYXllck5hbWV9LCBydjogJHt0aGlzLl9yZW5kZXJWZXJzaW9ufWApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2dldExheWVySW1wbCh0aGlzLl9yZW5kZXJWZXJzaW9uLCBsYXllck5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgbG9nRXZlbnQoXG4gICAgZXZlbnROYW1lOiBTdGF0c2lnRXZlbnQgfCBzdHJpbmcsXG4gICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9jbGllbnQubG9nRXZlbnQoZXZlbnROYW1lLCB2YWx1ZSwgbWV0YWRhdGEpO1xuICB9XG5cbiAgdXBkYXRlVXNlckFzeW5jKFxuICAgIHVzZXI6IFN0YXRzaWdVc2VyLFxuICAgIG9wdGlvbnM/OiBEYXRhQWRhcHRlckFzeW5jT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC51cGRhdGVVc2VyQXN5bmModXNlciwgb3B0aW9ucyk7XG4gIH1cblxuICB1cGRhdGVVc2VyU3luYyh1c2VyOiBTdGF0c2lnVXNlciwgb3B0aW9ucz86IERhdGFBZGFwdGVyU3luY09wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9jbGllbnQudXBkYXRlVXNlclN5bmModXNlciwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRDbGllbnQoKTogU3RhdHNpZ0NsaWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudDtcbiAgfVxuXG4gIEBNZW1vaXplKCguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBbcnYsIGduLCBvcHRdID0gYXJncyBhcyBbXG4gICAgICBudW1iZXIsXG4gICAgICBzdHJpbmcsXG4gICAgICBGZWF0dXJlR2F0ZUV2YWx1YXRpb25PcHRpb25zLFxuICAgIF07XG4gICAgcmV0dXJuIGAke3J2fS0ke2dufS0ke0pTT04uc3RyaW5naWZ5KG9wdCl9YDtcbiAgfSlcbiAgcHJpdmF0ZSBfY2hlY2tHYXRlSW1wbChcbiAgICBfcnY6IG51bWJlcixcbiAgICBnYXRlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBGZWF0dXJlR2F0ZUV2YWx1YXRpb25PcHRpb25zLFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNoZWNrR2F0ZShnYXRlTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBATWVtb2l6ZSgoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgW3J2LCBnbiwgb3B0XSA9IGFyZ3MgYXMgW1xuICAgICAgbnVtYmVyLFxuICAgICAgc3RyaW5nLFxuICAgICAgRHluYW1pY0NvbmZpZ0V2YWx1YXRpb25PcHRpb25zLFxuICAgIF07XG4gICAgcmV0dXJuIGAke3J2fS0ke2dufS0ke0pTT04uc3RyaW5naWZ5KG9wdCl9YDtcbiAgfSlcbiAgcHJpdmF0ZSBfZ2V0RHluYW1pY0NvbmZpZ0ltcGwoXG4gICAgX3J2OiBudW1iZXIsXG4gICAgY29uZmlnTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBEeW5hbWljQ29uZmlnRXZhbHVhdGlvbk9wdGlvbnMsXG4gICk6IER5bmFtaWNDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQuZ2V0RHluYW1pY0NvbmZpZyhjb25maWdOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIEBNZW1vaXplKCguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBbcnYsIGVuLCBvcHRdID0gYXJncyBhcyBbbnVtYmVyLCBzdHJpbmcsIEV4cGVyaW1lbnRFdmFsdWF0aW9uT3B0aW9uc107XG4gICAgcmV0dXJuIGAke3J2fS0ke2VufS0ke0pTT04uc3RyaW5naWZ5KG9wdCl9YDtcbiAgfSlcbiAgcHJpdmF0ZSBfZ2V0RXhwZXJpbWVudEltcGwoXG4gICAgX3J2OiBudW1iZXIsXG4gICAgZXhwZXJpbWVudE5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogRXhwZXJpbWVudEV2YWx1YXRpb25PcHRpb25zLFxuICApOiBFeHBlcmltZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50LmdldEV4cGVyaW1lbnQoZXhwZXJpbWVudE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgQE1lbW9pemUoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbnN0IFtydiwgbG4sIG9wdF0gPSBhcmdzIGFzIFtudW1iZXIsIHN0cmluZywgTGF5ZXJFdmFsdWF0aW9uT3B0aW9uc107XG4gICAgcmV0dXJuIGAke3J2fS0ke2xufS0ke0pTT04uc3RyaW5naWZ5KG9wdCl9YDtcbiAgfSlcbiAgcHJpdmF0ZSBfZ2V0TGF5ZXJJbXBsKFxuICAgIF9ydjogbnVtYmVyLFxuICAgIGxheWVyTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBMYXllckV2YWx1YXRpb25PcHRpb25zLFxuICApOiBMYXllciB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5nZXRMYXllcihsYXllck5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tBbmRFbWl0TG9hZGluZ1N0YXR1cygpOiB2b2lkIHtcbiAgICBjb25zdCBpc1JlYWR5ID0gX2lzUmVhZHkodGhpcy5fY2xpZW50KTtcbiAgICBpZiAoaXNSZWFkeSkge1xuICAgICAgdGhpcy5faXNMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIExvZy5kZWJ1ZygnQ2xpZW50IGlzIG5vdyByZWFkeSwgbG9hZGluZyBzdGF0dXMgc2V0IHRvIGZhbHNlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lzTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIExvZy5kZWJ1ZygnQ2xpZW50IGlzIG5vdCByZWFkeSwgbG9hZGluZyBzdGF0dXMgc2V0IHRvIHRydWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vblZhbHVlc1VwZGF0ZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5fcmVuZGVyVmVyc2lvbisrO1xuICAgIExvZy5kZWJ1ZygnVmFsdWVzIHVwZGF0ZWQnLCB0aGlzLl9yZW5kZXJWZXJzaW9uKTtcbiAgICB0aGlzLl9jaGVja0FuZEVtaXRMb2FkaW5nU3RhdHVzKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9pc1JlYWR5KGNsaWVudDogU3RhdHNpZ0NsaWVudCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50LmxvYWRpbmdTdGF0dXMgPT09ICdSZWFkeSc7XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Generated bundle index. Do not edit.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./index"), exports);
21
+ //# sourceMappingURL=statsig-angular-bindings.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsig-angular-bindings.mjs","sources":["../../../../packages/angular-bindings/src/statsig-angular-bindings.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";AAAA;;AAEG;;;;;;;;;;;;;;;;AAEH,YAAwB,CAAA,OAAA,CAAA,SAAA,CAAA,EAAA,OAAA,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export { StatsigModule, STATSIG_INIT_CONFIG } from './statsig.module';
2
2
  export { StatsigService } from './statsig.service';
3
3
  export { CheckGateDirective } from './checkGate.directive';
4
+ //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function Memoize(keyGenerator: (...args: unknown[]) => string): MethodDecorator;
2
+ //# sourceMappingURL=memoizeDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoizeDecorator.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/memoizeDecorator.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CACrB,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,GAC3C,eAAe,CAuBjB"}
package/package.json CHANGED
@@ -1,12 +1,27 @@
1
1
  {
2
2
  "name": "@statsig/angular-bindings",
3
- "version": "3.6.1",
4
- "dependencies": {},
3
+ "version": "3.6.2-beta.2",
4
+ "dependencies": {
5
+ "tslib": "^2.3.0"
6
+ },
5
7
  "peerDependencies": {
6
8
  "@angular/core": ">=12.0.0",
7
9
  "@statsig/js-client": "3.6.0",
8
10
  "@statsig/client-core": "3.6.0",
9
11
  "rxjs": "^6.0.0 || ^7.0.0"
10
12
  },
11
- "sideEffects": false
12
- }
13
+ "sideEffects": false,
14
+ "module": "fesm2022/statsig-angular-bindings.mjs",
15
+ "typings": "index.d.ts",
16
+ "exports": {
17
+ "./package.json": {
18
+ "default": "./package.json"
19
+ },
20
+ ".": {
21
+ "types": "./index.d.ts",
22
+ "esm2022": "./esm2022/statsig-angular-bindings.mjs",
23
+ "esm": "./esm2022/statsig-angular-bindings.mjs",
24
+ "default": "./fesm2022/statsig-angular-bindings.mjs"
25
+ }
26
+ }
27
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsig-angular-bindings.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/statsig-angular-bindings.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { FeatureGateEvaluationOptions, StatsigClient, StatsigOptions, StatsigUser } from '@statsig/js-client';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./checkGate.directive";
5
+ type WithClient<T extends StatsigClient> = {
6
+ client: T;
7
+ };
8
+ type WithConfiguration = {
9
+ sdkKey: string;
10
+ user: StatsigUser;
11
+ options?: StatsigOptions;
12
+ };
13
+ export type StatsigInitConfig<T extends StatsigClient> = WithClient<T> | WithConfiguration;
14
+ export declare const STATSIG_INIT_CONFIG: InjectionToken<StatsigInitConfig<StatsigClient>>;
15
+ export type FeatureGateOptions = FeatureGateEvaluationOptions;
16
+ export declare class StatsigModule {
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<StatsigModule, never>;
18
+ static ɵmod: i0.ɵɵNgModuleDeclaration<StatsigModule, [typeof i1.CheckGateDirective], never, [typeof i1.CheckGateDirective]>;
19
+ static ɵinj: i0.ɵɵInjectorDeclaration<StatsigModule>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=statsig.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsig.module.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/statsig.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAY,MAAM,eAAe,CAAC;AAEzD,OAAO,EACL,4BAA4B,EAC5B,aAAa,EACb,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;;;AAI5B,KAAK,UAAU,CAAC,CAAC,SAAS,aAAa,IAAI;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC;AACzD,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,aAAa,IACjD,UAAU,CAAC,CAAC,CAAC,GACb,iBAAiB,CAAC;AAEtB,eAAO,MAAM,mBAAmB,kDAEZ,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE9D,qBAKa,aAAa;yCAAb,aAAa;0CAAb,aAAa;0CAAb,aAAa;CAAG"}
@@ -0,0 +1,31 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { DataAdapterAsyncOptions, DataAdapterSyncOptions, DynamicConfig, DynamicConfigEvaluationOptions, Experiment, ExperimentEvaluationOptions, FeatureGateEvaluationOptions, Layer, LayerEvaluationOptions, StatsigEvent, StatsigUser } from '@statsig/client-core';
4
+ import { StatsigClient } from '@statsig/js-client';
5
+ import { StatsigInitConfig } from './statsig.module';
6
+ import * as i0 from "@angular/core";
7
+ export declare class StatsigService implements OnDestroy {
8
+ private _renderVersion;
9
+ private _client;
10
+ private _isLoadingSubject;
11
+ isLoading$: Observable<boolean>;
12
+ constructor(provider: StatsigInitConfig<StatsigClient>);
13
+ ngOnDestroy(): void;
14
+ checkGate(gateName: string, options?: FeatureGateEvaluationOptions): boolean;
15
+ getDynamicConfig(configName: string, options?: DynamicConfigEvaluationOptions): DynamicConfig;
16
+ getExperiment(experimentName: string, options?: ExperimentEvaluationOptions): Experiment;
17
+ getLayer(layerName: string, options?: LayerEvaluationOptions): Layer;
18
+ logEvent(eventName: StatsigEvent | string, value?: string | number, metadata?: Record<string, string>): void;
19
+ updateUserAsync(user: StatsigUser, options?: DataAdapterAsyncOptions): Promise<void>;
20
+ updateUserSync(user: StatsigUser, options?: DataAdapterSyncOptions): void;
21
+ getClient(): StatsigClient;
22
+ private _checkGateImpl;
23
+ private _getDynamicConfigImpl;
24
+ private _getExperimentImpl;
25
+ private _getLayerImpl;
26
+ private _checkAndEmitLoadingStatus;
27
+ private _onValuesUpdated;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<StatsigService, never>;
29
+ static ɵprov: i0.ɵɵInjectableDeclaration<StatsigService>;
30
+ }
31
+ //# sourceMappingURL=statsig.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statsig.service.d.ts","sourceRoot":"","sources":["../../../packages/angular-bindings/src/statsig.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,SAAS,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;AAEnD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,EACb,8BAA8B,EAC9B,UAAU,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,EACL,sBAAsB,EAGtB,YAAY,EACZ,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAuB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;;AAE1E,qBAGa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAyC;gBAGzC,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC;IA+BzE,WAAW,IAAI,IAAI;IAOnB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO;IAM5E,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,8BAA8B,GACvC,aAAa;IAQhB,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,2BAA2B,GACpC,UAAU;IAYb,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,KAAK;IAMpE,QAAQ,CACN,SAAS,EAAE,YAAY,GAAG,MAAM,EAChC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,IAAI;IAIP,eAAe,CACb,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,IAAI,CAAC;IAIhB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,IAAI;IAIzE,SAAS,IAAI,aAAa;IAY1B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,gBAAgB,CAItB;yCAlLS,cAAc;6CAAd,cAAc;CAmL1B"}
package/.eslintrc.json DELETED
@@ -1,48 +0,0 @@
1
- {
2
- "extends": ["../../.eslintrc.json"],
3
- "ignorePatterns": ["!**/*"],
4
- "overrides": [
5
- {
6
- "files": ["*.ts"],
7
- "extends": [
8
- "plugin:@nx/angular",
9
- "plugin:@angular-eslint/template/process-inline-templates"
10
- ],
11
- "rules": {
12
- "@angular-eslint/directive-selector": [
13
- "error",
14
- {
15
- "type": "attribute",
16
- "prefix": "stg",
17
- "style": "camelCase"
18
- }
19
- ],
20
- "@angular-eslint/component-selector": [
21
- "error",
22
- {
23
- "type": "element",
24
- "prefix": "stg",
25
- "style": "kebab-case"
26
- }
27
- ]
28
- }
29
- },
30
- {
31
- "files": ["*.html"],
32
- "extends": ["plugin:@nx/angular-template"],
33
- "rules": {}
34
- },
35
- {
36
- "files": ["*.json"],
37
- "parser": "jsonc-eslint-parser",
38
- "rules": {
39
- "@nx/dependency-checks": [
40
- "error",
41
- {
42
- "ignoredDependencies": ["jest-preset-angular"]
43
- }
44
- ]
45
- }
46
- }
47
- ]
48
- }
package/jest.config.ts DELETED
@@ -1,22 +0,0 @@
1
- /* eslint-disable */
2
- export default {
3
- displayName: 'angular-bindings',
4
- preset: '../../jest.preset.js',
5
- setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
6
- coverageDirectory: '../../coverage/packages/angular-bindings',
7
- transform: {
8
- '^.+\\.(ts|mjs|js|html)$': [
9
- 'jest-preset-angular',
10
- {
11
- tsconfig: '<rootDir>/tsconfig.spec.json',
12
- stringifyContentPathRegex: '\\.(html|svg)$',
13
- },
14
- ],
15
- },
16
- transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
17
- snapshotSerializers: [
18
- 'jest-preset-angular/build/serializers/no-ng-attributes',
19
- 'jest-preset-angular/build/serializers/ng-snapshot',
20
- 'jest-preset-angular/build/serializers/html-comment',
21
- ],
22
- };
package/ng-package.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../dist/packages/angular-bindings",
4
- "lib": {
5
- "entryFile": "src/index.ts"
6
- },
7
- "assets": ["README.md", "LICENSE"]
8
- }
package/project.json DELETED
@@ -1,28 +0,0 @@
1
- {
2
- "name": "angular-bindings",
3
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "packages/angular-bindings/src",
5
- "prefix": "lib",
6
- "projectType": "library",
7
- "tags": [],
8
- "targets": {
9
- "build": {
10
- "executor": "@nx/angular:package",
11
- "outputs": ["{workspaceRoot}/dist/{projectRoot}"],
12
- "options": {
13
- "project": "packages/angular-bindings/ng-package.json",
14
- "tsConfig": "packages/angular-bindings/tsconfig.lib.json"
15
- }
16
- },
17
- "test": {
18
- "executor": "@nx/jest:jest",
19
- "outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
20
- "options": {
21
- "jestConfig": "packages/angular-bindings/jest.config.ts"
22
- }
23
- },
24
- "lint": {
25
- "executor": "@nx/eslint:lint"
26
- }
27
- }
28
- }
@@ -1,72 +0,0 @@
1
- import {
2
- Directive,
3
- Input,
4
- OnInit,
5
- TemplateRef,
6
- ViewContainerRef,
7
- } from '@angular/core';
8
-
9
- import { Log } from '@statsig/client-core';
10
-
11
- import { FeatureGateOptions } from './statsig.module';
12
- import { StatsigService } from './statsig.service';
13
-
14
- @Directive({
15
- selector: '[stgCheckGate]',
16
- })
17
- export class CheckGateDirective implements OnInit {
18
- private _gate = '';
19
- private _isHidden = true;
20
- private _options: FeatureGateOptions = {};
21
-
22
- @Input() set stgCheckGate(val: string) {
23
- Log.debug('Setting gate', val);
24
- if (val) {
25
- this._gate = val;
26
- this._updateView();
27
- }
28
- }
29
-
30
- @Input() set stgCheckGateOptions(val: FeatureGateOptions) {
31
- Log.debug('Setting options', val);
32
- if (val) {
33
- this._options = val;
34
- this._updateView();
35
- }
36
- }
37
-
38
- constructor(
39
- private _templateRef: TemplateRef<unknown>,
40
- private _viewContainer: ViewContainerRef,
41
- private _statsigService: StatsigService,
42
- ) {
43
- _statsigService.getClient().$on('values_updated', () => {
44
- this._updateView();
45
- });
46
- }
47
-
48
- ngOnInit(): void {
49
- if (this._gate) {
50
- this._updateView();
51
- }
52
- }
53
-
54
- private _updateView() {
55
- if (this._checkGate()) {
56
- if (this._isHidden) {
57
- Log.debug('Feature flag is enabled, showing the template');
58
- this._viewContainer.createEmbeddedView(this._templateRef);
59
- this._isHidden = false;
60
- }
61
- } else {
62
- this._viewContainer.clear();
63
- this._isHidden = true;
64
- }
65
- }
66
-
67
- private _checkGate() {
68
- return (
69
- this._gate && this._statsigService.checkGate(this._gate, this._options)
70
- );
71
- }
72
- }
@@ -1,26 +0,0 @@
1
- export function Memoize(
2
- keyGenerator: (...args: unknown[]) => string,
3
- ): MethodDecorator {
4
- return function (
5
- _target: object,
6
- _propertyKey: string | symbol,
7
- descriptor: PropertyDescriptor,
8
- ) {
9
- const orignal = descriptor.value as (...args: unknown[]) => unknown;
10
- const cache = new Map<string, unknown>();
11
-
12
- descriptor.value = function (...args: unknown[]) {
13
- const key = keyGenerator(...args);
14
-
15
- if (cache.has(key)) {
16
- return cache.get(key);
17
- }
18
-
19
- const result = orignal.apply(this, args);
20
- cache.set(key, result);
21
- return result;
22
- };
23
-
24
- return descriptor;
25
- };
26
- }
@@ -1,34 +0,0 @@
1
- import { InjectionToken, NgModule } from '@angular/core';
2
-
3
- import {
4
- FeatureGateEvaluationOptions,
5
- StatsigClient,
6
- StatsigOptions,
7
- StatsigUser,
8
- } from '@statsig/js-client';
9
-
10
- import { CheckGateDirective } from './checkGate.directive';
11
-
12
- type WithClient<T extends StatsigClient> = { client: T };
13
- type WithConfiguration = {
14
- sdkKey: string;
15
- user: StatsigUser;
16
- options?: StatsigOptions;
17
- };
18
-
19
- export type StatsigInitConfig<T extends StatsigClient> =
20
- | WithClient<T>
21
- | WithConfiguration;
22
-
23
- export const STATSIG_INIT_CONFIG = new InjectionToken<
24
- StatsigInitConfig<StatsigClient>
25
- >('StatsigProvider');
26
-
27
- export type FeatureGateOptions = FeatureGateEvaluationOptions;
28
-
29
- @NgModule({
30
- declarations: [CheckGateDirective],
31
- exports: [CheckGateDirective],
32
- providers: [],
33
- })
34
- export class StatsigModule {}
@@ -1,210 +0,0 @@
1
- import { Inject, Injectable, OnDestroy } from '@angular/core';
2
- import { BehaviorSubject, Observable } from 'rxjs';
3
-
4
- import {
5
- DataAdapterAsyncOptions,
6
- DataAdapterSyncOptions,
7
- DynamicConfig,
8
- DynamicConfigEvaluationOptions,
9
- Experiment,
10
- ExperimentEvaluationOptions,
11
- FeatureGateEvaluationOptions,
12
- Layer,
13
- LayerEvaluationOptions,
14
- Log,
15
- SDKType,
16
- StatsigEvent,
17
- StatsigUser,
18
- } from '@statsig/client-core';
19
- import { StatsigClient } from '@statsig/js-client';
20
-
21
- import { Memoize } from './memoizeDecorator';
22
- import { STATSIG_INIT_CONFIG, StatsigInitConfig } from './statsig.module';
23
-
24
- @Injectable({
25
- providedIn: 'root',
26
- })
27
- export class StatsigService implements OnDestroy {
28
- private _renderVersion = 0;
29
- private _client: StatsigClient;
30
-
31
- private _isLoadingSubject = new BehaviorSubject<boolean>(true);
32
- isLoading$: Observable<boolean> = this._isLoadingSubject.asObservable();
33
-
34
- constructor(
35
- @Inject(STATSIG_INIT_CONFIG) provider: StatsigInitConfig<StatsigClient>,
36
- ) {
37
- if ('client' in provider) {
38
- this._client = provider.client;
39
- } else if ('sdkKey' in provider && 'user' in provider) {
40
- this._client = new StatsigClient(
41
- provider.sdkKey,
42
- provider.user,
43
- provider.options,
44
- );
45
- this._client
46
- .initializeAsync()
47
- .catch((error) => {
48
- Log.error('Error initializing StatsigClient', error);
49
- })
50
- .finally(() => {
51
- this._isLoadingSubject.next(false);
52
- });
53
- } else {
54
- Log.error(
55
- 'Must provide a client or sdkKey and user to initialize StatsigService',
56
- );
57
- this._client = new StatsigClient('', {});
58
- }
59
- Log.debug('StatsigService created', this._client);
60
- this._checkAndEmitLoadingStatus();
61
- this._client.$on('values_updated', this._onValuesUpdated);
62
-
63
- SDKType._setBindingType('angular');
64
- }
65
-
66
- ngOnDestroy(): void {
67
- this._client.shutdown().catch((error) => {
68
- Log.error('An error occured during shutdown', error);
69
- });
70
- this._client.off('values_updated', this._onValuesUpdated);
71
- }
72
-
73
- checkGate(gateName: string, options?: FeatureGateEvaluationOptions): boolean {
74
- Log.debug(`checkGate caled for ${gateName}, rv: ${this._renderVersion}`);
75
-
76
- return this._checkGateImpl(this._renderVersion, gateName, options);
77
- }
78
-
79
- getDynamicConfig(
80
- configName: string,
81
- options?: DynamicConfigEvaluationOptions,
82
- ): DynamicConfig {
83
- Log.debug(
84
- `getDynamicConfig called for ${configName}, rv: ${this._renderVersion}`,
85
- );
86
-
87
- return this._getDynamicConfigImpl(this._renderVersion, configName, options);
88
- }
89
-
90
- getExperiment(
91
- experimentName: string,
92
- options?: ExperimentEvaluationOptions,
93
- ): Experiment {
94
- Log.debug(
95
- `getExperiment caled for ${experimentName}, rv: ${this._renderVersion}`,
96
- );
97
-
98
- return this._getExperimentImpl(
99
- this._renderVersion,
100
- experimentName,
101
- options,
102
- );
103
- }
104
-
105
- getLayer(layerName: string, options?: LayerEvaluationOptions): Layer {
106
- Log.debug(`getLayer caled for ${layerName}, rv: ${this._renderVersion}`);
107
-
108
- return this._getLayerImpl(this._renderVersion, layerName, options);
109
- }
110
-
111
- logEvent(
112
- eventName: StatsigEvent | string,
113
- value?: string | number,
114
- metadata?: Record<string, string>,
115
- ): void {
116
- this._client.logEvent(eventName, value, metadata);
117
- }
118
-
119
- updateUserAsync(
120
- user: StatsigUser,
121
- options?: DataAdapterAsyncOptions,
122
- ): Promise<void> {
123
- return this._client.updateUserAsync(user, options);
124
- }
125
-
126
- updateUserSync(user: StatsigUser, options?: DataAdapterSyncOptions): void {
127
- this._client.updateUserSync(user, options);
128
- }
129
-
130
- getClient(): StatsigClient {
131
- return this._client;
132
- }
133
-
134
- @Memoize((...args: unknown[]) => {
135
- const [rv, gn, opt] = args as [
136
- number,
137
- string,
138
- FeatureGateEvaluationOptions,
139
- ];
140
- return `${rv}-${gn}-${JSON.stringify(opt)}`;
141
- })
142
- private _checkGateImpl(
143
- _rv: number,
144
- gateName: string,
145
- options?: FeatureGateEvaluationOptions,
146
- ): boolean {
147
- return this._client.checkGate(gateName, options);
148
- }
149
-
150
- @Memoize((...args: unknown[]) => {
151
- const [rv, gn, opt] = args as [
152
- number,
153
- string,
154
- DynamicConfigEvaluationOptions,
155
- ];
156
- return `${rv}-${gn}-${JSON.stringify(opt)}`;
157
- })
158
- private _getDynamicConfigImpl(
159
- _rv: number,
160
- configName: string,
161
- options?: DynamicConfigEvaluationOptions,
162
- ): DynamicConfig {
163
- return this._client.getDynamicConfig(configName, options);
164
- }
165
-
166
- @Memoize((...args: unknown[]) => {
167
- const [rv, en, opt] = args as [number, string, ExperimentEvaluationOptions];
168
- return `${rv}-${en}-${JSON.stringify(opt)}`;
169
- })
170
- private _getExperimentImpl(
171
- _rv: number,
172
- experimentName: string,
173
- options?: ExperimentEvaluationOptions,
174
- ): Experiment {
175
- return this._client.getExperiment(experimentName, options);
176
- }
177
-
178
- @Memoize((...args: unknown[]) => {
179
- const [rv, ln, opt] = args as [number, string, LayerEvaluationOptions];
180
- return `${rv}-${ln}-${JSON.stringify(opt)}`;
181
- })
182
- private _getLayerImpl(
183
- _rv: number,
184
- layerName: string,
185
- options?: LayerEvaluationOptions,
186
- ): Layer {
187
- return this._client.getLayer(layerName, options);
188
- }
189
-
190
- private _checkAndEmitLoadingStatus(): void {
191
- const isReady = _isReady(this._client);
192
- if (isReady) {
193
- this._isLoadingSubject.next(false);
194
- Log.debug('Client is now ready, loading status set to false');
195
- } else {
196
- this._isLoadingSubject.next(true);
197
- Log.debug('Client is not ready, loading status set to true');
198
- }
199
- }
200
-
201
- private _onValuesUpdated = (): void => {
202
- this._renderVersion++;
203
- Log.debug('Values updated', this._renderVersion);
204
- this._checkAndEmitLoadingStatus();
205
- };
206
- }
207
-
208
- function _isReady(client: StatsigClient): boolean {
209
- return client.loadingStatus === 'Ready';
210
- }
package/src/test-setup.ts DELETED
@@ -1,9 +0,0 @@
1
- import 'jest-preset-angular/setup-jest';
2
-
3
- // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
4
- globalThis.ngJest = {
5
- testEnvironmentOptions: {
6
- errorOnUnknownElements: true,
7
- errorOnUnknownProperties: true,
8
- },
9
- };
package/tsconfig.json DELETED
@@ -1,24 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "jsx": "react-jsx",
5
- "experimentalDecorators": true,
6
- "emitDecoratorMetadata": true
7
- },
8
- "files": [],
9
- "include": [],
10
- "references": [
11
- {
12
- "path": "./tsconfig.lib.json"
13
- },
14
- {
15
- "path": "./tsconfig.spec.json"
16
- }
17
- ],
18
- "angularCompilerOptions": {
19
- "enableI18nLegacyMessageIdFormat": false,
20
- "strictInjectionParameters": true,
21
- "strictInputAccessModifiers": true,
22
- "strictTemplates": true
23
- }
24
- }
package/tsconfig.lib.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "declaration": true,
6
- "declarationMap": true,
7
- "types": []
8
- },
9
- "exclude": [
10
- "src/**/*.spec.ts",
11
- "src/test-setup.ts",
12
- "jest.config.ts",
13
- "src/**/*.test.ts"
14
- ],
15
- "include": ["src/**/*.ts"]
16
- }
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "module": "commonjs",
6
- "target": "es2016",
7
- "types": ["jest", "node"]
8
- },
9
- "files": ["src/test-setup.ts"],
10
- "include": [
11
- "jest.config.ts",
12
- "src/**/*.test.ts",
13
- "src/**/*.spec.ts",
14
- "src/**/*.d.ts"
15
- ]
16
- }