@splitsoftware/splitio 10.15.10-rc.2 → 10.16.1-rc.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/CHANGES.txt +12 -3
- package/README.md +2 -1
- package/es/engine/engine/murmur3/murmur3_128.js +1 -1
- package/es/engine/engine/murmur3/murmur3_128_x86.js +2 -3
- package/es/engine/matchers/index.js +20 -37
- package/es/engine/matchers/types.js +19 -72
- package/es/engine/transforms/matcherGroup.js +2 -2
- package/es/engine/transforms/matchers.js +2 -2
- package/es/engine/value/sanitize.js +12 -14
- package/es/impressions/hasher/hashImpression128.js +1 -1
- package/es/impressions/observer/observer.js +0 -1
- package/es/listeners/browser.js +2 -12
- package/es/producer/updater/SplitChangesFromObject.js +3 -2
- package/es/storage/SplitCache/InLocalStorage.js +11 -0
- package/es/sync/PushManager/index.js +5 -13
- package/es/utils/inputValidation/splitFilters.js +4 -5
- package/es/utils/logger/LoggerFactory.js +23 -16
- package/es/utils/settings/index.js +1 -1
- package/es/utils/settings/storage/browser.js +19 -4
- package/lib/engine/engine/murmur3/murmur3_128.js +1 -1
- package/lib/engine/engine/murmur3/murmur3_128_x86.js +2 -3
- package/lib/engine/matchers/index.js +21 -39
- package/lib/engine/matchers/types.js +23 -77
- package/lib/engine/transforms/matcherGroup.js +3 -3
- package/lib/engine/transforms/matchers.js +22 -22
- package/lib/engine/value/sanitize.js +11 -13
- package/lib/impressions/hasher/hashImpression128.js +2 -2
- package/lib/impressions/observer/observer.js +0 -1
- package/lib/listeners/browser.js +2 -12
- package/lib/producer/updater/SplitChangesFromObject.js +4 -2
- package/lib/storage/SplitCache/InLocalStorage.js +11 -0
- package/lib/sync/PushManager/index.js +5 -13
- package/lib/utils/inputValidation/splitFilters.js +4 -6
- package/lib/utils/logger/LoggerFactory.js +23 -17
- package/lib/utils/settings/index.js +1 -1
- package/lib/utils/settings/storage/browser.js +18 -3
- package/package.json +18 -15
- package/src/engine/engine/murmur3/murmur3_128.js +1 -1
- package/src/engine/engine/murmur3/murmur3_128_x86.js +2 -3
- package/src/engine/matchers/index.js +22 -36
- package/src/engine/matchers/types.js +20 -55
- package/src/engine/transforms/matcherGroup.js +2 -5
- package/src/engine/transforms/matchers.js +2 -6
- package/src/engine/value/sanitize.js +12 -17
- package/src/impressions/hasher/hashImpression128.js +1 -1
- package/src/impressions/observer/observer.js +0 -2
- package/src/listeners/browser.js +2 -10
- package/src/producer/updater/SplitChangesFromObject.js +2 -2
- package/src/storage/SplitCache/InLocalStorage.js +3 -3
- package/src/sync/PushManager/index.js +5 -12
- package/src/sync/constants.js +1 -1
- package/src/utils/inputValidation/splitFilters.js +1 -5
- package/src/utils/logger/LoggerFactory.js +25 -16
- package/src/utils/settings/index.js +1 -1
- package/src/utils/settings/storage/browser.js +18 -3
|
@@ -5,8 +5,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
exports.__esModule = true;
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _types = require("./types");
|
|
9
|
-
|
|
10
8
|
var _all = _interopRequireDefault(require("./all"));
|
|
11
9
|
|
|
12
10
|
var _segment = _interopRequireDefault(require("./segment"));
|
|
@@ -56,50 +54,34 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
56
54
|
See the License for the specific language governing permissions and
|
|
57
55
|
limitations under the License.
|
|
58
56
|
**/
|
|
59
|
-
|
|
57
|
+
var matchers = [undefined, // UNDEFINED: 0,
|
|
58
|
+
_all.default, // ALL_KEYS: 1,
|
|
59
|
+
_segment.default, // IN_SEGMENT: 2,
|
|
60
|
+
_whitelist.default, // WHITELIST: 3,
|
|
61
|
+
_eq.default, // EQUAL_TO: 4,
|
|
62
|
+
_gte.default, // GREATER_THAN_OR_EQUAL_TO: 5,
|
|
63
|
+
_lte.default, // LESS_THAN_OR_EQUAL_TO: 6,
|
|
64
|
+
_between.default, // BETWEEN: 7,
|
|
65
|
+
_eq_set.default, // EQUAL_TO_SET: 8,
|
|
66
|
+
_cont_any.default, // CONTAINS_ANY_OF_SET: 9,
|
|
67
|
+
_cont_all.default, // CONTAINS_ALL_OF_SET: 10,
|
|
68
|
+
_part_of.default, // PART_OF_SET: 11,
|
|
69
|
+
_ew.default, // ENDS_WITH: 12,
|
|
70
|
+
_sw.default, // STARTS_WITH: 13,
|
|
71
|
+
_cont_str.default, // CONTAINS_STRING: 14,
|
|
72
|
+
_dependency.default, // IN_SPLIT_TREATMENT: 15,
|
|
73
|
+
_boolean.default, // EQUAL_TO_BOOLEAN: 16,
|
|
74
|
+
_string.default // MATCHES_STRING: 17
|
|
75
|
+
];
|
|
60
76
|
/**
|
|
61
77
|
* Matcher factory.
|
|
62
78
|
*/
|
|
79
|
+
|
|
63
80
|
function MatcherFactory(matcherDto, storage) {
|
|
64
81
|
var type = matcherDto.type,
|
|
65
82
|
value = matcherDto.value;
|
|
66
83
|
var matcherFn;
|
|
67
|
-
|
|
68
|
-
if (type === _types.types.ALL) {
|
|
69
|
-
matcherFn = (0, _all.default)(value);
|
|
70
|
-
} else if (type === _types.types.SEGMENT) {
|
|
71
|
-
matcherFn = (0, _segment.default)(value, storage);
|
|
72
|
-
} else if (type === _types.types.WHITELIST) {
|
|
73
|
-
matcherFn = (0, _whitelist.default)(value);
|
|
74
|
-
} else if (type === _types.types.EQUAL_TO) {
|
|
75
|
-
matcherFn = (0, _eq.default)(value);
|
|
76
|
-
} else if (type === _types.types.GREATER_THAN_OR_EQUAL_TO) {
|
|
77
|
-
matcherFn = (0, _gte.default)(value);
|
|
78
|
-
} else if (type === _types.types.LESS_THAN_OR_EQUAL_TO) {
|
|
79
|
-
matcherFn = (0, _lte.default)(value);
|
|
80
|
-
} else if (type === _types.types.BETWEEN) {
|
|
81
|
-
matcherFn = (0, _between.default)(value);
|
|
82
|
-
} else if (type === _types.types.EQUAL_TO_SET) {
|
|
83
|
-
matcherFn = (0, _eq_set.default)(value);
|
|
84
|
-
} else if (type === _types.types.CONTAINS_ANY_OF_SET) {
|
|
85
|
-
matcherFn = (0, _cont_any.default)(value);
|
|
86
|
-
} else if (type === _types.types.CONTAINS_ALL_OF_SET) {
|
|
87
|
-
matcherFn = (0, _cont_all.default)(value);
|
|
88
|
-
} else if (type === _types.types.PART_OF_SET) {
|
|
89
|
-
matcherFn = (0, _part_of.default)(value);
|
|
90
|
-
} else if (type === _types.types.STARTS_WITH) {
|
|
91
|
-
matcherFn = (0, _sw.default)(value);
|
|
92
|
-
} else if (type === _types.types.ENDS_WITH) {
|
|
93
|
-
matcherFn = (0, _ew.default)(value);
|
|
94
|
-
} else if (type === _types.types.CONTAINS_STRING) {
|
|
95
|
-
matcherFn = (0, _cont_str.default)(value);
|
|
96
|
-
} else if (type === _types.types.IN_SPLIT_TREATMENT) {
|
|
97
|
-
matcherFn = (0, _dependency.default)(value, storage);
|
|
98
|
-
} else if (type === _types.types.EQUAL_TO_BOOLEAN) {
|
|
99
|
-
matcherFn = (0, _boolean.default)(value);
|
|
100
|
-
} else if (type === _types.types.MATCHES_STRING) {
|
|
101
|
-
matcherFn = (0, _string.default)(value);
|
|
102
|
-
}
|
|
84
|
+
if (matchers[type]) matcherFn = matchers[type](value, storage); // There is no index-out-of-bound exception in JavaScript
|
|
103
85
|
|
|
104
86
|
return matcherFn;
|
|
105
87
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
-
exports.
|
|
4
|
+
exports.matcherTypesMapper = matcherTypesMapper;
|
|
5
|
+
exports.matcherDataTypes = exports.matcherTypes = void 0;
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
Copyright 2016 Split Software
|
|
@@ -19,28 +20,28 @@ See the License for the specific language governing permissions and
|
|
|
19
20
|
limitations under the License.
|
|
20
21
|
**/
|
|
21
22
|
// @WARNING Symbol is not correctly working in PhantomJS
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
var matcherTypes = {
|
|
24
|
+
UNDEFINED: 0,
|
|
25
|
+
ALL_KEYS: 1,
|
|
26
|
+
IN_SEGMENT: 2,
|
|
25
27
|
WHITELIST: 3,
|
|
26
28
|
EQUAL_TO: 4,
|
|
27
29
|
GREATER_THAN_OR_EQUAL_TO: 5,
|
|
28
30
|
LESS_THAN_OR_EQUAL_TO: 6,
|
|
29
31
|
BETWEEN: 7,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
MATCHES_STRING: 18
|
|
32
|
+
EQUAL_TO_SET: 8,
|
|
33
|
+
CONTAINS_ANY_OF_SET: 9,
|
|
34
|
+
CONTAINS_ALL_OF_SET: 10,
|
|
35
|
+
PART_OF_SET: 11,
|
|
36
|
+
ENDS_WITH: 12,
|
|
37
|
+
STARTS_WITH: 13,
|
|
38
|
+
CONTAINS_STRING: 14,
|
|
39
|
+
IN_SPLIT_TREATMENT: 15,
|
|
40
|
+
EQUAL_TO_BOOLEAN: 16,
|
|
41
|
+
MATCHES_STRING: 17
|
|
41
42
|
};
|
|
42
|
-
exports.
|
|
43
|
-
var
|
|
43
|
+
exports.matcherTypes = matcherTypes;
|
|
44
|
+
var matcherDataTypes = {
|
|
44
45
|
BOOLEAN: 'BOOLEAN',
|
|
45
46
|
STRING: 'STRING',
|
|
46
47
|
NUMBER: 'NUMBER',
|
|
@@ -48,64 +49,9 @@ var dataTypes = {
|
|
|
48
49
|
DATETIME: 'DATETIME',
|
|
49
50
|
NOT_SPECIFIED: 'NOT_SPECIFIED'
|
|
50
51
|
};
|
|
51
|
-
exports.
|
|
52
|
+
exports.matcherDataTypes = matcherDataTypes;
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
case 'IN_SEGMENT':
|
|
59
|
-
return types.SEGMENT;
|
|
60
|
-
|
|
61
|
-
case 'WHITELIST':
|
|
62
|
-
return types.WHITELIST;
|
|
63
|
-
|
|
64
|
-
case 'EQUAL_TO':
|
|
65
|
-
return types.EQUAL_TO;
|
|
66
|
-
|
|
67
|
-
case 'GREATER_THAN_OR_EQUAL_TO':
|
|
68
|
-
return types.GREATER_THAN_OR_EQUAL_TO;
|
|
69
|
-
|
|
70
|
-
case 'LESS_THAN_OR_EQUAL_TO':
|
|
71
|
-
return types.LESS_THAN_OR_EQUAL_TO;
|
|
72
|
-
|
|
73
|
-
case 'BETWEEN':
|
|
74
|
-
return types.BETWEEN;
|
|
75
|
-
|
|
76
|
-
case 'EQUAL_TO_SET':
|
|
77
|
-
return types.EQUAL_TO_SET;
|
|
78
|
-
|
|
79
|
-
case 'CONTAINS_ANY_OF_SET':
|
|
80
|
-
return types.CONTAINS_ANY_OF_SET;
|
|
81
|
-
|
|
82
|
-
case 'CONTAINS_ALL_OF_SET':
|
|
83
|
-
return types.CONTAINS_ALL_OF_SET;
|
|
84
|
-
|
|
85
|
-
case 'PART_OF_SET':
|
|
86
|
-
return types.PART_OF_SET;
|
|
87
|
-
|
|
88
|
-
case 'ENDS_WITH':
|
|
89
|
-
return types.ENDS_WITH;
|
|
90
|
-
|
|
91
|
-
case 'STARTS_WITH':
|
|
92
|
-
return types.STARTS_WITH;
|
|
93
|
-
|
|
94
|
-
case 'CONTAINS_STRING':
|
|
95
|
-
return types.CONTAINS_STRING;
|
|
96
|
-
|
|
97
|
-
case 'IN_SPLIT_TREATMENT':
|
|
98
|
-
return types.IN_SPLIT_TREATMENT;
|
|
99
|
-
|
|
100
|
-
case 'EQUAL_TO_BOOLEAN':
|
|
101
|
-
return types.EQUAL_TO_BOOLEAN;
|
|
102
|
-
|
|
103
|
-
case 'MATCHES_STRING':
|
|
104
|
-
return types.MATCHES_STRING;
|
|
105
|
-
|
|
106
|
-
default:
|
|
107
|
-
return types.UNDEFINED;
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
exports.mapper = mapper;
|
|
54
|
+
function matcherTypesMapper(matcherType) {
|
|
55
|
+
var type = matcherTypes[matcherType];
|
|
56
|
+
if (type) return type;else return matcherTypes.UNDEFINED;
|
|
57
|
+
}
|
|
@@ -35,12 +35,12 @@ function transform(matcherGroup) {
|
|
|
35
35
|
matcherType = _matcherGroup$matcher.matcherType,
|
|
36
36
|
segmentObject = _matcherGroup$matcher.userDefinedSegmentMatcherData,
|
|
37
37
|
whitelistObject = _matcherGroup$matcher.whitelistMatcherData;
|
|
38
|
-
var type = (0, _types.
|
|
38
|
+
var type = (0, _types.matcherTypesMapper)(matcherType);
|
|
39
39
|
var value = undefined;
|
|
40
40
|
|
|
41
|
-
if (type === _types.
|
|
41
|
+
if (type === _types.matcherTypes.IN_SEGMENT) {
|
|
42
42
|
value = (0, _segment.default)(segmentObject);
|
|
43
|
-
} else if (type === _types.
|
|
43
|
+
} else if (type === _types.matcherTypes.WHITELIST) {
|
|
44
44
|
value = (0, _whitelist.default)(whitelistObject);
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -48,52 +48,52 @@ function transform(matchers) {
|
|
|
48
48
|
booleanMatcherData = matcher.booleanMatcherData,
|
|
49
49
|
stringMatcherData = matcher.stringMatcherData;
|
|
50
50
|
var attribute = keySelector && keySelector.attribute;
|
|
51
|
-
var type = (0, _types.
|
|
51
|
+
var type = (0, _types.matcherTypesMapper)(matcherType); // As default input data type we use string (even for ALL_KEYS)
|
|
52
52
|
|
|
53
|
-
var dataType = _types.
|
|
53
|
+
var dataType = _types.matcherDataTypes.STRING;
|
|
54
54
|
var value = undefined;
|
|
55
55
|
|
|
56
|
-
if (type === _types.
|
|
56
|
+
if (type === _types.matcherTypes.IN_SEGMENT) {
|
|
57
57
|
value = (0, _segment.default)(segmentObject);
|
|
58
|
-
} else if (type === _types.
|
|
58
|
+
} else if (type === _types.matcherTypes.WHITELIST) {
|
|
59
59
|
value = (0, _whitelist.default)(whitelistObject);
|
|
60
|
-
} else if (type === _types.
|
|
60
|
+
} else if (type === _types.matcherTypes.EQUAL_TO) {
|
|
61
61
|
value = (0, _unaryNumeric.default)(unaryNumericObject);
|
|
62
|
-
dataType = _types.
|
|
62
|
+
dataType = _types.matcherDataTypes.NUMBER;
|
|
63
63
|
|
|
64
64
|
if (unaryNumericObject.dataType === 'DATETIME') {
|
|
65
65
|
value = (0, _convertions.zeroSinceHH)(value);
|
|
66
|
-
dataType = _types.
|
|
66
|
+
dataType = _types.matcherDataTypes.DATETIME;
|
|
67
67
|
}
|
|
68
|
-
} else if (type === _types.
|
|
68
|
+
} else if (type === _types.matcherTypes.GREATER_THAN_OR_EQUAL_TO || type === _types.matcherTypes.LESS_THAN_OR_EQUAL_TO) {
|
|
69
69
|
value = (0, _unaryNumeric.default)(unaryNumericObject);
|
|
70
|
-
dataType = _types.
|
|
70
|
+
dataType = _types.matcherDataTypes.NUMBER;
|
|
71
71
|
|
|
72
72
|
if (unaryNumericObject.dataType === 'DATETIME') {
|
|
73
73
|
value = (0, _convertions.zeroSinceSS)(value);
|
|
74
|
-
dataType = _types.
|
|
74
|
+
dataType = _types.matcherDataTypes.DATETIME;
|
|
75
75
|
}
|
|
76
|
-
} else if (type === _types.
|
|
76
|
+
} else if (type === _types.matcherTypes.BETWEEN) {
|
|
77
77
|
value = betweenObject;
|
|
78
|
-
dataType = _types.
|
|
78
|
+
dataType = _types.matcherDataTypes.NUMBER;
|
|
79
79
|
|
|
80
80
|
if (betweenObject.dataType === 'DATETIME') {
|
|
81
81
|
value.start = (0, _convertions.zeroSinceSS)(value.start);
|
|
82
82
|
value.end = (0, _convertions.zeroSinceSS)(value.end);
|
|
83
|
-
dataType = _types.
|
|
83
|
+
dataType = _types.matcherDataTypes.DATETIME;
|
|
84
84
|
}
|
|
85
|
-
} else if (type === _types.
|
|
85
|
+
} else if (type === _types.matcherTypes.EQUAL_TO_SET || type === _types.matcherTypes.CONTAINS_ANY_OF_SET || type === _types.matcherTypes.CONTAINS_ALL_OF_SET || type === _types.matcherTypes.PART_OF_SET) {
|
|
86
86
|
value = (0, _set.default)(whitelistObject);
|
|
87
|
-
dataType = _types.
|
|
88
|
-
} else if (type === _types.
|
|
87
|
+
dataType = _types.matcherDataTypes.SET;
|
|
88
|
+
} else if (type === _types.matcherTypes.STARTS_WITH || type === _types.matcherTypes.ENDS_WITH || type === _types.matcherTypes.CONTAINS_STRING) {
|
|
89
89
|
value = (0, _set.default)(whitelistObject);
|
|
90
|
-
} else if (type === _types.
|
|
90
|
+
} else if (type === _types.matcherTypes.IN_SPLIT_TREATMENT) {
|
|
91
91
|
value = dependencyObject;
|
|
92
|
-
dataType = _types.
|
|
93
|
-
} else if (type === _types.
|
|
94
|
-
dataType = _types.
|
|
92
|
+
dataType = _types.matcherDataTypes.NOT_SPECIFIED;
|
|
93
|
+
} else if (type === _types.matcherTypes.EQUAL_TO_BOOLEAN) {
|
|
94
|
+
dataType = _types.matcherDataTypes.BOOLEAN;
|
|
95
95
|
value = booleanMatcherData;
|
|
96
|
-
} else if (type === _types.
|
|
96
|
+
} else if (type === _types.matcherTypes.MATCHES_STRING) {
|
|
97
97
|
value = stringMatcherData;
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -112,7 +112,7 @@ function transform(matchers) {
|
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
if ((0, _lang.findIndex)(parsedMatchers, function (m) {
|
|
115
|
-
return m.type === _types.
|
|
115
|
+
return m.type === _types.matcherTypes.UNDEFINED;
|
|
116
116
|
}) === -1) {
|
|
117
117
|
return parsedMatchers;
|
|
118
118
|
} else {
|
|
@@ -29,8 +29,6 @@ See the License for the specific language governing permissions and
|
|
|
29
29
|
limitations under the License.
|
|
30
30
|
**/
|
|
31
31
|
var log = (0, _logger.default)('splitio-engine:sanitize');
|
|
32
|
-
var MATCHERS = _types.types;
|
|
33
|
-
var DATA_TYPES = _types.dataTypes;
|
|
34
32
|
|
|
35
33
|
function sanitizeNumber(val) {
|
|
36
34
|
var num = (0, _lang.toNumber)(val);
|
|
@@ -81,15 +79,15 @@ function dependencyProcessor(sanitizedValue, attributes) {
|
|
|
81
79
|
|
|
82
80
|
function getProcessingFunction(matcherTypeID, dataType) {
|
|
83
81
|
switch (matcherTypeID) {
|
|
84
|
-
case
|
|
82
|
+
case _types.matcherTypes.EQUAL_TO:
|
|
85
83
|
return dataType === 'DATETIME' ? _convertions.zeroSinceHH : undefined;
|
|
86
84
|
|
|
87
|
-
case
|
|
88
|
-
case
|
|
89
|
-
case
|
|
85
|
+
case _types.matcherTypes.GREATER_THAN_OR_EQUAL_TO:
|
|
86
|
+
case _types.matcherTypes.LESS_THAN_OR_EQUAL_TO:
|
|
87
|
+
case _types.matcherTypes.BETWEEN:
|
|
90
88
|
return dataType === 'DATETIME' ? _convertions.zeroSinceSS : undefined;
|
|
91
89
|
|
|
92
|
-
case
|
|
90
|
+
case _types.matcherTypes.IN_SPLIT_TREATMENT:
|
|
93
91
|
return dependencyProcessor;
|
|
94
92
|
|
|
95
93
|
default:
|
|
@@ -102,24 +100,24 @@ function sanitizeValue(matcherTypeID, value, dataType, attributes) {
|
|
|
102
100
|
var sanitizedValue;
|
|
103
101
|
|
|
104
102
|
switch (dataType) {
|
|
105
|
-
case
|
|
106
|
-
case
|
|
103
|
+
case _types.matcherDataTypes.NUMBER:
|
|
104
|
+
case _types.matcherDataTypes.DATETIME:
|
|
107
105
|
sanitizedValue = sanitizeNumber(value);
|
|
108
106
|
break;
|
|
109
107
|
|
|
110
|
-
case
|
|
108
|
+
case _types.matcherDataTypes.STRING:
|
|
111
109
|
sanitizedValue = sanitizeString(value);
|
|
112
110
|
break;
|
|
113
111
|
|
|
114
|
-
case
|
|
112
|
+
case _types.matcherDataTypes.SET:
|
|
115
113
|
sanitizedValue = sanitizeArray(value);
|
|
116
114
|
break;
|
|
117
115
|
|
|
118
|
-
case
|
|
116
|
+
case _types.matcherDataTypes.BOOLEAN:
|
|
119
117
|
sanitizedValue = sanitizeBoolean(value);
|
|
120
118
|
break;
|
|
121
119
|
|
|
122
|
-
case
|
|
120
|
+
case _types.matcherDataTypes.NOT_SPECIFIED:
|
|
123
121
|
sanitizedValue = value;
|
|
124
122
|
break;
|
|
125
123
|
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.hashImpression128 = hashImpression128;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _murmur3_128_x = require("../../engine/engine/murmur3/murmur3_128_x86");
|
|
7
7
|
|
|
8
8
|
var _buildKey = require("./buildKey");
|
|
9
9
|
|
|
10
10
|
function hashImpression128(impression) {
|
|
11
|
-
return (0,
|
|
11
|
+
return (0, _murmur3_128_x.hash128)((0, _buildKey.buildKey)(impression));
|
|
12
12
|
}
|
|
@@ -16,7 +16,6 @@ var ImpressionObserver = /*#__PURE__*/function () {
|
|
|
16
16
|
var _proto = ImpressionObserver.prototype;
|
|
17
17
|
|
|
18
18
|
_proto.testAndSet = function testAndSet(impression) {
|
|
19
|
-
if (!impression) return null;
|
|
20
19
|
var hash = this.hasher(impression);
|
|
21
20
|
var previous = this.cache.get(hash);
|
|
22
21
|
this.cache.set(hash, impression.time);
|
package/lib/listeners/browser.js
CHANGED
|
@@ -23,19 +23,9 @@ var _constants = require("../utils/constants");
|
|
|
23
23
|
|
|
24
24
|
var _objectAssign = _interopRequireDefault(require("object-assign"));
|
|
25
25
|
|
|
26
|
-
var log = (0, _logger.default)('splitio-client:cleanup');
|
|
26
|
+
var log = (0, _logger.default)('splitio-client:cleanup'); // 'unload' event is used instead of 'beforeunload', since 'unload' is not a cancelable event, so no other listeners can stop the event from occurring.
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
// Except for Firefox (See https://github.com/splitio/react-client/issues/71), 'unload' event is used instead of 'beforeunload',
|
|
30
|
-
// since it is not a cancelable event and no other listeners can stop the event from occurring.
|
|
31
|
-
if (typeof navigator == 'object' && navigator.userAgent && navigator.userAgent.indexOf('Firefox') !== -1) {
|
|
32
|
-
return 'beforeunload';
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return 'unload';
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
var UNLOAD_DOM_EVENT = getUnloadDomEvent();
|
|
28
|
+
var UNLOAD_DOM_EVENT = 'unload';
|
|
39
29
|
/**
|
|
40
30
|
* We'll listen for 'unload' event over the window object, since it's the standard way to listen page reload and close.
|
|
41
31
|
*
|
|
@@ -5,6 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
exports.__esModule = true;
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _constants = require("../../utils/constants");
|
|
9
|
+
|
|
8
10
|
var _lang = require("../../utils/lang");
|
|
9
11
|
|
|
10
12
|
var _logger = _interopRequireDefault(require("../../utils/logger"));
|
|
@@ -61,13 +63,13 @@ function FromObjectUpdaterFactory(Fetcher, context) {
|
|
|
61
63
|
})]);
|
|
62
64
|
});
|
|
63
65
|
return Promise.all([storage.splits.flush(), // required to sync removed splits from mock
|
|
64
|
-
storage.splits.
|
|
66
|
+
storage.splits.addSplits(splits)]).then(function () {
|
|
65
67
|
readiness.splits.emit(readiness.splits.SDK_SPLITS_ARRIVED);
|
|
66
68
|
|
|
67
69
|
if (startingUp) {
|
|
68
70
|
startingUp = false; // Emits SDK_READY_FROM_CACHE
|
|
69
71
|
|
|
70
|
-
if (storage.
|
|
72
|
+
if (settings.storage.__originalType === _constants.STORAGE_LOCALSTORAGE) readiness.splits.emit(readiness.splits.SDK_SPLITS_CACHE_LOADED); // Only emits SDK_SEGMENTS_ARRIVED the first time for SDK_READY
|
|
71
73
|
|
|
72
74
|
readiness.segments.emit(readiness.segments.SDK_SEGMENTS_ARRIVED);
|
|
73
75
|
}
|
|
@@ -22,6 +22,17 @@ var SplitCacheLocalStorage = /*#__PURE__*/function () {
|
|
|
22
22
|
* @param {Object} splitFiltersValidation
|
|
23
23
|
*/
|
|
24
24
|
function SplitCacheLocalStorage(keys, expirationTimestamp, splitFiltersValidation) {
|
|
25
|
+
if (splitFiltersValidation === void 0) {
|
|
26
|
+
splitFiltersValidation = {
|
|
27
|
+
validFilters: [],
|
|
28
|
+
queryString: null,
|
|
29
|
+
groupedFilters: {
|
|
30
|
+
byName: [],
|
|
31
|
+
byPrefix: []
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
25
36
|
this.keys = keys;
|
|
26
37
|
this.splitFiltersValidation = splitFiltersValidation;
|
|
27
38
|
|
|
@@ -92,9 +92,9 @@ function PushManagerFactory(context, clientContexts
|
|
|
92
92
|
if (timeoutIdSseOpen) clearTimeout(timeoutIdSseOpen); // Set token refresh 10 minutes before expirationTime - issuedAt
|
|
93
93
|
|
|
94
94
|
var decodedToken = authData.decodedToken;
|
|
95
|
-
var refreshTokenDelay = decodedToken.exp - decodedToken.iat - _constants.SECONDS_BEFORE_EXPIRATION; // connDelay
|
|
95
|
+
var refreshTokenDelay = decodedToken.exp - decodedToken.iat - _constants.SECONDS_BEFORE_EXPIRATION; // Default connDelay of 60 secs
|
|
96
96
|
|
|
97
|
-
var connDelay = authData.connDelay
|
|
97
|
+
var connDelay = typeof authData.connDelay === 'number' && authData.connDelay >= 0 ? authData.connDelay : 60;
|
|
98
98
|
log.info("Refreshing streaming token in " + refreshTokenDelay + " seconds, and connecting streaming in " + connDelay + " seconds");
|
|
99
99
|
timeoutIdTokenRefresh = setTimeout(connectPush, refreshTokenDelay * 1000);
|
|
100
100
|
timeoutIdSseOpen = setTimeout(function () {
|
|
@@ -257,21 +257,13 @@ function PushManagerFactory(context, clientContexts
|
|
|
257
257
|
(0, _lang.forOwn)(clients, function (_ref3) {
|
|
258
258
|
var hash64 = _ref3.hash64,
|
|
259
259
|
worker = _ref3.worker;
|
|
260
|
+
var add = added.has(hash64.dec) ? true : removed.has(hash64.dec) ? false : undefined;
|
|
260
261
|
|
|
261
|
-
if (
|
|
262
|
+
if (add !== undefined) {
|
|
262
263
|
worker.put(parsedData.changeNumber, {
|
|
263
264
|
name: parsedData.segmentName,
|
|
264
|
-
add:
|
|
265
|
+
add: add
|
|
265
266
|
});
|
|
266
|
-
return;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
if (removed.has(hash64.dec)) {
|
|
270
|
-
worker.put(parsedData.changeNumber, {
|
|
271
|
-
name: parsedData.segmentName,
|
|
272
|
-
add: false
|
|
273
|
-
});
|
|
274
|
-
return;
|
|
275
267
|
}
|
|
276
268
|
});
|
|
277
269
|
return;
|
|
@@ -90,7 +90,10 @@ function validateSplitFilters(splitFilters, mode) {
|
|
|
90
90
|
var res = {
|
|
91
91
|
validFilters: [],
|
|
92
92
|
queryString: null,
|
|
93
|
-
groupedFilters: {
|
|
93
|
+
groupedFilters: {
|
|
94
|
+
byName: [],
|
|
95
|
+
byPrefix: []
|
|
96
|
+
}
|
|
94
97
|
}; // do nothing if `splitFilters` param is not a non-empty array or mode is not STANDALONE
|
|
95
98
|
|
|
96
99
|
if (!splitFilters) return res; // Warn depending on the mode
|
|
@@ -107,11 +110,6 @@ function validateSplitFilters(splitFilters, mode) {
|
|
|
107
110
|
} // Validate filters and group their values by filter type inside `groupedFilters` object
|
|
108
111
|
|
|
109
112
|
|
|
110
|
-
_constants.FILTERS_METADATA.forEach(function (metadata) {
|
|
111
|
-
res.groupedFilters[metadata.type] = [];
|
|
112
|
-
}); // Assign the valid filters to the output of the validator by using filter function
|
|
113
|
-
|
|
114
|
-
|
|
115
113
|
res.validFilters = splitFilters.filter(function (filter, index) {
|
|
116
114
|
if (filter && validateFilterType(filter.type) && Array.isArray(filter.values)) {
|
|
117
115
|
res.groupedFilters[filter.type] = res.groupedFilters[filter.type].concat(filter.values);
|
|
@@ -14,13 +14,23 @@ var LogLevels = {
|
|
|
14
14
|
'WARN': 'WARN',
|
|
15
15
|
'ERROR': 'ERROR',
|
|
16
16
|
'NONE': 'NONE'
|
|
17
|
+
};
|
|
18
|
+
exports.LogLevels = LogLevels;
|
|
19
|
+
var LogLevelIndexes = {
|
|
20
|
+
DEBUG: 1,
|
|
21
|
+
INFO: 2,
|
|
22
|
+
WARN: 3,
|
|
23
|
+
ERROR: 4,
|
|
24
|
+
NONE: 5
|
|
17
25
|
}; // DEBUG is the default. The log level is not specific to an SDK instance.
|
|
18
26
|
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
var GlobalLogLevel = LogLevelIndexes.DEBUG;
|
|
28
|
+
/**
|
|
29
|
+
* @param {'DEBUG'|'INFO'|'WARN'|'ERROR'|'NONE'} level
|
|
30
|
+
*/
|
|
21
31
|
|
|
22
32
|
var setLogLevel = function setLogLevel(level) {
|
|
23
|
-
GlobalLogLevel = level;
|
|
33
|
+
GlobalLogLevel = LogLevelIndexes[level];
|
|
24
34
|
};
|
|
25
35
|
|
|
26
36
|
exports.setLogLevel = setLogLevel;
|
|
@@ -38,19 +48,19 @@ var Logger = /*#__PURE__*/function () {
|
|
|
38
48
|
var _proto = Logger.prototype;
|
|
39
49
|
|
|
40
50
|
_proto.debug = function debug(msg) {
|
|
41
|
-
if (this._shouldLog(
|
|
51
|
+
if (this._shouldLog(LogLevelIndexes.DEBUG)) this._log(LogLevels.DEBUG, msg);
|
|
42
52
|
};
|
|
43
53
|
|
|
44
54
|
_proto.info = function info(msg) {
|
|
45
|
-
if (this._shouldLog(
|
|
55
|
+
if (this._shouldLog(LogLevelIndexes.INFO)) this._log(LogLevels.INFO, msg);
|
|
46
56
|
};
|
|
47
57
|
|
|
48
58
|
_proto.warn = function warn(msg) {
|
|
49
|
-
if (this._shouldLog(
|
|
59
|
+
if (this._shouldLog(LogLevelIndexes.WARN)) this._log(LogLevels.WARN, msg);
|
|
50
60
|
};
|
|
51
61
|
|
|
52
62
|
_proto.error = function error(msg) {
|
|
53
|
-
if (this.options.displayAllErrors || this._shouldLog(
|
|
63
|
+
if (this.options.displayAllErrors || this._shouldLog(LogLevelIndexes.ERROR)) this._log(LogLevels.ERROR, msg);
|
|
54
64
|
};
|
|
55
65
|
|
|
56
66
|
_proto._log = function _log(level, text) {
|
|
@@ -72,18 +82,14 @@ var Logger = /*#__PURE__*/function () {
|
|
|
72
82
|
}
|
|
73
83
|
|
|
74
84
|
return result += text;
|
|
75
|
-
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @param {number} level
|
|
88
|
+
*/
|
|
89
|
+
;
|
|
76
90
|
|
|
77
91
|
_proto._shouldLog = function _shouldLog(level) {
|
|
78
|
-
|
|
79
|
-
var levels = Object.keys(LogLevels).map(function (f) {
|
|
80
|
-
return LogLevels[f];
|
|
81
|
-
});
|
|
82
|
-
var index = levels.indexOf(level); // What's the index of what it's trying to check if it should log
|
|
83
|
-
|
|
84
|
-
var levelIdx = levels.indexOf(logLevel); // What's the current log level index.
|
|
85
|
-
|
|
86
|
-
return index >= levelIdx;
|
|
92
|
+
return level >= GlobalLogLevel;
|
|
87
93
|
};
|
|
88
94
|
|
|
89
95
|
return Logger;
|
|
@@ -44,7 +44,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
44
44
|
See the License for the specific language governing permissions and
|
|
45
45
|
limitations under the License.
|
|
46
46
|
**/
|
|
47
|
-
var version = '10.
|
|
47
|
+
var version = '10.16.1-rc.0';
|
|
48
48
|
var eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/;
|
|
49
49
|
var authEndpointMatcher = /^\/v2\/auth/;
|
|
50
50
|
var streamingEndpointMatcher = /^\/(sse|event-stream)/;
|
|
@@ -29,30 +29,45 @@ limitations under the License.
|
|
|
29
29
|
var log = (0, _logger.default)('splitio-settings');
|
|
30
30
|
|
|
31
31
|
var ParseStorageSettings = function ParseStorageSettings(settings) {
|
|
32
|
-
var
|
|
32
|
+
var mode = settings.mode,
|
|
33
|
+
_settings$storage = settings.storage,
|
|
33
34
|
_settings$storage$typ = _settings$storage.type,
|
|
34
35
|
type = _settings$storage$typ === void 0 ? _constants.STORAGE_MEMORY : _settings$storage$typ,
|
|
35
36
|
_settings$storage$opt = _settings$storage.options,
|
|
36
37
|
options = _settings$storage$opt === void 0 ? {} : _settings$storage$opt,
|
|
37
38
|
prefix = _settings$storage.prefix;
|
|
38
39
|
|
|
40
|
+
var __originalType;
|
|
41
|
+
|
|
39
42
|
if (prefix) {
|
|
40
43
|
prefix += '.SPLITIO';
|
|
41
44
|
} else {
|
|
42
45
|
prefix = 'SPLITIO';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var fallbackToMemory = function fallbackToMemory() {
|
|
49
|
+
__originalType = type;
|
|
50
|
+
type = _constants.STORAGE_MEMORY;
|
|
51
|
+
}; // In localhost mode, fallback to Memory storage and track original
|
|
52
|
+
// type to emit SDK_READY_FROM_CACHE if corresponds
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
if (mode === _constants.LOCALHOST_MODE && type === _constants.STORAGE_LOCALSTORAGE) {
|
|
56
|
+
fallbackToMemory();
|
|
43
57
|
} // If an invalid storage type is provided OR we want to use LOCALSTORAGE and
|
|
44
58
|
// it's not available, fallback into MEMORY
|
|
45
59
|
|
|
46
60
|
|
|
47
61
|
if (type !== _constants.STORAGE_MEMORY && type !== _constants.STORAGE_LOCALSTORAGE || type === _constants.STORAGE_LOCALSTORAGE && !(0, _isAvailable.default)()) {
|
|
48
|
-
|
|
62
|
+
fallbackToMemory();
|
|
49
63
|
log.warn('Invalid or unavailable storage. Fallbacking into MEMORY storage');
|
|
50
64
|
}
|
|
51
65
|
|
|
52
66
|
return {
|
|
53
67
|
type: type,
|
|
54
68
|
options: options,
|
|
55
|
-
prefix: prefix
|
|
69
|
+
prefix: prefix,
|
|
70
|
+
__originalType: __originalType
|
|
56
71
|
};
|
|
57
72
|
};
|
|
58
73
|
|