@featurevisor/sdk 0.18.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 +22 -0
- package/dist/index.js +1 -1
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -1
- package/lib/conditions.js +9 -0
- package/lib/conditions.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/conditions.spec.ts +44 -0
- package/src/conditions.ts +11 -0
- 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
package/lib/conditions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,UAAU,kBAAkB,CAAC,SAAyB,EAAE,UAAsB;IAC1E,IAAA,SAAS,GAAsB,SAAS,UAA/B,EAAE,QAAQ,GAAY,SAAS,SAArB,EAAE,KAAK,GAAK,SAAS,MAAd,CAAe;IAEjD,IAAI,QAAQ,KAAK,QAAQ,EAAE;QACzB,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;KACxC;SAAM,IAAI,QAAQ,KAAK,WAAW,EAAE;QACnC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC;KACxC;SAAM,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxD,mBAAmB;QACnB,IAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAkB,CAAC;QAEjE,IAAM,gBAAgB,GACpB,iBAAiB,YAAY,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACtF,IAAM,eAAe,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAe,CAAC,CAAC;QAElF,OAAO,QAAQ,KAAK,QAAQ;YAC1B,CAAC,CAAC,gBAAgB,GAAG,eAAe;YACpC,CAAC,CAAC,gBAAgB,GAAG,eAAe,CAAC;KACxC;SAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5E,QAAQ;QACR,IAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAW,CAAC;QAE1D,IAAI,QAAQ,KAAK,IAAI,EAAE;YACrB,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;YAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD;KACF;SAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACjF,SAAS;QACT,IAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAW,CAAC;QAE1D,IAAI,QAAQ,KAAK,UAAU,EAAE;YAC3B,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,QAAQ,KAAK,aAAa,EAAE;YACrC,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,QAAQ,KAAK,YAAY,EAAE;YACpC,OAAO,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC5C;aAAM,IAAI,QAAQ,KAAK,UAAU,EAAE;YAClC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC1C;aAAM,IAAI,QAAQ,KAAK,cAAc,EAAE;YACtC,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SACxD;aAAM,IAAI,QAAQ,KAAK,iBAAiB,EAAE;YACzC,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SACxD;aAAM,IAAI,QAAQ,KAAK,mBAAmB,EAAE;YAC3C,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SACxD;aAAM,IAAI,QAAQ,KAAK,2BAA2B,EAAE;YACnD,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACvD;aAAM,IAAI,QAAQ,KAAK,gBAAgB,EAAE;YACxC,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACzD;aAAM,IAAI,QAAQ,KAAK,wBAAwB,EAAE;YAChD,OAAO,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACvD;KACF;SAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACjF,UAAU;QACV,IAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,CAAW,CAAC;QAE1D,IAAI,QAAQ,KAAK,aAAa,EAAE;YAC9B,OAAO,iBAAiB,GAAG,KAAK,CAAC;SAClC;aAAM,IAAI,QAAQ,KAAK,qBAAqB,EAAE;YAC7C,OAAO,iBAAiB,IAAI,KAAK,CAAC;SACnC;aAAM,IAAI,QAAQ,KAAK,UAAU,EAAE;YAClC,OAAO,iBAAiB,GAAG,KAAK,CAAC;SAClC;aAAM,IAAI,QAAQ,KAAK,kBAAkB,EAAE;YAC1C,OAAO,iBAAiB,IAAI,KAAK,CAAC;SACnC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAAmC,EACnC,UAAsB;IAEtB,IAAI,WAAW,IAAI,UAAU,EAAE;QAC7B,OAAO,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACnD;IAED,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACxD,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,uBAAuB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAtC,CAAsC,CAAC,CAAC;KAC5E;IAED,IAAI,IAAI,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;QACtD,OAAO,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,uBAAuB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAtC,CAAsC,CAAC,CAAC;KAC1E;IAED,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QACxD,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CACzB,UAAC,CAAC;YACA,OAAA,uBAAuB,CACrB;gBACE,GAAG,EAAE,UAAU,CAAC,GAAG;aACpB,EACD,UAAU,CACX,KAAK,KAAK;QALX,CAKW,CACd,CAAC;KACH;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,OAAO,UAAU,CAAC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,uBAAuB,CAAC,CAAC,EAAE,UAAU,CAAC,EAAtC,CAAsC,CAAC,CAAC;KACxE;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC"}
|
|
@@ -1,40 +1,66 @@
|
|
|
1
|
-
import { Attributes,
|
|
1
|
+
import { Attributes, BucketValue, DatafileContent, Feature, FeatureKey, InitialFeatures, StickyFeatures, VariableType, VariableValue, VariationType, VariationValue } from "@featurevisor/types";
|
|
2
2
|
import { Logger } from "./logger";
|
|
3
3
|
import { Emitter } from "./emitter";
|
|
4
|
-
|
|
4
|
+
export type ReadyCallback = () => void;
|
|
5
5
|
export type ActivationCallback = (featureName: string, variation: VariationValue, attributes: Attributes, captureAttributes: Attributes) => void;
|
|
6
6
|
export type ConfigureBucketValue = (feature: any, attributes: any, bucketValue: BucketValue) => BucketValue;
|
|
7
|
-
export interface
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export interface Statuses {
|
|
8
|
+
ready: boolean;
|
|
9
|
+
refreshInProgress: boolean;
|
|
10
|
+
}
|
|
11
|
+
export type Event = "ready" | "refresh" | "update" | "activation";
|
|
12
|
+
export interface InstanceOptions {
|
|
10
13
|
configureBucketValue?: ConfigureBucketValue;
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
datafile?: DatafileContent | string;
|
|
15
|
+
datafileUrl?: string;
|
|
16
|
+
handleDatafileFetch?: (datafileUrl: string) => Promise<DatafileContent>;
|
|
17
|
+
initialFeatures?: InitialFeatures;
|
|
13
18
|
interceptAttributes?: (attributes: Attributes) => Attributes;
|
|
19
|
+
logger?: Logger;
|
|
20
|
+
onActivation?: ActivationCallback;
|
|
21
|
+
onReady?: ReadyCallback;
|
|
22
|
+
onRefresh?: () => void;
|
|
23
|
+
onUpdate?: () => void;
|
|
24
|
+
refreshInterval?: number;
|
|
14
25
|
stickyFeatures?: StickyFeatures;
|
|
15
|
-
initialFeatures?: InitialFeatures;
|
|
16
|
-
statuses?: Statuses;
|
|
17
|
-
fromInstance?: boolean;
|
|
18
26
|
}
|
|
27
|
+
export type DatafileFetchHandler = (datafileUrl: string) => Promise<DatafileContent>;
|
|
19
28
|
type FieldType = VariationType | VariableType;
|
|
20
29
|
type ValueType = VariableValue;
|
|
21
30
|
export declare function getValueByType(value: ValueType, fieldType: FieldType): ValueType;
|
|
22
|
-
export declare class
|
|
23
|
-
private onActivation?;
|
|
24
|
-
private datafileReader;
|
|
31
|
+
export declare class FeaturevisorInstance {
|
|
25
32
|
private configureBucketValue?;
|
|
26
|
-
private
|
|
27
|
-
private
|
|
33
|
+
private datafileUrl?;
|
|
34
|
+
private handleDatafileFetch?;
|
|
35
|
+
private initialFeatures?;
|
|
28
36
|
private interceptAttributes?;
|
|
37
|
+
private logger;
|
|
38
|
+
private refreshInterval?;
|
|
29
39
|
private stickyFeatures?;
|
|
30
|
-
private
|
|
31
|
-
private
|
|
32
|
-
private
|
|
33
|
-
|
|
40
|
+
private datafileReader;
|
|
41
|
+
private emitter;
|
|
42
|
+
private statuses;
|
|
43
|
+
private intervalId?;
|
|
44
|
+
on: Emitter["addListener"];
|
|
45
|
+
addListener: Emitter["addListener"];
|
|
46
|
+
off: Emitter["removeListener"];
|
|
47
|
+
removeListener: Emitter["removeListener"];
|
|
48
|
+
removeAllListeners: Emitter["removeAllListeners"];
|
|
49
|
+
constructor(options: InstanceOptions);
|
|
34
50
|
setDatafile(datafile: DatafileContent | string): void;
|
|
35
51
|
setStickyFeatures(stickyFeatures: StickyFeatures | undefined): void;
|
|
36
52
|
getRevision(): string;
|
|
37
53
|
private getFeature;
|
|
54
|
+
/**
|
|
55
|
+
* Statuses
|
|
56
|
+
*/
|
|
57
|
+
isReady(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Refresh
|
|
60
|
+
*/
|
|
61
|
+
refresh(): void;
|
|
62
|
+
startRefreshing(): void;
|
|
63
|
+
stopRefreshing(): void;
|
|
38
64
|
/**
|
|
39
65
|
* Bucketing
|
|
40
66
|
*/
|
|
@@ -68,4 +94,5 @@ export declare class FeaturevisorSDK {
|
|
|
68
94
|
getVariableObject<T>(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): T | undefined;
|
|
69
95
|
getVariableJSON<T>(featureKey: FeatureKey | Feature, variableKey: string, attributes?: Attributes): T | undefined;
|
|
70
96
|
}
|
|
97
|
+
export declare function createInstance(options: InstanceOptions): FeaturevisorInstance;
|
|
71
98
|
export {};
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
import { createLogger } from "./logger";
|
|
1
2
|
import { DatafileReader } from "./datafileReader";
|
|
2
|
-
import {
|
|
3
|
+
import { Emitter } from "./emitter";
|
|
3
4
|
import { getBucketedNumber } from "./bucket";
|
|
4
|
-
import {
|
|
5
|
+
import { getBucketedVariation, getBucketedVariableValue, getForcedVariation, getForcedVariableValue, } from "./feature";
|
|
6
|
+
var emptyDatafile = {
|
|
7
|
+
schemaVersion: "1",
|
|
8
|
+
revision: "unknown",
|
|
9
|
+
attributes: [],
|
|
10
|
+
segments: [],
|
|
11
|
+
features: [],
|
|
12
|
+
};
|
|
13
|
+
function fetchDatafileContent(datafileUrl, handleDatafileFetch) {
|
|
14
|
+
if (handleDatafileFetch) {
|
|
15
|
+
return handleDatafileFetch(datafileUrl);
|
|
16
|
+
}
|
|
17
|
+
return fetch(datafileUrl).then(function (res) { return res.json(); });
|
|
18
|
+
}
|
|
5
19
|
export function getValueByType(value, fieldType) {
|
|
6
20
|
if (value === undefined) {
|
|
7
21
|
return undefined;
|
|
@@ -24,36 +38,73 @@ export function getValueByType(value, fieldType) {
|
|
|
24
38
|
return value;
|
|
25
39
|
}
|
|
26
40
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
var FeaturevisorInstance = /** @class */ (function () {
|
|
42
|
+
function FeaturevisorInstance(options) {
|
|
43
|
+
var _this = this;
|
|
44
|
+
// from options
|
|
45
|
+
this.configureBucketValue = options.configureBucketValue;
|
|
46
|
+
this.datafileUrl = options.datafileUrl;
|
|
47
|
+
this.handleDatafileFetch = options.handleDatafileFetch;
|
|
48
|
+
this.initialFeatures = options.initialFeatures;
|
|
49
|
+
this.interceptAttributes = options.interceptAttributes;
|
|
50
|
+
this.logger = options.logger || createLogger();
|
|
51
|
+
this.refreshInterval = options.refreshInterval;
|
|
52
|
+
this.stickyFeatures = options.stickyFeatures;
|
|
53
|
+
// internal
|
|
54
|
+
this.emitter = new Emitter();
|
|
55
|
+
this.statuses = {
|
|
56
|
+
ready: false,
|
|
57
|
+
refreshInProgress: false,
|
|
58
|
+
};
|
|
59
|
+
// register events
|
|
60
|
+
if (options.onReady) {
|
|
61
|
+
this.emitter.addListener("ready", options.onReady);
|
|
33
62
|
}
|
|
34
|
-
if (options.
|
|
35
|
-
this.
|
|
63
|
+
if (options.onRefresh) {
|
|
64
|
+
this.emitter.addListener("refresh", options.onRefresh);
|
|
36
65
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.interceptAttributes = options.interceptAttributes;
|
|
66
|
+
if (options.onUpdate) {
|
|
67
|
+
this.emitter.addListener("update", options.onUpdate);
|
|
40
68
|
}
|
|
41
|
-
if (options.
|
|
42
|
-
this.emitter
|
|
69
|
+
if (options.onActivation) {
|
|
70
|
+
this.emitter.addListener("activation", options.onActivation);
|
|
43
71
|
}
|
|
44
|
-
|
|
45
|
-
|
|
72
|
+
// expose emitter methods
|
|
73
|
+
var on = this.emitter.addListener.bind(this.emitter);
|
|
74
|
+
this.on = on;
|
|
75
|
+
this.addListener = on;
|
|
76
|
+
var off = this.emitter.removeListener.bind(this.emitter);
|
|
77
|
+
this.off = off;
|
|
78
|
+
this.removeListener = off;
|
|
79
|
+
this.removeAllListeners = this.emitter.removeAllListeners.bind(this.emitter);
|
|
80
|
+
// datafile
|
|
81
|
+
if (options.datafileUrl) {
|
|
82
|
+
this.setDatafile(options.datafile || emptyDatafile);
|
|
83
|
+
fetchDatafileContent(options.datafileUrl, options.handleDatafileFetch)
|
|
84
|
+
.then(function (datafile) {
|
|
85
|
+
_this.setDatafile(datafile);
|
|
86
|
+
_this.statuses.ready = true;
|
|
87
|
+
_this.emitter.emit("ready");
|
|
88
|
+
if (_this.refreshInterval) {
|
|
89
|
+
_this.startRefreshing();
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
.catch(function (e) {
|
|
93
|
+
_this.logger.error("failed to fetch datafile", { error: e });
|
|
94
|
+
});
|
|
46
95
|
}
|
|
47
|
-
if (options.
|
|
48
|
-
this.
|
|
96
|
+
else if (options.datafile) {
|
|
97
|
+
this.setDatafile(options.datafile);
|
|
98
|
+
this.statuses.ready = true;
|
|
99
|
+
setTimeout(function () {
|
|
100
|
+
_this.emitter.emit("ready");
|
|
101
|
+
}, 0);
|
|
49
102
|
}
|
|
50
|
-
|
|
51
|
-
|
|
103
|
+
else {
|
|
104
|
+
throw new Error("Featurevisor SDK instance cannot be created without both `datafile` and `datafileUrl` options");
|
|
52
105
|
}
|
|
53
|
-
this.setDatafile(options.datafile);
|
|
54
|
-
this.fromInstance = options.fromInstance || false;
|
|
55
106
|
}
|
|
56
|
-
|
|
107
|
+
FeaturevisorInstance.prototype.setDatafile = function (datafile) {
|
|
57
108
|
try {
|
|
58
109
|
this.datafileReader = new DatafileReader(typeof datafile === "string" ? JSON.parse(datafile) : datafile);
|
|
59
110
|
}
|
|
@@ -61,26 +112,84 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
61
112
|
this.logger.error("could not parse datafile", { error: e });
|
|
62
113
|
}
|
|
63
114
|
};
|
|
64
|
-
|
|
115
|
+
FeaturevisorInstance.prototype.setStickyFeatures = function (stickyFeatures) {
|
|
65
116
|
this.stickyFeatures = stickyFeatures;
|
|
66
117
|
};
|
|
67
|
-
|
|
118
|
+
FeaturevisorInstance.prototype.getRevision = function () {
|
|
68
119
|
return this.datafileReader.getRevision();
|
|
69
120
|
};
|
|
70
|
-
|
|
121
|
+
FeaturevisorInstance.prototype.getFeature = function (featureKey) {
|
|
71
122
|
return typeof featureKey === "string"
|
|
72
123
|
? this.datafileReader.getFeature(featureKey) // only key provided
|
|
73
124
|
: featureKey; // full feature provided
|
|
74
125
|
};
|
|
126
|
+
/**
|
|
127
|
+
* Statuses
|
|
128
|
+
*/
|
|
129
|
+
FeaturevisorInstance.prototype.isReady = function () {
|
|
130
|
+
return this.statuses.ready;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Refresh
|
|
134
|
+
*/
|
|
135
|
+
FeaturevisorInstance.prototype.refresh = function () {
|
|
136
|
+
var _this = this;
|
|
137
|
+
this.logger.debug("refreshing datafile");
|
|
138
|
+
if (this.statuses.refreshInProgress) {
|
|
139
|
+
return this.logger.warn("refresh in progress, skipping");
|
|
140
|
+
}
|
|
141
|
+
if (!this.datafileUrl) {
|
|
142
|
+
return this.logger.error("cannot refresh since `datafileUrl` is not provided");
|
|
143
|
+
}
|
|
144
|
+
this.statuses.refreshInProgress = true;
|
|
145
|
+
fetchDatafileContent(this.datafileUrl, this.handleDatafileFetch)
|
|
146
|
+
.then(function (datafile) {
|
|
147
|
+
var currentRevision = _this.getRevision();
|
|
148
|
+
var newRevision = datafile.revision;
|
|
149
|
+
var isNotSameRevision = currentRevision !== newRevision;
|
|
150
|
+
_this.setDatafile(datafile);
|
|
151
|
+
_this.logger.info("refreshed datafile");
|
|
152
|
+
_this.emitter.emit("refresh");
|
|
153
|
+
if (isNotSameRevision) {
|
|
154
|
+
_this.emitter.emit("update");
|
|
155
|
+
}
|
|
156
|
+
_this.statuses.refreshInProgress = false;
|
|
157
|
+
})
|
|
158
|
+
.catch(function (e) {
|
|
159
|
+
_this.logger.error("failed to refresh datafile", { error: e });
|
|
160
|
+
_this.statuses.refreshInProgress = false;
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
FeaturevisorInstance.prototype.startRefreshing = function () {
|
|
164
|
+
var _this = this;
|
|
165
|
+
if (!this.datafileUrl) {
|
|
166
|
+
return this.logger.error("cannot start refreshing since `datafileUrl` is not provided");
|
|
167
|
+
}
|
|
168
|
+
if (this.intervalId) {
|
|
169
|
+
return this.logger.warn("refreshing has already started");
|
|
170
|
+
}
|
|
171
|
+
if (!this.refreshInterval) {
|
|
172
|
+
return this.logger.warn("no `refreshInterval` option provided");
|
|
173
|
+
}
|
|
174
|
+
this.intervalId = setInterval(function () {
|
|
175
|
+
_this.refresh();
|
|
176
|
+
}, this.refreshInterval * 1000);
|
|
177
|
+
};
|
|
178
|
+
FeaturevisorInstance.prototype.stopRefreshing = function () {
|
|
179
|
+
if (!this.intervalId) {
|
|
180
|
+
return this.logger.warn("refreshing has not started yet");
|
|
181
|
+
}
|
|
182
|
+
clearInterval(this.intervalId);
|
|
183
|
+
};
|
|
75
184
|
/**
|
|
76
185
|
* Bucketing
|
|
77
186
|
*/
|
|
78
|
-
|
|
187
|
+
FeaturevisorInstance.prototype.getBucketKey = function (feature, attributes) {
|
|
79
188
|
var featureKey = feature.key;
|
|
80
189
|
var prefix = typeof feature.bucketBy === "string" ? feature.bucketBy : feature.bucketBy.join("_");
|
|
81
190
|
return "".concat(prefix, "_").concat(featureKey);
|
|
82
191
|
};
|
|
83
|
-
|
|
192
|
+
FeaturevisorInstance.prototype.getBucketValue = function (feature, attributes) {
|
|
84
193
|
var bucketKey = this.getBucketKey(feature, attributes);
|
|
85
194
|
var value = getBucketedNumber(bucketKey);
|
|
86
195
|
if (this.configureBucketValue) {
|
|
@@ -91,7 +200,7 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
91
200
|
/**
|
|
92
201
|
* Variation
|
|
93
202
|
*/
|
|
94
|
-
|
|
203
|
+
FeaturevisorInstance.prototype.getVariation = function (featureKey, attributes) {
|
|
95
204
|
if (attributes === void 0) { attributes = {}; }
|
|
96
205
|
try {
|
|
97
206
|
var key = typeof featureKey === "string" ? featureKey : featureKey.key;
|
|
@@ -151,22 +260,22 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
151
260
|
return undefined;
|
|
152
261
|
}
|
|
153
262
|
};
|
|
154
|
-
|
|
263
|
+
FeaturevisorInstance.prototype.getVariationBoolean = function (featureKey, attributes) {
|
|
155
264
|
if (attributes === void 0) { attributes = {}; }
|
|
156
265
|
var variationValue = this.getVariation(featureKey, attributes);
|
|
157
266
|
return getValueByType(variationValue, "boolean");
|
|
158
267
|
};
|
|
159
|
-
|
|
268
|
+
FeaturevisorInstance.prototype.getVariationString = function (featureKey, attributes) {
|
|
160
269
|
if (attributes === void 0) { attributes = {}; }
|
|
161
270
|
var variationValue = this.getVariation(featureKey, attributes);
|
|
162
271
|
return getValueByType(variationValue, "string");
|
|
163
272
|
};
|
|
164
|
-
|
|
273
|
+
FeaturevisorInstance.prototype.getVariationInteger = function (featureKey, attributes) {
|
|
165
274
|
if (attributes === void 0) { attributes = {}; }
|
|
166
275
|
var variationValue = this.getVariation(featureKey, attributes);
|
|
167
276
|
return getValueByType(variationValue, "integer");
|
|
168
277
|
};
|
|
169
|
-
|
|
278
|
+
FeaturevisorInstance.prototype.getVariationDouble = function (featureKey, attributes) {
|
|
170
279
|
if (attributes === void 0) { attributes = {}; }
|
|
171
280
|
var variationValue = this.getVariation(featureKey, attributes);
|
|
172
281
|
return getValueByType(variationValue, "double");
|
|
@@ -174,7 +283,7 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
174
283
|
/**
|
|
175
284
|
* Activate
|
|
176
285
|
*/
|
|
177
|
-
|
|
286
|
+
FeaturevisorInstance.prototype.activate = function (featureKey, attributes) {
|
|
178
287
|
if (attributes === void 0) { attributes = {}; }
|
|
179
288
|
try {
|
|
180
289
|
var variationValue = this.getVariation(featureKey, attributes);
|
|
@@ -193,12 +302,7 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
193
302
|
captureAttributes_1[a.key] = attributes[a.key];
|
|
194
303
|
}
|
|
195
304
|
});
|
|
196
|
-
|
|
197
|
-
this.emitter.emit("activation", featureKey, variationValue, finalAttributes_1, captureAttributes_1);
|
|
198
|
-
}
|
|
199
|
-
if (this.fromInstance && this.onActivation) {
|
|
200
|
-
this.onActivation(featureKey, variationValue, finalAttributes_1, captureAttributes_1);
|
|
201
|
-
}
|
|
305
|
+
this.emitter.emit("activation", featureKey, variationValue, finalAttributes_1, captureAttributes_1);
|
|
202
306
|
return variationValue;
|
|
203
307
|
}
|
|
204
308
|
catch (e) {
|
|
@@ -206,22 +310,22 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
206
310
|
return undefined;
|
|
207
311
|
}
|
|
208
312
|
};
|
|
209
|
-
|
|
313
|
+
FeaturevisorInstance.prototype.activateBoolean = function (featureKey, attributes) {
|
|
210
314
|
if (attributes === void 0) { attributes = {}; }
|
|
211
315
|
var variationValue = this.activate(featureKey, attributes);
|
|
212
316
|
return getValueByType(variationValue, "boolean");
|
|
213
317
|
};
|
|
214
|
-
|
|
318
|
+
FeaturevisorInstance.prototype.activateString = function (featureKey, attributes) {
|
|
215
319
|
if (attributes === void 0) { attributes = {}; }
|
|
216
320
|
var variationValue = this.activate(featureKey, attributes);
|
|
217
321
|
return getValueByType(variationValue, "string");
|
|
218
322
|
};
|
|
219
|
-
|
|
323
|
+
FeaturevisorInstance.prototype.activateInteger = function (featureKey, attributes) {
|
|
220
324
|
if (attributes === void 0) { attributes = {}; }
|
|
221
325
|
var variationValue = this.activate(featureKey, attributes);
|
|
222
326
|
return getValueByType(variationValue, "integer");
|
|
223
327
|
};
|
|
224
|
-
|
|
328
|
+
FeaturevisorInstance.prototype.activateDouble = function (featureKey, attributes) {
|
|
225
329
|
if (attributes === void 0) { attributes = {}; }
|
|
226
330
|
var variationValue = this.activate(featureKey, attributes);
|
|
227
331
|
return getValueByType(variationValue, "double");
|
|
@@ -229,7 +333,7 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
229
333
|
/**
|
|
230
334
|
* Variable
|
|
231
335
|
*/
|
|
232
|
-
|
|
336
|
+
FeaturevisorInstance.prototype.getVariable = function (featureKey, variableKey, attributes) {
|
|
233
337
|
if (attributes === void 0) { attributes = {}; }
|
|
234
338
|
try {
|
|
235
339
|
var key = typeof featureKey === "string" ? featureKey : featureKey.key;
|
|
@@ -285,42 +389,45 @@ var FeaturevisorSDK = /** @class */ (function () {
|
|
|
285
389
|
return undefined;
|
|
286
390
|
}
|
|
287
391
|
};
|
|
288
|
-
|
|
392
|
+
FeaturevisorInstance.prototype.getVariableBoolean = function (featureKey, variableKey, attributes) {
|
|
289
393
|
if (attributes === void 0) { attributes = {}; }
|
|
290
394
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
291
395
|
return getValueByType(variableValue, "boolean");
|
|
292
396
|
};
|
|
293
|
-
|
|
397
|
+
FeaturevisorInstance.prototype.getVariableString = function (featureKey, variableKey, attributes) {
|
|
294
398
|
if (attributes === void 0) { attributes = {}; }
|
|
295
399
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
296
400
|
return getValueByType(variableValue, "string");
|
|
297
401
|
};
|
|
298
|
-
|
|
402
|
+
FeaturevisorInstance.prototype.getVariableInteger = function (featureKey, variableKey, attributes) {
|
|
299
403
|
if (attributes === void 0) { attributes = {}; }
|
|
300
404
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
301
405
|
return getValueByType(variableValue, "integer");
|
|
302
406
|
};
|
|
303
|
-
|
|
407
|
+
FeaturevisorInstance.prototype.getVariableDouble = function (featureKey, variableKey, attributes) {
|
|
304
408
|
if (attributes === void 0) { attributes = {}; }
|
|
305
409
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
306
410
|
return getValueByType(variableValue, "double");
|
|
307
411
|
};
|
|
308
|
-
|
|
412
|
+
FeaturevisorInstance.prototype.getVariableArray = function (featureKey, variableKey, attributes) {
|
|
309
413
|
if (attributes === void 0) { attributes = {}; }
|
|
310
414
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
311
415
|
return getValueByType(variableValue, "array");
|
|
312
416
|
};
|
|
313
|
-
|
|
417
|
+
FeaturevisorInstance.prototype.getVariableObject = function (featureKey, variableKey, attributes) {
|
|
314
418
|
if (attributes === void 0) { attributes = {}; }
|
|
315
419
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
316
420
|
return getValueByType(variableValue, "object");
|
|
317
421
|
};
|
|
318
|
-
|
|
422
|
+
FeaturevisorInstance.prototype.getVariableJSON = function (featureKey, variableKey, attributes) {
|
|
319
423
|
if (attributes === void 0) { attributes = {}; }
|
|
320
424
|
var variableValue = this.getVariable(featureKey, variableKey, attributes);
|
|
321
425
|
return getValueByType(variableValue, "json");
|
|
322
426
|
};
|
|
323
|
-
return
|
|
427
|
+
return FeaturevisorInstance;
|
|
324
428
|
}());
|
|
325
|
-
export {
|
|
326
|
-
|
|
429
|
+
export { FeaturevisorInstance };
|
|
430
|
+
export function createInstance(options) {
|
|
431
|
+
return new FeaturevisorInstance(options);
|
|
432
|
+
}
|
|
433
|
+
//# sourceMappingURL=instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.js","sourceRoot":"","sources":["../src/instance.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@featurevisor/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Featurevisor SDK for Node.js and the browser",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
},
|
|
43
43
|
"license": "MIT",
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@featurevisor/types": "^0.
|
|
45
|
+
"@featurevisor/types": "^0.20.0",
|
|
46
46
|
"compare-versions": "^6.0.0-rc.1",
|
|
47
47
|
"murmurhash": "^2.0.1"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "5ff80372509757b26872509d74e33bedb93d543c"
|
|
50
50
|
}
|
package/src/conditions.spec.ts
CHANGED
|
@@ -167,6 +167,50 @@ describe("sdk: Conditions", function () {
|
|
|
167
167
|
// not match
|
|
168
168
|
expect(allConditionsAreMatched(conditions, { version: "1.1.0" })).toEqual(false);
|
|
169
169
|
});
|
|
170
|
+
|
|
171
|
+
it("should match with operator: before", function () {
|
|
172
|
+
const conditions: Condition[] = [
|
|
173
|
+
{
|
|
174
|
+
attribute: "date",
|
|
175
|
+
operator: "before",
|
|
176
|
+
value: "2023-05-13T16:23:59Z",
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
|
|
180
|
+
// match
|
|
181
|
+
expect(allConditionsAreMatched(conditions, { date: "2023-05-12T00:00:00Z" })).toEqual(true);
|
|
182
|
+
expect(
|
|
183
|
+
allConditionsAreMatched(conditions, { date: new Date("2023-05-12T00:00:00Z") }),
|
|
184
|
+
).toEqual(true);
|
|
185
|
+
|
|
186
|
+
// not match
|
|
187
|
+
expect(allConditionsAreMatched(conditions, { date: "2023-05-14T00:00:00Z" })).toEqual(false);
|
|
188
|
+
expect(
|
|
189
|
+
allConditionsAreMatched(conditions, { date: new Date("2023-05-14T00:00:00Z") }),
|
|
190
|
+
).toEqual(false);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("should match with operator: after", function () {
|
|
194
|
+
const conditions: Condition[] = [
|
|
195
|
+
{
|
|
196
|
+
attribute: "date",
|
|
197
|
+
operator: "after",
|
|
198
|
+
value: "2023-05-13T16:23:59Z",
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
|
|
202
|
+
// match
|
|
203
|
+
expect(allConditionsAreMatched(conditions, { date: "2023-05-14T00:00:00Z" })).toEqual(true);
|
|
204
|
+
expect(
|
|
205
|
+
allConditionsAreMatched(conditions, { date: new Date("2023-05-14T00:00:00Z") }),
|
|
206
|
+
).toEqual(true);
|
|
207
|
+
|
|
208
|
+
// not match
|
|
209
|
+
expect(allConditionsAreMatched(conditions, { date: "2023-05-12T00:00:00Z" })).toEqual(false);
|
|
210
|
+
expect(
|
|
211
|
+
allConditionsAreMatched(conditions, { date: new Date("2023-05-12T00:00:00Z") }),
|
|
212
|
+
).toEqual(false);
|
|
213
|
+
});
|
|
170
214
|
});
|
|
171
215
|
|
|
172
216
|
describe("simple condition", function () {
|
package/src/conditions.ts
CHANGED
|
@@ -9,6 +9,17 @@ export function conditionIsMatched(condition: PlainCondition, attributes: Attrib
|
|
|
9
9
|
return attributes[attribute] === value;
|
|
10
10
|
} else if (operator === "notEquals") {
|
|
11
11
|
return attributes[attribute] !== value;
|
|
12
|
+
} else if (operator === "before" || operator === "after") {
|
|
13
|
+
// date comparisons
|
|
14
|
+
const valueInAttributes = attributes[attribute] as string | Date;
|
|
15
|
+
|
|
16
|
+
const dateInAttributes =
|
|
17
|
+
valueInAttributes instanceof Date ? valueInAttributes : new Date(valueInAttributes);
|
|
18
|
+
const dateInCondition = value instanceof Date ? value : new Date(value as string);
|
|
19
|
+
|
|
20
|
+
return operator === "before"
|
|
21
|
+
? dateInAttributes < dateInCondition
|
|
22
|
+
: dateInAttributes > dateInCondition;
|
|
12
23
|
} else if (typeof attributes[attribute] === "string" && Array.isArray(value)) {
|
|
13
24
|
// array
|
|
14
25
|
const valueInAttributes = attributes[attribute] as string;
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DatafileContent } from "@featurevisor/types";
|
|
2
2
|
|
|
3
|
-
import { createInstance } from "./
|
|
3
|
+
import { createInstance } from "./instance";
|
|
4
4
|
|
|
5
|
-
describe("sdk:
|
|
5
|
+
describe("sdk: instance", function () {
|
|
6
6
|
it("should be a function", function () {
|
|
7
7
|
expect(typeof createInstance).toEqual("function");
|
|
8
8
|
});
|
|
@@ -39,6 +39,7 @@ describe("sdk: createInstance", function () {
|
|
|
39
39
|
|
|
40
40
|
setTimeout(() => {
|
|
41
41
|
expect(readyCount).toEqual(1);
|
|
42
|
+
expect(sdk.isReady()).toEqual(true);
|
|
42
43
|
done();
|
|
43
44
|
}, 0);
|
|
44
45
|
});
|