@convertcom/js-sdk-rules 0.0.1 → 1.0.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 (159) hide show
  1. package/LICENSE.txt +202 -0
  2. package/lib/enums/index.d.ts +29 -0
  3. package/lib/enums/src/audience-type.d.ts +11 -0
  4. package/lib/enums/src/data-enitites.d.ts +7 -0
  5. package/lib/enums/src/dictionary.d.ts +60 -0
  6. package/lib/enums/src/do-not-track.d.ts +12 -0
  7. package/lib/enums/src/event-type.d.ts +10 -0
  8. package/lib/enums/src/experience-type.d.ts +16 -0
  9. package/lib/enums/src/feature-status.d.ts +10 -0
  10. package/lib/enums/src/ga-type.d.ts +10 -0
  11. package/lib/enums/src/goal-data-key.d.ts +11 -0
  12. package/lib/enums/src/goal-type.d.ts +22 -0
  13. package/lib/enums/src/integration-provider.d.ts +27 -0
  14. package/lib/enums/src/log-level.d.ts +14 -0
  15. package/lib/enums/src/log-method.d.ts +14 -0
  16. package/lib/enums/src/project-type.d.ts +10 -0
  17. package/lib/enums/src/rule-error.d.ts +10 -0
  18. package/lib/enums/src/segments/browser-type.d.ts +17 -0
  19. package/lib/enums/src/segments/device-type.d.ts +16 -0
  20. package/lib/enums/src/segments/segments-keys.d.ts +15 -0
  21. package/lib/enums/src/segments/source-type.d.ts +12 -0
  22. package/lib/enums/src/segments/visitor-type.d.ts +10 -0
  23. package/lib/enums/src/system-events.d.ts +22 -0
  24. package/lib/enums/src/variable-types.d.ts +7 -0
  25. package/lib/enums/src/variation-change-type.d.ts +14 -0
  26. package/lib/index.js +227 -0
  27. package/lib/index.js.map +1 -0
  28. package/lib/index.min.js +2 -0
  29. package/lib/index.min.js.map +1 -0
  30. package/lib/index.min.mjs +1 -0
  31. package/lib/index.min.mjs.map +1 -0
  32. package/lib/index.mjs +227 -0
  33. package/lib/index.mjs.map +1 -0
  34. package/lib/legacy/enums/index.d.ts +29 -0
  35. package/lib/legacy/enums/src/audience-type.d.ts +11 -0
  36. package/lib/legacy/enums/src/data-enitites.d.ts +7 -0
  37. package/lib/legacy/enums/src/dictionary.d.ts +60 -0
  38. package/lib/legacy/enums/src/do-not-track.d.ts +12 -0
  39. package/lib/legacy/enums/src/event-type.d.ts +10 -0
  40. package/lib/legacy/enums/src/experience-type.d.ts +16 -0
  41. package/lib/legacy/enums/src/feature-status.d.ts +10 -0
  42. package/lib/legacy/enums/src/ga-type.d.ts +10 -0
  43. package/lib/legacy/enums/src/goal-data-key.d.ts +11 -0
  44. package/lib/legacy/enums/src/goal-type.d.ts +22 -0
  45. package/lib/legacy/enums/src/integration-provider.d.ts +27 -0
  46. package/lib/legacy/enums/src/log-level.d.ts +14 -0
  47. package/lib/legacy/enums/src/log-method.d.ts +14 -0
  48. package/lib/legacy/enums/src/project-type.d.ts +10 -0
  49. package/lib/legacy/enums/src/rule-error.d.ts +10 -0
  50. package/lib/legacy/enums/src/segments/browser-type.d.ts +17 -0
  51. package/lib/legacy/enums/src/segments/device-type.d.ts +16 -0
  52. package/lib/legacy/enums/src/segments/segments-keys.d.ts +15 -0
  53. package/lib/legacy/enums/src/segments/source-type.d.ts +12 -0
  54. package/lib/legacy/enums/src/segments/visitor-type.d.ts +10 -0
  55. package/lib/legacy/enums/src/system-events.d.ts +22 -0
  56. package/lib/legacy/enums/src/variable-types.d.ts +7 -0
  57. package/lib/legacy/enums/src/variation-change-type.d.ts +14 -0
  58. package/lib/legacy/index.js +291 -0
  59. package/lib/legacy/index.js.map +1 -0
  60. package/lib/legacy/index.min.js +8 -0
  61. package/lib/legacy/index.min.js.map +1 -0
  62. package/lib/legacy/logger/index.d.ts +8 -0
  63. package/lib/legacy/logger/src/interfaces/log-client.d.ts +13 -0
  64. package/lib/legacy/logger/src/interfaces/log-manager.d.ts +18 -0
  65. package/lib/legacy/logger/src/interfaces/log-method-map.d.ts +15 -0
  66. package/lib/legacy/logger/src/log-manager.d.ts +64 -0
  67. package/lib/legacy/rules/index.d.ts +8 -0
  68. package/lib/legacy/rules/src/interfaces/rule-manager.d.ts +14 -0
  69. package/lib/legacy/rules/src/rule-manager.d.ts +75 -0
  70. package/lib/legacy/types/index.d.ts +36 -0
  71. package/lib/legacy/types/src/Audience.d.ts +16 -0
  72. package/lib/legacy/types/src/BucketedFeature.d.ts +30 -0
  73. package/lib/legacy/types/src/BucketedVariation.d.ts +13 -0
  74. package/lib/legacy/types/src/BucketingAttributes.d.ts +13 -0
  75. package/lib/legacy/types/src/Config.d.ts +62 -0
  76. package/lib/legacy/types/src/ConversionAttributes.d.ts +11 -0
  77. package/lib/legacy/types/src/Entity.d.ts +13 -0
  78. package/lib/legacy/types/src/Experience.d.ts +37 -0
  79. package/lib/legacy/types/src/Feature.d.ts +18 -0
  80. package/lib/legacy/types/src/Goal.d.ts +30 -0
  81. package/lib/legacy/types/src/Id.d.ts +10 -0
  82. package/lib/{index.d.ts → legacy/types/src/IndentityField.d.ts} +2 -1
  83. package/lib/legacy/types/src/Integration.d.ts +16 -0
  84. package/lib/legacy/types/src/Location.d.ts +14 -0
  85. package/lib/legacy/types/src/Path.d.ts +10 -0
  86. package/lib/legacy/types/src/Project.d.ts +37 -0
  87. package/lib/legacy/types/src/RequireAtLeastOne.d.ts +3 -0
  88. package/lib/legacy/types/src/Rule.d.ts +24 -0
  89. package/lib/legacy/types/src/Segments.d.ts +14 -0
  90. package/lib/legacy/types/src/SegmentsAttributes.d.ts +9 -0
  91. package/lib/legacy/types/src/SegmentsData.d.ts +16 -0
  92. package/lib/legacy/types/src/StoreData.d.ts +14 -0
  93. package/lib/legacy/types/src/TrackingEvent.d.ts +14 -0
  94. package/lib/legacy/types/src/VariableType.d.ts +8 -0
  95. package/lib/legacy/types/src/Variation.d.ts +49 -0
  96. package/lib/legacy/types/src/VisitorsQueue.d.ts +16 -0
  97. package/lib/legacy/types/src/tracking/BucketingEvent.d.ts +11 -0
  98. package/lib/legacy/types/src/tracking/ConversionEvent.d.ts +16 -0
  99. package/lib/legacy/types/src/tracking/Visitor.d.ts +14 -0
  100. package/lib/legacy/types/src/tracking/VisitorEvent.d.ts +13 -0
  101. package/lib/legacy/utils/index.d.ts +14 -0
  102. package/lib/legacy/utils/src/array-utils.d.ts +11 -0
  103. package/lib/legacy/utils/src/comparisons.d.ts +22 -0
  104. package/lib/legacy/utils/src/data-store.d.ts +39 -0
  105. package/lib/legacy/utils/src/file-logger.d.ts +40 -0
  106. package/lib/legacy/utils/src/http-client.d.ts +102 -0
  107. package/lib/legacy/utils/src/object-utils.d.ts +28 -0
  108. package/lib/legacy/utils/src/string-utils.d.ts +20 -0
  109. package/lib/legacy/utils/src/types-utils.d.ts +12 -0
  110. package/lib/logger/index.d.ts +8 -0
  111. package/lib/logger/src/interfaces/log-client.d.ts +13 -0
  112. package/lib/logger/src/interfaces/log-manager.d.ts +18 -0
  113. package/lib/logger/src/interfaces/log-method-map.d.ts +15 -0
  114. package/lib/logger/src/log-manager.d.ts +64 -0
  115. package/lib/package.json +18 -0
  116. package/lib/rules/index.d.ts +8 -0
  117. package/lib/rules/src/interfaces/rule-manager.d.ts +14 -0
  118. package/lib/rules/src/rule-manager.d.ts +75 -0
  119. package/lib/types/index.d.ts +36 -0
  120. package/lib/types/src/Audience.d.ts +16 -0
  121. package/lib/types/src/BucketedFeature.d.ts +30 -0
  122. package/lib/types/src/BucketedVariation.d.ts +13 -0
  123. package/lib/types/src/BucketingAttributes.d.ts +13 -0
  124. package/lib/types/src/Config.d.ts +62 -0
  125. package/lib/types/src/ConversionAttributes.d.ts +11 -0
  126. package/lib/types/src/Entity.d.ts +13 -0
  127. package/lib/types/src/Experience.d.ts +37 -0
  128. package/lib/types/src/Feature.d.ts +18 -0
  129. package/lib/types/src/Goal.d.ts +30 -0
  130. package/lib/types/src/Id.d.ts +10 -0
  131. package/lib/types/src/IndentityField.d.ts +7 -0
  132. package/lib/types/src/Integration.d.ts +16 -0
  133. package/lib/types/src/Location.d.ts +14 -0
  134. package/lib/types/src/Path.d.ts +10 -0
  135. package/lib/types/src/Project.d.ts +37 -0
  136. package/lib/types/src/RequireAtLeastOne.d.ts +3 -0
  137. package/lib/types/src/Rule.d.ts +24 -0
  138. package/lib/types/src/Segments.d.ts +14 -0
  139. package/lib/types/src/SegmentsAttributes.d.ts +9 -0
  140. package/lib/types/src/SegmentsData.d.ts +16 -0
  141. package/lib/types/src/StoreData.d.ts +14 -0
  142. package/lib/types/src/TrackingEvent.d.ts +14 -0
  143. package/lib/types/src/VariableType.d.ts +8 -0
  144. package/lib/types/src/Variation.d.ts +49 -0
  145. package/lib/types/src/VisitorsQueue.d.ts +16 -0
  146. package/lib/types/src/tracking/BucketingEvent.d.ts +11 -0
  147. package/lib/types/src/tracking/ConversionEvent.d.ts +16 -0
  148. package/lib/types/src/tracking/Visitor.d.ts +14 -0
  149. package/lib/types/src/tracking/VisitorEvent.d.ts +13 -0
  150. package/lib/utils/index.d.ts +14 -0
  151. package/lib/utils/src/array-utils.d.ts +11 -0
  152. package/lib/utils/src/comparisons.d.ts +22 -0
  153. package/lib/utils/src/data-store.d.ts +39 -0
  154. package/lib/utils/src/file-logger.d.ts +40 -0
  155. package/lib/utils/src/http-client.d.ts +102 -0
  156. package/lib/utils/src/object-utils.d.ts +28 -0
  157. package/lib/utils/src/string-utils.d.ts +20 -0
  158. package/lib/utils/src/types-utils.d.ts +12 -0
  159. package/package.json +60 -1
package/lib/index.js CHANGED
@@ -1,8 +1,235 @@
1
1
  'use strict';
2
2
 
3
+ var jsSdkUtils = require('@convertcom/js-sdk-utils');
4
+ var jsSdkEnums = require('@convertcom/js-sdk-enums');
5
+
3
6
  /*!
4
7
  * Convert JS SDK
5
8
  * Version 1.0.0
6
9
  * Copyright(c) 2020 Convert Insights, Inc
7
10
  * License Apache-2.0
8
11
  */
12
+ const DEFAULT_KEYS_CASE_SENSITIVE = true;
13
+ const DEFAULT_NEGATION = '!';
14
+ /**
15
+ * Provides rule processing calculations with corresponding comparisons methods
16
+ * @category Modules
17
+ * @constructor
18
+ * @implements {RuleManagerInterface}
19
+ */
20
+ class RuleManager {
21
+ /**
22
+ * @param {Config=} config
23
+ * @param {Object=} dependencies
24
+ * @param {LogManagerInterface=} dependencies.loggerManager
25
+ */
26
+ constructor(config, { loggerManager } = {}) {
27
+ var _a, _b;
28
+ this._comparisonProcessor = jsSdkUtils.Comparisons;
29
+ this._negation = DEFAULT_NEGATION;
30
+ this._keys_case_sensitive = DEFAULT_KEYS_CASE_SENSITIVE;
31
+ this._loggerManager = loggerManager;
32
+ this._comparisonProcessor = jsSdkUtils.objectDeepValue(config, 'rules.comparisonProcessor', jsSdkUtils.Comparisons);
33
+ this._negation = String(jsSdkUtils.objectDeepValue(config, 'rules.negation', DEFAULT_NEGATION)).valueOf();
34
+ this._keys_case_sensitive = jsSdkUtils.objectDeepValue(config, 'rules.keys_case_sensitive', DEFAULT_KEYS_CASE_SENSITIVE, true);
35
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager()', jsSdkEnums.MESSAGES.RULE_CONSTRUCTOR, this);
36
+ }
37
+ /**
38
+ * Setter for comparison processor
39
+ * @param {Record<string, any>} comparisonProcessor
40
+ */
41
+ set comparisonProcessor(comparisonProcessor) {
42
+ this._comparisonProcessor = comparisonProcessor;
43
+ }
44
+ /**
45
+ * Getter for comparison processor
46
+ */
47
+ get comparisonProcessor() {
48
+ return this._comparisonProcessor;
49
+ }
50
+ /**
51
+ * Retrieve comparison methods from comparison processor
52
+ * @return {Array<string>} List of methods of comparison processor
53
+ */
54
+ getComparisonProcessorMethods() {
55
+ return Object.getOwnPropertyNames(this._comparisonProcessor).filter((name) => typeof this._comparisonProcessor[name] === 'function');
56
+ }
57
+ /**
58
+ * Check input data matching to rule set
59
+ * @param {Record<string, any>} data Single value or key-value data set to compare
60
+ * @param {RuleSet} ruleSet
61
+ * @return {boolean | RuleError}
62
+ */
63
+ isRuleMatched(data, ruleSet, logEntry) {
64
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
65
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager.isRuleMatched()', {
66
+ data: data,
67
+ ruleSet: ruleSet
68
+ });
69
+ if (logEntry) {
70
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.info) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager.isRuleMatched()', jsSdkEnums.MESSAGES.PROCESSING_ENTITY.replace('#', logEntry));
71
+ }
72
+ // Top OR level
73
+ let match;
74
+ if (Object.prototype.hasOwnProperty.call(ruleSet, 'OR') &&
75
+ jsSdkUtils.arrayNotEmpty(ruleSet === null || ruleSet === void 0 ? void 0 : ruleSet.OR)) {
76
+ for (let i = 0, l = ruleSet.OR.length; i < l; i++) {
77
+ match = this._processAND(data, ruleSet.OR[i]);
78
+ if (Object.values(jsSdkEnums.RuleError).includes(match)) {
79
+ (_f = (_e = this._loggerManager) === null || _e === void 0 ? void 0 : _e.info) === null || _f === void 0 ? void 0 : _f.call(_e, 'RuleManager.isRuleMatched()', logEntry || '', jsSdkEnums.ERROR_MESSAGES.RULE_ERROR);
80
+ }
81
+ else {
82
+ (_h = (_g = this._loggerManager) === null || _g === void 0 ? void 0 : _g.info) === null || _h === void 0 ? void 0 : _h.call(_g, 'RuleManager.isRuleMatched()', logEntry || '', match === false
83
+ ? jsSdkEnums.MESSAGES.RULE_NOT_MATCH
84
+ : jsSdkEnums.MESSAGES.RULE_MATCH.replace('#', String(i)));
85
+ }
86
+ if (match !== false) {
87
+ return match;
88
+ }
89
+ }
90
+ }
91
+ else {
92
+ (_k = (_j = this._loggerManager) === null || _j === void 0 ? void 0 : _j.warn) === null || _k === void 0 ? void 0 : _k.call(_j, 'RuleManager.isRuleMatched()', logEntry || '', jsSdkEnums.ERROR_MESSAGES.RULE_NOT_VALID);
93
+ }
94
+ return false;
95
+ }
96
+ /**
97
+ * Check is rule object valid
98
+ * @param {Rule} rule
99
+ * @return {boolean}
100
+ */
101
+ isValidRule(rule) {
102
+ var _a, _b;
103
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager.isValidRule()', {
104
+ rule: rule
105
+ });
106
+ return (Object.prototype.hasOwnProperty.call(rule, 'matching') &&
107
+ typeof rule.matching === 'object' &&
108
+ Object.prototype.hasOwnProperty.call(rule.matching, 'match_type') &&
109
+ typeof rule.matching.match_type === 'string' &&
110
+ Object.prototype.hasOwnProperty.call(rule.matching, 'negated') &&
111
+ typeof rule.matching.negated === 'boolean' &&
112
+ Object.prototype.hasOwnProperty.call(rule, 'value'));
113
+ }
114
+ /**
115
+ * Process AND block of rule set. Return first false if found
116
+ * @param {Record<string, any>} data Single value or key-value data set to compare
117
+ * @param {RuleAnd} rulesSubset
118
+ * @return {boolean | RuleError}
119
+ * @private
120
+ */
121
+ _processAND(data, rulesSubset) {
122
+ var _a, _b, _c, _d;
123
+ // Second AND level
124
+ let match;
125
+ if (Object.prototype.hasOwnProperty.call(rulesSubset, 'AND') &&
126
+ jsSdkUtils.arrayNotEmpty(rulesSubset === null || rulesSubset === void 0 ? void 0 : rulesSubset.AND)) {
127
+ for (let i = 0, l = rulesSubset.AND.length; i < l; i++) {
128
+ match = this._processORWHEN(data, rulesSubset.AND[i]);
129
+ if (match === false) {
130
+ return false;
131
+ }
132
+ }
133
+ if (match !== false) {
134
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processAND()', jsSdkEnums.MESSAGES.RULE_MATCH_AND);
135
+ }
136
+ return match;
137
+ }
138
+ else {
139
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.warn) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processAND()', jsSdkEnums.ERROR_MESSAGES.RULE_NOT_VALID);
140
+ }
141
+ return false;
142
+ }
143
+ /**
144
+ * Process OR block of rule set. Return first true if found
145
+ * @param {Record<string, any>} data Single value or key-value data set to compare
146
+ * @param {RuleOrWhen} rulesSubset
147
+ * @return {boolean | RuleError}
148
+ * @private
149
+ */
150
+ _processORWHEN(data, rulesSubset) {
151
+ var _a, _b;
152
+ // Third OR level. Called OR_WHEN.
153
+ let match;
154
+ if (Object.prototype.hasOwnProperty.call(rulesSubset, 'OR_WHEN') &&
155
+ jsSdkUtils.arrayNotEmpty(rulesSubset === null || rulesSubset === void 0 ? void 0 : rulesSubset.OR_WHEN)) {
156
+ for (let i = 0, l = rulesSubset.OR_WHEN.length; i < l; i++) {
157
+ match = this._processRuleItem(data, rulesSubset.OR_WHEN[i]);
158
+ if (match !== false) {
159
+ return match;
160
+ }
161
+ }
162
+ }
163
+ else {
164
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.warn) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processORWHEN()', jsSdkEnums.ERROR_MESSAGES.RULE_NOT_VALID);
165
+ }
166
+ return false;
167
+ }
168
+ /**
169
+ * Process single rule item
170
+ * @param {Record<string, any>} data Single value or key-value data set to compare
171
+ * @param {Rule} rule A single rule to compare
172
+ * @return {boolean | RuleError} Comparison result
173
+ * @private
174
+ */
175
+ _processRuleItem(data, rule) {
176
+ var _a, _b, _c, _d, _e, _f, _g, _h;
177
+ if (this.isValidRule(rule)) {
178
+ try {
179
+ const negation = rule.matching.negated || false;
180
+ const matching = rule.matching.match_type;
181
+ if (this.getComparisonProcessorMethods().indexOf(matching) !== -1) {
182
+ if (typeof data === 'object') {
183
+ // Validate data key-value set.
184
+ if (data.constructor === Object) {
185
+ // Rule object has to have `key` field
186
+ for (const key of Object.keys(data)) {
187
+ const k = this._keys_case_sensitive ? key : key.toLowerCase();
188
+ const rule_k = this._keys_case_sensitive
189
+ ? rule.key
190
+ : rule.key.toLowerCase();
191
+ if (k === rule_k) {
192
+ return this._comparisonProcessor[matching](data[key], rule.value, negation);
193
+ }
194
+ }
195
+ }
196
+ else if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
197
+ // Rule object has to have `rule_type` field
198
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processRuleItem()', jsSdkEnums.MESSAGES.RULE_MATCH_START.replace('#', rule.rule_type));
199
+ for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
200
+ if (method === 'constructor')
201
+ continue;
202
+ const rule_method = jsSdkUtils.camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
203
+ if (method === rule_method) {
204
+ const dataValue = data[method](rule);
205
+ if (Object.values(jsSdkEnums.RuleError).includes(dataValue))
206
+ return dataValue;
207
+ if (rule.rule_type === 'js_condition')
208
+ return dataValue;
209
+ return this._comparisonProcessor[matching](dataValue, rule.value, negation);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ else {
215
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.warn) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processRuleItem()', {
216
+ warn: jsSdkEnums.ERROR_MESSAGES.RULE_DATA_NOT_VALID
217
+ });
218
+ }
219
+ }
220
+ }
221
+ catch (error) {
222
+ (_f = (_e = this._loggerManager) === null || _e === void 0 ? void 0 : _e.error) === null || _f === void 0 ? void 0 : _f.call(_e, 'RuleManager._processRuleItem()', {
223
+ error: error.message
224
+ });
225
+ }
226
+ }
227
+ else {
228
+ (_h = (_g = this._loggerManager) === null || _g === void 0 ? void 0 : _g.warn) === null || _h === void 0 ? void 0 : _h.call(_g, 'RuleManager._processRuleItem()', jsSdkEnums.ERROR_MESSAGES.RULE_NOT_VALID);
229
+ }
230
+ return false;
231
+ }
232
+ }
233
+
234
+ exports.RuleManager = RuleManager;
235
+ //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/lib/index.min.js CHANGED
@@ -4,3 +4,5 @@
4
4
  * Copyright(c) 2020-2022 Convert Insights, Inc
5
5
  * License Apache-2.0
6
6
  */
7
+ "use strict";var e=require("@convertcom/js-sdk-utils"),r=require("@convertcom/js-sdk-enums");exports.RuleManager=class{constructor(o,{loggerManager:l}={}){var t,s;this._comparisonProcessor=e.Comparisons,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=l,this._comparisonProcessor=e.objectDeepValue(o,"rules.comparisonProcessor",e.Comparisons),this._negation=String(e.objectDeepValue(o,"rules.negation","!")).valueOf(),this._keys_case_sensitive=e.objectDeepValue(o,"rules.keys_case_sensitive",true,!0),null===(s=null===(t=this._loggerManager)||void 0===t?void 0:t.trace)||void 0===s||s.call(t,"RuleManager()",r.MESSAGES.RULE_CONSTRUCTOR,this)}set comparisonProcessor(e){this._comparisonProcessor=e}get comparisonProcessor(){return this._comparisonProcessor}getComparisonProcessorMethods(){return Object.getOwnPropertyNames(this._comparisonProcessor).filter((e=>"function"==typeof this._comparisonProcessor[e]))}isRuleMatched(o,l,t){var s,a,i,n,c,u,_,g,R,p;let d;if(null===(a=null===(s=this._loggerManager)||void 0===s?void 0:s.trace)||void 0===a||a.call(s,"RuleManager.isRuleMatched()",{data:o,ruleSet:l}),t&&(null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.info)||void 0===n||n.call(i,"RuleManager.isRuleMatched()",r.MESSAGES.PROCESSING_ENTITY.replace("#",t))),Object.prototype.hasOwnProperty.call(l,"OR")&&e.arrayNotEmpty(null==l?void 0:l.OR)){for(let e=0,s=l.OR.length;e<s;e++)if(d=this._processAND(o,l.OR[e]),Object.values(r.RuleError).includes(d)?null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.info)||void 0===u||u.call(c,"RuleManager.isRuleMatched()",t||"",r.ERROR_MESSAGES.RULE_ERROR):null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.info)||void 0===g||g.call(_,"RuleManager.isRuleMatched()",t||"",!1===d?r.MESSAGES.RULE_NOT_MATCH:r.MESSAGES.RULE_MATCH.replace("#",String(e))),!1!==d)return d}else null===(p=null===(R=this._loggerManager)||void 0===R?void 0:R.warn)||void 0===p||p.call(R,"RuleManager.isRuleMatched()",t||"",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}isValidRule(e){var r,o;return null===(o=null===(r=this._loggerManager)||void 0===r?void 0:r.trace)||void 0===o||o.call(r,"RuleManager.isValidRule()",{rule:e}),Object.prototype.hasOwnProperty.call(e,"matching")&&"object"==typeof e.matching&&Object.prototype.hasOwnProperty.call(e.matching,"match_type")&&"string"==typeof e.matching.match_type&&Object.prototype.hasOwnProperty.call(e.matching,"negated")&&"boolean"==typeof e.matching.negated&&Object.prototype.hasOwnProperty.call(e,"value")}_processAND(o,l){var t,s,a,i;let n;if(Object.prototype.hasOwnProperty.call(l,"AND")&&e.arrayNotEmpty(null==l?void 0:l.AND)){for(let e=0,r=l.AND.length;e<r;e++)if(n=this._processORWHEN(o,l.AND[e]),!1===n)return!1;return!1!==n&&(null===(s=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===s||s.call(t,"RuleManager._processAND()",r.MESSAGES.RULE_MATCH_AND)),n}return null===(i=null===(a=this._loggerManager)||void 0===a?void 0:a.warn)||void 0===i||i.call(a,"RuleManager._processAND()",r.ERROR_MESSAGES.RULE_NOT_VALID),!1}_processORWHEN(o,l){var t,s;let a;if(Object.prototype.hasOwnProperty.call(l,"OR_WHEN")&&e.arrayNotEmpty(null==l?void 0:l.OR_WHEN)){for(let e=0,r=l.OR_WHEN.length;e<r;e++)if(a=this._processRuleItem(o,l.OR_WHEN[e]),!1!==a)return a}else null===(s=null===(t=this._loggerManager)||void 0===t?void 0:t.warn)||void 0===s||s.call(t,"RuleManager._processORWHEN()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}_processRuleItem(o,l){var t,s,a,i,n,c,u,_;if(this.isValidRule(l))try{const n=l.matching.negated||!1,c=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(c))if("object"==typeof o){if(o.constructor===Object)for(const e of Object.keys(o)){const r=this._keys_case_sensitive?e:e.toLowerCase();if(r===(this._keys_case_sensitive?l.key:l.key.toLowerCase()))return this._comparisonProcessor[c](o[e],l.value,n)}else if(null==l?void 0:l.rule_type){null===(s=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===s||s.call(t,"RuleManager._processRuleItem()",r.MESSAGES.RULE_MATCH_START.replace("#",l.rule_type));for(const t of Object.getOwnPropertyNames(o.constructor.prototype)){if("constructor"===t)continue;if(t===e.camelCase(`get ${l.rule_type.replace(/_/g," ")}`)){const e=o[t](l);return Object.values(r.RuleError).includes(e)||"js_condition"===l.rule_type?e:this._comparisonProcessor[c](e,l.value,n)}}}}else null===(i=null===(a=this._loggerManager)||void 0===a?void 0:a.warn)||void 0===i||i.call(a,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_DATA_NOT_VALID})}catch(e){null===(c=null===(n=this._loggerManager)||void 0===n?void 0:n.error)||void 0===c||c.call(n,"RuleManager._processRuleItem()",{error:e.message})}else null===(_=null===(u=this._loggerManager)||void 0===u?void 0:u.warn)||void 0===_||_.call(u,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}};
8
+ //# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/lib/index.min.mjs CHANGED
@@ -4,4 +4,5 @@
4
4
  * Copyright(c) 2020-2022 Convert Insights, Inc
5
5
  * License Apache-2.0
6
6
  */
7
+ import{Comparisons as e,objectDeepValue as r,arrayNotEmpty as o,camelCase as l}from"@convertcom/js-sdk-utils";import{MESSAGES as t,RuleError as s,ERROR_MESSAGES as a}from"@convertcom/js-sdk-enums";class i{constructor(o,{loggerManager:l}={}){var s,a;this._comparisonProcessor=e,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=l,this._comparisonProcessor=r(o,"rules.comparisonProcessor",e),this._negation=String(r(o,"rules.negation","!")).valueOf(),this._keys_case_sensitive=r(o,"rules.keys_case_sensitive",true,!0),null===(a=null===(s=this._loggerManager)||void 0===s?void 0:s.trace)||void 0===a||a.call(s,"RuleManager()",t.RULE_CONSTRUCTOR,this)}set comparisonProcessor(e){this._comparisonProcessor=e}get comparisonProcessor(){return this._comparisonProcessor}getComparisonProcessorMethods(){return Object.getOwnPropertyNames(this._comparisonProcessor).filter((e=>"function"==typeof this._comparisonProcessor[e]))}isRuleMatched(e,r,l){var i,n,c,u,g,_,p,d,h,v;let R;if(null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"RuleManager.isRuleMatched()",{data:e,ruleSet:r}),l&&(null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.info)||void 0===u||u.call(c,"RuleManager.isRuleMatched()",t.PROCESSING_ENTITY.replace("#",l))),Object.prototype.hasOwnProperty.call(r,"OR")&&o(null==r?void 0:r.OR)){for(let o=0,i=r.OR.length;o<i;o++)if(R=this._processAND(e,r.OR[o]),Object.values(s).includes(R)?null===(_=null===(g=this._loggerManager)||void 0===g?void 0:g.info)||void 0===_||_.call(g,"RuleManager.isRuleMatched()",l||"",a.RULE_ERROR):null===(d=null===(p=this._loggerManager)||void 0===p?void 0:p.info)||void 0===d||d.call(p,"RuleManager.isRuleMatched()",l||"",!1===R?t.RULE_NOT_MATCH:t.RULE_MATCH.replace("#",String(o))),!1!==R)return R}else null===(v=null===(h=this._loggerManager)||void 0===h?void 0:h.warn)||void 0===v||v.call(h,"RuleManager.isRuleMatched()",l||"",a.RULE_NOT_VALID);return!1}isValidRule(e){var r,o;return null===(o=null===(r=this._loggerManager)||void 0===r?void 0:r.trace)||void 0===o||o.call(r,"RuleManager.isValidRule()",{rule:e}),Object.prototype.hasOwnProperty.call(e,"matching")&&"object"==typeof e.matching&&Object.prototype.hasOwnProperty.call(e.matching,"match_type")&&"string"==typeof e.matching.match_type&&Object.prototype.hasOwnProperty.call(e.matching,"negated")&&"boolean"==typeof e.matching.negated&&Object.prototype.hasOwnProperty.call(e,"value")}_processAND(e,r){var l,s,i,n;let c;if(Object.prototype.hasOwnProperty.call(r,"AND")&&o(null==r?void 0:r.AND)){for(let o=0,l=r.AND.length;o<l;o++)if(c=this._processORWHEN(e,r.AND[o]),!1===c)return!1;return!1!==c&&(null===(s=null===(l=this._loggerManager)||void 0===l?void 0:l.info)||void 0===s||s.call(l,"RuleManager._processAND()",t.RULE_MATCH_AND)),c}return null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.warn)||void 0===n||n.call(i,"RuleManager._processAND()",a.RULE_NOT_VALID),!1}_processORWHEN(e,r){var l,t;let s;if(Object.prototype.hasOwnProperty.call(r,"OR_WHEN")&&o(null==r?void 0:r.OR_WHEN)){for(let o=0,l=r.OR_WHEN.length;o<l;o++)if(s=this._processRuleItem(e,r.OR_WHEN[o]),!1!==s)return s}else null===(t=null===(l=this._loggerManager)||void 0===l?void 0:l.warn)||void 0===t||t.call(l,"RuleManager._processORWHEN()",a.RULE_NOT_VALID);return!1}_processRuleItem(e,r){var o,i,n,c,u,g,_,p;if(this.isValidRule(r))try{const u=r.matching.negated||!1,g=r.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(g))if("object"==typeof e){if(e.constructor===Object)for(const o of Object.keys(e)){const l=this._keys_case_sensitive?o:o.toLowerCase();if(l===(this._keys_case_sensitive?r.key:r.key.toLowerCase()))return this._comparisonProcessor[g](e[o],r.value,u)}else if(null==r?void 0:r.rule_type){null===(i=null===(o=this._loggerManager)||void 0===o?void 0:o.info)||void 0===i||i.call(o,"RuleManager._processRuleItem()",t.RULE_MATCH_START.replace("#",r.rule_type));for(const o of Object.getOwnPropertyNames(e.constructor.prototype)){if("constructor"===o)continue;if(o===l(`get ${r.rule_type.replace(/_/g," ")}`)){const l=e[o](r);return Object.values(s).includes(l)||"js_condition"===r.rule_type?l:this._comparisonProcessor[g](l,r.value,u)}}}}else null===(c=null===(n=this._loggerManager)||void 0===n?void 0:n.warn)||void 0===c||c.call(n,"RuleManager._processRuleItem()",{warn:a.RULE_DATA_NOT_VALID})}catch(e){null===(g=null===(u=this._loggerManager)||void 0===u?void 0:u.error)||void 0===g||g.call(u,"RuleManager._processRuleItem()",{error:e.message})}else null===(p=null===(_=this._loggerManager)||void 0===_?void 0:_.warn)||void 0===p||p.call(_,"RuleManager._processRuleItem()",a.RULE_NOT_VALID);return!1}}export{i as RuleManager};
7
8
  //# sourceMappingURL=index.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.min.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/lib/index.mjs CHANGED
@@ -1,6 +1,233 @@
1
+ import { Comparisons, objectDeepValue, arrayNotEmpty, camelCase } from '@convertcom/js-sdk-utils';
2
+ import { MESSAGES, RuleError, ERROR_MESSAGES } from '@convertcom/js-sdk-enums';
3
+
1
4
  /*!
2
5
  * Convert JS SDK
3
6
  * Version 1.0.0
4
7
  * Copyright(c) 2020 Convert Insights, Inc
5
8
  * License Apache-2.0
6
9
  */
10
+ const DEFAULT_KEYS_CASE_SENSITIVE = true;
11
+ const DEFAULT_NEGATION = '!';
12
+ /**
13
+ * Provides rule processing calculations with corresponding comparisons methods
14
+ * @category Modules
15
+ * @constructor
16
+ * @implements {RuleManagerInterface}
17
+ */
18
+ class RuleManager {
19
+ /**
20
+ * @param {Config=} config
21
+ * @param {Object=} dependencies
22
+ * @param {LogManagerInterface=} dependencies.loggerManager
23
+ */
24
+ constructor(config, { loggerManager } = {}) {
25
+ var _a, _b;
26
+ this._comparisonProcessor = Comparisons;
27
+ this._negation = DEFAULT_NEGATION;
28
+ this._keys_case_sensitive = DEFAULT_KEYS_CASE_SENSITIVE;
29
+ this._loggerManager = loggerManager;
30
+ this._comparisonProcessor = objectDeepValue(config, 'rules.comparisonProcessor', Comparisons);
31
+ this._negation = String(objectDeepValue(config, 'rules.negation', DEFAULT_NEGATION)).valueOf();
32
+ this._keys_case_sensitive = objectDeepValue(config, 'rules.keys_case_sensitive', DEFAULT_KEYS_CASE_SENSITIVE, true);
33
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager()', MESSAGES.RULE_CONSTRUCTOR, this);
34
+ }
35
+ /**
36
+ * Setter for comparison processor
37
+ * @param {Record<string, any>} comparisonProcessor
38
+ */
39
+ set comparisonProcessor(comparisonProcessor) {
40
+ this._comparisonProcessor = comparisonProcessor;
41
+ }
42
+ /**
43
+ * Getter for comparison processor
44
+ */
45
+ get comparisonProcessor() {
46
+ return this._comparisonProcessor;
47
+ }
48
+ /**
49
+ * Retrieve comparison methods from comparison processor
50
+ * @return {Array<string>} List of methods of comparison processor
51
+ */
52
+ getComparisonProcessorMethods() {
53
+ return Object.getOwnPropertyNames(this._comparisonProcessor).filter((name) => typeof this._comparisonProcessor[name] === 'function');
54
+ }
55
+ /**
56
+ * Check input data matching to rule set
57
+ * @param {Record<string, any>} data Single value or key-value data set to compare
58
+ * @param {RuleSet} ruleSet
59
+ * @return {boolean | RuleError}
60
+ */
61
+ isRuleMatched(data, ruleSet, logEntry) {
62
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
63
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager.isRuleMatched()', {
64
+ data: data,
65
+ ruleSet: ruleSet
66
+ });
67
+ if (logEntry) {
68
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.info) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager.isRuleMatched()', MESSAGES.PROCESSING_ENTITY.replace('#', logEntry));
69
+ }
70
+ // Top OR level
71
+ let match;
72
+ if (Object.prototype.hasOwnProperty.call(ruleSet, 'OR') &&
73
+ arrayNotEmpty(ruleSet === null || ruleSet === void 0 ? void 0 : ruleSet.OR)) {
74
+ for (let i = 0, l = ruleSet.OR.length; i < l; i++) {
75
+ match = this._processAND(data, ruleSet.OR[i]);
76
+ if (Object.values(RuleError).includes(match)) {
77
+ (_f = (_e = this._loggerManager) === null || _e === void 0 ? void 0 : _e.info) === null || _f === void 0 ? void 0 : _f.call(_e, 'RuleManager.isRuleMatched()', logEntry || '', ERROR_MESSAGES.RULE_ERROR);
78
+ }
79
+ else {
80
+ (_h = (_g = this._loggerManager) === null || _g === void 0 ? void 0 : _g.info) === null || _h === void 0 ? void 0 : _h.call(_g, 'RuleManager.isRuleMatched()', logEntry || '', match === false
81
+ ? MESSAGES.RULE_NOT_MATCH
82
+ : MESSAGES.RULE_MATCH.replace('#', String(i)));
83
+ }
84
+ if (match !== false) {
85
+ return match;
86
+ }
87
+ }
88
+ }
89
+ else {
90
+ (_k = (_j = this._loggerManager) === null || _j === void 0 ? void 0 : _j.warn) === null || _k === void 0 ? void 0 : _k.call(_j, 'RuleManager.isRuleMatched()', logEntry || '', ERROR_MESSAGES.RULE_NOT_VALID);
91
+ }
92
+ return false;
93
+ }
94
+ /**
95
+ * Check is rule object valid
96
+ * @param {Rule} rule
97
+ * @return {boolean}
98
+ */
99
+ isValidRule(rule) {
100
+ var _a, _b;
101
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.trace) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager.isValidRule()', {
102
+ rule: rule
103
+ });
104
+ return (Object.prototype.hasOwnProperty.call(rule, 'matching') &&
105
+ typeof rule.matching === 'object' &&
106
+ Object.prototype.hasOwnProperty.call(rule.matching, 'match_type') &&
107
+ typeof rule.matching.match_type === 'string' &&
108
+ Object.prototype.hasOwnProperty.call(rule.matching, 'negated') &&
109
+ typeof rule.matching.negated === 'boolean' &&
110
+ Object.prototype.hasOwnProperty.call(rule, 'value'));
111
+ }
112
+ /**
113
+ * Process AND block of rule set. Return first false if found
114
+ * @param {Record<string, any>} data Single value or key-value data set to compare
115
+ * @param {RuleAnd} rulesSubset
116
+ * @return {boolean | RuleError}
117
+ * @private
118
+ */
119
+ _processAND(data, rulesSubset) {
120
+ var _a, _b, _c, _d;
121
+ // Second AND level
122
+ let match;
123
+ if (Object.prototype.hasOwnProperty.call(rulesSubset, 'AND') &&
124
+ arrayNotEmpty(rulesSubset === null || rulesSubset === void 0 ? void 0 : rulesSubset.AND)) {
125
+ for (let i = 0, l = rulesSubset.AND.length; i < l; i++) {
126
+ match = this._processORWHEN(data, rulesSubset.AND[i]);
127
+ if (match === false) {
128
+ return false;
129
+ }
130
+ }
131
+ if (match !== false) {
132
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processAND()', MESSAGES.RULE_MATCH_AND);
133
+ }
134
+ return match;
135
+ }
136
+ else {
137
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.warn) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processAND()', ERROR_MESSAGES.RULE_NOT_VALID);
138
+ }
139
+ return false;
140
+ }
141
+ /**
142
+ * Process OR block of rule set. Return first true if found
143
+ * @param {Record<string, any>} data Single value or key-value data set to compare
144
+ * @param {RuleOrWhen} rulesSubset
145
+ * @return {boolean | RuleError}
146
+ * @private
147
+ */
148
+ _processORWHEN(data, rulesSubset) {
149
+ var _a, _b;
150
+ // Third OR level. Called OR_WHEN.
151
+ let match;
152
+ if (Object.prototype.hasOwnProperty.call(rulesSubset, 'OR_WHEN') &&
153
+ arrayNotEmpty(rulesSubset === null || rulesSubset === void 0 ? void 0 : rulesSubset.OR_WHEN)) {
154
+ for (let i = 0, l = rulesSubset.OR_WHEN.length; i < l; i++) {
155
+ match = this._processRuleItem(data, rulesSubset.OR_WHEN[i]);
156
+ if (match !== false) {
157
+ return match;
158
+ }
159
+ }
160
+ }
161
+ else {
162
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.warn) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processORWHEN()', ERROR_MESSAGES.RULE_NOT_VALID);
163
+ }
164
+ return false;
165
+ }
166
+ /**
167
+ * Process single rule item
168
+ * @param {Record<string, any>} data Single value or key-value data set to compare
169
+ * @param {Rule} rule A single rule to compare
170
+ * @return {boolean | RuleError} Comparison result
171
+ * @private
172
+ */
173
+ _processRuleItem(data, rule) {
174
+ var _a, _b, _c, _d, _e, _f, _g, _h;
175
+ if (this.isValidRule(rule)) {
176
+ try {
177
+ const negation = rule.matching.negated || false;
178
+ const matching = rule.matching.match_type;
179
+ if (this.getComparisonProcessorMethods().indexOf(matching) !== -1) {
180
+ if (typeof data === 'object') {
181
+ // Validate data key-value set.
182
+ if (data.constructor === Object) {
183
+ // Rule object has to have `key` field
184
+ for (const key of Object.keys(data)) {
185
+ const k = this._keys_case_sensitive ? key : key.toLowerCase();
186
+ const rule_k = this._keys_case_sensitive
187
+ ? rule.key
188
+ : rule.key.toLowerCase();
189
+ if (k === rule_k) {
190
+ return this._comparisonProcessor[matching](data[key], rule.value, negation);
191
+ }
192
+ }
193
+ }
194
+ else if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
195
+ // Rule object has to have `rule_type` field
196
+ (_b = (_a = this._loggerManager) === null || _a === void 0 ? void 0 : _a.info) === null || _b === void 0 ? void 0 : _b.call(_a, 'RuleManager._processRuleItem()', MESSAGES.RULE_MATCH_START.replace('#', rule.rule_type));
197
+ for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
198
+ if (method === 'constructor')
199
+ continue;
200
+ const rule_method = camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
201
+ if (method === rule_method) {
202
+ const dataValue = data[method](rule);
203
+ if (Object.values(RuleError).includes(dataValue))
204
+ return dataValue;
205
+ if (rule.rule_type === 'js_condition')
206
+ return dataValue;
207
+ return this._comparisonProcessor[matching](dataValue, rule.value, negation);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ else {
213
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.warn) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processRuleItem()', {
214
+ warn: ERROR_MESSAGES.RULE_DATA_NOT_VALID
215
+ });
216
+ }
217
+ }
218
+ }
219
+ catch (error) {
220
+ (_f = (_e = this._loggerManager) === null || _e === void 0 ? void 0 : _e.error) === null || _f === void 0 ? void 0 : _f.call(_e, 'RuleManager._processRuleItem()', {
221
+ error: error.message
222
+ });
223
+ }
224
+ }
225
+ else {
226
+ (_h = (_g = this._loggerManager) === null || _g === void 0 ? void 0 : _g.warn) === null || _h === void 0 ? void 0 : _h.call(_g, 'RuleManager._processRuleItem()', ERROR_MESSAGES.RULE_NOT_VALID);
227
+ }
228
+ return false;
229
+ }
230
+ }
231
+
232
+ export { RuleManager };
233
+ //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,29 @@
1
+ /*!
2
+ * Convert JS SDK test
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export * from './src/audience-type';
8
+ export * from './src/data-enitites';
9
+ export * from './src/dictionary';
10
+ export * from './src/do-not-track';
11
+ export * from './src/event-type';
12
+ export * from './src/experience-type';
13
+ export * from './src/feature-status';
14
+ export * from './src/ga-type';
15
+ export * from './src/goal-data-key';
16
+ export * from './src/goal-type';
17
+ export * from './src/integration-provider';
18
+ export * from './src/log-level';
19
+ export * from './src/log-method';
20
+ export * from './src/project-type';
21
+ export * from './src/rule-error';
22
+ export * from './src/system-events';
23
+ export * from './src/variable-types';
24
+ export * from './src/variation-change-type';
25
+ export * from './src/segments/browser-type';
26
+ export * from './src/segments/device-type';
27
+ export * from './src/segments/segments-keys';
28
+ export * from './src/segments/source-type';
29
+ export * from './src/segments/visitor-type';
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Convert JS SDK
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export declare enum AudienceType {
8
+ PERMANENT = "permanent",
9
+ SEGMENTATION = "segmentation",
10
+ TRANSIENT = "transient"
11
+ }
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * Convert JS SDK
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export declare const DATA_ENTITIES: string[];
@@ -0,0 +1,60 @@
1
+ /*!
2
+ * Convert JS SDK
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export declare const ERROR_MESSAGES: {
8
+ SDK_KEY_MISSING: string;
9
+ DATA_OBJECT_MISSING: string;
10
+ CONFIG_DATA_NOT_VALID: string;
11
+ SDK_OR_DATA_OBJECT_REQUIRED: string;
12
+ RULE_NOT_VALID: string;
13
+ RULE_DATA_NOT_VALID: string;
14
+ RULE_ERROR: string;
15
+ DATA_STORE_NOT_VALID: string;
16
+ VISITOR_ID_REQUIRED: string;
17
+ GOAL_DATA_NOT_VALID: string;
18
+ UNABLE_TO_SELECT_BUCKET_FOR_VISITOR: string;
19
+ UNABLE_TO_PERFORM_NETWORK_REQUEST: string;
20
+ UNSUPPORTED_RESPONSE_TYPE: string;
21
+ };
22
+ export declare const MESSAGES: {
23
+ CONFIG_DATA_UPDATED: string;
24
+ CORE_CONSTRUCTOR: string;
25
+ CORE_INITIALIZED: string;
26
+ EXPERIENCE_CONSTRUCTOR: string;
27
+ EXPERIENCE_NOT_FOUND: string;
28
+ EXPERIENCE_RULES_MATCHED: string;
29
+ VARIATIONS_NOT_FOUND: string;
30
+ VARIATION_CHANGE_NOT_SUPPORTED: string;
31
+ FEATURE_CONSTRUCTOR: string;
32
+ FEATURE_NOT_FOUND: string;
33
+ FEATURE_VARIABLES_NOT_FOUND: string;
34
+ FEATURE_VARIABLES_TYPE_NOT_FOUND: string;
35
+ BUCKETING_CONSTRUCTOR: string;
36
+ DATA_CONSTRUCTOR: string;
37
+ RULE_CONSTRUCTOR: string;
38
+ PROCESSING_ENTITY: string;
39
+ LOCATION_MATCH: string;
40
+ LOCATION_NOT_MATCH: string;
41
+ AUDIENCE_MATCH: string;
42
+ AUDIENCE_NOT_MATCH: string;
43
+ AUDIENCE_NOT_RESTRICTED: string;
44
+ SEGMENTATION_MATCH: string;
45
+ RULE_NOT_MATCH: string;
46
+ RULE_MATCH: string;
47
+ RULE_MATCH_AND: string;
48
+ RULE_MATCH_START: string;
49
+ LOCATION_ACTIVATED: string;
50
+ LOCATION_DEACTIVATED: string;
51
+ BUCKETED_VISITOR_FOUND: string;
52
+ BUCKETED_VISITOR: string;
53
+ GOAL_NOT_FOUND: string;
54
+ GOAL_RULE_NOT_MATCH: string;
55
+ GOAL_FOUND: string;
56
+ SEGMENTS_NOT_FOUND: string;
57
+ SEGMENTS_RULE_NOT_MATCH: string;
58
+ CUSTOM_SEGMENTS_KEY_FOUND: string;
59
+ SEND_BEACON_SUCCESS: string;
60
+ };
@@ -0,0 +1,12 @@
1
+ /*!
2
+ * Convert JS SDK
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export declare enum DoNotTrack {
8
+ OFF = "OFF",
9
+ EU_ONLY = "EU ONLY",
10
+ EEA_ONLY = "EEA ONLY",
11
+ WORLDWIDE = "Worldwide"
12
+ }
@@ -0,0 +1,10 @@
1
+ /*!
2
+ * Convert JS SDK
3
+ * Version 1.0.0
4
+ * Copyright(c) 2020 Convert Insights, Inc
5
+ * License Apache-2.0
6
+ */
7
+ export declare enum EventType {
8
+ BUCKETING = "bucketing",
9
+ CONVERSION = "conversion"
10
+ }