@featbit/js-client-sdk 3.0.11 → 3.0.13

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.
Files changed (147) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +301 -301
  3. package/dist/esm/FbClientCore.d.ts.map +1 -1
  4. package/dist/esm/FbClientCore.js +1 -1
  5. package/dist/esm/FbClientCore.js.map +1 -1
  6. package/dist/esm/data-sources/DataSourceUpdates.d.ts +2 -2
  7. package/dist/esm/data-sources/DataSourceUpdates.d.ts.map +1 -1
  8. package/dist/esm/data-sources/DataSourceUpdates.js +55 -51
  9. package/dist/esm/data-sources/DataSourceUpdates.js.map +1 -1
  10. package/dist/esm/data-sources/createStreamListeners.d.ts +0 -9
  11. package/dist/esm/data-sources/createStreamListeners.d.ts.map +1 -1
  12. package/dist/esm/data-sources/createStreamListeners.js +10 -10
  13. package/dist/esm/data-sources/createStreamListeners.js.map +1 -1
  14. package/dist/esm/data-sync/IDataSynchronizer.d.ts +1 -1
  15. package/dist/esm/data-sync/IDataSynchronizer.d.ts.map +1 -1
  16. package/dist/esm/data-sync/NullDataSynchronizer.d.ts +1 -1
  17. package/dist/esm/data-sync/NullDataSynchronizer.d.ts.map +1 -1
  18. package/dist/esm/data-sync/NullDataSynchronizer.js +11 -0
  19. package/dist/esm/data-sync/NullDataSynchronizer.js.map +1 -1
  20. package/dist/esm/data-sync/PollingDataSynchronizer.d.ts +1 -1
  21. package/dist/esm/data-sync/PollingDataSynchronizer.d.ts.map +1 -1
  22. package/dist/esm/data-sync/PollingDataSynchronizer.js +42 -17
  23. package/dist/esm/data-sync/PollingDataSynchronizer.js.map +1 -1
  24. package/dist/esm/data-sync/WebSocketDataSynchronizer.d.ts +2 -1
  25. package/dist/esm/data-sync/WebSocketDataSynchronizer.d.ts.map +1 -1
  26. package/dist/esm/data-sync/WebSocketDataSynchronizer.js +20 -6
  27. package/dist/esm/data-sync/WebSocketDataSynchronizer.js.map +1 -1
  28. package/dist/esm/data-sync/types.d.ts +1 -1
  29. package/dist/esm/data-sync/types.d.ts.map +1 -1
  30. package/dist/esm/integrations/test_data/TestDataSynchronizer.d.ts +1 -1
  31. package/dist/esm/integrations/test_data/TestDataSynchronizer.d.ts.map +1 -1
  32. package/dist/esm/integrations/test_data/TestDataSynchronizer.js +3 -1
  33. package/dist/esm/integrations/test_data/TestDataSynchronizer.js.map +1 -1
  34. package/dist/esm/platform/browser/BrowserWebSocket.d.ts.map +1 -1
  35. package/dist/esm/platform/browser/BrowserWebSocket.js +4 -0
  36. package/dist/esm/platform/browser/BrowserWebSocket.js.map +1 -1
  37. package/dist/esm/store/IDataSourceUpdates.d.ts +2 -2
  38. package/dist/esm/store/IDataSourceUpdates.d.ts.map +1 -1
  39. package/dist/esm/version.d.ts +1 -1
  40. package/dist/esm/version.js +1 -1
  41. package/dist/umd/{featbit-js-client-sdk-3.0.11.js → featbit-js-client-sdk-3.0.13.js} +2 -2
  42. package/dist/umd/featbit-js-client-sdk-3.0.13.js.map +1 -0
  43. package/dist/umd/featbit-js-client-sdk.js +1 -1
  44. package/dist/umd/featbit-js-client-sdk.js.map +1 -1
  45. package/package.json +46 -46
  46. package/src/Configuration.ts +232 -232
  47. package/src/Context.ts +61 -61
  48. package/src/FbClientBuilder.ts +167 -167
  49. package/src/FbClientCore.ts +405 -401
  50. package/src/IContextProperty.ts +3 -3
  51. package/src/IDataKind.ts +11 -11
  52. package/src/IFbClient.ts +29 -29
  53. package/src/IFbClientCore.ts +290 -290
  54. package/src/IVersionedData.ts +18 -18
  55. package/src/bootstrap/IBootstrapProvider.ts +4 -4
  56. package/src/bootstrap/JsonBootstrapProvider.ts +34 -34
  57. package/src/bootstrap/NullBootstrapProvider.ts +20 -20
  58. package/src/bootstrap/index.ts +2 -2
  59. package/src/constants.ts +1 -1
  60. package/src/data-sources/DataSourceUpdates.ts +116 -116
  61. package/src/data-sources/createStreamListeners.ts +67 -66
  62. package/src/data-sources/index.ts +1 -1
  63. package/src/data-sync/DataSyncMode.ts +3 -3
  64. package/src/data-sync/IDataSynchronizer.ts +15 -15
  65. package/src/data-sync/IRequestor.ts +10 -10
  66. package/src/data-sync/NullDataSynchronizer.ts +14 -14
  67. package/src/data-sync/PollingDataSynchronizer.ts +125 -111
  68. package/src/data-sync/Requestor.ts +61 -61
  69. package/src/data-sync/WebSocketDataSynchronizer.ts +77 -73
  70. package/src/data-sync/index.ts +8 -8
  71. package/src/data-sync/types.ts +19 -19
  72. package/src/data-sync/utils.ts +31 -31
  73. package/src/errors.ts +47 -47
  74. package/src/evaluation/EvalResult.ts +35 -35
  75. package/src/evaluation/Evaluator.ts +26 -26
  76. package/src/evaluation/IEvalDetail.ts +23 -23
  77. package/src/evaluation/ReasonKinds.ts +9 -9
  78. package/src/evaluation/data/IFlag.ts +29 -29
  79. package/src/evaluation/index.ts +4 -4
  80. package/src/events/DefaultEventProcessor.ts +83 -83
  81. package/src/events/DefaultEventQueue.ts +49 -49
  82. package/src/events/DefaultEventSender.ts +73 -73
  83. package/src/events/DefaultEventSerializer.ts +11 -11
  84. package/src/events/EventDispatcher.ts +127 -127
  85. package/src/events/EventSerializer.ts +4 -4
  86. package/src/events/IEventProcessor.ts +8 -8
  87. package/src/events/IEventQueue.ts +16 -16
  88. package/src/events/IEventSender.ts +13 -13
  89. package/src/events/NullEventProcessor.ts +15 -15
  90. package/src/events/event.ts +129 -129
  91. package/src/events/index.ts +11 -11
  92. package/src/index.ts +21 -21
  93. package/src/integrations/TestLogger.ts +24 -24
  94. package/src/integrations/index.ts +1 -1
  95. package/src/integrations/test_data/FlagBuilder.ts +59 -59
  96. package/src/integrations/test_data/TestData.ts +57 -57
  97. package/src/integrations/test_data/TestDataSynchronizer.ts +49 -49
  98. package/src/integrations/test_data/index.ts +4 -4
  99. package/src/logging/BasicLogger.ts +108 -108
  100. package/src/logging/IBasicLoggerOptions.ts +46 -46
  101. package/src/logging/ILogger.ts +49 -49
  102. package/src/logging/LogLevel.ts +8 -8
  103. package/src/logging/SafeLogger.ts +69 -69
  104. package/src/logging/format.ts +154 -154
  105. package/src/logging/index.ts +5 -5
  106. package/src/options/ClientContext.ts +39 -39
  107. package/src/options/IClientContext.ts +53 -53
  108. package/src/options/IOptions.ts +123 -123
  109. package/src/options/IUser.ts +6 -6
  110. package/src/options/IValidatedOptions.ts +29 -29
  111. package/src/options/OptionMessages.ts +35 -35
  112. package/src/options/UserBuilder.ts +35 -35
  113. package/src/options/Validators.ts +300 -300
  114. package/src/options/index.ts +7 -7
  115. package/src/platform/IInfo.ts +102 -102
  116. package/src/platform/IPlatform.ts +20 -20
  117. package/src/platform/IStore.ts +112 -112
  118. package/src/platform/IWebSocket.ts +22 -22
  119. package/src/platform/browser/BrowserInfo.ts +24 -24
  120. package/src/platform/browser/BrowserPlatform.ts +19 -19
  121. package/src/platform/browser/BrowserRequests.ts +6 -6
  122. package/src/platform/browser/BrowserWebSocket.ts +147 -142
  123. package/src/platform/browser/FbClient.ts +65 -65
  124. package/src/platform/browser/LocalStorageStore.ts +59 -59
  125. package/src/platform/index.ts +11 -11
  126. package/src/platform/requests.ts +76 -76
  127. package/src/store/BaseStore.ts +125 -125
  128. package/src/store/DataKinds.ts +6 -6
  129. package/src/store/IDataSourceUpdates.ts +68 -68
  130. package/src/store/InMemoryStore.ts +36 -36
  131. package/src/store/index.ts +5 -5
  132. package/src/store/serialization.ts +52 -52
  133. package/src/store/store.ts +37 -37
  134. package/src/utils/Emits.ts +75 -75
  135. package/src/utils/EventEmitter.ts +128 -128
  136. package/src/utils/IEventEmitter.ts +14 -14
  137. package/src/utils/Regex.ts +21 -21
  138. package/src/utils/ValueConverters.ts +55 -55
  139. package/src/utils/canonicalizeUri.ts +3 -3
  140. package/src/utils/debounce.ts +33 -33
  141. package/src/utils/http.ts +40 -40
  142. package/src/utils/index.ts +5 -5
  143. package/src/utils/isNullOrUndefined.ts +2 -2
  144. package/src/utils/serializeUser.ts +27 -27
  145. package/src/utils/sleep.ts +5 -5
  146. package/src/version.ts +1 -1
  147. package/dist/umd/featbit-js-client-sdk-3.0.11.js.map +0 -1
@@ -1,130 +1,130 @@
1
- import { IUser } from "../options/IUser";
2
- import { IVariation } from "../evaluation/data/IFlag";
3
-
4
- export interface IEvent {
5
- hash: string;
6
- }
7
-
8
- export class AsyncEvent implements IEvent {
9
- private readonly isCompletedPromise?: Promise<AsyncEvent>;
10
- private resolveFn?: (value: AsyncEvent) => void;
11
- timestamp = (new Date()).getTime();
12
-
13
- get hash(): string {
14
- return this.timestamp.toString();
15
- }
16
-
17
- constructor() {
18
- this.isCompletedPromise = new Promise<AsyncEvent>((resolve) => {
19
- this.resolveFn = resolve;
20
- });
21
- }
22
-
23
- waitForCompletion(): Promise<AsyncEvent> {
24
- return this.isCompletedPromise!;
25
- }
26
-
27
- complete() {
28
- this.resolveFn?.(this);
29
- }
30
- }
31
-
32
- export class FlushEvent extends AsyncEvent {
33
- }
34
-
35
- export class ShutdownEvent extends AsyncEvent {
36
- }
37
-
38
- export class PayloadEvent implements IEvent {
39
- timestamp = (new Date()).getTime();
40
-
41
- get hash(): string {
42
- return this.timestamp.toString();
43
- }
44
-
45
- toPayload(): any {
46
- };
47
- }
48
-
49
- export class MetricEvent extends PayloadEvent {
50
- constructor(
51
- public user: IUser,
52
- public eventName: string,
53
- public appType: string,
54
- public metricValue: number
55
- ) {
56
- super();
57
- }
58
-
59
- private userPayload() {
60
- return {
61
- keyId: this.user.keyId,
62
- name: this.user.name,
63
- customizedProperties: this.user.customizedProperties
64
- }
65
- }
66
-
67
- toPayload(): any {
68
- return {
69
- user: this.userPayload(),
70
- metrics: [{
71
- route: 'index/metric',
72
- timestamp: this.timestamp,
73
- numericValue: this.metricValue,
74
- appType: this.appType,
75
- eventName: this.eventName,
76
- type: 'CustomEvent'
77
- }]
78
- }
79
- }
80
-
81
- get hash(): string {
82
- const payload = this.toPayload();
83
- const hasObject = {
84
- user: payload.user,
85
- metrics: payload.metrics.map((m: any) => ({...m, timestamp: undefined}))
86
- }
87
- return JSON.stringify(hasObject);
88
- }
89
- }
90
-
91
- export class EvalEvent extends PayloadEvent {
92
- constructor(
93
- public user: IUser,
94
- public flagKey: string,
95
- public variation: IVariation,
96
- public sendToExperiment: boolean
97
- ) {
98
- super();
99
- }
100
-
101
- private userPayload() {
102
- return {
103
- keyId: this.user.keyId,
104
- name: this.user.name,
105
- customizedProperties: this.user.customizedProperties
106
- }
107
- }
108
-
109
- toPayload(): any {
110
- return {
111
- user: this.userPayload(),
112
- variations: [{
113
- featureFlagKey: this.flagKey,
114
- sendToExperiment: this.sendToExperiment,
115
- timestamp: this.timestamp,
116
- variation: this.variation
117
- }]
118
- }
119
- }
120
-
121
- get hash(): string {
122
- const payload = this.toPayload();
123
- const hasObject = {
124
- user: payload.user,
125
- variations: payload.variations.map((m: any) => ({...m, timestamp: undefined}))
126
- }
127
-
128
- return JSON.stringify(hasObject);
129
- }
1
+ import { IUser } from "../options/IUser";
2
+ import { IVariation } from "../evaluation/data/IFlag";
3
+
4
+ export interface IEvent {
5
+ hash: string;
6
+ }
7
+
8
+ export class AsyncEvent implements IEvent {
9
+ private readonly isCompletedPromise?: Promise<AsyncEvent>;
10
+ private resolveFn?: (value: AsyncEvent) => void;
11
+ timestamp = (new Date()).getTime();
12
+
13
+ get hash(): string {
14
+ return this.timestamp.toString();
15
+ }
16
+
17
+ constructor() {
18
+ this.isCompletedPromise = new Promise<AsyncEvent>((resolve) => {
19
+ this.resolveFn = resolve;
20
+ });
21
+ }
22
+
23
+ waitForCompletion(): Promise<AsyncEvent> {
24
+ return this.isCompletedPromise!;
25
+ }
26
+
27
+ complete() {
28
+ this.resolveFn?.(this);
29
+ }
30
+ }
31
+
32
+ export class FlushEvent extends AsyncEvent {
33
+ }
34
+
35
+ export class ShutdownEvent extends AsyncEvent {
36
+ }
37
+
38
+ export class PayloadEvent implements IEvent {
39
+ timestamp = (new Date()).getTime();
40
+
41
+ get hash(): string {
42
+ return this.timestamp.toString();
43
+ }
44
+
45
+ toPayload(): any {
46
+ };
47
+ }
48
+
49
+ export class MetricEvent extends PayloadEvent {
50
+ constructor(
51
+ public user: IUser,
52
+ public eventName: string,
53
+ public appType: string,
54
+ public metricValue: number
55
+ ) {
56
+ super();
57
+ }
58
+
59
+ private userPayload() {
60
+ return {
61
+ keyId: this.user.keyId,
62
+ name: this.user.name,
63
+ customizedProperties: this.user.customizedProperties
64
+ }
65
+ }
66
+
67
+ toPayload(): any {
68
+ return {
69
+ user: this.userPayload(),
70
+ metrics: [{
71
+ route: 'index/metric',
72
+ timestamp: this.timestamp,
73
+ numericValue: this.metricValue,
74
+ appType: this.appType,
75
+ eventName: this.eventName,
76
+ type: 'CustomEvent'
77
+ }]
78
+ }
79
+ }
80
+
81
+ get hash(): string {
82
+ const payload = this.toPayload();
83
+ const hasObject = {
84
+ user: payload.user,
85
+ metrics: payload.metrics.map((m: any) => ({...m, timestamp: undefined}))
86
+ }
87
+ return JSON.stringify(hasObject);
88
+ }
89
+ }
90
+
91
+ export class EvalEvent extends PayloadEvent {
92
+ constructor(
93
+ public user: IUser,
94
+ public flagKey: string,
95
+ public variation: IVariation,
96
+ public sendToExperiment: boolean
97
+ ) {
98
+ super();
99
+ }
100
+
101
+ private userPayload() {
102
+ return {
103
+ keyId: this.user.keyId,
104
+ name: this.user.name,
105
+ customizedProperties: this.user.customizedProperties
106
+ }
107
+ }
108
+
109
+ toPayload(): any {
110
+ return {
111
+ user: this.userPayload(),
112
+ variations: [{
113
+ featureFlagKey: this.flagKey,
114
+ sendToExperiment: this.sendToExperiment,
115
+ timestamp: this.timestamp,
116
+ variation: this.variation
117
+ }]
118
+ }
119
+ }
120
+
121
+ get hash(): string {
122
+ const payload = this.toPayload();
123
+ const hasObject = {
124
+ user: payload.user,
125
+ variations: payload.variations.map((m: any) => ({...m, timestamp: undefined}))
126
+ }
127
+
128
+ return JSON.stringify(hasObject);
129
+ }
130
130
  }
@@ -1,11 +1,11 @@
1
- export * from './DefaultEventProcessor';
2
- export * from './DefaultEventQueue';
3
- export * from './DefaultEventSender';
4
- export * from './DefaultEventSerializer';
5
- export * from './event';
6
- export * from './EventDispatcher';
7
- export * from './EventSerializer';
8
- export * from './IEventProcessor';
9
- export * from './IEventQueue';
10
- export * from './IEventSender';
11
- export * from './NullEventProcessor';
1
+ export * from './DefaultEventProcessor';
2
+ export * from './DefaultEventQueue';
3
+ export * from './DefaultEventSender';
4
+ export * from './DefaultEventSerializer';
5
+ export * from './event';
6
+ export * from './EventDispatcher';
7
+ export * from './EventSerializer';
8
+ export * from './IEventProcessor';
9
+ export * from './IEventQueue';
10
+ export * from './IEventSender';
11
+ export * from './NullEventProcessor';
package/src/index.ts CHANGED
@@ -1,21 +1,21 @@
1
- export * from './bootstrap';
2
- export * from './data-sources';
3
- export * from './evaluation';
4
- export * from './events';
5
- export * from './logging';
6
- export * from './options';
7
- export * from './platform';
8
- export * from './store';
9
- export * from './data-sync';
10
- export * from './utils';
11
-
12
- export * from './Configuration';
13
- export * from './constants';
14
- export * from './Context';
15
- export * from './errors';
16
- export * from './FbClientBuilder';
17
- export * from './IContextProperty';
18
- export * from './IDataKind';
19
- export * from './IFbClient';
20
- export * from './IVersionedData';
21
- export * from './FbClientCore';
1
+ export * from './bootstrap';
2
+ export * from './data-sources';
3
+ export * from './evaluation';
4
+ export * from './events';
5
+ export * from './logging';
6
+ export * from './options';
7
+ export * from './platform';
8
+ export * from './store';
9
+ export * from './data-sync';
10
+ export * from './utils';
11
+
12
+ export * from './Configuration';
13
+ export * from './constants';
14
+ export * from './Context';
15
+ export * from './errors';
16
+ export * from './FbClientBuilder';
17
+ export * from './IContextProperty';
18
+ export * from './IDataKind';
19
+ export * from './IFbClient';
20
+ export * from './IVersionedData';
21
+ export * from './FbClientCore';
@@ -1,25 +1,25 @@
1
- import { ILogger } from "../logging/ILogger";
2
-
3
- export class TestLogger implements ILogger {
4
- public logs: string[] = [];
5
-
6
- error(...args: any[]): void {
7
- this.logs.push(args.join(' '));
8
- }
9
-
10
- warn(...args: any[]): void {
11
- this.logs.push(args.join(' '));
12
- }
13
-
14
- info(...args: any[]): void {
15
- this.logs.push(args.join(' '));
16
- }
17
-
18
- debug(...args: any[]): void {
19
- this.logs.push(args.join(' '));
20
- }
21
-
22
- reset() {
23
- this.logs = [];
24
- }
1
+ import { ILogger } from "../logging/ILogger";
2
+
3
+ export class TestLogger implements ILogger {
4
+ public logs: string[] = [];
5
+
6
+ error(...args: any[]): void {
7
+ this.logs.push(args.join(' '));
8
+ }
9
+
10
+ warn(...args: any[]): void {
11
+ this.logs.push(args.join(' '));
12
+ }
13
+
14
+ info(...args: any[]): void {
15
+ this.logs.push(args.join(' '));
16
+ }
17
+
18
+ debug(...args: any[]): void {
19
+ this.logs.push(args.join(' '));
20
+ }
21
+
22
+ reset() {
23
+ this.logs = [];
24
+ }
25
25
  }
@@ -1,2 +1,2 @@
1
- export * from './test_data';
1
+ export * from './test_data';
2
2
  export { TestLogger } from './TestLogger';
@@ -1,60 +1,60 @@
1
- // used only by tests
2
- import { IFlag, VariationDataType, IVariation, FlagValue } from "../../evaluation/data/IFlag";
3
-
4
- export class FlagBuilder {
5
- private _id: string = `xxxxx-${new Date().getTime()}-xxxxxx`;
6
- private _key?: string;
7
- private _version?: number;
8
- private _variationType: VariationDataType = VariationDataType.empty;
9
- private _sendToExperiment: boolean = false;
10
- private _variation: FlagValue = '';
11
- private _variations: IVariation[] = [];
12
-
13
- id(id: string): FlagBuilder {
14
- this._id = id;
15
- return this;
16
- }
17
-
18
- key(key: string): FlagBuilder {
19
- this._key = key;
20
- return this;
21
- }
22
-
23
- version(version: number): FlagBuilder {
24
- this._version = version
25
- return this;
26
- }
27
-
28
- sendToExperiment(val: boolean): FlagBuilder {
29
- this._sendToExperiment = val
30
- return this;
31
- }
32
-
33
- variation(variation: FlagValue): FlagBuilder {
34
- this._variation = variation
35
- return this;
36
- }
37
-
38
- variationType(variationType: VariationDataType): FlagBuilder {
39
- this._variationType = variationType
40
- return this;
41
- }
42
-
43
- variations(variations: IVariation[]): FlagBuilder {
44
- this._variations = variations
45
- return this;
46
- }
47
-
48
- build(): IFlag {
49
- return {
50
- id: this._id!,
51
- key: this._key!,
52
- version: this._version!,
53
- variationType: this._variationType,
54
- variations: this._variations,
55
- sendToExperiment: this._sendToExperiment,
56
- variation: this._variation,
57
- timestamp: new Date().getTime()
58
- };
59
- }
1
+ // used only by tests
2
+ import { IFlag, VariationDataType, IVariation, FlagValue } from "../../evaluation/data/IFlag";
3
+
4
+ export class FlagBuilder {
5
+ private _id: string = `xxxxx-${new Date().getTime()}-xxxxxx`;
6
+ private _key?: string;
7
+ private _version?: number;
8
+ private _variationType: VariationDataType = VariationDataType.empty;
9
+ private _sendToExperiment: boolean = false;
10
+ private _variation: FlagValue = '';
11
+ private _variations: IVariation[] = [];
12
+
13
+ id(id: string): FlagBuilder {
14
+ this._id = id;
15
+ return this;
16
+ }
17
+
18
+ key(key: string): FlagBuilder {
19
+ this._key = key;
20
+ return this;
21
+ }
22
+
23
+ version(version: number): FlagBuilder {
24
+ this._version = version
25
+ return this;
26
+ }
27
+
28
+ sendToExperiment(val: boolean): FlagBuilder {
29
+ this._sendToExperiment = val
30
+ return this;
31
+ }
32
+
33
+ variation(variation: FlagValue): FlagBuilder {
34
+ this._variation = variation
35
+ return this;
36
+ }
37
+
38
+ variationType(variationType: VariationDataType): FlagBuilder {
39
+ this._variationType = variationType
40
+ return this;
41
+ }
42
+
43
+ variations(variations: IVariation[]): FlagBuilder {
44
+ this._variations = variations
45
+ return this;
46
+ }
47
+
48
+ build(): IFlag {
49
+ return {
50
+ id: this._id!,
51
+ key: this._key!,
52
+ version: this._version!,
53
+ variationType: this._variationType,
54
+ variations: this._variations,
55
+ sendToExperiment: this._sendToExperiment,
56
+ variation: this._variation,
57
+ timestamp: new Date().getTime()
58
+ };
59
+ }
60
60
  }
@@ -1,58 +1,58 @@
1
- import { IFlag } from "../../evaluation/data/IFlag";
2
- import TestDataSynchronizer from "./TestDataSynchronizer";
3
- import { IClientContext } from "../../options/IClientContext";
4
- import { IDataSourceUpdates } from "../../store/IDataSourceUpdates";
5
- import { VoidFunction } from "../../utils/VoidFunction";
6
- import { createStreamListeners } from "../../data-sources/createStreamListeners";
7
- import { IStore } from "../../platform/IStore";
8
- import DataKinds from "../../store/DataKinds";
9
-
10
- export default class TestData {
11
- private currentFlags: IFlag[] = [];
12
-
13
- private dataSynchronizer: TestDataSynchronizer | undefined;
14
-
15
- private store: IStore = {} as IStore;
16
-
17
- /**
18
- * Get a factory for update processors that will be attached to this TestData instance.
19
- * @returns An update processor factory.
20
- */
21
- getFactory() {
22
- // Provides an arrow function to prevent needed to bind the method to
23
- // maintain `this`.
24
- return (
25
- clientContext: IClientContext,
26
- store: IStore,
27
- dataSourceUpdates: IDataSourceUpdates,
28
- initSuccessHandler: VoidFunction,
29
- _errorHandler?: (e: Error) => void,
30
- ) => {
31
- this.store = store;
32
-
33
- const listeners = createStreamListeners(
34
- dataSourceUpdates,
35
- clientContext.logger,
36
- {
37
- put: initSuccessHandler,
38
- },
39
- );
40
-
41
- this.dataSynchronizer = new TestDataSynchronizer(
42
- dataSourceUpdates,
43
- Object.values(this.currentFlags),
44
- () => {},
45
- listeners,
46
- );
47
-
48
- return this.dataSynchronizer;
49
- }
50
- }
51
-
52
- update(flag: IFlag): Promise<void> {
53
- const oldVersion = this.store.get(DataKinds.Flags, flag.id)?.version || 0;
54
- const newFlag = { ...flag, version: oldVersion + 1, key: flag.id };
55
-
56
- return this.dataSynchronizer!.upsert(DataKinds.Flags, newFlag);
57
- }
1
+ import { IFlag } from "../../evaluation/data/IFlag";
2
+ import TestDataSynchronizer from "./TestDataSynchronizer";
3
+ import { IClientContext } from "../../options/IClientContext";
4
+ import { IDataSourceUpdates } from "../../store/IDataSourceUpdates";
5
+ import { VoidFunction } from "../../utils/VoidFunction";
6
+ import { createStreamListeners } from "../../data-sources/createStreamListeners";
7
+ import { IStore } from "../../platform/IStore";
8
+ import DataKinds from "../../store/DataKinds";
9
+
10
+ export default class TestData {
11
+ private currentFlags: IFlag[] = [];
12
+
13
+ private dataSynchronizer: TestDataSynchronizer | undefined;
14
+
15
+ private store: IStore = {} as IStore;
16
+
17
+ /**
18
+ * Get a factory for update processors that will be attached to this TestData instance.
19
+ * @returns An update processor factory.
20
+ */
21
+ getFactory() {
22
+ // Provides an arrow function to prevent needed to bind the method to
23
+ // maintain `this`.
24
+ return (
25
+ clientContext: IClientContext,
26
+ store: IStore,
27
+ dataSourceUpdates: IDataSourceUpdates,
28
+ initSuccessHandler: VoidFunction,
29
+ _errorHandler?: (e: Error) => void,
30
+ ) => {
31
+ this.store = store;
32
+
33
+ const listeners = createStreamListeners(
34
+ dataSourceUpdates,
35
+ clientContext.logger,
36
+ {
37
+ put: initSuccessHandler,
38
+ },
39
+ );
40
+
41
+ this.dataSynchronizer = new TestDataSynchronizer(
42
+ dataSourceUpdates,
43
+ Object.values(this.currentFlags),
44
+ () => {},
45
+ listeners,
46
+ );
47
+
48
+ return this.dataSynchronizer;
49
+ }
50
+ }
51
+
52
+ update(flag: IFlag): Promise<void> {
53
+ const oldVersion = this.store.get(DataKinds.Flags, flag.id)?.version || 0;
54
+ const newFlag = { ...flag, version: oldVersion + 1, key: flag.id };
55
+
56
+ return this.dataSynchronizer!.upsert(DataKinds.Flags, newFlag);
57
+ }
58
58
  }