@convertcom/js-sdk-rules 1.0.1 → 1.0.2

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/lib/index.d.ts CHANGED
@@ -87,6 +87,12 @@ declare class RuleManager implements RuleManagerInterface {
87
87
  * @private
88
88
  */
89
89
  private _processRuleItem;
90
+ /**
91
+ * Check is rule data object is a custom interface instead of a literal object
92
+ * @param {Record<string, any>} data Single value or key-value data set to compare
93
+ * @return {boolean}
94
+ */
95
+ private isUsingCustomInterface;
90
96
  }
91
97
 
92
98
  export { RuleManager, type RuleManagerInterface };
package/lib/index.js CHANGED
@@ -24,16 +24,18 @@ class RuleManager {
24
24
  * @param {LogManagerInterface=} dependencies.loggerManager
25
25
  */
26
26
  constructor(config, { loggerManager } = {}) {
27
- var _a, _b;
27
+ var _a, _b, _c, _d, _e;
28
28
  this._comparisonProcessor = jsSdkUtils.Comparisons;
29
29
  this._negation = DEFAULT_NEGATION;
30
30
  this._keys_case_sensitive = DEFAULT_KEYS_CASE_SENSITIVE;
31
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);
32
+ this._comparisonProcessor =
33
+ ((_a = config === null || config === void 0 ? void 0 : config.rules) === null || _a === void 0 ? void 0 : _a.comparisonProcessor) || jsSdkUtils.Comparisons;
34
+ this._negation = String(((_b = config === null || config === void 0 ? void 0 : config.rules) === null || _b === void 0 ? void 0 : _b.negation) || DEFAULT_NEGATION);
35
+ this._keys_case_sensitive =
36
+ ((_c = config === null || config === void 0 ? void 0 : config.rules) === null || _c === void 0 ? void 0 : _c.keys_case_sensitive) || DEFAULT_KEYS_CASE_SENSITIVE;
35
37
  this._mapper = (config === null || config === void 0 ? void 0 : config.mapper) || ((value) => value);
36
- (_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);
38
+ (_e = (_d = this._loggerManager) === null || _d === void 0 ? void 0 : _d.trace) === null || _e === void 0 ? void 0 : _e.call(_d, 'RuleManager()', jsSdkEnums.MESSAGES.RULE_CONSTRUCTOR, this);
37
39
  }
38
40
  /**
39
41
  * Setter for comparison processor
@@ -180,9 +182,29 @@ class RuleManager {
180
182
  const negation = rule.matching.negated || false;
181
183
  const matching = rule.matching.match_type;
182
184
  if (this.getComparisonProcessorMethods().indexOf(matching) !== -1) {
183
- if (data && typeof data === 'object' && (data === null || data === void 0 ? void 0 : data.constructor)) {
185
+ if (data && typeof data === 'object') {
184
186
  // Validate data key-value set.
185
- if (data.constructor === Object) {
187
+ if (this.isUsingCustomInterface(data)) {
188
+ // Rule object has to have `rule_type` field
189
+ if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
190
+ (_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));
191
+ for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
192
+ if (method === 'constructor')
193
+ continue;
194
+ const rule_method = jsSdkUtils.camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
195
+ if (method === rule_method ||
196
+ ((_c = data === null || data === void 0 ? void 0 : data.mapper) === null || _c === void 0 ? void 0 : _c.call(data, method)) === rule_method) {
197
+ const dataValue = data[method](rule);
198
+ if (Object.values(jsSdkEnums.RuleError).includes(dataValue))
199
+ return dataValue;
200
+ if (rule.rule_type === 'js_condition')
201
+ return dataValue;
202
+ return this._comparisonProcessor[matching](dataValue, rule.value, negation);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ else if (jsSdkUtils.objectNotEmpty(data)) {
186
208
  // Rule object has to have `key` field
187
209
  for (const key of Object.keys(data)) {
188
210
  const k = this._keys_case_sensitive ? key : key.toLowerCase();
@@ -194,24 +216,6 @@ class RuleManager {
194
216
  }
195
217
  }
196
218
  }
197
- else if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
198
- // Rule object has to have `rule_type` field
199
- (_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));
200
- for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
201
- if (method === 'constructor')
202
- continue;
203
- const rule_method = jsSdkUtils.camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
204
- if (method === rule_method ||
205
- ((_c = data === null || data === void 0 ? void 0 : data.mapper) === null || _c === void 0 ? void 0 : _c.call(data, method)) === rule_method) {
206
- const dataValue = data[method](rule);
207
- if (Object.values(jsSdkEnums.RuleError).includes(dataValue))
208
- return dataValue;
209
- if (rule.rule_type === 'js_condition')
210
- return dataValue;
211
- return this._comparisonProcessor[matching](dataValue, rule.value, negation);
212
- }
213
- }
214
- }
215
219
  else {
216
220
  (_e = (_d = this._loggerManager) === null || _d === void 0 ? void 0 : _d.trace) === null || _e === void 0 ? void 0 : _e.call(_d, 'RuleManager._processRuleItem()', {
217
221
  warn: jsSdkEnums.ERROR_MESSAGES.RULE_DATA_NOT_VALID,
@@ -242,6 +246,16 @@ class RuleManager {
242
246
  }
243
247
  return false;
244
248
  }
249
+ /**
250
+ * Check is rule data object is a custom interface instead of a literal object
251
+ * @param {Record<string, any>} data Single value or key-value data set to compare
252
+ * @return {boolean}
253
+ */
254
+ isUsingCustomInterface(data) {
255
+ return (jsSdkUtils.objectNotEmpty(data) &&
256
+ Object.prototype.hasOwnProperty.call(data, 'name') &&
257
+ data.name === 'RuleData');
258
+ }
245
259
  }
246
260
 
247
261
  exports.RuleManager = RuleManager;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/lib/index.min.js CHANGED
@@ -4,5 +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,a;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),this._mapper=(null==o?void 0:o.mapper)||(e=>e),null===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.trace)||void 0===a||a.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 a,s,i,n,c,u,_,g,R,p;let d;if(null===(s=null===(a=this._loggerManager)||void 0===a?void 0:a.trace)||void 0===s||s.call(a,"RuleManager.isRuleMatched()",this._mapper({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,a=l.OR.length;e<a;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()",this._mapper({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,a,s,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===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===a||a.call(t,"RuleManager._processAND()",r.MESSAGES.RULE_MATCH_AND)),n}return null===(i=null===(s=this._loggerManager)||void 0===s?void 0:s.warn)||void 0===i||i.call(s,"RuleManager._processAND()",r.ERROR_MESSAGES.RULE_NOT_VALID),!1}_processORWHEN(o,l){var t,a;let s;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(s=this._processRuleItem(o,l.OR_WHEN[e]),!1!==s)return s}else null===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.warn)||void 0===a||a.call(t,"RuleManager._processORWHEN()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}_processRuleItem(o,l){var t,a,s,i,n,c,u,_,g,R,p,d,v;if(this.isValidRule(l))try{const R=l.matching.negated||!1,p=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(p))if(o&&"object"==typeof o&&(null==o?void 0:o.constructor))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[p](o[e],l.value,R)}else if(null==l?void 0:l.rule_type){null===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===a||a.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;const a=e.camelCase(`get ${l.rule_type.replace(/_/g," ")}`);if(t===a||(null===(s=null==o?void 0:o.mapper)||void 0===s?void 0:s.call(o,t))===a){const e=o[t](l);return Object.values(r.RuleError).includes(e)||"js_condition"===l.rule_type?e:this._comparisonProcessor[p](e,l.value,R)}}}else null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_DATA_NOT_VALID,data:o});else null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.trace)||void 0===u||u.call(c,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_NOT_VALID,data:o,rule:l});else null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.warn)||void 0===g||g.call(_,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",p))}catch(e){null===(p=null===(R=this._loggerManager)||void 0===R?void 0:R.error)||void 0===p||p.call(R,"RuleManager._processRuleItem()",{error:e.message})}else null===(v=null===(d=this._loggerManager)||void 0===d?void 0:d.warn)||void 0===v||v.call(d,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}};
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,a,s,i,n;this._comparisonProcessor=e.Comparisons,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=l,this._comparisonProcessor=(null===(t=null==o?void 0:o.rules)||void 0===t?void 0:t.comparisonProcessor)||e.Comparisons,this._negation=String((null===(a=null==o?void 0:o.rules)||void 0===a?void 0:a.negation)||"!"),this._keys_case_sensitive=(null===(s=null==o?void 0:o.rules)||void 0===s?void 0:s.keys_case_sensitive)||true,this._mapper=(null==o?void 0:o.mapper)||(e=>e),null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"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 a,s,i,n,c,u,_,g,R,p;let d;if(null===(s=null===(a=this._loggerManager)||void 0===a?void 0:a.trace)||void 0===s||s.call(a,"RuleManager.isRuleMatched()",this._mapper({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,a=l.OR.length;e<a;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()",this._mapper({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,a,s,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===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===a||a.call(t,"RuleManager._processAND()",r.MESSAGES.RULE_MATCH_AND)),n}return null===(i=null===(s=this._loggerManager)||void 0===s?void 0:s.warn)||void 0===i||i.call(s,"RuleManager._processAND()",r.ERROR_MESSAGES.RULE_NOT_VALID),!1}_processORWHEN(o,l){var t,a;let s;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(s=this._processRuleItem(o,l.OR_WHEN[e]),!1!==s)return s}else null===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.warn)||void 0===a||a.call(t,"RuleManager._processORWHEN()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}_processRuleItem(o,l){var t,a,s,i,n,c,u,_,g,R,p,d,v;if(this.isValidRule(l))try{const R=l.matching.negated||!1,p=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(p))if(o&&"object"==typeof o)if(this.isUsingCustomInterface(o)){if(null==l?void 0:l.rule_type){null===(a=null===(t=this._loggerManager)||void 0===t?void 0:t.info)||void 0===a||a.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;const a=e.camelCase(`get ${l.rule_type.replace(/_/g," ")}`);if(t===a||(null===(s=null==o?void 0:o.mapper)||void 0===s?void 0:s.call(o,t))===a){const e=o[t](l);return Object.values(r.RuleError).includes(e)||"js_condition"===l.rule_type?e:this._comparisonProcessor[p](e,l.value,R)}}}}else if(e.objectNotEmpty(o))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[p](o[e],l.value,R)}else null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_DATA_NOT_VALID,data:o});else null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.trace)||void 0===u||u.call(c,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_NOT_VALID,data:o,rule:l});else null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.warn)||void 0===g||g.call(_,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",p))}catch(e){null===(p=null===(R=this._loggerManager)||void 0===R?void 0:R.error)||void 0===p||p.call(R,"RuleManager._processRuleItem()",{error:e.message})}else null===(v=null===(d=this._loggerManager)||void 0===d?void 0:d.warn)||void 0===v||v.call(d,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1}isUsingCustomInterface(r){return e.objectNotEmpty(r)&&Object.prototype.hasOwnProperty.call(r,"name")&&"RuleData"===r.name}};
8
8
  //# sourceMappingURL=index.min.js.map
package/lib/index.min.mjs CHANGED
@@ -4,5 +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 a,ERROR_MESSAGES as s}from"@convertcom/js-sdk-enums";class i{constructor(o,{loggerManager:l}={}){var a,s;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),this._mapper=(null==o?void 0:o.mapper)||(e=>e),null===(s=null===(a=this._loggerManager)||void 0===a?void 0:a.trace)||void 0===s||s.call(a,"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,v,h;let R;if(null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"RuleManager.isRuleMatched()",this._mapper({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(a).includes(R)?null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.info)||void 0===g||g.call(_,"RuleManager.isRuleMatched()",l||"",s.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===(h=null===(v=this._loggerManager)||void 0===v?void 0:v.warn)||void 0===h||h.call(v,"RuleManager.isRuleMatched()",l||"",s.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()",this._mapper({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,a,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===(a=null===(l=this._loggerManager)||void 0===l?void 0:l.info)||void 0===a||a.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()",s.RULE_NOT_VALID),!1}_processORWHEN(e,r){var l,t;let a;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(a=this._processRuleItem(e,r.OR_WHEN[o]),!1!==a)return a}else null===(t=null===(l=this._loggerManager)||void 0===l?void 0:l.warn)||void 0===t||t.call(l,"RuleManager._processORWHEN()",s.RULE_NOT_VALID);return!1}_processRuleItem(e,r){var o,i,n,c,u,_,g,p,d,v,h,R,O;if(this.isValidRule(r))try{const v=r.matching.negated||!1,h=r.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(h))if(e&&"object"==typeof e&&(null==e?void 0:e.constructor))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[h](e[o],r.value,v)}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;const t=l(`get ${r.rule_type.replace(/_/g," ")}`);if(o===t||(null===(n=null==e?void 0:e.mapper)||void 0===n?void 0:n.call(e,o))===t){const l=e[o](r);return Object.values(a).includes(l)||"js_condition"===r.rule_type?l:this._comparisonProcessor[h](l,r.value,v)}}}else null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.trace)||void 0===u||u.call(c,"RuleManager._processRuleItem()",{warn:s.RULE_DATA_NOT_VALID,data:e});else null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.trace)||void 0===g||g.call(_,"RuleManager._processRuleItem()",{warn:s.RULE_NOT_VALID,data:e,rule:r});else null===(d=null===(p=this._loggerManager)||void 0===p?void 0:p.warn)||void 0===d||d.call(p,"RuleManager._processRuleItem()",s.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",h))}catch(e){null===(h=null===(v=this._loggerManager)||void 0===v?void 0:v.error)||void 0===h||h.call(v,"RuleManager._processRuleItem()",{error:e.message})}else null===(O=null===(R=this._loggerManager)||void 0===R?void 0:R.warn)||void 0===O||O.call(R,"RuleManager._processRuleItem()",s.RULE_NOT_VALID);return!1}}export{i as RuleManager};
7
+ import{Comparisons as e,arrayNotEmpty as l,camelCase as o,objectNotEmpty as r}from"@convertcom/js-sdk-utils";import{MESSAGES as t,RuleError as a,ERROR_MESSAGES as s}from"@convertcom/js-sdk-enums";class i{constructor(l,{loggerManager:o}={}){var r,a,s,i,n;this._comparisonProcessor=e,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=o,this._comparisonProcessor=(null===(r=null==l?void 0:l.rules)||void 0===r?void 0:r.comparisonProcessor)||e,this._negation=String((null===(a=null==l?void 0:l.rules)||void 0===a?void 0:a.negation)||"!"),this._keys_case_sensitive=(null===(s=null==l?void 0:l.rules)||void 0===s?void 0:s.keys_case_sensitive)||true,this._mapper=(null==l?void 0:l.mapper)||(e=>e),null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"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,o,r){var i,n,c,u,g,_,d,p,v,h;let R;if(null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===n||n.call(i,"RuleManager.isRuleMatched()",this._mapper({data:e,ruleSet:o})),r&&(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("#",r))),Object.prototype.hasOwnProperty.call(o,"OR")&&l(null==o?void 0:o.OR)){for(let l=0,i=o.OR.length;l<i;l++)if(R=this._processAND(e,o.OR[l]),Object.values(a).includes(R)?null===(_=null===(g=this._loggerManager)||void 0===g?void 0:g.info)||void 0===_||_.call(g,"RuleManager.isRuleMatched()",r||"",s.RULE_ERROR):null===(p=null===(d=this._loggerManager)||void 0===d?void 0:d.info)||void 0===p||p.call(d,"RuleManager.isRuleMatched()",r||"",!1===R?t.RULE_NOT_MATCH:t.RULE_MATCH.replace("#",String(l))),!1!==R)return R}else null===(h=null===(v=this._loggerManager)||void 0===v?void 0:v.warn)||void 0===h||h.call(v,"RuleManager.isRuleMatched()",r||"",s.RULE_NOT_VALID);return!1}isValidRule(e){var l,o;return null===(o=null===(l=this._loggerManager)||void 0===l?void 0:l.trace)||void 0===o||o.call(l,"RuleManager.isValidRule()",this._mapper({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,o){var r,a,i,n;let c;if(Object.prototype.hasOwnProperty.call(o,"AND")&&l(null==o?void 0:o.AND)){for(let l=0,r=o.AND.length;l<r;l++)if(c=this._processORWHEN(e,o.AND[l]),!1===c)return!1;return!1!==c&&(null===(a=null===(r=this._loggerManager)||void 0===r?void 0:r.info)||void 0===a||a.call(r,"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()",s.RULE_NOT_VALID),!1}_processORWHEN(e,o){var r,t;let a;if(Object.prototype.hasOwnProperty.call(o,"OR_WHEN")&&l(null==o?void 0:o.OR_WHEN)){for(let l=0,r=o.OR_WHEN.length;l<r;l++)if(a=this._processRuleItem(e,o.OR_WHEN[l]),!1!==a)return a}else null===(t=null===(r=this._loggerManager)||void 0===r?void 0:r.warn)||void 0===t||t.call(r,"RuleManager._processORWHEN()",s.RULE_NOT_VALID);return!1}_processRuleItem(e,l){var i,n,c,u,g,_,d,p,v,h,R,m,O;if(this.isValidRule(l))try{const h=l.matching.negated||!1,R=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(R))if(e&&"object"==typeof e)if(this.isUsingCustomInterface(e)){if(null==l?void 0:l.rule_type){null===(n=null===(i=this._loggerManager)||void 0===i?void 0:i.info)||void 0===n||n.call(i,"RuleManager._processRuleItem()",t.RULE_MATCH_START.replace("#",l.rule_type));for(const r of Object.getOwnPropertyNames(e.constructor.prototype)){if("constructor"===r)continue;const t=o(`get ${l.rule_type.replace(/_/g," ")}`);if(r===t||(null===(c=null==e?void 0:e.mapper)||void 0===c?void 0:c.call(e,r))===t){const o=e[r](l);return Object.values(a).includes(o)||"js_condition"===l.rule_type?o:this._comparisonProcessor[R](o,l.value,h)}}}}else if(r(e))for(const o of Object.keys(e)){const r=this._keys_case_sensitive?o:o.toLowerCase();if(r===(this._keys_case_sensitive?l.key:l.key.toLowerCase()))return this._comparisonProcessor[R](e[o],l.value,h)}else null===(g=null===(u=this._loggerManager)||void 0===u?void 0:u.trace)||void 0===g||g.call(u,"RuleManager._processRuleItem()",{warn:s.RULE_DATA_NOT_VALID,data:e});else null===(d=null===(_=this._loggerManager)||void 0===_?void 0:_.trace)||void 0===d||d.call(_,"RuleManager._processRuleItem()",{warn:s.RULE_NOT_VALID,data:e,rule:l});else null===(v=null===(p=this._loggerManager)||void 0===p?void 0:p.warn)||void 0===v||v.call(p,"RuleManager._processRuleItem()",s.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",R))}catch(e){null===(R=null===(h=this._loggerManager)||void 0===h?void 0:h.error)||void 0===R||R.call(h,"RuleManager._processRuleItem()",{error:e.message})}else null===(O=null===(m=this._loggerManager)||void 0===m?void 0:m.warn)||void 0===O||O.call(m,"RuleManager._processRuleItem()",s.RULE_NOT_VALID);return!1}isUsingCustomInterface(e){return r(e)&&Object.prototype.hasOwnProperty.call(e,"name")&&"RuleData"===e.name}}export{i as RuleManager};
8
8
  //# sourceMappingURL=index.min.mjs.map
package/lib/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { Comparisons, objectDeepValue, arrayNotEmpty, camelCase } from '@convertcom/js-sdk-utils';
1
+ import { Comparisons, arrayNotEmpty, camelCase, objectNotEmpty } from '@convertcom/js-sdk-utils';
2
2
  import { MESSAGES, RuleError, ERROR_MESSAGES } from '@convertcom/js-sdk-enums';
3
3
 
4
4
  /*!
@@ -22,16 +22,18 @@ class RuleManager {
22
22
  * @param {LogManagerInterface=} dependencies.loggerManager
23
23
  */
24
24
  constructor(config, { loggerManager } = {}) {
25
- var _a, _b;
25
+ var _a, _b, _c, _d, _e;
26
26
  this._comparisonProcessor = Comparisons;
27
27
  this._negation = DEFAULT_NEGATION;
28
28
  this._keys_case_sensitive = DEFAULT_KEYS_CASE_SENSITIVE;
29
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);
30
+ this._comparisonProcessor =
31
+ ((_a = config === null || config === void 0 ? void 0 : config.rules) === null || _a === void 0 ? void 0 : _a.comparisonProcessor) || Comparisons;
32
+ this._negation = String(((_b = config === null || config === void 0 ? void 0 : config.rules) === null || _b === void 0 ? void 0 : _b.negation) || DEFAULT_NEGATION);
33
+ this._keys_case_sensitive =
34
+ ((_c = config === null || config === void 0 ? void 0 : config.rules) === null || _c === void 0 ? void 0 : _c.keys_case_sensitive) || DEFAULT_KEYS_CASE_SENSITIVE;
33
35
  this._mapper = (config === null || config === void 0 ? void 0 : config.mapper) || ((value) => value);
34
- (_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);
36
+ (_e = (_d = this._loggerManager) === null || _d === void 0 ? void 0 : _d.trace) === null || _e === void 0 ? void 0 : _e.call(_d, 'RuleManager()', MESSAGES.RULE_CONSTRUCTOR, this);
35
37
  }
36
38
  /**
37
39
  * Setter for comparison processor
@@ -178,9 +180,29 @@ class RuleManager {
178
180
  const negation = rule.matching.negated || false;
179
181
  const matching = rule.matching.match_type;
180
182
  if (this.getComparisonProcessorMethods().indexOf(matching) !== -1) {
181
- if (data && typeof data === 'object' && (data === null || data === void 0 ? void 0 : data.constructor)) {
183
+ if (data && typeof data === 'object') {
182
184
  // Validate data key-value set.
183
- if (data.constructor === Object) {
185
+ if (this.isUsingCustomInterface(data)) {
186
+ // Rule object has to have `rule_type` field
187
+ if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
188
+ (_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));
189
+ for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
190
+ if (method === 'constructor')
191
+ continue;
192
+ const rule_method = camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
193
+ if (method === rule_method ||
194
+ ((_c = data === null || data === void 0 ? void 0 : data.mapper) === null || _c === void 0 ? void 0 : _c.call(data, method)) === rule_method) {
195
+ const dataValue = data[method](rule);
196
+ if (Object.values(RuleError).includes(dataValue))
197
+ return dataValue;
198
+ if (rule.rule_type === 'js_condition')
199
+ return dataValue;
200
+ return this._comparisonProcessor[matching](dataValue, rule.value, negation);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ else if (objectNotEmpty(data)) {
184
206
  // Rule object has to have `key` field
185
207
  for (const key of Object.keys(data)) {
186
208
  const k = this._keys_case_sensitive ? key : key.toLowerCase();
@@ -192,24 +214,6 @@ class RuleManager {
192
214
  }
193
215
  }
194
216
  }
195
- else if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
196
- // Rule object has to have `rule_type` field
197
- (_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));
198
- for (const method of Object.getOwnPropertyNames(data.constructor.prototype)) {
199
- if (method === 'constructor')
200
- continue;
201
- const rule_method = camelCase(`get ${rule.rule_type.replace(/_/g, ' ')}`);
202
- if (method === rule_method ||
203
- ((_c = data === null || data === void 0 ? void 0 : data.mapper) === null || _c === void 0 ? void 0 : _c.call(data, method)) === rule_method) {
204
- const dataValue = data[method](rule);
205
- if (Object.values(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
217
  else {
214
218
  (_e = (_d = this._loggerManager) === null || _d === void 0 ? void 0 : _d.trace) === null || _e === void 0 ? void 0 : _e.call(_d, 'RuleManager._processRuleItem()', {
215
219
  warn: ERROR_MESSAGES.RULE_DATA_NOT_VALID,
@@ -240,6 +244,16 @@ class RuleManager {
240
244
  }
241
245
  return false;
242
246
  }
247
+ /**
248
+ * Check is rule data object is a custom interface instead of a literal object
249
+ * @param {Record<string, any>} data Single value or key-value data set to compare
250
+ * @return {boolean}
251
+ */
252
+ isUsingCustomInterface(data) {
253
+ return (objectNotEmpty(data) &&
254
+ Object.prototype.hasOwnProperty.call(data, 'name') &&
255
+ data.name === 'RuleData');
256
+ }
243
257
  }
244
258
 
245
259
  export { RuleManager };
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -53,16 +53,18 @@ var RuleManager = /** @class */ (function () {
53
53
  */
54
54
  function RuleManager(config, _a) {
55
55
  var _b = _a === void 0 ? {} : _a, loggerManager = _b.loggerManager;
56
- var _c, _d;
56
+ var _c, _d, _e, _f, _g;
57
57
  this._comparisonProcessor = jsSdkUtils.Comparisons;
58
58
  this._negation = DEFAULT_NEGATION;
59
59
  this._keys_case_sensitive = DEFAULT_KEYS_CASE_SENSITIVE;
60
60
  this._loggerManager = loggerManager;
61
- this._comparisonProcessor = jsSdkUtils.objectDeepValue(config, 'rules.comparisonProcessor', jsSdkUtils.Comparisons);
62
- this._negation = String(jsSdkUtils.objectDeepValue(config, 'rules.negation', DEFAULT_NEGATION)).valueOf();
63
- this._keys_case_sensitive = jsSdkUtils.objectDeepValue(config, 'rules.keys_case_sensitive', DEFAULT_KEYS_CASE_SENSITIVE, true);
61
+ this._comparisonProcessor =
62
+ ((_c = config === null || config === void 0 ? void 0 : config.rules) === null || _c === void 0 ? void 0 : _c.comparisonProcessor) || jsSdkUtils.Comparisons;
63
+ this._negation = String(((_d = config === null || config === void 0 ? void 0 : config.rules) === null || _d === void 0 ? void 0 : _d.negation) || DEFAULT_NEGATION);
64
+ this._keys_case_sensitive =
65
+ ((_e = config === null || config === void 0 ? void 0 : config.rules) === null || _e === void 0 ? void 0 : _e.keys_case_sensitive) || DEFAULT_KEYS_CASE_SENSITIVE;
64
66
  this._mapper = (config === null || config === void 0 ? void 0 : config.mapper) || (function (value) { return value; });
65
- (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.trace) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager()', jsSdkEnums.MESSAGES.RULE_CONSTRUCTOR, this);
67
+ (_g = (_f = this._loggerManager) === null || _f === void 0 ? void 0 : _f.trace) === null || _g === void 0 ? void 0 : _g.call(_f, 'RuleManager()', jsSdkEnums.MESSAGES.RULE_CONSTRUCTOR, this);
66
68
  }
67
69
  Object.defineProperty(RuleManager.prototype, "comparisonProcessor", {
68
70
  /**
@@ -215,13 +217,43 @@ var RuleManager = /** @class */ (function () {
215
217
  var negation = rule.matching.negated || false;
216
218
  var matching = rule.matching.match_type;
217
219
  if (this.getComparisonProcessorMethods().indexOf(matching) !== -1) {
218
- if (data && typeof data === 'object' && (data === null || data === void 0 ? void 0 : data.constructor)) {
220
+ if (data && typeof data === 'object') {
219
221
  // Validate data key-value set.
220
- if (data.constructor === Object) {
222
+ if (this.isUsingCustomInterface(data)) {
223
+ // Rule object has to have `rule_type` field
224
+ if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
225
+ (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.info) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processRuleItem()', jsSdkEnums.MESSAGES.RULE_MATCH_START.replace('#', rule.rule_type));
226
+ try {
227
+ for (var _r = __values(Object.getOwnPropertyNames(data.constructor.prototype)), _s = _r.next(); !_s.done; _s = _r.next()) {
228
+ var method = _s.value;
229
+ if (method === 'constructor')
230
+ continue;
231
+ var rule_method = jsSdkUtils.camelCase("get ".concat(rule.rule_type.replace(/_/g, ' ')));
232
+ if (method === rule_method ||
233
+ ((_e = data === null || data === void 0 ? void 0 : data.mapper) === null || _e === void 0 ? void 0 : _e.call(data, method)) === rule_method) {
234
+ var dataValue = data[method](rule);
235
+ if (Object.values(jsSdkEnums.RuleError).includes(dataValue))
236
+ return dataValue;
237
+ if (rule.rule_type === 'js_condition')
238
+ return dataValue;
239
+ return this._comparisonProcessor[matching](dataValue, rule.value, negation);
240
+ }
241
+ }
242
+ }
243
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
244
+ finally {
245
+ try {
246
+ if (_s && !_s.done && (_a = _r.return)) _a.call(_r);
247
+ }
248
+ finally { if (e_1) throw e_1.error; }
249
+ }
250
+ }
251
+ }
252
+ else if (jsSdkUtils.objectNotEmpty(data)) {
221
253
  try {
222
254
  // Rule object has to have `key` field
223
- for (var _r = __values(Object.keys(data)), _s = _r.next(); !_s.done; _s = _r.next()) {
224
- var key = _s.value;
255
+ for (var _t = __values(Object.keys(data)), _u = _t.next(); !_u.done; _u = _t.next()) {
256
+ var key = _u.value;
225
257
  var k = this._keys_case_sensitive ? key : key.toLowerCase();
226
258
  var rule_k = this._keys_case_sensitive
227
259
  ? rule.key
@@ -231,34 +263,6 @@ var RuleManager = /** @class */ (function () {
231
263
  }
232
264
  }
233
265
  }
234
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
235
- finally {
236
- try {
237
- if (_s && !_s.done && (_a = _r.return)) _a.call(_r);
238
- }
239
- finally { if (e_1) throw e_1.error; }
240
- }
241
- }
242
- else if (rule === null || rule === void 0 ? void 0 : rule.rule_type) {
243
- // Rule object has to have `rule_type` field
244
- (_d = (_c = this._loggerManager) === null || _c === void 0 ? void 0 : _c.info) === null || _d === void 0 ? void 0 : _d.call(_c, 'RuleManager._processRuleItem()', jsSdkEnums.MESSAGES.RULE_MATCH_START.replace('#', rule.rule_type));
245
- try {
246
- for (var _t = __values(Object.getOwnPropertyNames(data.constructor.prototype)), _u = _t.next(); !_u.done; _u = _t.next()) {
247
- var method = _u.value;
248
- if (method === 'constructor')
249
- continue;
250
- var rule_method = jsSdkUtils.camelCase("get ".concat(rule.rule_type.replace(/_/g, ' ')));
251
- if (method === rule_method ||
252
- ((_e = data === null || data === void 0 ? void 0 : data.mapper) === null || _e === void 0 ? void 0 : _e.call(data, method)) === rule_method) {
253
- var dataValue = data[method](rule);
254
- if (Object.values(jsSdkEnums.RuleError).includes(dataValue))
255
- return dataValue;
256
- if (rule.rule_type === 'js_condition')
257
- return dataValue;
258
- return this._comparisonProcessor[matching](dataValue, rule.value, negation);
259
- }
260
- }
261
- }
262
266
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
263
267
  finally {
264
268
  try {
@@ -297,6 +301,16 @@ var RuleManager = /** @class */ (function () {
297
301
  }
298
302
  return false;
299
303
  };
304
+ /**
305
+ * Check is rule data object is a custom interface instead of a literal object
306
+ * @param {Record<string, any>} data Single value or key-value data set to compare
307
+ * @return {boolean}
308
+ */
309
+ RuleManager.prototype.isUsingCustomInterface = function (data) {
310
+ return (jsSdkUtils.objectNotEmpty(data) &&
311
+ Object.prototype.hasOwnProperty.call(data, 'name') &&
312
+ data.name === 'RuleData');
313
+ };
300
314
  return RuleManager;
301
315
  }());
302
316
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,5 +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");function o(e){var r="function"==typeof Symbol&&Symbol.iterator,o=r&&e[r],t=0;if(o)return o.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&t>=e.length&&(e=void 0),{value:e&&e[t++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}"function"==typeof SuppressedError&&SuppressedError;var t=function(){function t(o,t){var l,a,n=(void 0===t?{}:t).loggerManager;this._comparisonProcessor=e.Comparisons,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=n,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),this._mapper=(null==o?void 0:o.mapper)||function(e){return e},null===(a=null===(l=this._loggerManager)||void 0===l?void 0:l.trace)||void 0===a||a.call(l,"RuleManager()",r.MESSAGES.RULE_CONSTRUCTOR,this)}return Object.defineProperty(t.prototype,"comparisonProcessor",{get:function(){return this._comparisonProcessor},set:function(e){this._comparisonProcessor=e},enumerable:!1,configurable:!0}),t.prototype.getComparisonProcessorMethods=function(){var e=this;return Object.getOwnPropertyNames(this._comparisonProcessor).filter((function(r){return"function"==typeof e._comparisonProcessor[r]}))},t.prototype.isRuleMatched=function(o,t,l){var a,n,i,s,c,u,p,_,g,v,d;if(null===(n=null===(a=this._loggerManager)||void 0===a?void 0:a.trace)||void 0===n||n.call(a,"RuleManager.isRuleMatched()",this._mapper({data:o,ruleSet:t})),l&&(null===(s=null===(i=this._loggerManager)||void 0===i?void 0:i.info)||void 0===s||s.call(i,"RuleManager.isRuleMatched()",r.MESSAGES.PROCESSING_ENTITY.replace("#",l))),Object.prototype.hasOwnProperty.call(t,"OR")&&e.arrayNotEmpty(null==t?void 0:t.OR)){for(var R=0,h=t.OR.length;R<h;R++)if(d=this._processAND(o,t.OR[R]),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()",l||"",r.ERROR_MESSAGES.RULE_ERROR):null===(_=null===(p=this._loggerManager)||void 0===p?void 0:p.info)||void 0===_||_.call(p,"RuleManager.isRuleMatched()",l||"",!1===d?r.MESSAGES.RULE_NOT_MATCH:r.MESSAGES.RULE_MATCH.replace("#",String(R))),!1!==d)return d}else null===(v=null===(g=this._loggerManager)||void 0===g?void 0:g.warn)||void 0===v||v.call(g,"RuleManager.isRuleMatched()",l||"",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t.prototype.isValidRule=function(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()",this._mapper({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")},t.prototype._processAND=function(o,t){var l,a,n,i,s;if(Object.prototype.hasOwnProperty.call(t,"AND")&&e.arrayNotEmpty(null==t?void 0:t.AND)){for(var c=0,u=t.AND.length;c<u;c++)if(!1===(s=this._processORWHEN(o,t.AND[c])))return!1;return!1!==s&&(null===(a=null===(l=this._loggerManager)||void 0===l?void 0:l.info)||void 0===a||a.call(l,"RuleManager._processAND()",r.MESSAGES.RULE_MATCH_AND)),s}return null===(i=null===(n=this._loggerManager)||void 0===n?void 0:n.warn)||void 0===i||i.call(n,"RuleManager._processAND()",r.ERROR_MESSAGES.RULE_NOT_VALID),!1},t.prototype._processORWHEN=function(o,t){var l,a,n;if(Object.prototype.hasOwnProperty.call(t,"OR_WHEN")&&e.arrayNotEmpty(null==t?void 0:t.OR_WHEN)){for(var i=0,s=t.OR_WHEN.length;i<s;i++)if(!1!==(n=this._processRuleItem(o,t.OR_WHEN[i])))return n}else null===(a=null===(l=this._loggerManager)||void 0===l?void 0:l.warn)||void 0===a||a.call(l,"RuleManager._processORWHEN()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t.prototype._processRuleItem=function(t,l){var a,n,i,s,c,u,p,_,g,v,d,R,h,E,y,f,M;if(this.isValidRule(l))try{var O=l.matching.negated||!1,S=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(S))if(t&&"object"==typeof t&&(null==t?void 0:t.constructor))if(t.constructor===Object)try{for(var m=o(Object.keys(t)),A=m.next();!A.done;A=m.next()){var N=A.value;if((this._keys_case_sensitive?N:N.toLowerCase())===(this._keys_case_sensitive?l.key:l.key.toLowerCase()))return this._comparisonProcessor[S](t[N],l.value,O)}}catch(e){a={error:e}}finally{try{A&&!A.done&&(n=m.return)&&n.call(m)}finally{if(a)throw a.error}}else if(null==l?void 0:l.rule_type){null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.info)||void 0===u||u.call(c,"RuleManager._processRuleItem()",r.MESSAGES.RULE_MATCH_START.replace("#",l.rule_type));try{for(var b=o(Object.getOwnPropertyNames(t.constructor.prototype)),P=b.next();!P.done;P=b.next()){var j=P.value;if("constructor"!==j){var T=e.camelCase("get ".concat(l.rule_type.replace(/_/g," ")));if(j===T||(null===(p=null==t?void 0:t.mapper)||void 0===p?void 0:p.call(t,j))===T){var w=t[j](l);return Object.values(r.RuleError).includes(w)||"js_condition"===l.rule_type?w:this._comparisonProcessor[S](w,l.value,O)}}}}catch(e){i={error:e}}finally{try{P&&!P.done&&(s=b.return)&&s.call(b)}finally{if(i)throw i.error}}}else null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.trace)||void 0===g||g.call(_,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_DATA_NOT_VALID,data:t});else null===(d=null===(v=this._loggerManager)||void 0===v?void 0:v.trace)||void 0===d||d.call(v,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_NOT_VALID,data:t,rule:l});else null===(h=null===(R=this._loggerManager)||void 0===R?void 0:R.warn)||void 0===h||h.call(R,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",S))}catch(e){null===(y=null===(E=this._loggerManager)||void 0===E?void 0:E.error)||void 0===y||y.call(E,"RuleManager._processRuleItem()",{error:e.message})}else null===(M=null===(f=this._loggerManager)||void 0===f?void 0:f.warn)||void 0===M||M.call(f,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t}();exports.RuleManager=t;
7
+ "use strict";var e=require("@convertcom/js-sdk-utils"),r=require("@convertcom/js-sdk-enums");function o(e){var r="function"==typeof Symbol&&Symbol.iterator,o=r&&e[r],t=0;if(o)return o.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&t>=e.length&&(e=void 0),{value:e&&e[t++],done:!e}}};throw new TypeError(r?"Object is not iterable.":"Symbol.iterator is not defined.")}"function"==typeof SuppressedError&&SuppressedError;var t=function(){function t(o,t){var l,n,a,i,s,c=(void 0===t?{}:t).loggerManager;this._comparisonProcessor=e.Comparisons,this._negation="!",this._keys_case_sensitive=true,this._loggerManager=c,this._comparisonProcessor=(null===(l=null==o?void 0:o.rules)||void 0===l?void 0:l.comparisonProcessor)||e.Comparisons,this._negation=String((null===(n=null==o?void 0:o.rules)||void 0===n?void 0:n.negation)||"!"),this._keys_case_sensitive=(null===(a=null==o?void 0:o.rules)||void 0===a?void 0:a.keys_case_sensitive)||true,this._mapper=(null==o?void 0:o.mapper)||function(e){return e},null===(s=null===(i=this._loggerManager)||void 0===i?void 0:i.trace)||void 0===s||s.call(i,"RuleManager()",r.MESSAGES.RULE_CONSTRUCTOR,this)}return Object.defineProperty(t.prototype,"comparisonProcessor",{get:function(){return this._comparisonProcessor},set:function(e){this._comparisonProcessor=e},enumerable:!1,configurable:!0}),t.prototype.getComparisonProcessorMethods=function(){var e=this;return Object.getOwnPropertyNames(this._comparisonProcessor).filter((function(r){return"function"==typeof e._comparisonProcessor[r]}))},t.prototype.isRuleMatched=function(o,t,l){var n,a,i,s,c,u,p,_,g,v,d;if(null===(a=null===(n=this._loggerManager)||void 0===n?void 0:n.trace)||void 0===a||a.call(n,"RuleManager.isRuleMatched()",this._mapper({data:o,ruleSet:t})),l&&(null===(s=null===(i=this._loggerManager)||void 0===i?void 0:i.info)||void 0===s||s.call(i,"RuleManager.isRuleMatched()",r.MESSAGES.PROCESSING_ENTITY.replace("#",l))),Object.prototype.hasOwnProperty.call(t,"OR")&&e.arrayNotEmpty(null==t?void 0:t.OR)){for(var R=0,h=t.OR.length;R<h;R++)if(d=this._processAND(o,t.OR[R]),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()",l||"",r.ERROR_MESSAGES.RULE_ERROR):null===(_=null===(p=this._loggerManager)||void 0===p?void 0:p.info)||void 0===_||_.call(p,"RuleManager.isRuleMatched()",l||"",!1===d?r.MESSAGES.RULE_NOT_MATCH:r.MESSAGES.RULE_MATCH.replace("#",String(R))),!1!==d)return d}else null===(v=null===(g=this._loggerManager)||void 0===g?void 0:g.warn)||void 0===v||v.call(g,"RuleManager.isRuleMatched()",l||"",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t.prototype.isValidRule=function(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()",this._mapper({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")},t.prototype._processAND=function(o,t){var l,n,a,i,s;if(Object.prototype.hasOwnProperty.call(t,"AND")&&e.arrayNotEmpty(null==t?void 0:t.AND)){for(var c=0,u=t.AND.length;c<u;c++)if(!1===(s=this._processORWHEN(o,t.AND[c])))return!1;return!1!==s&&(null===(n=null===(l=this._loggerManager)||void 0===l?void 0:l.info)||void 0===n||n.call(l,"RuleManager._processAND()",r.MESSAGES.RULE_MATCH_AND)),s}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},t.prototype._processORWHEN=function(o,t){var l,n,a;if(Object.prototype.hasOwnProperty.call(t,"OR_WHEN")&&e.arrayNotEmpty(null==t?void 0:t.OR_WHEN)){for(var i=0,s=t.OR_WHEN.length;i<s;i++)if(!1!==(a=this._processRuleItem(o,t.OR_WHEN[i])))return a}else null===(n=null===(l=this._loggerManager)||void 0===l?void 0:l.warn)||void 0===n||n.call(l,"RuleManager._processORWHEN()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t.prototype._processRuleItem=function(t,l){var n,a,i,s,c,u,p,_,g,v,d,R,h,y,E,f,M;if(this.isValidRule(l))try{var m=l.matching.negated||!1,O=l.matching.match_type;if(-1!==this.getComparisonProcessorMethods().indexOf(O))if(t&&"object"==typeof t)if(this.isUsingCustomInterface(t)){if(null==l?void 0:l.rule_type){null===(u=null===(c=this._loggerManager)||void 0===c?void 0:c.info)||void 0===u||u.call(c,"RuleManager._processRuleItem()",r.MESSAGES.RULE_MATCH_START.replace("#",l.rule_type));try{for(var S=o(Object.getOwnPropertyNames(t.constructor.prototype)),A=S.next();!A.done;A=S.next()){var N=A.value;if("constructor"!==N){var b=e.camelCase("get ".concat(l.rule_type.replace(/_/g," ")));if(N===b||(null===(p=null==t?void 0:t.mapper)||void 0===p?void 0:p.call(t,N))===b){var P=t[N](l);return Object.values(r.RuleError).includes(P)||"js_condition"===l.rule_type?P:this._comparisonProcessor[O](P,l.value,m)}}}}catch(e){n={error:e}}finally{try{A&&!A.done&&(a=S.return)&&a.call(S)}finally{if(n)throw n.error}}}}else if(e.objectNotEmpty(t))try{for(var w=o(Object.keys(t)),T=w.next();!T.done;T=w.next()){var j=T.value;if((this._keys_case_sensitive?j:j.toLowerCase())===(this._keys_case_sensitive?l.key:l.key.toLowerCase()))return this._comparisonProcessor[O](t[j],l.value,m)}}catch(e){i={error:e}}finally{try{T&&!T.done&&(s=w.return)&&s.call(w)}finally{if(i)throw i.error}}else null===(g=null===(_=this._loggerManager)||void 0===_?void 0:_.trace)||void 0===g||g.call(_,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_DATA_NOT_VALID,data:t});else null===(d=null===(v=this._loggerManager)||void 0===v?void 0:v.trace)||void 0===d||d.call(v,"RuleManager._processRuleItem()",{warn:r.ERROR_MESSAGES.RULE_NOT_VALID,data:t,rule:l});else null===(h=null===(R=this._loggerManager)||void 0===R?void 0:R.warn)||void 0===h||h.call(R,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_MATCH_TYPE_NOT_SUPPORTED.replace("#",O))}catch(e){null===(E=null===(y=this._loggerManager)||void 0===y?void 0:y.error)||void 0===E||E.call(y,"RuleManager._processRuleItem()",{error:e.message})}else null===(M=null===(f=this._loggerManager)||void 0===f?void 0:f.warn)||void 0===M||M.call(f,"RuleManager._processRuleItem()",r.ERROR_MESSAGES.RULE_NOT_VALID);return!1},t.prototype.isUsingCustomInterface=function(r){return e.objectNotEmpty(r)&&Object.prototype.hasOwnProperty.call(r,"name")&&"RuleData"===r.name},t}();exports.RuleManager=t;
8
8
  //# sourceMappingURL=index.min.js.map
package/lib/package.json CHANGED
@@ -14,5 +14,11 @@
14
14
  "directory": "packages/rules"
15
15
  },
16
16
  "license": "Apache-2.0",
17
- "version": "1.0.1"
17
+ "dependencies": {
18
+ "@convertcom/js-sdk-enums": ">=1.0.0",
19
+ "@convertcom/js-sdk-logger": ">=1.0.0",
20
+ "@convertcom/js-sdk-types": ">=1.0.0",
21
+ "@convertcom/js-sdk-utils": ">=1.0.0"
22
+ },
23
+ "version": "1.0.2"
18
24
  }
package/package.json CHANGED
@@ -71,5 +71,5 @@
71
71
  "typings": "^2.1.1",
72
72
  "webpack": "^5.89.0"
73
73
  },
74
- "version": "1.0.1"
74
+ "version": "1.0.2"
75
75
  }