@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.
Files changed (55) hide show
  1. package/CHANGES.txt +12 -3
  2. package/README.md +2 -1
  3. package/es/engine/engine/murmur3/murmur3_128.js +1 -1
  4. package/es/engine/engine/murmur3/murmur3_128_x86.js +2 -3
  5. package/es/engine/matchers/index.js +20 -37
  6. package/es/engine/matchers/types.js +19 -72
  7. package/es/engine/transforms/matcherGroup.js +2 -2
  8. package/es/engine/transforms/matchers.js +2 -2
  9. package/es/engine/value/sanitize.js +12 -14
  10. package/es/impressions/hasher/hashImpression128.js +1 -1
  11. package/es/impressions/observer/observer.js +0 -1
  12. package/es/listeners/browser.js +2 -12
  13. package/es/producer/updater/SplitChangesFromObject.js +3 -2
  14. package/es/storage/SplitCache/InLocalStorage.js +11 -0
  15. package/es/sync/PushManager/index.js +5 -13
  16. package/es/utils/inputValidation/splitFilters.js +4 -5
  17. package/es/utils/logger/LoggerFactory.js +23 -16
  18. package/es/utils/settings/index.js +1 -1
  19. package/es/utils/settings/storage/browser.js +19 -4
  20. package/lib/engine/engine/murmur3/murmur3_128.js +1 -1
  21. package/lib/engine/engine/murmur3/murmur3_128_x86.js +2 -3
  22. package/lib/engine/matchers/index.js +21 -39
  23. package/lib/engine/matchers/types.js +23 -77
  24. package/lib/engine/transforms/matcherGroup.js +3 -3
  25. package/lib/engine/transforms/matchers.js +22 -22
  26. package/lib/engine/value/sanitize.js +11 -13
  27. package/lib/impressions/hasher/hashImpression128.js +2 -2
  28. package/lib/impressions/observer/observer.js +0 -1
  29. package/lib/listeners/browser.js +2 -12
  30. package/lib/producer/updater/SplitChangesFromObject.js +4 -2
  31. package/lib/storage/SplitCache/InLocalStorage.js +11 -0
  32. package/lib/sync/PushManager/index.js +5 -13
  33. package/lib/utils/inputValidation/splitFilters.js +4 -6
  34. package/lib/utils/logger/LoggerFactory.js +23 -17
  35. package/lib/utils/settings/index.js +1 -1
  36. package/lib/utils/settings/storage/browser.js +18 -3
  37. package/package.json +18 -15
  38. package/src/engine/engine/murmur3/murmur3_128.js +1 -1
  39. package/src/engine/engine/murmur3/murmur3_128_x86.js +2 -3
  40. package/src/engine/matchers/index.js +22 -36
  41. package/src/engine/matchers/types.js +20 -55
  42. package/src/engine/transforms/matcherGroup.js +2 -5
  43. package/src/engine/transforms/matchers.js +2 -6
  44. package/src/engine/value/sanitize.js +12 -17
  45. package/src/impressions/hasher/hashImpression128.js +1 -1
  46. package/src/impressions/observer/observer.js +0 -2
  47. package/src/listeners/browser.js +2 -10
  48. package/src/producer/updater/SplitChangesFromObject.js +2 -2
  49. package/src/storage/SplitCache/InLocalStorage.js +3 -3
  50. package/src/sync/PushManager/index.js +5 -12
  51. package/src/sync/constants.js +1 -1
  52. package/src/utils/inputValidation/splitFilters.js +1 -5
  53. package/src/utils/logger/LoggerFactory.js +25 -16
  54. package/src/utils/settings/index.js +1 -1
  55. 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.mapper = exports.dataTypes = exports.types = void 0;
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 types = {
23
- ALL: 1,
24
- SEGMENT: 2,
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
- UNDEFINED: 8,
31
- EQUAL_TO_SET: 9,
32
- CONTAINS_ANY_OF_SET: 10,
33
- CONTAINS_ALL_OF_SET: 11,
34
- PART_OF_SET: 12,
35
- ENDS_WITH: 13,
36
- STARTS_WITH: 14,
37
- CONTAINS_STRING: 15,
38
- IN_SPLIT_TREATMENT: 16,
39
- EQUAL_TO_BOOLEAN: 17,
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.types = types;
43
- var dataTypes = {
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.dataTypes = dataTypes;
52
+ exports.matcherDataTypes = matcherDataTypes;
52
53
 
53
- var mapper = function mapper(matcherType) {
54
- switch (matcherType) {
55
- case 'ALL_KEYS':
56
- return types.ALL;
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.mapper)(matcherType);
38
+ var type = (0, _types.matcherTypesMapper)(matcherType);
39
39
  var value = undefined;
40
40
 
41
- if (type === _types.types.SEGMENT) {
41
+ if (type === _types.matcherTypes.IN_SEGMENT) {
42
42
  value = (0, _segment.default)(segmentObject);
43
- } else if (type === _types.types.WHITELIST) {
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.mapper)(matcherType); // As default input data type we use string (even for ALL_KEYS)
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.dataTypes.STRING;
53
+ var dataType = _types.matcherDataTypes.STRING;
54
54
  var value = undefined;
55
55
 
56
- if (type === _types.types.SEGMENT) {
56
+ if (type === _types.matcherTypes.IN_SEGMENT) {
57
57
  value = (0, _segment.default)(segmentObject);
58
- } else if (type === _types.types.WHITELIST) {
58
+ } else if (type === _types.matcherTypes.WHITELIST) {
59
59
  value = (0, _whitelist.default)(whitelistObject);
60
- } else if (type === _types.types.EQUAL_TO) {
60
+ } else if (type === _types.matcherTypes.EQUAL_TO) {
61
61
  value = (0, _unaryNumeric.default)(unaryNumericObject);
62
- dataType = _types.dataTypes.NUMBER;
62
+ dataType = _types.matcherDataTypes.NUMBER;
63
63
 
64
64
  if (unaryNumericObject.dataType === 'DATETIME') {
65
65
  value = (0, _convertions.zeroSinceHH)(value);
66
- dataType = _types.dataTypes.DATETIME;
66
+ dataType = _types.matcherDataTypes.DATETIME;
67
67
  }
68
- } else if (type === _types.types.GREATER_THAN_OR_EQUAL_TO || type === _types.types.LESS_THAN_OR_EQUAL_TO) {
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.dataTypes.NUMBER;
70
+ dataType = _types.matcherDataTypes.NUMBER;
71
71
 
72
72
  if (unaryNumericObject.dataType === 'DATETIME') {
73
73
  value = (0, _convertions.zeroSinceSS)(value);
74
- dataType = _types.dataTypes.DATETIME;
74
+ dataType = _types.matcherDataTypes.DATETIME;
75
75
  }
76
- } else if (type === _types.types.BETWEEN) {
76
+ } else if (type === _types.matcherTypes.BETWEEN) {
77
77
  value = betweenObject;
78
- dataType = _types.dataTypes.NUMBER;
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.dataTypes.DATETIME;
83
+ dataType = _types.matcherDataTypes.DATETIME;
84
84
  }
85
- } else if (type === _types.types.EQUAL_TO_SET || type === _types.types.CONTAINS_ANY_OF_SET || type === _types.types.CONTAINS_ALL_OF_SET || type === _types.types.PART_OF_SET) {
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.dataTypes.SET;
88
- } else if (type === _types.types.STARTS_WITH || type === _types.types.ENDS_WITH || type === _types.types.CONTAINS_STRING) {
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.types.IN_SPLIT_TREATMENT) {
90
+ } else if (type === _types.matcherTypes.IN_SPLIT_TREATMENT) {
91
91
  value = dependencyObject;
92
- dataType = _types.dataTypes.NOT_SPECIFIED;
93
- } else if (type === _types.types.EQUAL_TO_BOOLEAN) {
94
- dataType = _types.dataTypes.BOOLEAN;
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.types.MATCHES_STRING) {
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.types.UNDEFINED;
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 MATCHERS.EQUAL_TO:
82
+ case _types.matcherTypes.EQUAL_TO:
85
83
  return dataType === 'DATETIME' ? _convertions.zeroSinceHH : undefined;
86
84
 
87
- case MATCHERS.GREATER_THAN_OR_EQUAL_TO:
88
- case MATCHERS.LESS_THAN_OR_EQUAL_TO:
89
- case MATCHERS.BETWEEN:
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 MATCHERS.IN_SPLIT_TREATMENT:
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 DATA_TYPES.NUMBER:
106
- case DATA_TYPES.DATETIME:
103
+ case _types.matcherDataTypes.NUMBER:
104
+ case _types.matcherDataTypes.DATETIME:
107
105
  sanitizedValue = sanitizeNumber(value);
108
106
  break;
109
107
 
110
- case DATA_TYPES.STRING:
108
+ case _types.matcherDataTypes.STRING:
111
109
  sanitizedValue = sanitizeString(value);
112
110
  break;
113
111
 
114
- case DATA_TYPES.SET:
112
+ case _types.matcherDataTypes.SET:
115
113
  sanitizedValue = sanitizeArray(value);
116
114
  break;
117
115
 
118
- case DATA_TYPES.BOOLEAN:
116
+ case _types.matcherDataTypes.BOOLEAN:
119
117
  sanitizedValue = sanitizeBoolean(value);
120
118
  break;
121
119
 
122
- case DATA_TYPES.NOT_SPECIFIED:
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 _murmur3_ = require("../../engine/engine/murmur3/murmur3_128");
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, _murmur3_.hash128)((0, _buildKey.buildKey)(impression));
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);
@@ -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
- function getUnloadDomEvent() {
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.setChangeNumber(Date.now()), storage.splits.addSplits(splits)]).then(function () {
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.splits.checkCache()) readiness.splits.emit(readiness.splits.SDK_SPLITS_CACHE_LOADED); // Only emits SDK_SEGMENTS_ARRIVED the first time for SDK_READY
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 is present in AuthV2 but not in AuthV1
95
+ var refreshTokenDelay = decodedToken.exp - decodedToken.iat - _constants.SECONDS_BEFORE_EXPIRATION; // Default connDelay of 60 secs
96
96
 
97
- var connDelay = authData.connDelay || 0;
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 (added.has(hash64.dec)) {
262
+ if (add !== undefined) {
262
263
  worker.put(parsedData.changeNumber, {
263
264
  name: parsedData.segmentName,
264
- add: true
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
- exports.LogLevels = LogLevels;
20
- var GlobalLogLevel = LogLevels.DEBUG;
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(LogLevels.DEBUG)) this._log(LogLevels.DEBUG, msg);
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(LogLevels.INFO)) this._log(LogLevels.INFO, msg);
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(LogLevels.WARN)) this._log(LogLevels.WARN, msg);
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(LogLevels.ERROR)) this._log(LogLevels.ERROR, msg);
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
- var logLevel = GlobalLogLevel;
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.15.10-rc.2';
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 _settings$storage = settings.storage,
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
- type = _constants.STORAGE_MEMORY;
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