@featurevisor/sdk 0.19.0 → 0.20.0
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/CHANGELOG.md +11 -0
- package/dist/index.js +1 -1
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -1
- package/lib/index.d.ts +1 -2
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/{client.d.ts → instance.d.ts} +46 -19
- package/lib/{client.js → instance.js} +163 -56
- package/lib/instance.js.map +1 -0
- package/package.json +3 -3
- package/src/index.ts +1 -2
- package/src/{createInstance.spec.ts → instance.spec.ts} +3 -2
- package/src/{client.ts → instance.ts} +224 -66
- package/lib/client.js.map +0 -1
- package/lib/createInstance.d.ts +0 -58
- package/lib/createInstance.js +0 -180
- package/lib/createInstance.js.map +0 -1
- package/lib/statuses.d.ts +0 -4
- package/lib/statuses.js +0 -2
- package/lib/statuses.js.map +0 -1
- package/src/createInstance.ts +0 -306
- package/src/statuses.ts +0 -4
- /package/lib/{createInstance.spec.d.ts → instance.spec.d.ts} +0 -0
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Attributes,
|
|
3
|
-
VariationValue,
|
|
4
|
-
VariableValue,
|
|
5
|
-
Feature,
|
|
6
|
-
DatafileContent,
|
|
7
3
|
BucketKey,
|
|
8
4
|
BucketValue,
|
|
5
|
+
DatafileContent,
|
|
6
|
+
Feature,
|
|
9
7
|
FeatureKey,
|
|
10
|
-
VariationType,
|
|
11
|
-
VariableType,
|
|
12
|
-
StickyFeatures,
|
|
13
8
|
InitialFeatures,
|
|
9
|
+
StickyFeatures,
|
|
10
|
+
VariableType,
|
|
11
|
+
VariableValue,
|
|
12
|
+
VariationType,
|
|
13
|
+
VariationValue,
|
|
14
14
|
} from "@featurevisor/types";
|
|
15
|
+
|
|
16
|
+
import { createLogger, Logger } from "./logger";
|
|
15
17
|
import { DatafileReader } from "./datafileReader";
|
|
18
|
+
import { Emitter } from "./emitter";
|
|
19
|
+
import { getBucketedNumber } from "./bucket";
|
|
16
20
|
import {
|
|
17
21
|
getBucketedVariation,
|
|
18
22
|
getBucketedVariableValue,
|
|
19
23
|
getForcedVariation,
|
|
20
24
|
getForcedVariableValue,
|
|
21
25
|
} from "./feature";
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
import { Emitter } from "./emitter";
|
|
25
|
-
import { Statuses } from "./statuses";
|
|
26
|
+
|
|
27
|
+
export type ReadyCallback = () => void;
|
|
26
28
|
|
|
27
29
|
export type ActivationCallback = (
|
|
28
30
|
featureName: string,
|
|
@@ -33,17 +35,52 @@ export type ActivationCallback = (
|
|
|
33
35
|
|
|
34
36
|
export type ConfigureBucketValue = (feature, attributes, bucketValue: BucketValue) => BucketValue;
|
|
35
37
|
|
|
36
|
-
export interface
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
export interface Statuses {
|
|
39
|
+
ready: boolean;
|
|
40
|
+
refreshInProgress: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type Event = "ready" | "refresh" | "update" | "activation";
|
|
44
|
+
|
|
45
|
+
interface Listeners {
|
|
46
|
+
[key: string]: Function[];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface InstanceOptions {
|
|
39
50
|
configureBucketValue?: ConfigureBucketValue;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
stickyFeatures?: StickyFeatures;
|
|
51
|
+
datafile?: DatafileContent | string;
|
|
52
|
+
datafileUrl?: string;
|
|
53
|
+
handleDatafileFetch?: (datafileUrl: string) => Promise<DatafileContent>;
|
|
44
54
|
initialFeatures?: InitialFeatures;
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
56
|
+
logger?: Logger;
|
|
57
|
+
onActivation?: ActivationCallback;
|
|
58
|
+
onReady?: ReadyCallback;
|
|
59
|
+
onRefresh?: () => void;
|
|
60
|
+
onUpdate?: () => void;
|
|
61
|
+
refreshInterval?: number; // seconds
|
|
62
|
+
stickyFeatures?: StickyFeatures;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const emptyDatafile: DatafileContent = {
|
|
66
|
+
schemaVersion: "1",
|
|
67
|
+
revision: "unknown",
|
|
68
|
+
attributes: [],
|
|
69
|
+
segments: [],
|
|
70
|
+
features: [],
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export type DatafileFetchHandler = (datafileUrl: string) => Promise<DatafileContent>;
|
|
74
|
+
|
|
75
|
+
function fetchDatafileContent(
|
|
76
|
+
datafileUrl,
|
|
77
|
+
handleDatafileFetch?: DatafileFetchHandler,
|
|
78
|
+
): Promise<DatafileContent> {
|
|
79
|
+
if (handleDatafileFetch) {
|
|
80
|
+
return handleDatafileFetch(datafileUrl);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return fetch(datafileUrl).then((res) => res.json());
|
|
47
84
|
}
|
|
48
85
|
|
|
49
86
|
type FieldType = VariationType | VariableType;
|
|
@@ -73,54 +110,106 @@ export function getValueByType(value: ValueType, fieldType: FieldType): ValueTyp
|
|
|
73
110
|
}
|
|
74
111
|
}
|
|
75
112
|
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
export class FeaturevisorSDK {
|
|
79
|
-
private onActivation?: ActivationCallback;
|
|
80
|
-
private datafileReader: DatafileReader;
|
|
113
|
+
export class FeaturevisorInstance {
|
|
114
|
+
// from options
|
|
81
115
|
private configureBucketValue?: ConfigureBucketValue;
|
|
82
|
-
private
|
|
83
|
-
private
|
|
116
|
+
private datafileUrl?: string;
|
|
117
|
+
private handleDatafileFetch?: DatafileFetchHandler;
|
|
118
|
+
private initialFeatures?: InitialFeatures;
|
|
84
119
|
private interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
120
|
+
private logger: Logger;
|
|
121
|
+
private refreshInterval?: number; // seconds
|
|
85
122
|
private stickyFeatures?: StickyFeatures;
|
|
86
|
-
private initialFeatures?: InitialFeatures;
|
|
87
|
-
private statuses?: Statuses;
|
|
88
|
-
private fromInstance: boolean;
|
|
89
123
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
124
|
+
// internally created
|
|
125
|
+
private datafileReader: DatafileReader;
|
|
126
|
+
private emitter: Emitter;
|
|
127
|
+
private statuses: Statuses;
|
|
128
|
+
private intervalId?: ReturnType<typeof setInterval>;
|
|
129
|
+
|
|
130
|
+
// exposed from emitter
|
|
131
|
+
public on: Emitter["addListener"];
|
|
132
|
+
public addListener: Emitter["addListener"];
|
|
133
|
+
public off: Emitter["removeListener"];
|
|
134
|
+
public removeListener: Emitter["removeListener"];
|
|
135
|
+
public removeAllListeners: Emitter["removeAllListeners"];
|
|
136
|
+
|
|
137
|
+
constructor(options: InstanceOptions) {
|
|
138
|
+
// from options
|
|
139
|
+
this.configureBucketValue = options.configureBucketValue;
|
|
140
|
+
this.datafileUrl = options.datafileUrl;
|
|
141
|
+
this.handleDatafileFetch = options.handleDatafileFetch;
|
|
142
|
+
this.initialFeatures = options.initialFeatures;
|
|
143
|
+
this.interceptAttributes = options.interceptAttributes;
|
|
144
|
+
this.logger = options.logger || createLogger();
|
|
145
|
+
this.refreshInterval = options.refreshInterval;
|
|
146
|
+
this.stickyFeatures = options.stickyFeatures;
|
|
147
|
+
|
|
148
|
+
// internal
|
|
149
|
+
this.emitter = new Emitter();
|
|
150
|
+
this.statuses = {
|
|
151
|
+
ready: false,
|
|
152
|
+
refreshInProgress: false,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// register events
|
|
156
|
+
if (options.onReady) {
|
|
157
|
+
this.emitter.addListener("ready", options.onReady);
|
|
93
158
|
}
|
|
94
159
|
|
|
95
|
-
if (options.
|
|
96
|
-
this.
|
|
160
|
+
if (options.onRefresh) {
|
|
161
|
+
this.emitter.addListener("refresh", options.onRefresh);
|
|
97
162
|
}
|
|
98
163
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (options.interceptAttributes) {
|
|
102
|
-
this.interceptAttributes = options.interceptAttributes;
|
|
164
|
+
if (options.onUpdate) {
|
|
165
|
+
this.emitter.addListener("update", options.onUpdate);
|
|
103
166
|
}
|
|
104
167
|
|
|
105
|
-
if (options.
|
|
106
|
-
this.emitter
|
|
168
|
+
if (options.onActivation) {
|
|
169
|
+
this.emitter.addListener("activation", options.onActivation);
|
|
107
170
|
}
|
|
108
171
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
172
|
+
// expose emitter methods
|
|
173
|
+
const on = this.emitter.addListener.bind(this.emitter);
|
|
174
|
+
this.on = on;
|
|
175
|
+
this.addListener = on;
|
|
112
176
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
177
|
+
const off = this.emitter.removeListener.bind(this.emitter);
|
|
178
|
+
this.off = off;
|
|
179
|
+
this.removeListener = off;
|
|
116
180
|
|
|
117
|
-
|
|
118
|
-
this.statuses = options.statuses;
|
|
119
|
-
}
|
|
181
|
+
this.removeAllListeners = this.emitter.removeAllListeners.bind(this.emitter);
|
|
120
182
|
|
|
121
|
-
|
|
183
|
+
// datafile
|
|
184
|
+
if (options.datafileUrl) {
|
|
185
|
+
this.setDatafile(options.datafile || emptyDatafile);
|
|
122
186
|
|
|
123
|
-
|
|
187
|
+
fetchDatafileContent(options.datafileUrl, options.handleDatafileFetch)
|
|
188
|
+
.then((datafile) => {
|
|
189
|
+
this.setDatafile(datafile);
|
|
190
|
+
|
|
191
|
+
this.statuses.ready = true;
|
|
192
|
+
this.emitter.emit("ready");
|
|
193
|
+
|
|
194
|
+
if (this.refreshInterval) {
|
|
195
|
+
this.startRefreshing();
|
|
196
|
+
}
|
|
197
|
+
})
|
|
198
|
+
.catch((e) => {
|
|
199
|
+
this.logger.error("failed to fetch datafile", { error: e });
|
|
200
|
+
});
|
|
201
|
+
} else if (options.datafile) {
|
|
202
|
+
this.setDatafile(options.datafile);
|
|
203
|
+
this.statuses.ready = true;
|
|
204
|
+
|
|
205
|
+
setTimeout(() => {
|
|
206
|
+
this.emitter.emit("ready");
|
|
207
|
+
}, 0);
|
|
208
|
+
} else {
|
|
209
|
+
throw new Error(
|
|
210
|
+
"Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options",
|
|
211
|
+
);
|
|
212
|
+
}
|
|
124
213
|
}
|
|
125
214
|
|
|
126
215
|
setDatafile(datafile: DatafileContent | string) {
|
|
@@ -148,9 +237,80 @@ export class FeaturevisorSDK {
|
|
|
148
237
|
}
|
|
149
238
|
|
|
150
239
|
/**
|
|
151
|
-
*
|
|
240
|
+
* Statuses
|
|
152
241
|
*/
|
|
242
|
+
isReady(): boolean {
|
|
243
|
+
return this.statuses.ready;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Refresh
|
|
248
|
+
*/
|
|
249
|
+
refresh() {
|
|
250
|
+
this.logger.debug("refreshing datafile");
|
|
251
|
+
|
|
252
|
+
if (this.statuses.refreshInProgress) {
|
|
253
|
+
return this.logger.warn("refresh in progress, skipping");
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (!this.datafileUrl) {
|
|
257
|
+
return this.logger.error("cannot refresh since `datafileUrl` is not provided");
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
this.statuses.refreshInProgress = true;
|
|
261
|
+
|
|
262
|
+
fetchDatafileContent(this.datafileUrl, this.handleDatafileFetch)
|
|
263
|
+
.then((datafile) => {
|
|
264
|
+
const currentRevision = this.getRevision();
|
|
265
|
+
const newRevision = datafile.revision;
|
|
266
|
+
const isNotSameRevision = currentRevision !== newRevision;
|
|
267
|
+
|
|
268
|
+
this.setDatafile(datafile);
|
|
269
|
+
this.logger.info("refreshed datafile");
|
|
270
|
+
|
|
271
|
+
this.emitter.emit("refresh");
|
|
272
|
+
|
|
273
|
+
if (isNotSameRevision) {
|
|
274
|
+
this.emitter.emit("update");
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
this.statuses.refreshInProgress = false;
|
|
278
|
+
})
|
|
279
|
+
.catch((e) => {
|
|
280
|
+
this.logger.error("failed to refresh datafile", { error: e });
|
|
281
|
+
this.statuses.refreshInProgress = false;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
153
284
|
|
|
285
|
+
startRefreshing() {
|
|
286
|
+
if (!this.datafileUrl) {
|
|
287
|
+
return this.logger.error("cannot start refreshing since `datafileUrl` is not provided");
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (this.intervalId) {
|
|
291
|
+
return this.logger.warn("refreshing has already started");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (!this.refreshInterval) {
|
|
295
|
+
return this.logger.warn("no `refreshInterval` option provided");
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
this.intervalId = setInterval(() => {
|
|
299
|
+
this.refresh();
|
|
300
|
+
}, this.refreshInterval * 1000);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
stopRefreshing() {
|
|
304
|
+
if (!this.intervalId) {
|
|
305
|
+
return this.logger.warn("refreshing has not started yet");
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
clearInterval(this.intervalId);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Bucketing
|
|
313
|
+
*/
|
|
154
314
|
private getBucketKey(feature: Feature, attributes: Attributes): BucketKey {
|
|
155
315
|
const featureKey = feature.key;
|
|
156
316
|
|
|
@@ -328,19 +488,13 @@ export class FeaturevisorSDK {
|
|
|
328
488
|
}
|
|
329
489
|
});
|
|
330
490
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
if (this.fromInstance && this.onActivation) {
|
|
342
|
-
this.onActivation(featureKey, variationValue, finalAttributes, captureAttributes);
|
|
343
|
-
}
|
|
491
|
+
this.emitter.emit(
|
|
492
|
+
"activation",
|
|
493
|
+
featureKey,
|
|
494
|
+
variationValue,
|
|
495
|
+
finalAttributes,
|
|
496
|
+
captureAttributes,
|
|
497
|
+
);
|
|
344
498
|
|
|
345
499
|
return variationValue;
|
|
346
500
|
} catch (e) {
|
|
@@ -540,3 +694,7 @@ export class FeaturevisorSDK {
|
|
|
540
694
|
return getValueByType(variableValue, "json") as T | undefined;
|
|
541
695
|
}
|
|
542
696
|
}
|
|
697
|
+
|
|
698
|
+
export function createInstance(options: InstanceOptions): FeaturevisorInstance {
|
|
699
|
+
return new FeaturevisorInstance(options);
|
|
700
|
+
}
|
package/lib/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/createInstance.d.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { DatafileContent, Attributes, StickyFeatures, InitialFeatures } from "@featurevisor/types";
|
|
2
|
-
import { FeaturevisorSDK, ConfigureBucketValue, ActivationCallback } from "./client";
|
|
3
|
-
import { Logger } from "./logger";
|
|
4
|
-
import { Emitter } from "./emitter";
|
|
5
|
-
export type ReadyCallback = () => void;
|
|
6
|
-
export interface InstanceOptions {
|
|
7
|
-
datafile?: DatafileContent | string;
|
|
8
|
-
onActivation?: ActivationCallback;
|
|
9
|
-
configureBucketValue?: ConfigureBucketValue;
|
|
10
|
-
datafileUrl?: string;
|
|
11
|
-
onReady?: ReadyCallback;
|
|
12
|
-
handleDatafileFetch?: (datafileUrl: string) => Promise<DatafileContent>;
|
|
13
|
-
logger?: Logger;
|
|
14
|
-
interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
15
|
-
refreshInterval?: number;
|
|
16
|
-
onRefresh?: () => void;
|
|
17
|
-
onUpdate?: () => void;
|
|
18
|
-
stickyFeatures?: StickyFeatures;
|
|
19
|
-
initialFeatures?: InitialFeatures;
|
|
20
|
-
}
|
|
21
|
-
export type Event = "ready" | "refresh" | "update" | "activation";
|
|
22
|
-
export interface FeaturevisorInstance {
|
|
23
|
-
/**
|
|
24
|
-
* From FeaturevisorSDK
|
|
25
|
-
*/
|
|
26
|
-
getVariation: FeaturevisorSDK["getVariation"];
|
|
27
|
-
getVariationBoolean: FeaturevisorSDK["getVariationBoolean"];
|
|
28
|
-
getVariationInteger: FeaturevisorSDK["getVariationInteger"];
|
|
29
|
-
getVariationDouble: FeaturevisorSDK["getVariationDouble"];
|
|
30
|
-
getVariationString: FeaturevisorSDK["getVariationString"];
|
|
31
|
-
activate: FeaturevisorSDK["activate"];
|
|
32
|
-
activateBoolean: FeaturevisorSDK["activateBoolean"];
|
|
33
|
-
activateInteger: FeaturevisorSDK["activateInteger"];
|
|
34
|
-
activateDouble: FeaturevisorSDK["activateDouble"];
|
|
35
|
-
activateString: FeaturevisorSDK["activateString"];
|
|
36
|
-
getVariable: FeaturevisorSDK["getVariable"];
|
|
37
|
-
getVariableBoolean: FeaturevisorSDK["getVariableBoolean"];
|
|
38
|
-
getVariableInteger: FeaturevisorSDK["getVariableInteger"];
|
|
39
|
-
getVariableDouble: FeaturevisorSDK["getVariableDouble"];
|
|
40
|
-
getVariableString: FeaturevisorSDK["getVariableString"];
|
|
41
|
-
getVariableArray: FeaturevisorSDK["getVariableArray"];
|
|
42
|
-
getVariableObject: FeaturevisorSDK["getVariableObject"];
|
|
43
|
-
/**
|
|
44
|
-
* Additions
|
|
45
|
-
*/
|
|
46
|
-
setLogLevels: Logger["setLevels"];
|
|
47
|
-
setStickyFeatures: FeaturevisorSDK["setStickyFeatures"];
|
|
48
|
-
refresh: () => void;
|
|
49
|
-
startRefreshing: () => void;
|
|
50
|
-
stopRefreshing: () => void;
|
|
51
|
-
addListener: Emitter["addListener"];
|
|
52
|
-
on: Emitter["addListener"];
|
|
53
|
-
removeListener: Emitter["removeListener"];
|
|
54
|
-
off: Emitter["removeListener"];
|
|
55
|
-
removeAllListeners: Emitter["removeAllListeners"];
|
|
56
|
-
isReady: () => boolean;
|
|
57
|
-
}
|
|
58
|
-
export declare function createInstance(options: InstanceOptions): FeaturevisorInstance;
|
package/lib/createInstance.js
DELETED
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { FeaturevisorSDK } from "./client";
|
|
2
|
-
import { createLogger } from "./logger";
|
|
3
|
-
import { Emitter } from "./emitter";
|
|
4
|
-
function fetchDatafileContent(datafileUrl, options) {
|
|
5
|
-
if (options.handleDatafileFetch) {
|
|
6
|
-
return options.handleDatafileFetch(datafileUrl);
|
|
7
|
-
}
|
|
8
|
-
return fetch(datafileUrl).then(function (res) { return res.json(); });
|
|
9
|
-
}
|
|
10
|
-
function getInstanceFromSdk(sdk, options, logger, emitter, statuses) {
|
|
11
|
-
var intervalId;
|
|
12
|
-
var on = emitter.addListener.bind(emitter);
|
|
13
|
-
var off = emitter.removeListener.bind(emitter);
|
|
14
|
-
var instance = {
|
|
15
|
-
// variation
|
|
16
|
-
getVariation: sdk.getVariation.bind(sdk),
|
|
17
|
-
getVariationBoolean: sdk.getVariationBoolean.bind(sdk),
|
|
18
|
-
getVariationInteger: sdk.getVariationInteger.bind(sdk),
|
|
19
|
-
getVariationDouble: sdk.getVariationDouble.bind(sdk),
|
|
20
|
-
getVariationString: sdk.getVariationString.bind(sdk),
|
|
21
|
-
// activate
|
|
22
|
-
activate: sdk.activate.bind(sdk),
|
|
23
|
-
activateBoolean: sdk.activateBoolean.bind(sdk),
|
|
24
|
-
activateInteger: sdk.activateInteger.bind(sdk),
|
|
25
|
-
activateDouble: sdk.activateDouble.bind(sdk),
|
|
26
|
-
activateString: sdk.activateString.bind(sdk),
|
|
27
|
-
// variable
|
|
28
|
-
getVariable: sdk.getVariable.bind(sdk),
|
|
29
|
-
getVariableBoolean: sdk.getVariableBoolean.bind(sdk),
|
|
30
|
-
getVariableInteger: sdk.getVariableInteger.bind(sdk),
|
|
31
|
-
getVariableDouble: sdk.getVariableDouble.bind(sdk),
|
|
32
|
-
getVariableString: sdk.getVariableString.bind(sdk),
|
|
33
|
-
getVariableArray: sdk.getVariableArray.bind(sdk),
|
|
34
|
-
getVariableObject: sdk.getVariableObject.bind(sdk),
|
|
35
|
-
// additions
|
|
36
|
-
setLogLevels: logger.setLevels.bind(logger),
|
|
37
|
-
setStickyFeatures: sdk.setStickyFeatures.bind(sdk),
|
|
38
|
-
// emitter
|
|
39
|
-
on: on,
|
|
40
|
-
addListener: on,
|
|
41
|
-
off: off,
|
|
42
|
-
removeListener: off,
|
|
43
|
-
removeAllListeners: emitter.removeAllListeners.bind(emitter),
|
|
44
|
-
// refresh
|
|
45
|
-
refresh: function () {
|
|
46
|
-
logger.debug("refreshing datafile");
|
|
47
|
-
if (statuses.refreshInProgress) {
|
|
48
|
-
return logger.warn("refresh in progress, skipping");
|
|
49
|
-
}
|
|
50
|
-
if (!options.datafileUrl) {
|
|
51
|
-
return logger.error("cannot refresh since `datafileUrl` is not provided");
|
|
52
|
-
}
|
|
53
|
-
statuses.refreshInProgress = true;
|
|
54
|
-
fetchDatafileContent(options.datafileUrl, options)
|
|
55
|
-
.then(function (datafile) {
|
|
56
|
-
var currentRevision = sdk.getRevision();
|
|
57
|
-
var newRevision = datafile.revision;
|
|
58
|
-
var isNotSameRevision = currentRevision !== newRevision;
|
|
59
|
-
sdk.setDatafile(datafile);
|
|
60
|
-
logger.info("refreshed datafile");
|
|
61
|
-
emitter.emit("refresh");
|
|
62
|
-
if (isNotSameRevision) {
|
|
63
|
-
emitter.emit("update");
|
|
64
|
-
}
|
|
65
|
-
statuses.refreshInProgress = false;
|
|
66
|
-
})
|
|
67
|
-
.catch(function (e) {
|
|
68
|
-
logger.error("failed to refresh datafile", { error: e });
|
|
69
|
-
statuses.refreshInProgress = false;
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
startRefreshing: function () {
|
|
73
|
-
if (!options.datafileUrl) {
|
|
74
|
-
return logger.error("cannot start refreshing since `datafileUrl` is not provided");
|
|
75
|
-
}
|
|
76
|
-
if (intervalId) {
|
|
77
|
-
return logger.warn("refreshing has already started");
|
|
78
|
-
}
|
|
79
|
-
if (!options.refreshInterval) {
|
|
80
|
-
return logger.warn("no `refreshInterval` option provided");
|
|
81
|
-
}
|
|
82
|
-
intervalId = setInterval(function () {
|
|
83
|
-
instance.refresh();
|
|
84
|
-
}, options.refreshInterval * 1000);
|
|
85
|
-
},
|
|
86
|
-
stopRefreshing: function () {
|
|
87
|
-
if (!intervalId) {
|
|
88
|
-
return logger.warn("refreshing has not started yet");
|
|
89
|
-
}
|
|
90
|
-
clearInterval(intervalId);
|
|
91
|
-
},
|
|
92
|
-
isReady: function () {
|
|
93
|
-
return statuses.ready;
|
|
94
|
-
},
|
|
95
|
-
};
|
|
96
|
-
if (options.datafileUrl && options.refreshInterval) {
|
|
97
|
-
instance.startRefreshing();
|
|
98
|
-
}
|
|
99
|
-
return instance;
|
|
100
|
-
}
|
|
101
|
-
var emptyDatafile = {
|
|
102
|
-
schemaVersion: "1",
|
|
103
|
-
revision: "unknown",
|
|
104
|
-
attributes: [],
|
|
105
|
-
segments: [],
|
|
106
|
-
features: [],
|
|
107
|
-
};
|
|
108
|
-
export function createInstance(options) {
|
|
109
|
-
if (!options.datafile && !options.datafileUrl) {
|
|
110
|
-
throw new Error("Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options");
|
|
111
|
-
}
|
|
112
|
-
var logger = options.logger || createLogger();
|
|
113
|
-
var emitter = new Emitter();
|
|
114
|
-
var statuses = {
|
|
115
|
-
ready: false,
|
|
116
|
-
refreshInProgress: false,
|
|
117
|
-
};
|
|
118
|
-
if (!options.datafileUrl && options.refreshInterval) {
|
|
119
|
-
logger.warn("refreshing datafile requires `datafileUrl` option");
|
|
120
|
-
}
|
|
121
|
-
if (options.onReady) {
|
|
122
|
-
emitter.addListener("ready", options.onReady);
|
|
123
|
-
}
|
|
124
|
-
if (options.onActivation) {
|
|
125
|
-
emitter.addListener("activation", options.onActivation);
|
|
126
|
-
}
|
|
127
|
-
if (options.onRefresh) {
|
|
128
|
-
emitter.addListener("refresh", options.onRefresh);
|
|
129
|
-
}
|
|
130
|
-
if (options.onUpdate) {
|
|
131
|
-
emitter.addListener("update", options.onUpdate);
|
|
132
|
-
}
|
|
133
|
-
// datafile content is already provided
|
|
134
|
-
if (options.datafile) {
|
|
135
|
-
var sdk_1 = new FeaturevisorSDK({
|
|
136
|
-
datafile: options.datafile,
|
|
137
|
-
onActivation: options.onActivation,
|
|
138
|
-
configureBucketValue: options.configureBucketValue,
|
|
139
|
-
logger: logger,
|
|
140
|
-
emitter: emitter,
|
|
141
|
-
interceptAttributes: options.interceptAttributes,
|
|
142
|
-
stickyFeatures: options.stickyFeatures,
|
|
143
|
-
initialFeatures: options.initialFeatures,
|
|
144
|
-
statuses: statuses,
|
|
145
|
-
fromInstance: true,
|
|
146
|
-
});
|
|
147
|
-
statuses.ready = true;
|
|
148
|
-
setTimeout(function () {
|
|
149
|
-
emitter.emit("ready");
|
|
150
|
-
}, 0);
|
|
151
|
-
return getInstanceFromSdk(sdk_1, options, logger, emitter, statuses);
|
|
152
|
-
}
|
|
153
|
-
// datafile has to be fetched
|
|
154
|
-
var sdk = new FeaturevisorSDK({
|
|
155
|
-
datafile: emptyDatafile,
|
|
156
|
-
onActivation: options.onActivation,
|
|
157
|
-
configureBucketValue: options.configureBucketValue,
|
|
158
|
-
logger: logger,
|
|
159
|
-
emitter: emitter,
|
|
160
|
-
interceptAttributes: options.interceptAttributes,
|
|
161
|
-
stickyFeatures: options.stickyFeatures,
|
|
162
|
-
initialFeatures: options.initialFeatures,
|
|
163
|
-
statuses: statuses,
|
|
164
|
-
fromInstance: true,
|
|
165
|
-
});
|
|
166
|
-
if (options.datafileUrl) {
|
|
167
|
-
fetchDatafileContent(options.datafileUrl, options)
|
|
168
|
-
.then(function (datafile) {
|
|
169
|
-
sdk.setDatafile(datafile);
|
|
170
|
-
statuses.ready = true;
|
|
171
|
-
emitter.emit("ready");
|
|
172
|
-
})
|
|
173
|
-
.catch(function (e) {
|
|
174
|
-
logger.error("failed to fetch datafile:");
|
|
175
|
-
console.error(e);
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
return getInstanceFromSdk(sdk, options, logger, emitter, statuses);
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=createInstance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createInstance.js","sourceRoot":"","sources":["../src/createInstance.ts"],"names":[],"mappings":"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"}
|
package/lib/statuses.d.ts
DELETED
package/lib/statuses.js
DELETED
package/lib/statuses.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"statuses.js","sourceRoot":"","sources":["../src/statuses.ts"],"names":[],"mappings":""}
|