@kameleoon/javascript-sdk-core 2.9.1 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/cacheManager/cacheManager.d.ts +0 -38
- package/dist/cacheManager/cacheManager.js +0 -12
- package/dist/cacheManager/cacheManager.js.map +0 -1
- package/dist/cacheManager/index.d.ts +0 -2
- package/dist/cacheManager/index.js +0 -2
- package/dist/cacheManager/index.js.map +0 -1
- package/dist/cacheManager/types.d.ts +0 -14
- package/dist/cacheManager/types.js +0 -2
- package/dist/cacheManager/types.js.map +0 -1
- package/dist/campaignConfiguration/campaignConfiguration.d.ts +0 -71
- package/dist/campaignConfiguration/campaignConfiguration.js +0 -24
- package/dist/campaignConfiguration/campaignConfiguration.js.map +0 -1
- package/dist/campaignConfiguration/constants.d.ts +0 -6
- package/dist/campaignConfiguration/constants.js +0 -4
- package/dist/campaignConfiguration/constants.js.map +0 -1
- package/dist/campaignConfiguration/index.d.ts +0 -3
- package/dist/campaignConfiguration/index.js +0 -2
- package/dist/campaignConfiguration/index.js.map +0 -1
- package/dist/campaignConfiguration/types.d.ts +0 -155
- package/dist/campaignConfiguration/types.js +0 -2
- package/dist/campaignConfiguration/types.js.map +0 -1
- package/dist/clientSettings/clientSettings.d.ts +0 -12
- package/dist/clientSettings/clientSettings.js +0 -2
- package/dist/clientSettings/clientSettings.js.map +0 -1
- package/dist/clientSettings/index.d.ts +0 -2
- package/dist/clientSettings/index.js +0 -2
- package/dist/clientSettings/index.js.map +0 -1
- package/dist/clientSettings/types.d.ts +0 -6
- package/dist/clientSettings/types.js +0 -2
- package/dist/clientSettings/types.js.map +0 -1
- package/dist/constants.d.ts +0 -32
- package/dist/constants.js +0 -5
- package/dist/constants.js.map +0 -1
- package/dist/eventSource/constants.d.ts +0 -1
- package/dist/eventSource/constants.js +0 -2
- package/dist/eventSource/constants.js.map +0 -1
- package/dist/eventSource/externalEventSource.d.ts +0 -12
- package/dist/eventSource/externalEventSource.js +0 -2
- package/dist/eventSource/externalEventSource.js.map +0 -1
- package/dist/eventSource/index.d.ts +0 -3
- package/dist/eventSource/index.js +0 -2
- package/dist/eventSource/index.js.map +0 -1
- package/dist/eventSource/types.d.ts +0 -47
- package/dist/eventSource/types.js +0 -2
- package/dist/eventSource/types.js.map +0 -1
- package/dist/hasher/hasher.d.ts +0 -6
- package/dist/hasher/hasher.js +0 -7
- package/dist/hasher/hasher.js.map +0 -1
- package/dist/hasher/index.d.ts +0 -1
- package/dist/hasher/index.js +0 -2
- package/dist/hasher/index.js.map +0 -1
- package/dist/hasher/types.d.ts +0 -12
- package/dist/hasher/types.js +0 -2
- package/dist/hasher/types.js.map +0 -1
- package/dist/index.d.ts +0 -12
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/kameleoonClient.d.ts +0 -253
- package/dist/kameleoonClient.js +0 -19
- package/dist/kameleoonClient.js.map +0 -1
- package/dist/kameleoonData/browser.d.ts +0 -26
- package/dist/kameleoonData/browser.js +0 -18
- package/dist/kameleoonData/browser.js.map +0 -1
- package/dist/kameleoonData/conversion.d.ts +0 -23
- package/dist/kameleoonData/conversion.js +0 -14
- package/dist/kameleoonData/conversion.js.map +0 -1
- package/dist/kameleoonData/customData.d.ts +0 -33
- package/dist/kameleoonData/customData.js +0 -25
- package/dist/kameleoonData/customData.js.map +0 -1
- package/dist/kameleoonData/device.d.ts +0 -21
- package/dist/kameleoonData/device.js +0 -14
- package/dist/kameleoonData/device.js.map +0 -1
- package/dist/kameleoonData/index.d.ts +0 -7
- package/dist/kameleoonData/index.js +0 -2
- package/dist/kameleoonData/index.js.map +0 -1
- package/dist/kameleoonData/pageView.d.ts +0 -23
- package/dist/kameleoonData/pageView.js +0 -14
- package/dist/kameleoonData/pageView.js.map +0 -1
- package/dist/kameleoonData/types.d.ts +0 -117
- package/dist/kameleoonData/types.js +0 -15
- package/dist/kameleoonData/types.js.map +0 -1
- package/dist/kameleoonData/userAgent.d.ts +0 -18
- package/dist/kameleoonData/userAgent.js +0 -9
- package/dist/kameleoonData/userAgent.js.map +0 -1
- package/dist/kameleoonError/constants.d.ts +0 -27
- package/dist/kameleoonError/constants.js +0 -2
- package/dist/kameleoonError/constants.js.map +0 -1
- package/dist/kameleoonError/helpers.d.ts +0 -1
- package/dist/kameleoonError/helpers.js +0 -2
- package/dist/kameleoonError/helpers.js.map +0 -1
- package/dist/kameleoonError/index.d.ts +0 -3
- package/dist/kameleoonError/index.js +0 -2
- package/dist/kameleoonError/index.js.map +0 -1
- package/dist/kameleoonError/kameleoonError.d.ts +0 -25
- package/dist/kameleoonError/kameleoonError.js +0 -5
- package/dist/kameleoonError/kameleoonError.js.map +0 -1
- package/dist/kameleoonError/types.d.ts +0 -25
- package/dist/kameleoonError/types.js +0 -2
- package/dist/kameleoonError/types.js.map +0 -1
- package/dist/kameleoonUtils.d.ts +0 -13
- package/dist/kameleoonUtils.js +0 -5
- package/dist/kameleoonUtils.js.map +0 -1
- package/dist/requester/constants.d.ts +0 -17
- package/dist/requester/constants.js +0 -2
- package/dist/requester/constants.js.map +0 -1
- package/dist/requester/index.d.ts +0 -3
- package/dist/requester/index.js +0 -2
- package/dist/requester/index.js.map +0 -1
- package/dist/requester/requester.d.ts +0 -23
- package/dist/requester/requester.js +0 -2
- package/dist/requester/requester.js.map +0 -1
- package/dist/requester/types.d.ts +0 -100
- package/dist/requester/types.js +0 -2
- package/dist/requester/types.js.map +0 -1
- package/dist/storage/constants.d.ts +0 -10
- package/dist/storage/constants.js +0 -5
- package/dist/storage/constants.js.map +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/types.d.ts +0 -68
- package/dist/storage/types.js +0 -2
- package/dist/storage/types.js.map +0 -1
- package/dist/targeting/conditions/browserCondition.d.ts +0 -13
- package/dist/targeting/conditions/browserCondition.js +0 -2
- package/dist/targeting/conditions/browserCondition.js.map +0 -1
- package/dist/targeting/conditions/conditionFactory.d.ts +0 -6
- package/dist/targeting/conditions/conditionFactory.js +0 -2
- package/dist/targeting/conditions/conditionFactory.js.map +0 -1
- package/dist/targeting/conditions/conversionCondition.d.ts +0 -10
- package/dist/targeting/conditions/conversionCondition.js +0 -4
- package/dist/targeting/conditions/conversionCondition.js.map +0 -1
- package/dist/targeting/conditions/customDataCondition.d.ts +0 -14
- package/dist/targeting/conditions/customDataCondition.js +0 -8
- package/dist/targeting/conditions/customDataCondition.js.map +0 -1
- package/dist/targeting/conditions/deviceCondition.d.ts +0 -9
- package/dist/targeting/conditions/deviceCondition.js +0 -2
- package/dist/targeting/conditions/deviceCondition.js.map +0 -1
- package/dist/targeting/conditions/exclusiveExperimentCondition.d.ts +0 -7
- package/dist/targeting/conditions/exclusiveExperimentCondition.js +0 -2
- package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +0 -1
- package/dist/targeting/conditions/index.d.ts +0 -12
- package/dist/targeting/conditions/index.js +0 -2
- package/dist/targeting/conditions/index.js.map +0 -1
- package/dist/targeting/conditions/pageTitleCondition.d.ts +0 -11
- package/dist/targeting/conditions/pageTitleCondition.js +0 -2
- package/dist/targeting/conditions/pageTitleCondition.js.map +0 -1
- package/dist/targeting/conditions/pageUrlCondition.d.ts +0 -11
- package/dist/targeting/conditions/pageUrlCondition.js +0 -2
- package/dist/targeting/conditions/pageUrlCondition.js.map +0 -1
- package/dist/targeting/conditions/sdkLanguageCondition.d.ts +0 -15
- package/dist/targeting/conditions/sdkLanguageCondition.js +0 -2
- package/dist/targeting/conditions/sdkLanguageCondition.js.map +0 -1
- package/dist/targeting/conditions/targetExperimentCondition.d.ts +0 -12
- package/dist/targeting/conditions/targetExperimentCondition.js +0 -2
- package/dist/targeting/conditions/targetExperimentCondition.js.map +0 -1
- package/dist/targeting/conditions/types.d.ts +0 -42
- package/dist/targeting/conditions/types.js +0 -2
- package/dist/targeting/conditions/types.js.map +0 -1
- package/dist/targeting/conditions/visitorCodeCondition.d.ts +0 -11
- package/dist/targeting/conditions/visitorCodeCondition.js +0 -2
- package/dist/targeting/conditions/visitorCodeCondition.js.map +0 -1
- package/dist/targeting/index.d.ts +0 -3
- package/dist/targeting/index.js +0 -2
- package/dist/targeting/index.js.map +0 -1
- package/dist/targeting/targetingNode.d.ts +0 -23
- package/dist/targeting/targetingNode.js +0 -2
- package/dist/targeting/targetingNode.js.map +0 -1
- package/dist/targeting/targetingTree.d.ts +0 -19
- package/dist/targeting/targetingTree.js +0 -35
- package/dist/targeting/targetingTree.js.map +0 -1
- package/dist/targeting/types.d.ts +0 -142
- package/dist/targeting/types.js +0 -2
- package/dist/targeting/types.js.map +0 -1
- package/dist/types.d.ts +0 -175
- package/dist/types.js +0 -42
- package/dist/types.js.map +0 -1
- package/dist/utilities/constants.d.ts +0 -2
- package/dist/utilities/constants.js +0 -2
- package/dist/utilities/constants.js.map +0 -1
- package/dist/utilities/index.d.ts +0 -2
- package/dist/utilities/index.js +0 -2
- package/dist/utilities/index.js.map +0 -1
- package/dist/utilities/types.d.ts +0 -64
- package/dist/utilities/types.js +0 -2
- package/dist/utilities/types.js.map +0 -1
- package/dist/utilities/utilities.d.ts +0 -27
- package/dist/utilities/utilities.js +0 -2
- package/dist/utilities/utilities.js.map +0 -1
- package/dist/variationConfiguration/index.d.ts +0 -2
- package/dist/variationConfiguration/index.js +0 -2
- package/dist/variationConfiguration/index.js.map +0 -1
- package/dist/variationConfiguration/types.d.ts +0 -28
- package/dist/variationConfiguration/types.js +0 -2
- package/dist/variationConfiguration/types.js.map +0 -1
- package/dist/variationConfiguration/variation.d.ts +0 -13
- package/dist/variationConfiguration/variation.js +0 -7
- package/dist/variationConfiguration/variation.js.map +0 -1
- package/dist/variationConfiguration/variationConfiguration.d.ts +0 -35
- package/dist/variationConfiguration/variationConfiguration.js +0 -66
- package/dist/variationConfiguration/variationConfiguration.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PageUrlCondition=void 0;var _tsRes=require("ts-res"),_kameleoonData=require("../../kameleoonData"),_kameleoonError=require("../../kameleoonError"),_utilities=require("../../utilities"),_types=require("../types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var PageUrlCondition=/*#__PURE__*/function(){function a(b){var c=b.matchType,d=b.url;_classCallCheck(this,a),_defineProperty(this,"matchType",void 0),_defineProperty(this,"conditionValue",void 0),this.matchType=c,this.conditionValue=d}return _createClass(a,[{key:"evaluate",value:function evaluate(a){var b=a.targetingData,c=null===b||void 0===b?void 0:b[_kameleoonData.KameleoonData.PageView];if(c){var d=c.urlAddress;return(0,_tsRes.Ok)(this.checkCondition(d))}return(0,_tsRes.Ok)(!1)}},{key:"checkCondition",value:function checkCondition(a){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case _types.MatchType.CONTAINS:return a.includes(this.conditionValue);case _types.MatchType.EXACT:return a===this.conditionValue;case _types.MatchType.REGULAR_EXPRESSION:return _utilities.Utilities.parseRegExp(this.conditionValue).test(a);default:(0,_kameleoonError.exhaustCheck)(this.matchType);}}}]),a}();exports.PageUrlCondition=PageUrlCondition;
|
|
2
|
-
//# sourceMappingURL=pageUrlCondition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pageUrlCondition.js","names":["PageUrlCondition","a","b","matchType","url","_classCallCheck","_defineProperty","conditionValue","_createClass","key","value","evaluate","targetingData","pageViewData","KameleoonData","PageView","urlAddress","Ok","checkCondition","MatchType","CONTAINS","includes","EXACT","REGULAR_EXPRESSION","Utilities","parseRegExp","test","exhaustCheck","exports"],"sources":["../../../src/targeting/conditions/pageUrlCondition.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonData } from 'src/kameleoonData';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class PageUrlCondition implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ matchType, url }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = url;\n }\n\n public evaluate({\n targetingData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const pageViewData = targetingData?.[KameleoonData.PageView];\n\n if (pageViewData) {\n const { urlAddress } = pageViewData;\n\n return Ok(this.checkCondition(urlAddress));\n }\n\n return Ok(false);\n }\n\n private checkCondition(url: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return url.includes(this.conditionValue);\n case MatchType.EXACT:\n return url === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Utilities.parseRegExp(this.conditionValue).test(url);\n default:\n exhaustCheck(this.matchType);\n }\n }\n}\n"],"mappings":"4gDAOa,CAAAA,gBAAgB,yBAI3B,SAAAC,EAAAC,CAAA,CAAmD,IAArC,CAAAC,CAAS,CAAAD,CAAA,CAATC,SAAS,CAAEC,CAAG,CAAAF,CAAA,CAAHE,GAAG,CAAAC,eAAA,MAAAJ,CAAA,EAAAK,eAAA,0BAAAA,eAAA,+BAC1B,IAAI,CAACH,SAAS,CAAGA,CAAS,CAC1B,IAAI,CAACI,cAAc,CAAGH,CACxB,CAAC,OAAAI,YAAA,CAAAP,CAAA,GAAAQ,GAAA,YAAAC,KAAA,CAED,SAAAC,SAAAV,CAAA,CAEwD,IADtD,CAAAW,CAAa,CAAAX,CAAA,CAAbW,aAAa,CAEPC,CAAY,QAAGD,CAAa,WAAbA,CAAa,QAAbA,CAAa,CAAGE,4BAAa,CAACC,QAAQ,CAAC,CAE5D,GAAIF,CAAY,CAAE,CAChB,GAAQ,CAAAG,CAAU,CAAKH,CAAY,CAA3BG,UAAU,CAElB,MAAO,GAAAC,SAAE,EAAC,IAAI,CAACC,cAAc,CAACF,CAAU,CAAC,CAC3C,CAEA,MAAO,GAAAC,SAAE,KACX,CAAC,GAAAR,GAAA,kBAAAC,KAAA,CAED,SAAAQ,eAAuBd,CAAW,CAAW,CAC3C,GAAI,CAAC,IAAI,CAACD,SAAS,EAAI,CAAC,IAAI,CAACI,cAAc,CACzC,SAGF,OAAQ,IAAI,CAACJ,SAAS,EACpB,IAAK,CAAAgB,gBAAS,CAACC,QAAQ,CACrB,MAAO,CAAAhB,CAAG,CAACiB,QAAQ,CAAC,IAAI,CAACd,cAAc,CAAC,CAC1C,IAAK,CAAAY,gBAAS,CAACG,KAAK,CAClB,MAAO,CAAAlB,CAAG,GAAK,IAAI,CAACG,cAAc,CACpC,IAAK,CAAAY,gBAAS,CAACI,kBAAkB,CAC/B,MAAO,CAAAC,oBAAS,CAACC,WAAW,CAAC,IAAI,CAAClB,cAAc,CAAC,CAACmB,IAAI,CAACtB,CAAG,CAAC,CAC7D,QACE,GAAAuB,4BAAY,EAAC,IAAI,CAACxB,SAAS,CAAC,CAAC,CAEnC,CAAC,IAAAF,CAAA,IAAA2B,OAAA,CAAA5B,gBAAA,CAAAA,gBAAA"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { KameleoonError } from '../../kameleoonError';
|
|
3
|
-
import { EvaluationDataType } from '../../targeting/types';
|
|
4
|
-
import { ConditionDataType, ICondition } from './types';
|
|
5
|
-
export declare class SdkLanguageCondition implements ICondition {
|
|
6
|
-
private sdkLanguage?;
|
|
7
|
-
private conditionValue?;
|
|
8
|
-
private versionMatchType?;
|
|
9
|
-
private error?;
|
|
10
|
-
constructor({ sdkLanguage, version, versionMatchType }: ConditionDataType);
|
|
11
|
-
evaluate({ sdkInfo, }: EvaluationDataType): Result<boolean, KameleoonError>;
|
|
12
|
-
private checkCondition;
|
|
13
|
-
private compareSemVer;
|
|
14
|
-
private validateVersion;
|
|
15
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SdkLanguageCondition=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../../kameleoonError"),_types=require("../types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _iterableToArrayLimit(a,b){var c=null==a?null:"undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=c){var d,e,f,g,h=[],i=!0,j=!1;try{if(f=(c=c.call(a)).next,0===b){if(Object(c)!==c)return;i=!1}else for(;!(i=(d=f.call(c)).done)&&(h.push(d.value),h.length!==b);i=!0);}catch(a){j=!0,e=a}finally{try{if(!i&&null!=c.return&&(g=c.return(),Object(g)!==g))return}finally{if(j)throw e}}return h}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var SdkLanguageCondition=/*#__PURE__*/function(){function a(b){var c=b.sdkLanguage,d=b.version,e=b.versionMatchType;_classCallCheck(this,a),_defineProperty(this,"sdkLanguage",void 0),_defineProperty(this,"conditionValue",void 0),_defineProperty(this,"versionMatchType",void 0),_defineProperty(this,"error",void 0),this.sdkLanguage=c,this.conditionValue=d,this.versionMatchType=e}return _createClass(a,[{key:"evaluate",value:function evaluate(a){var b=a.sdkInfo,c=this.checkCondition(b);return this.error?(0,_tsRes.Err)(this.error):(0,_tsRes.Ok)(c)}},{key:"checkCondition",value:function checkCondition(a){var b=a.type,c=a.version;return!!this.sdkLanguage&&("string"==typeof this.conditionValue?!!this.versionMatchType&&b===this.sdkLanguage&&this.compareSemVer({version:c,compareVersion:this.conditionValue,operator:this.versionMatchType}):b===this.sdkLanguage)}},{key:"compareSemVer",value:function compareSemVer(a){var b=a.version,c=a.compareVersion,d=a.operator,e=this.validateVersion(b),f=_slicedToArray(e,3),g=f[0],h=f[1],i=f[2],j=this.validateVersion(c),k=_slicedToArray(j,3),l=k[0],m=k[1],n=k[2],o=g===l,p=h===m;switch(d){case _types.VersionMatchType.EQUAL:return o&&p&&i===n;case _types.VersionMatchType.GREATER:return g>l||o&&h>m||o&&p&&i>n;case _types.VersionMatchType.LOWER:return g<l||o&&h<m||o&&p&&i<n;default:(0,_kameleoonError.exhaustCheck)(d);}}},{key:"validateVersion",value:function validateVersion(a){var b=a.split(".");return b.some(function isBadVersion(a){return isNaN(parseInt(a))||0===a.length})||3!==b.length?(this.error=new _kameleoonError.KameleoonError(_kameleoonError.KameleoonException.SemanticVersionParse,a),[0,0,0]):b.map(function(a){return parseInt(a)})}}]),a}();exports.SdkLanguageCondition=SdkLanguageCondition;
|
|
2
|
-
//# sourceMappingURL=sdkLanguageCondition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdkLanguageCondition.js","names":["SdkLanguageCondition","a","b","sdkLanguage","version","versionMatchType","_classCallCheck","_defineProperty","conditionValue","_createClass","key","value","evaluate","sdkInfo","result","checkCondition","error","Err","Ok","sdkType","type","compareSemVer","compareVersion","operator","e","validateVersion","f","_slicedToArray","major","minor","patch","j","k","compareMajor","compareMinor","comparePatch","isMajorEqual","isMinorEqual","VersionMatchType","EQUAL","GREATER","LOWER","exhaustCheck","versionSplit","split","some","isBadVersion","item","isNaN","parseInt","length","KameleoonError","KameleoonException","SemanticVersionParse","map","exports"],"sources":["../../../src/targeting/conditions/sdkLanguageCondition.ts"],"sourcesContent":["import { Err, Ok, Result } from 'ts-res';\nimport { SdkLanguageType } from 'src/constants';\nimport {\n exhaustCheck,\n KameleoonError,\n KameleoonException,\n} from 'src/kameleoonError';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { EvaluationDataType, VersionMatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class SdkLanguageCondition implements ICondition {\n private sdkLanguage?: SdkLanguageType | null;\n private conditionValue?: string | null;\n private versionMatchType?: VersionMatchType | null;\n private error?: KameleoonError;\n\n constructor({ sdkLanguage, version, versionMatchType }: ConditionDataType) {\n this.sdkLanguage = sdkLanguage;\n this.conditionValue = version;\n this.versionMatchType = versionMatchType;\n }\n\n public evaluate({\n sdkInfo,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n const result = this.checkCondition(sdkInfo);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n private checkCondition(sdkInfo: ExternalPackageInfoType): boolean {\n const { type: sdkType, version } = sdkInfo;\n\n if (!this.sdkLanguage) {\n return false;\n }\n\n if (typeof this.conditionValue !== 'string') {\n return sdkType === this.sdkLanguage;\n }\n\n if (!this.versionMatchType) {\n return false;\n }\n\n return (\n sdkType === this.sdkLanguage &&\n this.compareSemVer({\n version,\n compareVersion: this.conditionValue,\n operator: this.versionMatchType,\n })\n );\n }\n\n private compareSemVer({\n version,\n compareVersion,\n operator,\n }: {\n version: string;\n compareVersion: string;\n operator: VersionMatchType;\n }): boolean {\n const [major, minor, patch] = this.validateVersion(version);\n const [compareMajor, compareMinor, comparePatch] =\n this.validateVersion(compareVersion);\n\n const [isMajorEqual, isMinorEqual, isPatchEqual] = [\n major === compareMajor,\n minor === compareMinor,\n patch === comparePatch,\n ];\n\n switch (operator) {\n case VersionMatchType.EQUAL:\n return isMajorEqual && isMinorEqual && isPatchEqual;\n case VersionMatchType.GREATER:\n return (\n major > compareMajor ||\n (isMajorEqual && minor > compareMinor) ||\n (isMajorEqual && isMinorEqual && patch > comparePatch)\n );\n case VersionMatchType.LOWER:\n return (\n major < compareMajor ||\n (isMajorEqual && minor < compareMinor) ||\n (isMajorEqual && isMinorEqual && patch < comparePatch)\n );\n default:\n exhaustCheck(operator);\n }\n }\n\n private validateVersion(version: string): [number, number, number] {\n const versionSplit = version.split('.');\n const isBadVersion = (item: string) =>\n isNaN(parseInt(item)) || item.length === 0;\n\n if (versionSplit.some(isBadVersion) || versionSplit.length !== 3) {\n this.error = new KameleoonError(\n KameleoonException.SemanticVersionParse,\n version,\n );\n\n return [0, 0, 0];\n }\n\n return versionSplit.map((item) => parseInt(item)) as [\n number,\n number,\n number,\n ];\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { KameleoonError } from '../../kameleoonError';
|
|
3
|
-
import { EvaluationDataType } from '../../targeting/types';
|
|
4
|
-
import { ConditionDataType, ICondition } from './types';
|
|
5
|
-
export declare class TargetExperimentCondition implements ICondition {
|
|
6
|
-
private experimentId?;
|
|
7
|
-
private variationId?;
|
|
8
|
-
private matchType?;
|
|
9
|
-
constructor({ variation, experiment, variationMatchType, }: ConditionDataType);
|
|
10
|
-
evaluate({ variationData, }: EvaluationDataType): Result<boolean, KameleoonError>;
|
|
11
|
-
private checkCondition;
|
|
12
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TargetExperimentCondition=void 0;var _tsRes=require("ts-res"),_types=require("../types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var TargetExperimentCondition=/*#__PURE__*/function(){function a(b){var c=b.variation,d=b.experiment,e=b.variationMatchType;_classCallCheck(this,a),_defineProperty(this,"experimentId",void 0),_defineProperty(this,"variationId",void 0),_defineProperty(this,"matchType",void 0),this.experimentId=d,this.variationId=c,this.matchType=e}return _createClass(a,[{key:"evaluate",value:function evaluate(a){var b=a.variationData;if(!this.experimentId)return(0,_tsRes.Ok)(!1);this.matchType!==_types.MatchTypeVariation.EXACT||this.variationId||(0,_tsRes.Ok)(!1);var c=this.checkCondition({variationId:this.variationId,experimentId:this.experimentId,variationData:b});return(0,_tsRes.Ok)(c)}},{key:"checkCondition",value:function checkCondition(a){var b=a.variationId,c=a.experimentId,d=a.variationData,e=d[c+""];switch(this.matchType){case _types.MatchTypeVariation.EXACT:return(null===e||void 0===e?void 0:e.variationId)===b;case _types.MatchTypeVariation.ANY:return!!e;default:return!1;}}}]),a}();exports.TargetExperimentCondition=TargetExperimentCondition;
|
|
2
|
-
//# sourceMappingURL=targetExperimentCondition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"targetExperimentCondition.js","names":["TargetExperimentCondition","a","b","variation","experiment","variationMatchType","_classCallCheck","_defineProperty","experimentId","variationId","matchType","_createClass","key","value","evaluate","variationData","Ok","MatchTypeVariation","EXACT","result","checkCondition","ANY","exports"],"sources":["../../../src/targeting/conditions/targetExperimentCondition.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { KameleoonError } from 'src/kameleoonError';\nimport { ExperimentVariationsType } from 'src/storage';\nimport { EvaluationDataType, MatchTypeVariation } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class TargetExperimentCondition implements ICondition {\n private experimentId?: number | null;\n private variationId?: number | null;\n private matchType?: MatchTypeVariation | null;\n\n constructor({\n variation,\n experiment,\n variationMatchType,\n }: ConditionDataType) {\n this.experimentId = experiment;\n this.variationId = variation;\n this.matchType = variationMatchType;\n }\n\n public evaluate({\n variationData,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n if (!this.experimentId) {\n return Ok(false);\n }\n\n if (this.matchType === MatchTypeVariation.EXACT && !this.variationId) {\n Ok(false);\n }\n\n const result = this.checkCondition({\n variationId: this.variationId,\n experimentId: this.experimentId,\n variationData,\n });\n\n return Ok(result);\n }\n\n private checkCondition({\n variationId,\n experimentId,\n variationData,\n }: {\n variationId?: number | null;\n experimentId: number;\n variationData: ExperimentVariationsType;\n }): boolean {\n const experimentIdString = String(experimentId);\n const variation = variationData[experimentIdString];\n\n switch (this.matchType) {\n case MatchTypeVariation.EXACT: {\n return variation?.variationId === variationId;\n }\n case MatchTypeVariation.ANY:\n return Boolean(variation);\n default:\n return false;\n }\n }\n}\n"],"mappings":"i5CAMa,CAAAA,yBAAyB,yBAKpC,SAAAC,EAAAC,CAAA,CAIsB,IAHpB,CAAAC,CAAS,CAAAD,CAAA,CAATC,SAAS,CACTC,CAAU,CAAAF,CAAA,CAAVE,UAAU,CACVC,CAAkB,CAAAH,CAAA,CAAlBG,kBAAkB,CAAAC,eAAA,MAAAL,CAAA,EAAAM,eAAA,6BAAAA,eAAA,4BAAAA,eAAA,0BAElB,IAAI,CAACC,YAAY,CAAGJ,CAAU,CAC9B,IAAI,CAACK,WAAW,CAAGN,CAAS,CAC5B,IAAI,CAACO,SAAS,CAAGL,CACnB,CAAC,OAAAM,YAAA,CAAAV,CAAA,GAAAW,GAAA,YAAAC,KAAA,CAED,SAAAC,SAAAb,CAAA,CAEwD,IADtD,CAAAc,CAAa,CAAAd,CAAA,CAAbc,aAAa,CAEb,GAAI,CAAC,IAAI,CAACP,YAAY,CACpB,MAAO,GAAAQ,SAAE,KAAO,CAGd,IAAI,CAACN,SAAS,GAAKO,yBAAkB,CAACC,KAAK,EAAK,IAAI,CAACT,WAAW,EAClE,GAAAO,SAAE,KAAO,CAGX,GAAM,CAAAG,CAAM,CAAG,IAAI,CAACC,cAAc,CAAC,CACjCX,WAAW,CAAE,IAAI,CAACA,WAAW,CAC7BD,YAAY,CAAE,IAAI,CAACA,YAAY,CAC/BO,aAAa,CAAbA,CACF,CAAC,CAAC,CAEF,MAAO,GAAAC,SAAE,EAACG,CAAM,CAClB,CAAC,GAAAP,GAAA,kBAAAC,KAAA,CAED,SAAAO,eAAAnB,CAAA,CAQY,IAPV,CAAAQ,CAAW,CAAAR,CAAA,CAAXQ,WAAW,CACXD,CAAY,CAAAP,CAAA,CAAZO,YAAY,CACZO,CAAa,CAAAd,CAAA,CAAbc,aAAa,CAOPZ,CAAS,CAAGY,CAAa,CADGP,CAAY,IACK,CAEnD,OAAQ,IAAI,CAACE,SAAS,EACpB,IAAK,CAAAO,yBAAkB,CAACC,KAAK,CAC3B,MAAO,QAAAf,CAAS,WAATA,CAAS,QAATA,CAAS,CAAEM,WAAW,IAAKA,CAAW,CAE/C,IAAK,CAAAQ,yBAAkB,CAACI,GAAG,CACzB,QAAelB,CAAS,CAC1B,QACE,SAAa,CAEnB,CAAC,IAAAF,CAAA,IAAAqB,OAAA,CAAAtB,yBAAA,CAAAA,yBAAA"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { SdkLanguageType } from '../../constants';
|
|
3
|
-
import { BrowserType, DeviceType } from '../../kameleoonData';
|
|
4
|
-
import { KameleoonError } from '../../kameleoonError';
|
|
5
|
-
import { EvaluationDataType, MatchType, MatchTypeCustomData, MatchTypeTest, MatchTypeVariation, TargetingType, VersionMatchType } from '../../targeting/types';
|
|
6
|
-
import { BrowserCondition } from './browserCondition';
|
|
7
|
-
import { ConversionCondition } from './conversionCondition';
|
|
8
|
-
import { CustomDataCondition } from './customDataCondition';
|
|
9
|
-
import { DeviceCondition } from './deviceCondition';
|
|
10
|
-
import { ExclusiveExperimentCondition } from './exclusiveExperimentCondition';
|
|
11
|
-
import { PageTitleCondition } from './pageTitleCondition';
|
|
12
|
-
import { PageUrlCondition } from './pageUrlCondition';
|
|
13
|
-
import { SdkLanguageCondition } from './sdkLanguageCondition';
|
|
14
|
-
import { TargetExperimentCondition } from './targetExperimentCondition';
|
|
15
|
-
import { VisitorCodeCondition } from './visitorCodeCondition';
|
|
16
|
-
export interface ICondition {
|
|
17
|
-
evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;
|
|
18
|
-
}
|
|
19
|
-
export type ConditionType = CustomDataCondition | ExclusiveExperimentCondition | TargetExperimentCondition | DeviceCondition | BrowserCondition | PageUrlCondition | PageTitleCondition | ConversionCondition | VisitorCodeCondition | SdkLanguageCondition;
|
|
20
|
-
export type ConditionDataType = {
|
|
21
|
-
id: number;
|
|
22
|
-
targetingType: TargetingType;
|
|
23
|
-
isInclude: boolean | null;
|
|
24
|
-
weight: number;
|
|
25
|
-
customDataIndex?: string | null;
|
|
26
|
-
value?: string | null;
|
|
27
|
-
valueMatchType?: MatchTypeCustomData | null;
|
|
28
|
-
experiment?: number | null;
|
|
29
|
-
variation?: number | null;
|
|
30
|
-
variationMatchType?: MatchTypeVariation | null;
|
|
31
|
-
testMatchType?: MatchTypeTest | null;
|
|
32
|
-
matchType?: MatchType | null;
|
|
33
|
-
device?: DeviceType | null;
|
|
34
|
-
browser?: BrowserType | null;
|
|
35
|
-
version?: string | null;
|
|
36
|
-
versionMatchType?: VersionMatchType | null;
|
|
37
|
-
title?: string | null;
|
|
38
|
-
url?: string | null;
|
|
39
|
-
goalId?: number | null;
|
|
40
|
-
sdkLanguage?: SdkLanguageType | null;
|
|
41
|
-
visitorCode?: string | null;
|
|
42
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/targeting/conditions/types.ts"],"sourcesContent":["import { Result } from 'ts-res';\nimport { SdkLanguageType } from 'src/constants';\nimport { BrowserType, DeviceType } from 'src/kameleoonData';\nimport { KameleoonError } from 'src/kameleoonError';\nimport {\n EvaluationDataType,\n MatchType,\n MatchTypeCustomData,\n MatchTypeTest,\n MatchTypeVariation,\n TargetingType,\n VersionMatchType,\n} from 'src/targeting/types';\nimport { BrowserCondition } from './browserCondition';\nimport { ConversionCondition } from './conversionCondition';\nimport { CustomDataCondition } from './customDataCondition';\nimport { DeviceCondition } from './deviceCondition';\nimport { ExclusiveExperimentCondition } from './exclusiveExperimentCondition';\nimport { PageTitleCondition } from './pageTitleCondition';\nimport { PageUrlCondition } from './pageUrlCondition';\nimport { SdkLanguageCondition } from './sdkLanguageCondition';\nimport { TargetExperimentCondition } from './targetExperimentCondition';\nimport { VisitorCodeCondition } from './visitorCodeCondition';\n\nexport interface ICondition {\n evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;\n}\n\nexport type ConditionType =\n | CustomDataCondition\n | ExclusiveExperimentCondition\n | TargetExperimentCondition\n | DeviceCondition\n | BrowserCondition\n | PageUrlCondition\n | PageTitleCondition\n | ConversionCondition\n | VisitorCodeCondition\n | SdkLanguageCondition;\n\nexport type ConditionDataType = {\n id: number;\n targetingType: TargetingType;\n isInclude: boolean | null;\n weight: number;\n customDataIndex?: string | null;\n value?: string | null;\n valueMatchType?: MatchTypeCustomData | null;\n experiment?: number | null;\n variation?: number | null;\n variationMatchType?: MatchTypeVariation | null;\n testMatchType?: MatchTypeTest | null;\n matchType?: MatchType | null;\n device?: DeviceType | null;\n browser?: BrowserType | null;\n version?: string | null;\n versionMatchType?: VersionMatchType | null;\n title?: string | null;\n url?: string | null;\n goalId?: number | null;\n sdkLanguage?: SdkLanguageType | null;\n visitorCode?: string | null;\n};\n"],"mappings":""}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { KameleoonError } from '../../kameleoonError';
|
|
3
|
-
import { EvaluationDataType } from '../../targeting/types';
|
|
4
|
-
import { ConditionDataType, ICondition } from './types';
|
|
5
|
-
export declare class VisitorCodeCondition implements ICondition {
|
|
6
|
-
private matchType?;
|
|
7
|
-
private conditionValue?;
|
|
8
|
-
constructor({ visitorCode, matchType }: ConditionDataType);
|
|
9
|
-
evaluate({ visitorCode, }: EvaluationDataType): Result<boolean, KameleoonError>;
|
|
10
|
-
private checkCondition;
|
|
11
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VisitorCodeCondition=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../../kameleoonError"),_utilities=require("../../utilities"),_types=require("../types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var VisitorCodeCondition=/*#__PURE__*/function(){function a(b){var c=b.visitorCode,d=b.matchType;_classCallCheck(this,a),_defineProperty(this,"matchType",void 0),_defineProperty(this,"conditionValue",void 0),this.matchType=d,this.conditionValue=c}return _createClass(a,[{key:"evaluate",value:function evaluate(a){var b=a.visitorCode;return(0,_tsRes.Ok)(this.checkCondition(b))}},{key:"checkCondition",value:function checkCondition(a){if(!this.matchType||!this.conditionValue)return!1;switch(this.matchType){case _types.MatchType.CONTAINS:return a.includes(this.conditionValue);case _types.MatchType.EXACT:return a===this.conditionValue;case _types.MatchType.REGULAR_EXPRESSION:return _utilities.Utilities.parseRegExp(this.conditionValue).test(a);default:(0,_kameleoonError.exhaustCheck)(this.matchType);}}}]),a}();exports.VisitorCodeCondition=VisitorCodeCondition;
|
|
2
|
-
//# sourceMappingURL=visitorCodeCondition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visitorCodeCondition.js","names":["VisitorCodeCondition","a","b","visitorCode","matchType","_classCallCheck","_defineProperty","conditionValue","_createClass","key","value","evaluate","Ok","checkCondition","MatchType","CONTAINS","includes","EXACT","REGULAR_EXPRESSION","Utilities","parseRegExp","test","exhaustCheck","exports"],"sources":["../../../src/targeting/conditions/visitorCodeCondition.ts"],"sourcesContent":["import { Ok, Result } from 'ts-res';\nimport { exhaustCheck, KameleoonError } from 'src/kameleoonError';\nimport { Utilities } from 'src/utilities';\nimport { EvaluationDataType, MatchType } from 'src/targeting/types';\nimport { ConditionDataType, ICondition } from './types';\n\nexport class VisitorCodeCondition implements ICondition {\n private matchType?: MatchType | null;\n private conditionValue?: string | null;\n\n constructor({ visitorCode, matchType }: ConditionDataType) {\n this.matchType = matchType;\n this.conditionValue = visitorCode;\n }\n\n public evaluate({\n visitorCode,\n }: EvaluationDataType): Result<boolean, KameleoonError> {\n return Ok(this.checkCondition(visitorCode));\n }\n\n private checkCondition(visitorCode: string): boolean {\n if (!this.matchType || !this.conditionValue) {\n return false;\n }\n\n switch (this.matchType) {\n case MatchType.CONTAINS:\n return visitorCode.includes(this.conditionValue);\n case MatchType.EXACT:\n return visitorCode === this.conditionValue;\n case MatchType.REGULAR_EXPRESSION:\n return Utilities.parseRegExp(this.conditionValue).test(visitorCode);\n default:\n exhaustCheck(this.matchType);\n }\n }\n}\n"],"mappings":"k+CAMa,CAAAA,oBAAoB,yBAI/B,SAAAC,EAAAC,CAAA,CAA2D,IAA7C,CAAAC,CAAW,CAAAD,CAAA,CAAXC,WAAW,CAAEC,CAAS,CAAAF,CAAA,CAATE,SAAS,CAAAC,eAAA,MAAAJ,CAAA,EAAAK,eAAA,0BAAAA,eAAA,+BAClC,IAAI,CAACF,SAAS,CAAGA,CAAS,CAC1B,IAAI,CAACG,cAAc,CAAGJ,CACxB,CAAC,OAAAK,YAAA,CAAAP,CAAA,GAAAQ,GAAA,YAAAC,KAAA,CAED,SAAAC,SAAAV,CAAA,CAEwD,IADtD,CAAAE,CAAW,CAAAF,CAAA,CAAXE,WAAW,CAEX,MAAO,GAAAS,SAAE,EAAC,IAAI,CAACC,cAAc,CAACV,CAAW,CAAC,CAC5C,CAAC,GAAAM,GAAA,kBAAAC,KAAA,CAED,SAAAG,eAAuBV,CAAmB,CAAW,CACnD,GAAI,CAAC,IAAI,CAACC,SAAS,EAAI,CAAC,IAAI,CAACG,cAAc,CACzC,SAGF,OAAQ,IAAI,CAACH,SAAS,EACpB,IAAK,CAAAU,gBAAS,CAACC,QAAQ,CACrB,MAAO,CAAAZ,CAAW,CAACa,QAAQ,CAAC,IAAI,CAACT,cAAc,CAAC,CAClD,IAAK,CAAAO,gBAAS,CAACG,KAAK,CAClB,MAAO,CAAAd,CAAW,GAAK,IAAI,CAACI,cAAc,CAC5C,IAAK,CAAAO,gBAAS,CAACI,kBAAkB,CAC/B,MAAO,CAAAC,oBAAS,CAACC,WAAW,CAAC,IAAI,CAACb,cAAc,CAAC,CAACc,IAAI,CAAClB,CAAW,CAAC,CACrE,QACE,GAAAmB,4BAAY,EAAC,IAAI,CAAClB,SAAS,CAAC,CAAC,CAEnC,CAAC,IAAAH,CAAA,IAAAsB,OAAA,CAAAvB,oBAAA,CAAAA,oBAAA"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { TargetingTree } from './targetingTree';
|
|
2
|
-
export { Operator, TargetingType, SegmentType, TargetingDataType, EvaluationDataType, MatchTypeCustomData, MatchTypeVariation, MatchType, VersionMatchType, } from './types';
|
|
3
|
-
export { CustomDataCondition, TargetExperimentCondition, ExclusiveExperimentCondition, BrowserCondition, PageUrlCondition, PageTitleCondition, ConversionCondition, VisitorCodeCondition, SdkLanguageCondition, DeviceCondition, ConditionFactory, } from './conditions';
|
package/dist/targeting/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"BrowserCondition",{enumerable:!0,get:function get(){return _conditions.BrowserCondition}}),Object.defineProperty(exports,"ConditionFactory",{enumerable:!0,get:function get(){return _conditions.ConditionFactory}}),Object.defineProperty(exports,"ConversionCondition",{enumerable:!0,get:function get(){return _conditions.ConversionCondition}}),Object.defineProperty(exports,"CustomDataCondition",{enumerable:!0,get:function get(){return _conditions.CustomDataCondition}}),Object.defineProperty(exports,"DeviceCondition",{enumerable:!0,get:function get(){return _conditions.DeviceCondition}}),Object.defineProperty(exports,"EvaluationDataType",{enumerable:!0,get:function get(){return _types.EvaluationDataType}}),Object.defineProperty(exports,"ExclusiveExperimentCondition",{enumerable:!0,get:function get(){return _conditions.ExclusiveExperimentCondition}}),Object.defineProperty(exports,"MatchType",{enumerable:!0,get:function get(){return _types.MatchType}}),Object.defineProperty(exports,"MatchTypeCustomData",{enumerable:!0,get:function get(){return _types.MatchTypeCustomData}}),Object.defineProperty(exports,"MatchTypeVariation",{enumerable:!0,get:function get(){return _types.MatchTypeVariation}}),Object.defineProperty(exports,"Operator",{enumerable:!0,get:function get(){return _types.Operator}}),Object.defineProperty(exports,"PageTitleCondition",{enumerable:!0,get:function get(){return _conditions.PageTitleCondition}}),Object.defineProperty(exports,"PageUrlCondition",{enumerable:!0,get:function get(){return _conditions.PageUrlCondition}}),Object.defineProperty(exports,"SdkLanguageCondition",{enumerable:!0,get:function get(){return _conditions.SdkLanguageCondition}}),Object.defineProperty(exports,"SegmentType",{enumerable:!0,get:function get(){return _types.SegmentType}}),Object.defineProperty(exports,"TargetExperimentCondition",{enumerable:!0,get:function get(){return _conditions.TargetExperimentCondition}}),Object.defineProperty(exports,"TargetingDataType",{enumerable:!0,get:function get(){return _types.TargetingDataType}}),Object.defineProperty(exports,"TargetingTree",{enumerable:!0,get:function get(){return _targetingTree.TargetingTree}}),Object.defineProperty(exports,"TargetingType",{enumerable:!0,get:function get(){return _types.TargetingType}}),Object.defineProperty(exports,"VersionMatchType",{enumerable:!0,get:function get(){return _types.VersionMatchType}}),Object.defineProperty(exports,"VisitorCodeCondition",{enumerable:!0,get:function get(){return _conditions.VisitorCodeCondition}});var _targetingTree=require("./targetingTree"),_types=require("./types"),_conditions=require("./conditions");
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/targeting/index.ts"],"sourcesContent":["export { TargetingTree } from './targetingTree';\nexport {\n Operator,\n TargetingType,\n SegmentType,\n TargetingDataType,\n EvaluationDataType,\n MatchTypeCustomData,\n MatchTypeVariation,\n MatchType,\n VersionMatchType,\n} from './types';\nexport {\n CustomDataCondition,\n TargetExperimentCondition,\n ExclusiveExperimentCondition,\n BrowserCondition,\n PageUrlCondition,\n PageTitleCondition,\n ConversionCondition,\n VisitorCodeCondition,\n SdkLanguageCondition,\n DeviceCondition,\n ConditionFactory,\n} from './conditions';\n"],"mappings":""}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { KameleoonError } from '../kameleoonError';
|
|
2
|
-
import { ConditionDataType } from './conditions';
|
|
3
|
-
import { NodeValueType, Operator } from './types';
|
|
4
|
-
export interface ITargetingNode {
|
|
5
|
-
readonly value?: NodeValueType;
|
|
6
|
-
readonly left?: ITargetingNode;
|
|
7
|
-
readonly right?: ITargetingNode;
|
|
8
|
-
readonly error?: KameleoonError;
|
|
9
|
-
}
|
|
10
|
-
export declare class TargetingNode implements ITargetingNode {
|
|
11
|
-
private nodeValue?;
|
|
12
|
-
private nodeError?;
|
|
13
|
-
private leftChild?;
|
|
14
|
-
private rightChild?;
|
|
15
|
-
private inverseResult;
|
|
16
|
-
constructor(value: ConditionDataType | Operator, left?: ITargetingNode, right?: ITargetingNode);
|
|
17
|
-
get value(): NodeValueType | undefined;
|
|
18
|
-
get error(): KameleoonError | undefined;
|
|
19
|
-
get left(): ITargetingNode | undefined;
|
|
20
|
-
get right(): ITargetingNode | undefined;
|
|
21
|
-
get inverse(): boolean;
|
|
22
|
-
private isOperator;
|
|
23
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TargetingNode=void 0;var _conditions=require("./conditions"),_types=require("./types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var TargetingNode=/*#__PURE__*/function(){function a(b,c,d){if(_classCallCheck(this,a),_defineProperty(this,"nodeValue",void 0),_defineProperty(this,"nodeError",void 0),_defineProperty(this,"leftChild",void 0),_defineProperty(this,"rightChild",void 0),_defineProperty(this,"inverseResult",!1),this.isOperator(b))this.nodeValue=b;else{var e,f=_conditions.ConditionFactory.createCondition(b);this.inverseResult=null!==(e=b.isInclude)&&void 0!==e&&!e,f.ok?this.nodeValue=f.data:this.nodeError=f.error}this.leftChild=c,this.rightChild=d}return _createClass(a,[{key:"value",get:function get(){return this.nodeValue}},{key:"error",get:function get(){return this.nodeError}},{key:"left",get:function get(){return this.leftChild}},{key:"right",get:function get(){return this.rightChild}},{key:"inverse",get:function get(){return this.inverseResult}},{key:"isOperator",value:function isOperator(a){return a===_types.Operator.And||a===_types.Operator.Or}}]),a}();exports.TargetingNode=TargetingNode;
|
|
2
|
-
//# sourceMappingURL=targetingNode.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"targetingNode.js","names":["TargetingNode","a","value","left","right","_classCallCheck","_defineProperty","isOperator","nodeValue","e","result","ConditionFactory","createCondition","inverseResult","isInclude","ok","data","nodeError","error","leftChild","rightChild","_createClass","key","get","Operator","And","Or","exports"],"sources":["../../src/targeting/targetingNode.ts"],"sourcesContent":["import { KameleoonError } from 'src/kameleoonError';\nimport { ConditionFactory, ConditionDataType } from './conditions';\nimport { NodeValueType, Operator } from './types';\n\nexport interface ITargetingNode {\n readonly value?: NodeValueType;\n readonly left?: ITargetingNode;\n readonly right?: ITargetingNode;\n readonly error?: KameleoonError;\n}\n\nexport class TargetingNode implements ITargetingNode {\n private nodeValue?: NodeValueType;\n private nodeError?: KameleoonError;\n private leftChild?: ITargetingNode;\n private rightChild?: ITargetingNode;\n private inverseResult: boolean = false;\n\n constructor(\n value: ConditionDataType | Operator,\n left?: ITargetingNode,\n right?: ITargetingNode,\n ) {\n if (this.isOperator(value)) {\n this.nodeValue = value;\n } else {\n const result = ConditionFactory.createCondition(value);\n this.inverseResult = !(value.isInclude ?? true);\n\n if (result.ok) {\n this.nodeValue = result.data;\n } else {\n this.nodeError = result.error;\n }\n }\n\n this.leftChild = left;\n this.rightChild = right;\n }\n\n get value(): NodeValueType | undefined {\n return this.nodeValue;\n }\n\n get error(): KameleoonError | undefined {\n return this.nodeError;\n }\n\n get left(): ITargetingNode | undefined {\n return this.leftChild;\n }\n\n get right(): ITargetingNode | undefined {\n return this.rightChild;\n }\n\n get inverse(): boolean {\n return this.inverseResult;\n }\n\n private isOperator(value: ConditionDataType | Operator): value is Operator {\n return value === Operator.And || value === Operator.Or;\n }\n}\n"],"mappings":"+4CAWa,CAAAA,aAAa,yBAOxB,SAAAC,EACEC,CAAmC,CACnCC,CAAqB,CACrBC,CAAsB,CACtB,CACA,GAAAC,eAAA,MAAAJ,CAAA,EAAAK,eAAA,0BAAAA,eAAA,0BAAAA,eAAA,0BAAAA,eAAA,2BAAAA,eAAA,0BAAI,IAAI,CAACC,UAAU,CAACL,CAAK,CAAC,CACxB,IAAI,CAACM,SAAS,CAAGN,CAAK,KACjB,KAAAO,CAAA,CACCC,CAAM,CAAGC,4BAAgB,CAACC,eAAe,CAACV,CAAK,CAAC,CACtD,IAAI,CAACW,aAAa,SAAAJ,CAAA,CAAKP,CAAK,CAACY,SAAS,YAAAL,CAAA,GAAAA,CAAS,CAE3CC,CAAM,CAACK,EAAE,CACX,IAAI,CAACP,SAAS,CAAGE,CAAM,CAACM,IAAI,CAE5B,IAAI,CAACC,SAAS,CAAGP,CAAM,CAACQ,KAE5B,CAEA,IAAI,CAACC,SAAS,CAAGhB,CAAI,CACrB,IAAI,CAACiB,UAAU,CAAGhB,CACpB,CAAC,OAAAiB,YAAA,CAAApB,CAAA,GAAAqB,GAAA,SAAAC,GAAA,CAED,SAAAA,IAAA,CAAuC,CACrC,MAAO,KAAI,CAACf,SACd,CAAC,GAAAc,GAAA,SAAAC,GAAA,CAED,SAAAA,IAAA,CAAwC,CACtC,MAAO,KAAI,CAACN,SACd,CAAC,GAAAK,GAAA,QAAAC,GAAA,CAED,SAAAA,IAAA,CAAuC,CACrC,MAAO,KAAI,CAACJ,SACd,CAAC,GAAAG,GAAA,SAAAC,GAAA,CAED,SAAAA,IAAA,CAAwC,CACtC,MAAO,KAAI,CAACH,UACd,CAAC,GAAAE,GAAA,WAAAC,GAAA,CAED,SAAAA,IAAA,CAAuB,CACrB,MAAO,KAAI,CAACV,aACd,CAAC,GAAAS,GAAA,cAAApB,KAAA,CAED,SAAAK,WAAmBL,CAAmC,CAAqB,CACzE,MAAO,CAAAA,CAAK,GAAKsB,eAAQ,CAACC,GAAG,EAAIvB,CAAK,GAAKsB,eAAQ,CAACE,EACtD,CAAC,IAAAzB,CAAA,IAAA0B,OAAA,CAAA3B,aAAA,CAAAA,aAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Result } from 'ts-res';
|
|
2
|
-
import { KameleoonError } from '../kameleoonError';
|
|
3
|
-
import { EvaluationDataType, SegmentType } from './types';
|
|
4
|
-
interface ITargetingTree {
|
|
5
|
-
evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;
|
|
6
|
-
}
|
|
7
|
-
export declare class TargetingTree implements ITargetingTree {
|
|
8
|
-
private tree;
|
|
9
|
-
private error;
|
|
10
|
-
constructor(segment: SegmentType);
|
|
11
|
-
evaluate(data: EvaluationDataType): Result<boolean, KameleoonError>;
|
|
12
|
-
private evaluateNode;
|
|
13
|
-
private isLeafNode;
|
|
14
|
-
private isNonLeafNode;
|
|
15
|
-
private buildTree;
|
|
16
|
-
private flattenSegment;
|
|
17
|
-
private convertOperators;
|
|
18
|
-
}
|
|
19
|
-
export {};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TargetingTree=void 0;var _tsRes=require("ts-res"),_kameleoonError=require("../kameleoonError"),_targetingNode=require("./targetingNode"),_types=require("./types");function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _createForOfIteratorHelper(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(!c){if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0,e=function(){};return{s:e,n:function n(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}},e:function e(a){throw a},f:e}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var f,g=!0,h=!1;return{s:function s(){c=c.call(a)},n:function n(){var a=c.next();return g=a.done,a},e:function e(a){h=!0,f=a},f:function f(){try{g||null==c.return||c.return()}finally{if(h)throw f}}}}function _unsupportedIterableToArray(a,b){if(a){if("string"==typeof a)return _arrayLikeToArray(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return"Object"===c&&a.constructor&&(c=a.constructor.name),"Map"===c||"Set"===c?Array.from(a):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?_arrayLikeToArray(a,b):void 0}}function _arrayLikeToArray(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _defineProperty(a,b,c){return b=_toPropertyKey(b),b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"===_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!==_typeof(a)||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!==_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}var TargetingTree=/*#__PURE__*/function(){function a(b){var c=this;_classCallCheck(this,a),_defineProperty(this,"tree",void 0),_defineProperty(this,"error",null);var d=this.flattenSegment(b),e=d.nestedConditions,f=d.topLevelOperators,g=e.map(function(a){var b=a.conditions,d=a.operators,e=b.map(function(a){return new _targetingNode.TargetingNode(a)});return c.buildTree(e,d)});// --- Note ---
|
|
2
|
-
// - Targeting tree is built bottom-up, it's the only way to both get the consistent logic
|
|
3
|
-
// (grouping nested conditions) and have human readable tree representation.
|
|
4
|
-
// - Here is an example of how tree is built (we use strict complete binary tree)
|
|
5
|
-
// Let's say we have such a condition `value < 10 || value > 20 && value < 30`
|
|
6
|
-
// Following is pseudo code for building tree:
|
|
7
|
-
//
|
|
8
|
-
// `const operators = [Operator.Or, Operator.And]`
|
|
9
|
-
// `const conditions = [
|
|
10
|
-
// {type: Condition.Less, value: 10},
|
|
11
|
-
// {type: Condition.Greater, value: 20},
|
|
12
|
-
// {type: Condition.Less, value: 30},
|
|
13
|
-
// ]`
|
|
14
|
-
//
|
|
15
|
-
// After the first iteration we have node like this:
|
|
16
|
-
// AND
|
|
17
|
-
// / \
|
|
18
|
-
// <30 >20
|
|
19
|
-
//
|
|
20
|
-
// After the second iteration tree looks as follows:
|
|
21
|
-
// OR
|
|
22
|
-
// / \
|
|
23
|
-
// AND <10
|
|
24
|
-
// / \
|
|
25
|
-
// <30 >20
|
|
26
|
-
//
|
|
27
|
-
// As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators
|
|
28
|
-
this.tree=this.buildTree(g,f)}return _createClass(a,[{key:"evaluate",value:function evaluate(a){var b=this.evaluateNode(this.tree,a);return this.error?(0,_tsRes.Err)(this.error):(0,_tsRes.Ok)(b)}},{key:"evaluateNode",value:function evaluateNode(a,b){if(this.isLeafNode(a)){if(a.error)// --- Note ---
|
|
29
|
-
// Non-existing condition should not break targeting tree
|
|
30
|
-
// instead it should be treated as `true` condition
|
|
31
|
-
return a.error.type===_kameleoonError.KameleoonException.TargetingCondition;var c=a.value.evaluate(b);return c.ok?a.inverse?!c.data:c.data:(this.error=c.error,!1)}if(this.isNonLeafNode(a))switch(a.value){case _types.Operator.And:return this.evaluateNode(a.left,b)&&this.evaluateNode(a.right,b);case _types.Operator.Or:return this.evaluateNode(a.left,b)||this.evaluateNode(a.right,b);default:}return!1}},{key:"isLeafNode",value:function isLeafNode(a){return!!!(a.left&&a.right)}},{key:"isNonLeafNode",value:function isNonLeafNode(a){return!!(a.left&&a.right&&(a.value===_types.Operator.Or||a.value===_types.Operator.And))}// --- Note ---
|
|
32
|
-
// This method mutates `nodes` array
|
|
33
|
-
// It's done for the sake of performance
|
|
34
|
-
},{key:"buildTree",value:function buildTree(a,b){if(1===a.length)return a[0];var c,d=_createForOfIteratorHelper(b);try{for(d.s();!(c=d.n()).done;){var e=c.value,f=a.shift(),g=a.shift(),h=new _targetingNode.TargetingNode(e,f,g);a.unshift(h)}}catch(a){d.e(a)}finally{d.f()}return a[0]}},{key:"flattenSegment",value:function flattenSegment(a){var b=this,c=a.conditionsData,d=c.firstLevel,e=c.firstLevelOrOperators,f=[];return d.forEach(function(a){var c=a.conditions,d=a.orOperators,e={operators:b.convertOperators(d),conditions:c};f.push(e)}),{topLevelOperators:this.convertOperators(e),nestedConditions:f}}},{key:"convertOperators",value:function convertOperators(a){return a.map(function(a){return a?_types.Operator.Or:_types.Operator.And})}}]),a}();exports.TargetingTree=TargetingTree;
|
|
35
|
-
//# sourceMappingURL=targetingTree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"targetingTree.js","names":["TargetingTree","a","segment","c","_classCallCheck","_defineProperty","d","flattenSegment","nestedConditions","topLevelOperators","nestedNodes","map","conditions","operators","nodes","condition","TargetingNode","buildTree","tree","_createClass","key","value","evaluate","data","result","evaluateNode","error","Err","Ok","node","isLeafNode","type","KameleoonException","TargetingCondition","ok","inverse","isNonLeafNode","Operator","And","left","right","Or","length","_createForOfIteratorHelper","s","n","done","operator","shift","newNode","unshift","e","f","b","conditionsData","firstLevel","firstLevelOrOperators","forEach","conditionList","orOperators","group","convertOperators","push","exports"],"sources":["../../src/targeting/targetingTree.ts"],"sourcesContent":["import { Result, Ok, Err } from 'ts-res';\nimport { KameleoonError, KameleoonException } from 'src/kameleoonError';\nimport { ITargetingNode, TargetingNode } from './targetingNode';\nimport {\n EvaluationDataType,\n GroupedSegmentsType,\n LeafNodeType,\n NestedConditionGroupType,\n NonLeafNodeType,\n Operator,\n SegmentType,\n} from './types';\n\ninterface ITargetingTree {\n evaluate: (data: EvaluationDataType) => Result<boolean, KameleoonError>;\n}\n\nexport class TargetingTree implements ITargetingTree {\n private tree: TargetingNode;\n private error: KameleoonError | null = null;\n\n constructor(segment: SegmentType) {\n const { nestedConditions, topLevelOperators } =\n this.flattenSegment(segment);\n\n // --- Note ---\n // - Targeting tree is built bottom-up, it's the only way to both get the consistent logic\n // (grouping nested conditions) and have human readable tree representation.\n // - Here is an example of how tree is built (we use strict complete binary tree)\n // Let's say we have such a condition `value < 10 || value > 20 && value < 30`\n // Following is pseudo code for building tree:\n //\n // `const operators = [Operator.Or, Operator.And]`\n // `const conditions = [\n // {type: Condition.Less, value: 10},\n // {type: Condition.Greater, value: 20},\n // {type: Condition.Less, value: 30},\n // ]`\n //\n // After the first iteration we have node like this:\n // AND\n // / \\\n // <30 >20\n //\n // After the second iteration tree looks as follows:\n // OR\n // / \\\n // AND <10\n // / \\\n // <30 >20\n //\n // As you can see Leaf Nodes contain conditions and Non-Leaf Nodes contain logical operators\n const nestedNodes = nestedConditions.map(({ conditions, operators }) => {\n const nodes = conditions.map((condition) => new TargetingNode(condition));\n\n return this.buildTree(nodes, operators);\n });\n\n this.tree = this.buildTree(nestedNodes, topLevelOperators);\n }\n\n public evaluate(data: EvaluationDataType): Result<boolean, KameleoonError> {\n const result = this.evaluateNode(this.tree, data);\n\n if (this.error) {\n return Err(this.error);\n }\n\n return Ok(result);\n }\n\n private evaluateNode(node: TargetingNode, data: EvaluationDataType): boolean {\n if (this.isLeafNode(node)) {\n if (node.error) {\n // --- Note ---\n // Non-existing condition should not break targeting tree\n // instead it should be treated as `true` condition\n if (node.error.type === KameleoonException.TargetingCondition) {\n return true;\n }\n\n return false;\n }\n\n const result = node.value.evaluate(data);\n\n if (!result.ok) {\n this.error = result.error;\n\n return false;\n }\n\n return node.inverse ? !result.data : result.data;\n }\n\n if (this.isNonLeafNode(node)) {\n switch (node.value) {\n case Operator.And: {\n return (\n this.evaluateNode(node.left, data) &&\n this.evaluateNode(node.right, data)\n );\n }\n case Operator.Or: {\n return (\n this.evaluateNode(node.left, data) ||\n this.evaluateNode(node.right, data)\n );\n }\n default:\n break;\n }\n }\n\n return false;\n }\n\n private isLeafNode(node: ITargetingNode): node is LeafNodeType {\n return !Boolean(node.left && node.right);\n }\n\n private isNonLeafNode(node: ITargetingNode): node is NonLeafNodeType {\n return Boolean(\n node.left &&\n node.right &&\n (node.value === Operator.Or || node.value === Operator.And),\n );\n }\n\n // --- Note ---\n // This method mutates `nodes` array\n // It's done for the sake of performance\n private buildTree(\n nodes: TargetingNode[],\n operators: Operator[],\n ): TargetingNode {\n if (nodes.length === 1) {\n return nodes[0];\n }\n\n for (const operator of operators) {\n const left = nodes.shift();\n const right = nodes.shift();\n\n const newNode = new TargetingNode(operator, left, right);\n nodes.unshift(newNode);\n }\n\n return nodes[0];\n }\n\n private flattenSegment(segment: SegmentType): GroupedSegmentsType {\n const { firstLevel: conditions, firstLevelOrOperators: operators } =\n segment.conditionsData;\n\n const nestedConditions: NestedConditionGroupType[] = [];\n\n conditions.forEach((condition) => {\n const { conditions: conditionList, orOperators } = condition;\n\n const group = {\n operators: this.convertOperators(orOperators),\n conditions: conditionList,\n };\n\n nestedConditions.push(group);\n });\n\n return {\n topLevelOperators: this.convertOperators(operators),\n nestedConditions,\n };\n }\n\n private convertOperators(operators: boolean[]): Operator[] {\n return operators.map((operator) => (operator ? Operator.Or : Operator.And));\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { KameleoonVisitorDataType } from '../kameleoonData/types';
|
|
2
|
-
import { ExperimentVariationsType } from '../storage';
|
|
3
|
-
import { ExternalPackageInfoType } from '../types';
|
|
4
|
-
import { ConditionDataType, ConditionType } from './conditions';
|
|
5
|
-
import { TargetingNode } from './targetingNode';
|
|
6
|
-
export declare enum Operator {
|
|
7
|
-
And = "AND",
|
|
8
|
-
Or = "OR"
|
|
9
|
-
}
|
|
10
|
-
export type NonLeafNodeType = {
|
|
11
|
-
left: TargetingNode;
|
|
12
|
-
right: TargetingNode;
|
|
13
|
-
value: Operator;
|
|
14
|
-
};
|
|
15
|
-
export type LeafNodeType = {
|
|
16
|
-
left: undefined;
|
|
17
|
-
right: undefined;
|
|
18
|
-
value: ConditionType;
|
|
19
|
-
};
|
|
20
|
-
export type NodeValueType = ConditionType | Operator;
|
|
21
|
-
export type ConditionLevelType = {
|
|
22
|
-
orOperators: boolean[];
|
|
23
|
-
conditions: ConditionDataType[];
|
|
24
|
-
};
|
|
25
|
-
export type SegmentType = {
|
|
26
|
-
id: string;
|
|
27
|
-
name: string;
|
|
28
|
-
conditionsData: {
|
|
29
|
-
firstLevelOrOperators: boolean[];
|
|
30
|
-
firstLevel: ConditionLevelType[];
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
export type NestedConditionGroupType = {
|
|
34
|
-
operators: Operator[];
|
|
35
|
-
conditions: ConditionDataType[];
|
|
36
|
-
};
|
|
37
|
-
export type GroupedSegmentsType = {
|
|
38
|
-
topLevelOperators: Operator[];
|
|
39
|
-
nestedConditions: NestedConditionGroupType[];
|
|
40
|
-
};
|
|
41
|
-
export type TargetingDataType = {
|
|
42
|
-
[visitorCode: string]: KameleoonVisitorDataType;
|
|
43
|
-
};
|
|
44
|
-
export type EvaluationDataType = {
|
|
45
|
-
targetingData?: KameleoonVisitorDataType;
|
|
46
|
-
variationData: ExperimentVariationsType;
|
|
47
|
-
sdkInfo: ExternalPackageInfoType;
|
|
48
|
-
experimentId: number | null;
|
|
49
|
-
visitorCode: string;
|
|
50
|
-
};
|
|
51
|
-
export declare enum MatchTypeCustomData {
|
|
52
|
-
TRUE = "TRUE",
|
|
53
|
-
FALSE = "FALSE",
|
|
54
|
-
EXACT = "EXACT",
|
|
55
|
-
CONTAINS = "CONTAINS",
|
|
56
|
-
REGULAR_EXPRESSION = "REGULAR_EXPRESSION",
|
|
57
|
-
EQUAL = "EQUAL",
|
|
58
|
-
LOWER = "LOWER",
|
|
59
|
-
GREATER = "GREATER",
|
|
60
|
-
UNDEFINED = "UNDEFINED",
|
|
61
|
-
AMONG_VALUES = "AMONG_VALUES"
|
|
62
|
-
}
|
|
63
|
-
export declare enum MatchTypeVariation {
|
|
64
|
-
ANY = "ANY",
|
|
65
|
-
EXACT = "EXACT"
|
|
66
|
-
}
|
|
67
|
-
export declare enum MatchTypeTest {
|
|
68
|
-
ALL = "ALL",
|
|
69
|
-
TEST = "TEST",
|
|
70
|
-
PERSO = "PERSO"
|
|
71
|
-
}
|
|
72
|
-
export declare enum MatchType {
|
|
73
|
-
EXACT = "EXACT",
|
|
74
|
-
CONTAINS = "CONTAINS",
|
|
75
|
-
REGULAR_EXPRESSION = "REGULAR_EXPRESSION"
|
|
76
|
-
}
|
|
77
|
-
export declare enum VersionMatchType {
|
|
78
|
-
GREATER = "GREATER",
|
|
79
|
-
EQUAL = "EQUAL",
|
|
80
|
-
LOWER = "LOWER"
|
|
81
|
-
}
|
|
82
|
-
export declare enum TargetingType {
|
|
83
|
-
PAGE_URL = "PAGE_URL",
|
|
84
|
-
PAGE_TITLE = "PAGE_TITLE",
|
|
85
|
-
LANDING_PAGE = "LANDING_PAGE",
|
|
86
|
-
ORIGIN = "ORIGIN",
|
|
87
|
-
ORIGIN_TYPE = "ORIGIN_TYPE",
|
|
88
|
-
REFERRERS = "REFERRERS",
|
|
89
|
-
NEW_VISITORS = "NEW_VISITORS",
|
|
90
|
-
INTERESTS = "INTERESTS",
|
|
91
|
-
BROWSER_LANGUAGE = "BROWSER_LANGUAGE",
|
|
92
|
-
GEOLOCATION = "GEOLOCATION",
|
|
93
|
-
DEVICE_TYPE = "DEVICE_TYPE",
|
|
94
|
-
SCREEN_DIMENSION = "SCREEN_DIMENSION",
|
|
95
|
-
VISITOR_IP = "VISITOR_IP",
|
|
96
|
-
AD_BLOCKER = "AD_BLOCKER",
|
|
97
|
-
PREVIOUS_PAGE = "PREVIOUS_PAGE",
|
|
98
|
-
KEY_PAGES = "KEY_PAGES",
|
|
99
|
-
PAGE_VIEWS = "PAGE_VIEWS",
|
|
100
|
-
FIRST_VISIT = "FIRST_VISIT",
|
|
101
|
-
LAST_VISIT = "LAST_VISIT",
|
|
102
|
-
ACTIVE_SESSION = "ACTIVE_SESSION",
|
|
103
|
-
TIME_SINCE_PAGE_LOAD = "TIME_SINCE_PAGE_LOAD",
|
|
104
|
-
SAME_DAY_VISITS = "SAME_DAY_VISITS",
|
|
105
|
-
VISITS = "VISITS",
|
|
106
|
-
VISITS_BY_PAGE = "VISITS_BY_PAGE",
|
|
107
|
-
VISITOR_CODE = "VISITOR_CODE",
|
|
108
|
-
SDK_LANGUAGE = "SDK_LANGUAGE",
|
|
109
|
-
INTERNAL_SEARCH_KEYWORDS = "INTERNAL_SEARCH_KEYWORDS",
|
|
110
|
-
TABS_ON_SITE = "TABS_ON_SITE",
|
|
111
|
-
CONVERSION_PROBABILITY = "CONVERSION_PROBABILITY",
|
|
112
|
-
HEAT_SLICE = "HEAT_SLICE",
|
|
113
|
-
SKY_STATUS = "SKY_STATUS",
|
|
114
|
-
TEMPERATURE = "TEMPERATURE",
|
|
115
|
-
DAY_NIGHT = "DAY_NIGHT",
|
|
116
|
-
FORECAST_SKY_STATUS = "FORECAST_SKY_STATUS",
|
|
117
|
-
FORECAST_TEMPERATURE = "FORECAST_TEMPERATURE",
|
|
118
|
-
DAY_OF_WEEK = "DAY_OF_WEEK",
|
|
119
|
-
TIME_RANGE = "TIME_RANGE",
|
|
120
|
-
HOUR_MINUTE_RANGE = "HOUR_MINUTE_RANGE",
|
|
121
|
-
JS_CODE = "JS_CODE",
|
|
122
|
-
COOKIE = "COOKIE",
|
|
123
|
-
EVENT = "EVENT",
|
|
124
|
-
BROWSER = "BROWSER",
|
|
125
|
-
OPERATING_SYSTEM = "OPERATING_SYSTEM",
|
|
126
|
-
DOM_ELEMENT = "DOM_ELEMENT",
|
|
127
|
-
MOUSE_OUT = "MOUSE_OUT",
|
|
128
|
-
TARGET_EXPERIMENT = "TARGET_EXPERIMENT",
|
|
129
|
-
TARGET_PERSONALIZATION = "TARGET_PERSONALIZATION",
|
|
130
|
-
EXCLUSIVE_EXPERIMENT = "EXCLUSIVE_EXPERIMENT",
|
|
131
|
-
CONVERSIONS = "CONVERSIONS",
|
|
132
|
-
CUSTOM_DATUM = "CUSTOM_DATUM",
|
|
133
|
-
YSANCE_SEGMENT = "YSANCE_SEGMENT",
|
|
134
|
-
YSANCE_ATTRIBUT = "YSANCE_ATTRIBUT",
|
|
135
|
-
TEALIUM_BADGE = "TEALIUM_BADGE",
|
|
136
|
-
TEALIUM_AUDIENCE = "TEALIUM_AUDIENCE",
|
|
137
|
-
PRICE_OF_DISPLAYED_PAGE = "PRICE_OF_DISPLAYED_PAGE",
|
|
138
|
-
NUMBER_OF_VISITED_PAGES = "NUMBER_OF_VISITED_PAGES",
|
|
139
|
-
VISITED_PAGES = "VISITED_PAGES",
|
|
140
|
-
CUSTOM = "CUSTOM",
|
|
141
|
-
EXPLICIT_TRIGGER = "EXPLICIT_TRIGGER"
|
|
142
|
-
}
|
package/dist/targeting/types.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VersionMatchType=exports.TargetingType=exports.Operator=exports.MatchTypeVariation=exports.MatchTypeTest=exports.MatchTypeCustomData=exports.MatchType=void 0;var Operator=/*#__PURE__*/function(a){return a.And="AND",a.Or="OR",a}({});exports.Operator=Operator;var MatchTypeCustomData=/*#__PURE__*/function(a){return a.TRUE="TRUE",a.FALSE="FALSE",a.EXACT="EXACT",a.CONTAINS="CONTAINS",a.REGULAR_EXPRESSION="REGULAR_EXPRESSION",a.EQUAL="EQUAL",a.LOWER="LOWER",a.GREATER="GREATER",a.UNDEFINED="UNDEFINED",a.AMONG_VALUES="AMONG_VALUES",a}({});exports.MatchTypeCustomData=MatchTypeCustomData;var MatchTypeVariation=/*#__PURE__*/function(a){return a.ANY="ANY",a.EXACT="EXACT",a}({});exports.MatchTypeVariation=MatchTypeVariation;var MatchTypeTest=/*#__PURE__*/function(a){return a.ALL="ALL",a.TEST="TEST",a.PERSO="PERSO",a}({});exports.MatchTypeTest=MatchTypeTest;var MatchType=/*#__PURE__*/function(a){return a.EXACT="EXACT",a.CONTAINS="CONTAINS",a.REGULAR_EXPRESSION="REGULAR_EXPRESSION",a}({});exports.MatchType=MatchType;var VersionMatchType=/*#__PURE__*/function(a){return a.GREATER="GREATER",a.EQUAL="EQUAL",a.LOWER="LOWER",a}({});exports.VersionMatchType=VersionMatchType;var TargetingType=/*#__PURE__*/function(a){return a.PAGE_URL="PAGE_URL",a.PAGE_TITLE="PAGE_TITLE",a.LANDING_PAGE="LANDING_PAGE",a.ORIGIN="ORIGIN",a.ORIGIN_TYPE="ORIGIN_TYPE",a.REFERRERS="REFERRERS",a.NEW_VISITORS="NEW_VISITORS",a.INTERESTS="INTERESTS",a.BROWSER_LANGUAGE="BROWSER_LANGUAGE",a.GEOLOCATION="GEOLOCATION",a.DEVICE_TYPE="DEVICE_TYPE",a.SCREEN_DIMENSION="SCREEN_DIMENSION",a.VISITOR_IP="VISITOR_IP",a.AD_BLOCKER="AD_BLOCKER",a.PREVIOUS_PAGE="PREVIOUS_PAGE",a.KEY_PAGES="KEY_PAGES",a.PAGE_VIEWS="PAGE_VIEWS",a.FIRST_VISIT="FIRST_VISIT",a.LAST_VISIT="LAST_VISIT",a.ACTIVE_SESSION="ACTIVE_SESSION",a.TIME_SINCE_PAGE_LOAD="TIME_SINCE_PAGE_LOAD",a.SAME_DAY_VISITS="SAME_DAY_VISITS",a.VISITS="VISITS",a.VISITS_BY_PAGE="VISITS_BY_PAGE",a.VISITOR_CODE="VISITOR_CODE",a.SDK_LANGUAGE="SDK_LANGUAGE",a.INTERNAL_SEARCH_KEYWORDS="INTERNAL_SEARCH_KEYWORDS",a.TABS_ON_SITE="TABS_ON_SITE",a.CONVERSION_PROBABILITY="CONVERSION_PROBABILITY",a.HEAT_SLICE="HEAT_SLICE",a.SKY_STATUS="SKY_STATUS",a.TEMPERATURE="TEMPERATURE",a.DAY_NIGHT="DAY_NIGHT",a.FORECAST_SKY_STATUS="FORECAST_SKY_STATUS",a.FORECAST_TEMPERATURE="FORECAST_TEMPERATURE",a.DAY_OF_WEEK="DAY_OF_WEEK",a.TIME_RANGE="TIME_RANGE",a.HOUR_MINUTE_RANGE="HOUR_MINUTE_RANGE",a.JS_CODE="JS_CODE",a.COOKIE="COOKIE",a.EVENT="EVENT",a.BROWSER="BROWSER",a.OPERATING_SYSTEM="OPERATING_SYSTEM",a.DOM_ELEMENT="DOM_ELEMENT",a.MOUSE_OUT="MOUSE_OUT",a.TARGET_EXPERIMENT="TARGET_EXPERIMENT",a.TARGET_PERSONALIZATION="TARGET_PERSONALIZATION",a.EXCLUSIVE_EXPERIMENT="EXCLUSIVE_EXPERIMENT",a.CONVERSIONS="CONVERSIONS",a.CUSTOM_DATUM="CUSTOM_DATUM",a.YSANCE_SEGMENT="YSANCE_SEGMENT",a.YSANCE_ATTRIBUT="YSANCE_ATTRIBUT",a.TEALIUM_BADGE="TEALIUM_BADGE",a.TEALIUM_AUDIENCE="TEALIUM_AUDIENCE",a.PRICE_OF_DISPLAYED_PAGE="PRICE_OF_DISPLAYED_PAGE",a.NUMBER_OF_VISITED_PAGES="NUMBER_OF_VISITED_PAGES",a.VISITED_PAGES="VISITED_PAGES",a.CUSTOM="CUSTOM",a.EXPLICIT_TRIGGER="EXPLICIT_TRIGGER",a}({});exports.TargetingType=TargetingType;
|
|
2
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["Operator","And","Or","exports","MatchTypeCustomData","TRUE","FALSE","EXACT","CONTAINS","REGULAR_EXPRESSION","EQUAL","LOWER","GREATER","UNDEFINED","AMONG_VALUES","MatchTypeVariation","ANY","MatchTypeTest","ALL","TEST","PERSO","MatchType","VersionMatchType","TargetingType","PAGE_URL","PAGE_TITLE","LANDING_PAGE","ORIGIN","ORIGIN_TYPE","REFERRERS","NEW_VISITORS","INTERESTS","BROWSER_LANGUAGE","GEOLOCATION","DEVICE_TYPE","SCREEN_DIMENSION","VISITOR_IP","AD_BLOCKER","PREVIOUS_PAGE","KEY_PAGES","PAGE_VIEWS","FIRST_VISIT","LAST_VISIT","ACTIVE_SESSION","TIME_SINCE_PAGE_LOAD","SAME_DAY_VISITS","VISITS","VISITS_BY_PAGE","VISITOR_CODE","SDK_LANGUAGE","INTERNAL_SEARCH_KEYWORDS","TABS_ON_SITE","CONVERSION_PROBABILITY","HEAT_SLICE","SKY_STATUS","TEMPERATURE","DAY_NIGHT","FORECAST_SKY_STATUS","FORECAST_TEMPERATURE","DAY_OF_WEEK","TIME_RANGE","HOUR_MINUTE_RANGE","JS_CODE","COOKIE","EVENT","BROWSER","OPERATING_SYSTEM","DOM_ELEMENT","MOUSE_OUT","TARGET_EXPERIMENT","TARGET_PERSONALIZATION","EXCLUSIVE_EXPERIMENT","CONVERSIONS","CUSTOM_DATUM","YSANCE_SEGMENT","YSANCE_ATTRIBUT","TEALIUM_BADGE","TEALIUM_AUDIENCE","PRICE_OF_DISPLAYED_PAGE","NUMBER_OF_VISITED_PAGES","VISITED_PAGES","CUSTOM","EXPLICIT_TRIGGER"],"sources":["../../src/targeting/types.ts"],"sourcesContent":["import { KameleoonVisitorDataType } from 'src/kameleoonData/types';\nimport { ExperimentVariationsType } from 'src/storage';\nimport { ExternalPackageInfoType } from 'src/types';\nimport { ConditionDataType, ConditionType } from './conditions';\nimport { TargetingNode } from './targetingNode';\n\nexport enum Operator {\n And = 'AND',\n Or = 'OR',\n}\n\nexport type NonLeafNodeType = {\n left: TargetingNode;\n right: TargetingNode;\n value: Operator;\n};\n\nexport type LeafNodeType = {\n left: undefined;\n right: undefined;\n value: ConditionType;\n};\n\nexport type NodeValueType = ConditionType | Operator;\n\nexport type ConditionLevelType = {\n orOperators: boolean[];\n conditions: ConditionDataType[];\n};\n\nexport type SegmentType = {\n id: string;\n name: string;\n conditionsData: {\n firstLevelOrOperators: boolean[];\n firstLevel: ConditionLevelType[];\n };\n};\n\nexport type NestedConditionGroupType = {\n operators: Operator[];\n conditions: ConditionDataType[];\n};\n\nexport type GroupedSegmentsType = {\n topLevelOperators: Operator[];\n nestedConditions: NestedConditionGroupType[];\n};\n\nexport type TargetingDataType = {\n [visitorCode: string]: KameleoonVisitorDataType;\n};\n\nexport type EvaluationDataType = {\n targetingData?: KameleoonVisitorDataType;\n variationData: ExperimentVariationsType;\n sdkInfo: ExternalPackageInfoType;\n experimentId: number | null;\n visitorCode: string;\n};\n\nexport enum MatchTypeCustomData {\n TRUE = 'TRUE',\n FALSE = 'FALSE',\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n GREATER = 'GREATER',\n UNDEFINED = 'UNDEFINED',\n AMONG_VALUES = 'AMONG_VALUES',\n}\n\nexport enum MatchTypeVariation {\n ANY = 'ANY',\n EXACT = 'EXACT',\n}\n\nexport enum MatchTypeTest {\n ALL = 'ALL',\n TEST = 'TEST',\n PERSO = 'PERSO',\n}\n\nexport enum MatchType {\n EXACT = 'EXACT',\n CONTAINS = 'CONTAINS',\n REGULAR_EXPRESSION = 'REGULAR_EXPRESSION',\n}\n\nexport enum VersionMatchType {\n GREATER = 'GREATER',\n EQUAL = 'EQUAL',\n LOWER = 'LOWER',\n}\n\nexport enum TargetingType {\n PAGE_URL = 'PAGE_URL',\n PAGE_TITLE = 'PAGE_TITLE',\n LANDING_PAGE = 'LANDING_PAGE',\n ORIGIN = 'ORIGIN',\n ORIGIN_TYPE = 'ORIGIN_TYPE',\n REFERRERS = 'REFERRERS',\n NEW_VISITORS = 'NEW_VISITORS',\n INTERESTS = 'INTERESTS',\n BROWSER_LANGUAGE = 'BROWSER_LANGUAGE',\n GEOLOCATION = 'GEOLOCATION',\n DEVICE_TYPE = 'DEVICE_TYPE',\n SCREEN_DIMENSION = 'SCREEN_DIMENSION',\n VISITOR_IP = 'VISITOR_IP',\n AD_BLOCKER = 'AD_BLOCKER',\n PREVIOUS_PAGE = 'PREVIOUS_PAGE',\n KEY_PAGES = 'KEY_PAGES',\n PAGE_VIEWS = 'PAGE_VIEWS',\n FIRST_VISIT = 'FIRST_VISIT',\n LAST_VISIT = 'LAST_VISIT',\n ACTIVE_SESSION = 'ACTIVE_SESSION',\n TIME_SINCE_PAGE_LOAD = 'TIME_SINCE_PAGE_LOAD',\n SAME_DAY_VISITS = 'SAME_DAY_VISITS',\n VISITS = 'VISITS',\n VISITS_BY_PAGE = 'VISITS_BY_PAGE',\n VISITOR_CODE = 'VISITOR_CODE',\n SDK_LANGUAGE = 'SDK_LANGUAGE',\n INTERNAL_SEARCH_KEYWORDS = 'INTERNAL_SEARCH_KEYWORDS',\n TABS_ON_SITE = 'TABS_ON_SITE',\n CONVERSION_PROBABILITY = 'CONVERSION_PROBABILITY',\n HEAT_SLICE = 'HEAT_SLICE',\n SKY_STATUS = 'SKY_STATUS',\n TEMPERATURE = 'TEMPERATURE',\n DAY_NIGHT = 'DAY_NIGHT',\n FORECAST_SKY_STATUS = 'FORECAST_SKY_STATUS',\n FORECAST_TEMPERATURE = 'FORECAST_TEMPERATURE',\n DAY_OF_WEEK = 'DAY_OF_WEEK',\n TIME_RANGE = 'TIME_RANGE',\n HOUR_MINUTE_RANGE = 'HOUR_MINUTE_RANGE',\n JS_CODE = 'JS_CODE',\n COOKIE = 'COOKIE',\n EVENT = 'EVENT',\n BROWSER = 'BROWSER',\n OPERATING_SYSTEM = 'OPERATING_SYSTEM',\n DOM_ELEMENT = 'DOM_ELEMENT',\n MOUSE_OUT = 'MOUSE_OUT',\n TARGET_EXPERIMENT = 'TARGET_EXPERIMENT',\n TARGET_PERSONALIZATION = 'TARGET_PERSONALIZATION',\n EXCLUSIVE_EXPERIMENT = 'EXCLUSIVE_EXPERIMENT',\n CONVERSIONS = 'CONVERSIONS',\n CUSTOM_DATUM = 'CUSTOM_DATUM',\n YSANCE_SEGMENT = 'YSANCE_SEGMENT',\n YSANCE_ATTRIBUT = 'YSANCE_ATTRIBUT',\n TEALIUM_BADGE = 'TEALIUM_BADGE',\n TEALIUM_AUDIENCE = 'TEALIUM_AUDIENCE',\n PRICE_OF_DISPLAYED_PAGE = 'PRICE_OF_DISPLAYED_PAGE',\n NUMBER_OF_VISITED_PAGES = 'NUMBER_OF_VISITED_PAGES',\n VISITED_PAGES = 'VISITED_PAGES',\n CUSTOM = 'CUSTOM',\n EXPLICIT_TRIGGER = 'EXPLICIT_TRIGGER',\n}\n"],"mappings":"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"}
|